diff --git a/gen/Network/Google/Resource/Sheets/Spreadsheets/BatchUpdate.hs b/gen/Network/Google/Resource/Sheets/Spreadsheets/BatchUpdate.hs
--- a/gen/Network/Google/Resource/Sheets/Spreadsheets/BatchUpdate.hs
+++ b/gen/Network/Google/Resource/Sheets/Spreadsheets/BatchUpdate.hs
@@ -47,12 +47,10 @@
     -- * Request Lenses
     , sbuXgafv
     , sbuUploadProtocol
-    , sbuPp
     , sbuAccessToken
     , sbuSpreadsheetId
     , sbuUploadType
     , sbuPayload
-    , sbuBearerToken
     , sbuCallback
     ) where
 
@@ -67,14 +65,12 @@
          CaptureMode "spreadsheetId" "batchUpdate" Text :>
            QueryParam "$.xgafv" Xgafv :>
              QueryParam "upload_protocol" Text :>
-               QueryParam "pp" Bool :>
-                 QueryParam "access_token" Text :>
-                   QueryParam "uploadType" Text :>
-                     QueryParam "bearer_token" Text :>
-                       QueryParam "callback" Text :>
-                         QueryParam "alt" AltJSON :>
-                           ReqBody '[JSON] BatchUpdateSpreadsheetRequest :>
-                             Post '[JSON] BatchUpdateSpreadsheetResponse
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "callback" Text :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON] BatchUpdateSpreadsheetRequest :>
+                         Post '[JSON] BatchUpdateSpreadsheetResponse
 
 -- | Applies one or more updates to the spreadsheet. Each request is
 -- validated before being applied. If any request is not valid then the
@@ -94,12 +90,10 @@
 data SpreadsheetsBatchUpdate = SpreadsheetsBatchUpdate'
     { _sbuXgafv          :: !(Maybe Xgafv)
     , _sbuUploadProtocol :: !(Maybe Text)
-    , _sbuPp             :: !Bool
     , _sbuAccessToken    :: !(Maybe Text)
     , _sbuSpreadsheetId  :: !Text
     , _sbuUploadType     :: !(Maybe Text)
     , _sbuPayload        :: !BatchUpdateSpreadsheetRequest
-    , _sbuBearerToken    :: !(Maybe Text)
     , _sbuCallback       :: !(Maybe Text)
     } deriving (Eq,Show,Data,Typeable,Generic)
 
@@ -111,8 +105,6 @@
 --
 -- * 'sbuUploadProtocol'
 --
--- * 'sbuPp'
---
 -- * 'sbuAccessToken'
 --
 -- * 'sbuSpreadsheetId'
@@ -121,8 +113,6 @@
 --
 -- * 'sbuPayload'
 --
--- * 'sbuBearerToken'
---
 -- * 'sbuCallback'
 spreadsheetsBatchUpdate
     :: Text -- ^ 'sbuSpreadsheetId'
@@ -132,12 +122,10 @@
     SpreadsheetsBatchUpdate'
     { _sbuXgafv = Nothing
     , _sbuUploadProtocol = Nothing
-    , _sbuPp = True
     , _sbuAccessToken = Nothing
     , _sbuSpreadsheetId = pSbuSpreadsheetId_
     , _sbuUploadType = Nothing
     , _sbuPayload = pSbuPayload_
-    , _sbuBearerToken = Nothing
     , _sbuCallback = Nothing
     }
 
@@ -151,10 +139,6 @@
   = lens _sbuUploadProtocol
       (\ s a -> s{_sbuUploadProtocol = a})
 
--- | Pretty-print response.
-sbuPp :: Lens' SpreadsheetsBatchUpdate Bool
-sbuPp = lens _sbuPp (\ s a -> s{_sbuPp = a})
-
 -- | OAuth access token.
 sbuAccessToken :: Lens' SpreadsheetsBatchUpdate (Maybe Text)
 sbuAccessToken
@@ -178,12 +162,6 @@
 sbuPayload
   = lens _sbuPayload (\ s a -> s{_sbuPayload = a})
 
--- | OAuth bearer token.
-sbuBearerToken :: Lens' SpreadsheetsBatchUpdate (Maybe Text)
-sbuBearerToken
-  = lens _sbuBearerToken
-      (\ s a -> s{_sbuBearerToken = a})
-
 -- | JSONP
 sbuCallback :: Lens' SpreadsheetsBatchUpdate (Maybe Text)
 sbuCallback
@@ -194,13 +172,12 @@
              BatchUpdateSpreadsheetResponse
         type Scopes SpreadsheetsBatchUpdate =
              '["https://www.googleapis.com/auth/drive",
+               "https://www.googleapis.com/auth/drive.file",
                "https://www.googleapis.com/auth/spreadsheets"]
         requestClient SpreadsheetsBatchUpdate'{..}
           = go _sbuSpreadsheetId _sbuXgafv _sbuUploadProtocol
-              (Just _sbuPp)
               _sbuAccessToken
               _sbuUploadType
-              _sbuBearerToken
               _sbuCallback
               (Just AltJSON)
               _sbuPayload
diff --git a/gen/Network/Google/Resource/Sheets/Spreadsheets/Create.hs b/gen/Network/Google/Resource/Sheets/Spreadsheets/Create.hs
--- a/gen/Network/Google/Resource/Sheets/Spreadsheets/Create.hs
+++ b/gen/Network/Google/Resource/Sheets/Spreadsheets/Create.hs
@@ -35,11 +35,9 @@
     -- * Request Lenses
     , scXgafv
     , scUploadProtocol
-    , scPp
     , scAccessToken
     , scUploadType
     , scPayload
-    , scBearerToken
     , scCallback
     ) where
 
@@ -53,14 +51,12 @@
        "spreadsheets" :>
          QueryParam "$.xgafv" Xgafv :>
            QueryParam "upload_protocol" Text :>
-             QueryParam "pp" Bool :>
-               QueryParam "access_token" Text :>
-                 QueryParam "uploadType" Text :>
-                   QueryParam "bearer_token" Text :>
-                     QueryParam "callback" Text :>
-                       QueryParam "alt" AltJSON :>
-                         ReqBody '[JSON] Spreadsheet :>
-                           Post '[JSON] Spreadsheet
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "callback" Text :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON] Spreadsheet :>
+                       Post '[JSON] Spreadsheet
 
 -- | Creates a spreadsheet, returning the newly created spreadsheet.
 --
@@ -68,11 +64,9 @@
 data SpreadsheetsCreate = SpreadsheetsCreate'
     { _scXgafv          :: !(Maybe Xgafv)
     , _scUploadProtocol :: !(Maybe Text)
-    , _scPp             :: !Bool
     , _scAccessToken    :: !(Maybe Text)
     , _scUploadType     :: !(Maybe Text)
     , _scPayload        :: !Spreadsheet
-    , _scBearerToken    :: !(Maybe Text)
     , _scCallback       :: !(Maybe Text)
     } deriving (Eq,Show,Data,Typeable,Generic)
 
@@ -84,16 +78,12 @@
 --
 -- * 'scUploadProtocol'
 --
--- * 'scPp'
---
 -- * 'scAccessToken'
 --
 -- * 'scUploadType'
 --
 -- * 'scPayload'
 --
--- * 'scBearerToken'
---
 -- * 'scCallback'
 spreadsheetsCreate
     :: Spreadsheet -- ^ 'scPayload'
@@ -102,11 +92,9 @@
     SpreadsheetsCreate'
     { _scXgafv = Nothing
     , _scUploadProtocol = Nothing
-    , _scPp = True
     , _scAccessToken = Nothing
     , _scUploadType = Nothing
     , _scPayload = pScPayload_
-    , _scBearerToken = Nothing
     , _scCallback = Nothing
     }
 
@@ -120,10 +108,6 @@
   = lens _scUploadProtocol
       (\ s a -> s{_scUploadProtocol = a})
 
--- | Pretty-print response.
-scPp :: Lens' SpreadsheetsCreate Bool
-scPp = lens _scPp (\ s a -> s{_scPp = a})
-
 -- | OAuth access token.
 scAccessToken :: Lens' SpreadsheetsCreate (Maybe Text)
 scAccessToken
@@ -140,12 +124,6 @@
 scPayload
   = lens _scPayload (\ s a -> s{_scPayload = a})
 
--- | OAuth bearer token.
-scBearerToken :: Lens' SpreadsheetsCreate (Maybe Text)
-scBearerToken
-  = lens _scBearerToken
-      (\ s a -> s{_scBearerToken = a})
-
 -- | JSONP
 scCallback :: Lens' SpreadsheetsCreate (Maybe Text)
 scCallback
@@ -155,12 +133,11 @@
         type Rs SpreadsheetsCreate = Spreadsheet
         type Scopes SpreadsheetsCreate =
              '["https://www.googleapis.com/auth/drive",
+               "https://www.googleapis.com/auth/drive.file",
                "https://www.googleapis.com/auth/spreadsheets"]
         requestClient SpreadsheetsCreate'{..}
-          = go _scXgafv _scUploadProtocol (Just _scPp)
-              _scAccessToken
+          = go _scXgafv _scUploadProtocol _scAccessToken
               _scUploadType
-              _scBearerToken
               _scCallback
               (Just AltJSON)
               _scPayload
diff --git a/gen/Network/Google/Resource/Sheets/Spreadsheets/DeveloperMetadata/Get.hs b/gen/Network/Google/Resource/Sheets/Spreadsheets/DeveloperMetadata/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Sheets/Spreadsheets/DeveloperMetadata/Get.hs
@@ -0,0 +1,174 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Sheets.Spreadsheets.DeveloperMetadata.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 developer metadata with the specified ID. The caller must
+-- specify the spreadsheet ID and the developer metadata\'s unique
+-- metadataId.
+--
+-- /See:/ <https://developers.google.com/sheets/ Google Sheets API Reference> for @sheets.spreadsheets.developerMetadata.get@.
+module Network.Google.Resource.Sheets.Spreadsheets.DeveloperMetadata.Get
+    (
+    -- * REST Resource
+      SpreadsheetsDeveloperMetadataGetResource
+
+    -- * Creating a Request
+    , spreadsheetsDeveloperMetadataGet
+    , SpreadsheetsDeveloperMetadataGet
+
+    -- * Request Lenses
+    , sdmgXgafv
+    , sdmgUploadProtocol
+    , sdmgMetadataId
+    , sdmgAccessToken
+    , sdmgSpreadsheetId
+    , sdmgUploadType
+    , sdmgCallback
+    ) where
+
+import           Network.Google.Prelude
+import           Network.Google.Sheets.Types
+
+-- | A resource alias for @sheets.spreadsheets.developerMetadata.get@ method which the
+-- 'SpreadsheetsDeveloperMetadataGet' request conforms to.
+type SpreadsheetsDeveloperMetadataGetResource =
+     "v4" :>
+       "spreadsheets" :>
+         Capture "spreadsheetId" Text :>
+           "developerMetadata" :>
+             Capture "metadataId" (Textual Int32) :>
+               QueryParam "$.xgafv" Xgafv :>
+                 QueryParam "upload_protocol" Text :>
+                   QueryParam "access_token" Text :>
+                     QueryParam "uploadType" Text :>
+                       QueryParam "callback" Text :>
+                         QueryParam "alt" AltJSON :>
+                           Get '[JSON] DeveloperMetadata
+
+-- | Returns the developer metadata with the specified ID. The caller must
+-- specify the spreadsheet ID and the developer metadata\'s unique
+-- metadataId.
+--
+-- /See:/ 'spreadsheetsDeveloperMetadataGet' smart constructor.
+data SpreadsheetsDeveloperMetadataGet = SpreadsheetsDeveloperMetadataGet'
+    { _sdmgXgafv          :: !(Maybe Xgafv)
+    , _sdmgUploadProtocol :: !(Maybe Text)
+    , _sdmgMetadataId     :: !(Textual Int32)
+    , _sdmgAccessToken    :: !(Maybe Text)
+    , _sdmgSpreadsheetId  :: !Text
+    , _sdmgUploadType     :: !(Maybe Text)
+    , _sdmgCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SpreadsheetsDeveloperMetadataGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sdmgXgafv'
+--
+-- * 'sdmgUploadProtocol'
+--
+-- * 'sdmgMetadataId'
+--
+-- * 'sdmgAccessToken'
+--
+-- * 'sdmgSpreadsheetId'
+--
+-- * 'sdmgUploadType'
+--
+-- * 'sdmgCallback'
+spreadsheetsDeveloperMetadataGet
+    :: Int32 -- ^ 'sdmgMetadataId'
+    -> Text -- ^ 'sdmgSpreadsheetId'
+    -> SpreadsheetsDeveloperMetadataGet
+spreadsheetsDeveloperMetadataGet pSdmgMetadataId_ pSdmgSpreadsheetId_ =
+    SpreadsheetsDeveloperMetadataGet'
+    { _sdmgXgafv = Nothing
+    , _sdmgUploadProtocol = Nothing
+    , _sdmgMetadataId = _Coerce # pSdmgMetadataId_
+    , _sdmgAccessToken = Nothing
+    , _sdmgSpreadsheetId = pSdmgSpreadsheetId_
+    , _sdmgUploadType = Nothing
+    , _sdmgCallback = Nothing
+    }
+
+-- | V1 error format.
+sdmgXgafv :: Lens' SpreadsheetsDeveloperMetadataGet (Maybe Xgafv)
+sdmgXgafv
+  = lens _sdmgXgafv (\ s a -> s{_sdmgXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+sdmgUploadProtocol :: Lens' SpreadsheetsDeveloperMetadataGet (Maybe Text)
+sdmgUploadProtocol
+  = lens _sdmgUploadProtocol
+      (\ s a -> s{_sdmgUploadProtocol = a})
+
+-- | The ID of the developer metadata to retrieve.
+sdmgMetadataId :: Lens' SpreadsheetsDeveloperMetadataGet Int32
+sdmgMetadataId
+  = lens _sdmgMetadataId
+      (\ s a -> s{_sdmgMetadataId = a})
+      . _Coerce
+
+-- | OAuth access token.
+sdmgAccessToken :: Lens' SpreadsheetsDeveloperMetadataGet (Maybe Text)
+sdmgAccessToken
+  = lens _sdmgAccessToken
+      (\ s a -> s{_sdmgAccessToken = a})
+
+-- | The ID of the spreadsheet to retrieve metadata from.
+sdmgSpreadsheetId :: Lens' SpreadsheetsDeveloperMetadataGet Text
+sdmgSpreadsheetId
+  = lens _sdmgSpreadsheetId
+      (\ s a -> s{_sdmgSpreadsheetId = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+sdmgUploadType :: Lens' SpreadsheetsDeveloperMetadataGet (Maybe Text)
+sdmgUploadType
+  = lens _sdmgUploadType
+      (\ s a -> s{_sdmgUploadType = a})
+
+-- | JSONP
+sdmgCallback :: Lens' SpreadsheetsDeveloperMetadataGet (Maybe Text)
+sdmgCallback
+  = lens _sdmgCallback (\ s a -> s{_sdmgCallback = a})
+
+instance GoogleRequest
+         SpreadsheetsDeveloperMetadataGet where
+        type Rs SpreadsheetsDeveloperMetadataGet =
+             DeveloperMetadata
+        type Scopes SpreadsheetsDeveloperMetadataGet =
+             '["https://www.googleapis.com/auth/drive",
+               "https://www.googleapis.com/auth/drive.file",
+               "https://www.googleapis.com/auth/spreadsheets"]
+        requestClient SpreadsheetsDeveloperMetadataGet'{..}
+          = go _sdmgSpreadsheetId _sdmgMetadataId _sdmgXgafv
+              _sdmgUploadProtocol
+              _sdmgAccessToken
+              _sdmgUploadType
+              _sdmgCallback
+              (Just AltJSON)
+              sheetsService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy SpreadsheetsDeveloperMetadataGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Sheets/Spreadsheets/DeveloperMetadata/Search.hs b/gen/Network/Google/Resource/Sheets/Spreadsheets/DeveloperMetadata/Search.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Sheets/Spreadsheets/DeveloperMetadata/Search.hs
@@ -0,0 +1,178 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Sheets.Spreadsheets.DeveloperMetadata.Search
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns all developer metadata matching the specified DataFilter. If the
+-- provided DataFilter represents a DeveloperMetadataLookup object, this
+-- will return all DeveloperMetadata entries selected by it. If the
+-- DataFilter represents a location in a spreadsheet, this will return all
+-- developer metadata associated with locations intersecting that region.
+--
+-- /See:/ <https://developers.google.com/sheets/ Google Sheets API Reference> for @sheets.spreadsheets.developerMetadata.search@.
+module Network.Google.Resource.Sheets.Spreadsheets.DeveloperMetadata.Search
+    (
+    -- * REST Resource
+      SpreadsheetsDeveloperMetadataSearchResource
+
+    -- * Creating a Request
+    , spreadsheetsDeveloperMetadataSearch
+    , SpreadsheetsDeveloperMetadataSearch
+
+    -- * Request Lenses
+    , sdmsXgafv
+    , sdmsUploadProtocol
+    , sdmsAccessToken
+    , sdmsSpreadsheetId
+    , sdmsUploadType
+    , sdmsPayload
+    , sdmsCallback
+    ) where
+
+import           Network.Google.Prelude
+import           Network.Google.Sheets.Types
+
+-- | A resource alias for @sheets.spreadsheets.developerMetadata.search@ method which the
+-- 'SpreadsheetsDeveloperMetadataSearch' request conforms to.
+type SpreadsheetsDeveloperMetadataSearchResource =
+     "v4" :>
+       "spreadsheets" :>
+         Capture "spreadsheetId" Text :>
+           "developerMetadata:search" :>
+             QueryParam "$.xgafv" Xgafv :>
+               QueryParam "upload_protocol" Text :>
+                 QueryParam "access_token" Text :>
+                   QueryParam "uploadType" Text :>
+                     QueryParam "callback" Text :>
+                       QueryParam "alt" AltJSON :>
+                         ReqBody '[JSON] SearchDeveloperMetadataRequest :>
+                           Post '[JSON] SearchDeveloperMetadataResponse
+
+-- | Returns all developer metadata matching the specified DataFilter. If the
+-- provided DataFilter represents a DeveloperMetadataLookup object, this
+-- will return all DeveloperMetadata entries selected by it. If the
+-- DataFilter represents a location in a spreadsheet, this will return all
+-- developer metadata associated with locations intersecting that region.
+--
+-- /See:/ 'spreadsheetsDeveloperMetadataSearch' smart constructor.
+data SpreadsheetsDeveloperMetadataSearch = SpreadsheetsDeveloperMetadataSearch'
+    { _sdmsXgafv          :: !(Maybe Xgafv)
+    , _sdmsUploadProtocol :: !(Maybe Text)
+    , _sdmsAccessToken    :: !(Maybe Text)
+    , _sdmsSpreadsheetId  :: !Text
+    , _sdmsUploadType     :: !(Maybe Text)
+    , _sdmsPayload        :: !SearchDeveloperMetadataRequest
+    , _sdmsCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SpreadsheetsDeveloperMetadataSearch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sdmsXgafv'
+--
+-- * 'sdmsUploadProtocol'
+--
+-- * 'sdmsAccessToken'
+--
+-- * 'sdmsSpreadsheetId'
+--
+-- * 'sdmsUploadType'
+--
+-- * 'sdmsPayload'
+--
+-- * 'sdmsCallback'
+spreadsheetsDeveloperMetadataSearch
+    :: Text -- ^ 'sdmsSpreadsheetId'
+    -> SearchDeveloperMetadataRequest -- ^ 'sdmsPayload'
+    -> SpreadsheetsDeveloperMetadataSearch
+spreadsheetsDeveloperMetadataSearch pSdmsSpreadsheetId_ pSdmsPayload_ =
+    SpreadsheetsDeveloperMetadataSearch'
+    { _sdmsXgafv = Nothing
+    , _sdmsUploadProtocol = Nothing
+    , _sdmsAccessToken = Nothing
+    , _sdmsSpreadsheetId = pSdmsSpreadsheetId_
+    , _sdmsUploadType = Nothing
+    , _sdmsPayload = pSdmsPayload_
+    , _sdmsCallback = Nothing
+    }
+
+-- | V1 error format.
+sdmsXgafv :: Lens' SpreadsheetsDeveloperMetadataSearch (Maybe Xgafv)
+sdmsXgafv
+  = lens _sdmsXgafv (\ s a -> s{_sdmsXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+sdmsUploadProtocol :: Lens' SpreadsheetsDeveloperMetadataSearch (Maybe Text)
+sdmsUploadProtocol
+  = lens _sdmsUploadProtocol
+      (\ s a -> s{_sdmsUploadProtocol = a})
+
+-- | OAuth access token.
+sdmsAccessToken :: Lens' SpreadsheetsDeveloperMetadataSearch (Maybe Text)
+sdmsAccessToken
+  = lens _sdmsAccessToken
+      (\ s a -> s{_sdmsAccessToken = a})
+
+-- | The ID of the spreadsheet to retrieve metadata from.
+sdmsSpreadsheetId :: Lens' SpreadsheetsDeveloperMetadataSearch Text
+sdmsSpreadsheetId
+  = lens _sdmsSpreadsheetId
+      (\ s a -> s{_sdmsSpreadsheetId = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+sdmsUploadType :: Lens' SpreadsheetsDeveloperMetadataSearch (Maybe Text)
+sdmsUploadType
+  = lens _sdmsUploadType
+      (\ s a -> s{_sdmsUploadType = a})
+
+-- | Multipart request metadata.
+sdmsPayload :: Lens' SpreadsheetsDeveloperMetadataSearch SearchDeveloperMetadataRequest
+sdmsPayload
+  = lens _sdmsPayload (\ s a -> s{_sdmsPayload = a})
+
+-- | JSONP
+sdmsCallback :: Lens' SpreadsheetsDeveloperMetadataSearch (Maybe Text)
+sdmsCallback
+  = lens _sdmsCallback (\ s a -> s{_sdmsCallback = a})
+
+instance GoogleRequest
+         SpreadsheetsDeveloperMetadataSearch where
+        type Rs SpreadsheetsDeveloperMetadataSearch =
+             SearchDeveloperMetadataResponse
+        type Scopes SpreadsheetsDeveloperMetadataSearch =
+             '["https://www.googleapis.com/auth/drive",
+               "https://www.googleapis.com/auth/drive.file",
+               "https://www.googleapis.com/auth/spreadsheets"]
+        requestClient
+          SpreadsheetsDeveloperMetadataSearch'{..}
+          = go _sdmsSpreadsheetId _sdmsXgafv
+              _sdmsUploadProtocol
+              _sdmsAccessToken
+              _sdmsUploadType
+              _sdmsCallback
+              (Just AltJSON)
+              _sdmsPayload
+              sheetsService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy SpreadsheetsDeveloperMetadataSearchResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Sheets/Spreadsheets/Get.hs b/gen/Network/Google/Resource/Sheets/Spreadsheets/Get.hs
--- a/gen/Network/Google/Resource/Sheets/Spreadsheets/Get.hs
+++ b/gen/Network/Google/Resource/Sheets/Spreadsheets/Get.hs
@@ -45,13 +45,11 @@
     -- * Request Lenses
     , sgXgafv
     , sgUploadProtocol
-    , sgPp
     , sgAccessToken
     , sgSpreadsheetId
     , sgUploadType
     , sgRanges
     , sgIncludeGridData
-    , sgBearerToken
     , sgCallback
     ) where
 
@@ -66,14 +64,12 @@
          Capture "spreadsheetId" Text :>
            QueryParam "$.xgafv" Xgafv :>
              QueryParam "upload_protocol" Text :>
-               QueryParam "pp" Bool :>
-                 QueryParam "access_token" Text :>
-                   QueryParam "uploadType" Text :>
-                     QueryParams "ranges" Text :>
-                       QueryParam "includeGridData" Bool :>
-                         QueryParam "bearer_token" Text :>
-                           QueryParam "callback" Text :>
-                             QueryParam "alt" AltJSON :> Get '[JSON] Spreadsheet
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParams "ranges" Text :>
+                     QueryParam "includeGridData" Bool :>
+                       QueryParam "callback" Text :>
+                         QueryParam "alt" AltJSON :> Get '[JSON] Spreadsheet
 
 -- | Returns the spreadsheet at the given ID. The caller must specify the
 -- spreadsheet ID. By default, data within grids will not be returned. You
@@ -91,13 +87,11 @@
 data SpreadsheetsGet = SpreadsheetsGet'
     { _sgXgafv           :: !(Maybe Xgafv)
     , _sgUploadProtocol  :: !(Maybe Text)
-    , _sgPp              :: !Bool
     , _sgAccessToken     :: !(Maybe Text)
     , _sgSpreadsheetId   :: !Text
     , _sgUploadType      :: !(Maybe Text)
     , _sgRanges          :: !(Maybe [Text])
     , _sgIncludeGridData :: !(Maybe Bool)
-    , _sgBearerToken     :: !(Maybe Text)
     , _sgCallback        :: !(Maybe Text)
     } deriving (Eq,Show,Data,Typeable,Generic)
 
@@ -109,8 +103,6 @@
 --
 -- * 'sgUploadProtocol'
 --
--- * 'sgPp'
---
 -- * 'sgAccessToken'
 --
 -- * 'sgSpreadsheetId'
@@ -121,8 +113,6 @@
 --
 -- * 'sgIncludeGridData'
 --
--- * 'sgBearerToken'
---
 -- * 'sgCallback'
 spreadsheetsGet
     :: Text -- ^ 'sgSpreadsheetId'
@@ -131,13 +121,11 @@
     SpreadsheetsGet'
     { _sgXgafv = Nothing
     , _sgUploadProtocol = Nothing
-    , _sgPp = True
     , _sgAccessToken = Nothing
     , _sgSpreadsheetId = pSgSpreadsheetId_
     , _sgUploadType = Nothing
     , _sgRanges = Nothing
     , _sgIncludeGridData = Nothing
-    , _sgBearerToken = Nothing
     , _sgCallback = Nothing
     }
 
@@ -151,10 +139,6 @@
   = lens _sgUploadProtocol
       (\ s a -> s{_sgUploadProtocol = a})
 
--- | Pretty-print response.
-sgPp :: Lens' SpreadsheetsGet Bool
-sgPp = lens _sgPp (\ s a -> s{_sgPp = a})
-
 -- | OAuth access token.
 sgAccessToken :: Lens' SpreadsheetsGet (Maybe Text)
 sgAccessToken
@@ -186,12 +170,6 @@
   = lens _sgIncludeGridData
       (\ s a -> s{_sgIncludeGridData = a})
 
--- | OAuth bearer token.
-sgBearerToken :: Lens' SpreadsheetsGet (Maybe Text)
-sgBearerToken
-  = lens _sgBearerToken
-      (\ s a -> s{_sgBearerToken = a})
-
 -- | JSONP
 sgCallback :: Lens' SpreadsheetsGet (Maybe Text)
 sgCallback
@@ -201,17 +179,16 @@
         type Rs SpreadsheetsGet = Spreadsheet
         type Scopes SpreadsheetsGet =
              '["https://www.googleapis.com/auth/drive",
+               "https://www.googleapis.com/auth/drive.file",
                "https://www.googleapis.com/auth/drive.readonly",
                "https://www.googleapis.com/auth/spreadsheets",
                "https://www.googleapis.com/auth/spreadsheets.readonly"]
         requestClient SpreadsheetsGet'{..}
           = go _sgSpreadsheetId _sgXgafv _sgUploadProtocol
-              (Just _sgPp)
               _sgAccessToken
               _sgUploadType
               (_sgRanges ^. _Default)
               _sgIncludeGridData
-              _sgBearerToken
               _sgCallback
               (Just AltJSON)
               sheetsService
diff --git a/gen/Network/Google/Resource/Sheets/Spreadsheets/GetByDataFilter.hs b/gen/Network/Google/Resource/Sheets/Spreadsheets/GetByDataFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Sheets/Spreadsheets/GetByDataFilter.hs
@@ -0,0 +1,189 @@
+{-# 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.Sheets.Spreadsheets.GetByDataFilter
+-- 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 spreadsheet at the given ID. The caller must specify the
+-- spreadsheet ID. This method differs from GetSpreadsheet in that it
+-- allows selecting which subsets of spreadsheet data to return by
+-- specifying a dataFilters parameter. Multiple DataFilters can be
+-- specified. Specifying one or more data filters will return the portions
+-- of the spreadsheet that intersect ranges matched by any of the filters.
+-- By default, data within grids will not be returned. You can include grid
+-- data one of two ways: * Specify a field mask listing your desired fields
+-- using the \`fields\` URL parameter in HTTP * Set the includeGridData
+-- parameter to true. If a field mask is set, the \`includeGridData\`
+-- parameter is ignored For large spreadsheets, it is recommended to
+-- retrieve only the specific fields of the spreadsheet that you want.
+--
+-- /See:/ <https://developers.google.com/sheets/ Google Sheets API Reference> for @sheets.spreadsheets.getByDataFilter@.
+module Network.Google.Resource.Sheets.Spreadsheets.GetByDataFilter
+    (
+    -- * REST Resource
+      SpreadsheetsGetByDataFilterResource
+
+    -- * Creating a Request
+    , spreadsheetsGetByDataFilter
+    , SpreadsheetsGetByDataFilter
+
+    -- * Request Lenses
+    , sgbdfXgafv
+    , sgbdfUploadProtocol
+    , sgbdfAccessToken
+    , sgbdfSpreadsheetId
+    , sgbdfUploadType
+    , sgbdfPayload
+    , sgbdfCallback
+    ) where
+
+import           Network.Google.Prelude
+import           Network.Google.Sheets.Types
+
+-- | A resource alias for @sheets.spreadsheets.getByDataFilter@ method which the
+-- 'SpreadsheetsGetByDataFilter' request conforms to.
+type SpreadsheetsGetByDataFilterResource =
+     "v4" :>
+       "spreadsheets" :>
+         CaptureMode "spreadsheetId" "getByDataFilter" Text :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "callback" Text :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON] GetSpreadsheetByDataFilterRequest :>
+                         Post '[JSON] Spreadsheet
+
+-- | Returns the spreadsheet at the given ID. The caller must specify the
+-- spreadsheet ID. This method differs from GetSpreadsheet in that it
+-- allows selecting which subsets of spreadsheet data to return by
+-- specifying a dataFilters parameter. Multiple DataFilters can be
+-- specified. Specifying one or more data filters will return the portions
+-- of the spreadsheet that intersect ranges matched by any of the filters.
+-- By default, data within grids will not be returned. You can include grid
+-- data one of two ways: * Specify a field mask listing your desired fields
+-- using the \`fields\` URL parameter in HTTP * Set the includeGridData
+-- parameter to true. If a field mask is set, the \`includeGridData\`
+-- parameter is ignored For large spreadsheets, it is recommended to
+-- retrieve only the specific fields of the spreadsheet that you want.
+--
+-- /See:/ 'spreadsheetsGetByDataFilter' smart constructor.
+data SpreadsheetsGetByDataFilter = SpreadsheetsGetByDataFilter'
+    { _sgbdfXgafv          :: !(Maybe Xgafv)
+    , _sgbdfUploadProtocol :: !(Maybe Text)
+    , _sgbdfAccessToken    :: !(Maybe Text)
+    , _sgbdfSpreadsheetId  :: !Text
+    , _sgbdfUploadType     :: !(Maybe Text)
+    , _sgbdfPayload        :: !GetSpreadsheetByDataFilterRequest
+    , _sgbdfCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SpreadsheetsGetByDataFilter' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sgbdfXgafv'
+--
+-- * 'sgbdfUploadProtocol'
+--
+-- * 'sgbdfAccessToken'
+--
+-- * 'sgbdfSpreadsheetId'
+--
+-- * 'sgbdfUploadType'
+--
+-- * 'sgbdfPayload'
+--
+-- * 'sgbdfCallback'
+spreadsheetsGetByDataFilter
+    :: Text -- ^ 'sgbdfSpreadsheetId'
+    -> GetSpreadsheetByDataFilterRequest -- ^ 'sgbdfPayload'
+    -> SpreadsheetsGetByDataFilter
+spreadsheetsGetByDataFilter pSgbdfSpreadsheetId_ pSgbdfPayload_ =
+    SpreadsheetsGetByDataFilter'
+    { _sgbdfXgafv = Nothing
+    , _sgbdfUploadProtocol = Nothing
+    , _sgbdfAccessToken = Nothing
+    , _sgbdfSpreadsheetId = pSgbdfSpreadsheetId_
+    , _sgbdfUploadType = Nothing
+    , _sgbdfPayload = pSgbdfPayload_
+    , _sgbdfCallback = Nothing
+    }
+
+-- | V1 error format.
+sgbdfXgafv :: Lens' SpreadsheetsGetByDataFilter (Maybe Xgafv)
+sgbdfXgafv
+  = lens _sgbdfXgafv (\ s a -> s{_sgbdfXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+sgbdfUploadProtocol :: Lens' SpreadsheetsGetByDataFilter (Maybe Text)
+sgbdfUploadProtocol
+  = lens _sgbdfUploadProtocol
+      (\ s a -> s{_sgbdfUploadProtocol = a})
+
+-- | OAuth access token.
+sgbdfAccessToken :: Lens' SpreadsheetsGetByDataFilter (Maybe Text)
+sgbdfAccessToken
+  = lens _sgbdfAccessToken
+      (\ s a -> s{_sgbdfAccessToken = a})
+
+-- | The spreadsheet to request.
+sgbdfSpreadsheetId :: Lens' SpreadsheetsGetByDataFilter Text
+sgbdfSpreadsheetId
+  = lens _sgbdfSpreadsheetId
+      (\ s a -> s{_sgbdfSpreadsheetId = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+sgbdfUploadType :: Lens' SpreadsheetsGetByDataFilter (Maybe Text)
+sgbdfUploadType
+  = lens _sgbdfUploadType
+      (\ s a -> s{_sgbdfUploadType = a})
+
+-- | Multipart request metadata.
+sgbdfPayload :: Lens' SpreadsheetsGetByDataFilter GetSpreadsheetByDataFilterRequest
+sgbdfPayload
+  = lens _sgbdfPayload (\ s a -> s{_sgbdfPayload = a})
+
+-- | JSONP
+sgbdfCallback :: Lens' SpreadsheetsGetByDataFilter (Maybe Text)
+sgbdfCallback
+  = lens _sgbdfCallback
+      (\ s a -> s{_sgbdfCallback = a})
+
+instance GoogleRequest SpreadsheetsGetByDataFilter
+         where
+        type Rs SpreadsheetsGetByDataFilter = Spreadsheet
+        type Scopes SpreadsheetsGetByDataFilter =
+             '["https://www.googleapis.com/auth/drive",
+               "https://www.googleapis.com/auth/drive.file",
+               "https://www.googleapis.com/auth/spreadsheets"]
+        requestClient SpreadsheetsGetByDataFilter'{..}
+          = go _sgbdfSpreadsheetId _sgbdfXgafv
+              _sgbdfUploadProtocol
+              _sgbdfAccessToken
+              _sgbdfUploadType
+              _sgbdfCallback
+              (Just AltJSON)
+              _sgbdfPayload
+              sheetsService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy SpreadsheetsGetByDataFilterResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Sheets/Spreadsheets/Sheets/CopyTo.hs b/gen/Network/Google/Resource/Sheets/Spreadsheets/Sheets/CopyTo.hs
--- a/gen/Network/Google/Resource/Sheets/Spreadsheets/Sheets/CopyTo.hs
+++ b/gen/Network/Google/Resource/Sheets/Spreadsheets/Sheets/CopyTo.hs
@@ -36,12 +36,10 @@
     -- * Request Lenses
     , ssctXgafv
     , ssctUploadProtocol
-    , ssctPp
     , ssctAccessToken
     , ssctSpreadsheetId
     , ssctUploadType
     , ssctPayload
-    , ssctBearerToken
     , ssctSheetId
     , ssctCallback
     ) where
@@ -59,15 +57,12 @@
              CaptureMode "sheetId" "copyTo" (Textual Int32) :>
                QueryParam "$.xgafv" Xgafv :>
                  QueryParam "upload_protocol" Text :>
-                   QueryParam "pp" Bool :>
-                     QueryParam "access_token" Text :>
-                       QueryParam "uploadType" Text :>
-                         QueryParam "bearer_token" Text :>
-                           QueryParam "callback" Text :>
-                             QueryParam "alt" AltJSON :>
-                               ReqBody '[JSON]
-                                 CopySheetToAnotherSpreadsheetRequest
-                                 :> Post '[JSON] SheetProperties
+                   QueryParam "access_token" Text :>
+                     QueryParam "uploadType" Text :>
+                       QueryParam "callback" Text :>
+                         QueryParam "alt" AltJSON :>
+                           ReqBody '[JSON] CopySheetToAnotherSpreadsheetRequest
+                             :> Post '[JSON] SheetProperties
 
 -- | Copies a single sheet from a spreadsheet to another spreadsheet. Returns
 -- the properties of the newly created sheet.
@@ -76,12 +71,10 @@
 data SpreadsheetsSheetsCopyTo = SpreadsheetsSheetsCopyTo'
     { _ssctXgafv          :: !(Maybe Xgafv)
     , _ssctUploadProtocol :: !(Maybe Text)
-    , _ssctPp             :: !Bool
     , _ssctAccessToken    :: !(Maybe Text)
     , _ssctSpreadsheetId  :: !Text
     , _ssctUploadType     :: !(Maybe Text)
     , _ssctPayload        :: !CopySheetToAnotherSpreadsheetRequest
-    , _ssctBearerToken    :: !(Maybe Text)
     , _ssctSheetId        :: !(Textual Int32)
     , _ssctCallback       :: !(Maybe Text)
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -94,8 +87,6 @@
 --
 -- * 'ssctUploadProtocol'
 --
--- * 'ssctPp'
---
 -- * 'ssctAccessToken'
 --
 -- * 'ssctSpreadsheetId'
@@ -104,8 +95,6 @@
 --
 -- * 'ssctPayload'
 --
--- * 'ssctBearerToken'
---
 -- * 'ssctSheetId'
 --
 -- * 'ssctCallback'
@@ -118,12 +107,10 @@
     SpreadsheetsSheetsCopyTo'
     { _ssctXgafv = Nothing
     , _ssctUploadProtocol = Nothing
-    , _ssctPp = True
     , _ssctAccessToken = Nothing
     , _ssctSpreadsheetId = pSsctSpreadsheetId_
     , _ssctUploadType = Nothing
     , _ssctPayload = pSsctPayload_
-    , _ssctBearerToken = Nothing
     , _ssctSheetId = _Coerce # pSsctSheetId_
     , _ssctCallback = Nothing
     }
@@ -139,10 +126,6 @@
   = lens _ssctUploadProtocol
       (\ s a -> s{_ssctUploadProtocol = a})
 
--- | Pretty-print response.
-ssctPp :: Lens' SpreadsheetsSheetsCopyTo Bool
-ssctPp = lens _ssctPp (\ s a -> s{_ssctPp = a})
-
 -- | OAuth access token.
 ssctAccessToken :: Lens' SpreadsheetsSheetsCopyTo (Maybe Text)
 ssctAccessToken
@@ -166,12 +149,6 @@
 ssctPayload
   = lens _ssctPayload (\ s a -> s{_ssctPayload = a})
 
--- | OAuth bearer token.
-ssctBearerToken :: Lens' SpreadsheetsSheetsCopyTo (Maybe Text)
-ssctBearerToken
-  = lens _ssctBearerToken
-      (\ s a -> s{_ssctBearerToken = a})
-
 -- | The ID of the sheet to copy.
 ssctSheetId :: Lens' SpreadsheetsSheetsCopyTo Int32
 ssctSheetId
@@ -187,14 +164,13 @@
         type Rs SpreadsheetsSheetsCopyTo = SheetProperties
         type Scopes SpreadsheetsSheetsCopyTo =
              '["https://www.googleapis.com/auth/drive",
+               "https://www.googleapis.com/auth/drive.file",
                "https://www.googleapis.com/auth/spreadsheets"]
         requestClient SpreadsheetsSheetsCopyTo'{..}
           = go _ssctSpreadsheetId _ssctSheetId _ssctXgafv
               _ssctUploadProtocol
-              (Just _ssctPp)
               _ssctAccessToken
               _ssctUploadType
-              _ssctBearerToken
               _ssctCallback
               (Just AltJSON)
               _ssctPayload
diff --git a/gen/Network/Google/Resource/Sheets/Spreadsheets/Values/Append.hs b/gen/Network/Google/Resource/Sheets/Spreadsheets/Values/Append.hs
--- a/gen/Network/Google/Resource/Sheets/Spreadsheets/Values/Append.hs
+++ b/gen/Network/Google/Resource/Sheets/Spreadsheets/Values/Append.hs
@@ -23,8 +23,9 @@
 -- Appends values to a spreadsheet. The input range is used to search for
 -- existing data and find a \"table\" within that range. Values will be
 -- appended to the next row of the table, starting with the first column of
--- the table. See the [guide](\/sheets\/guides\/values#appending_values)
--- and [sample code](\/sheets\/samples\/writing#append_values) for specific
+-- the table. See the
+-- [guide](\/sheets\/api\/guides\/values#appending_values) and [sample
+-- code](\/sheets\/api\/samples\/writing#append_values) for specific
 -- details of how tables are detected and data is appended. The caller must
 -- specify the spreadsheet ID, range, and a valueInputOption. The
 -- \`valueInputOption\` only controls how the input data will be added to
@@ -44,14 +45,12 @@
     -- * Request Lenses
     , svaXgafv
     , svaUploadProtocol
-    , svaPp
     , svaAccessToken
     , svaSpreadsheetId
     , svaUploadType
     , svaValueInputOption
     , svaPayload
     , svaInsertDataOption
-    , svaBearerToken
     , svaRange
     , svaIncludeValuesInResponse
     , svaResponseDateTimeRenderOption
@@ -72,27 +71,24 @@
              CaptureMode "range" "append" Text :>
                QueryParam "$.xgafv" Xgafv :>
                  QueryParam "upload_protocol" Text :>
-                   QueryParam "pp" Bool :>
-                     QueryParam "access_token" Text :>
-                       QueryParam "uploadType" Text :>
-                         QueryParam "valueInputOption" Text :>
-                           QueryParam "insertDataOption" Text :>
-                             QueryParam "bearer_token" Text :>
-                               QueryParam "includeValuesInResponse" Bool :>
-                                 QueryParam "responseDateTimeRenderOption" Text
-                                   :>
-                                   QueryParam "callback" Text :>
-                                     QueryParam "responseValueRenderOption" Text
-                                       :>
-                                       QueryParam "alt" AltJSON :>
-                                         ReqBody '[JSON] ValueRange :>
-                                           Post '[JSON] AppendValuesResponse
+                   QueryParam "access_token" Text :>
+                     QueryParam "uploadType" Text :>
+                       QueryParam "valueInputOption" Text :>
+                         QueryParam "insertDataOption" Text :>
+                           QueryParam "includeValuesInResponse" Bool :>
+                             QueryParam "responseDateTimeRenderOption" Text :>
+                               QueryParam "callback" Text :>
+                                 QueryParam "responseValueRenderOption" Text :>
+                                   QueryParam "alt" AltJSON :>
+                                     ReqBody '[JSON] ValueRange :>
+                                       Post '[JSON] AppendValuesResponse
 
 -- | Appends values to a spreadsheet. The input range is used to search for
 -- existing data and find a \"table\" within that range. Values will be
 -- appended to the next row of the table, starting with the first column of
--- the table. See the [guide](\/sheets\/guides\/values#appending_values)
--- and [sample code](\/sheets\/samples\/writing#append_values) for specific
+-- the table. See the
+-- [guide](\/sheets\/api\/guides\/values#appending_values) and [sample
+-- code](\/sheets\/api\/samples\/writing#append_values) for specific
 -- details of how tables are detected and data is appended. The caller must
 -- specify the spreadsheet ID, range, and a valueInputOption. The
 -- \`valueInputOption\` only controls how the input data will be added to
@@ -103,14 +99,12 @@
 data SpreadsheetsValuesAppend = SpreadsheetsValuesAppend'
     { _svaXgafv                        :: !(Maybe Xgafv)
     , _svaUploadProtocol               :: !(Maybe Text)
-    , _svaPp                           :: !Bool
     , _svaAccessToken                  :: !(Maybe Text)
     , _svaSpreadsheetId                :: !Text
     , _svaUploadType                   :: !(Maybe Text)
     , _svaValueInputOption             :: !(Maybe Text)
     , _svaPayload                      :: !ValueRange
     , _svaInsertDataOption             :: !(Maybe Text)
-    , _svaBearerToken                  :: !(Maybe Text)
     , _svaRange                        :: !Text
     , _svaIncludeValuesInResponse      :: !(Maybe Bool)
     , _svaResponseDateTimeRenderOption :: !(Maybe Text)
@@ -126,8 +120,6 @@
 --
 -- * 'svaUploadProtocol'
 --
--- * 'svaPp'
---
 -- * 'svaAccessToken'
 --
 -- * 'svaSpreadsheetId'
@@ -140,8 +132,6 @@
 --
 -- * 'svaInsertDataOption'
 --
--- * 'svaBearerToken'
---
 -- * 'svaRange'
 --
 -- * 'svaIncludeValuesInResponse'
@@ -160,14 +150,12 @@
     SpreadsheetsValuesAppend'
     { _svaXgafv = Nothing
     , _svaUploadProtocol = Nothing
-    , _svaPp = True
     , _svaAccessToken = Nothing
     , _svaSpreadsheetId = pSvaSpreadsheetId_
     , _svaUploadType = Nothing
     , _svaValueInputOption = Nothing
     , _svaPayload = pSvaPayload_
     , _svaInsertDataOption = Nothing
-    , _svaBearerToken = Nothing
     , _svaRange = pSvaRange_
     , _svaIncludeValuesInResponse = Nothing
     , _svaResponseDateTimeRenderOption = Nothing
@@ -185,10 +173,6 @@
   = lens _svaUploadProtocol
       (\ s a -> s{_svaUploadProtocol = a})
 
--- | Pretty-print response.
-svaPp :: Lens' SpreadsheetsValuesAppend Bool
-svaPp = lens _svaPp (\ s a -> s{_svaPp = a})
-
 -- | OAuth access token.
 svaAccessToken :: Lens' SpreadsheetsValuesAppend (Maybe Text)
 svaAccessToken
@@ -224,12 +208,6 @@
   = lens _svaInsertDataOption
       (\ s a -> s{_svaInsertDataOption = a})
 
--- | OAuth bearer token.
-svaBearerToken :: Lens' SpreadsheetsValuesAppend (Maybe Text)
-svaBearerToken
-  = lens _svaBearerToken
-      (\ s a -> s{_svaBearerToken = a})
-
 -- | The A1 notation of a range to search for a logical table of data. Values
 -- will be appended after the last row of the table.
 svaRange :: Lens' SpreadsheetsValuesAppend Text
@@ -269,16 +247,15 @@
              AppendValuesResponse
         type Scopes SpreadsheetsValuesAppend =
              '["https://www.googleapis.com/auth/drive",
+               "https://www.googleapis.com/auth/drive.file",
                "https://www.googleapis.com/auth/spreadsheets"]
         requestClient SpreadsheetsValuesAppend'{..}
           = go _svaSpreadsheetId _svaRange _svaXgafv
               _svaUploadProtocol
-              (Just _svaPp)
               _svaAccessToken
               _svaUploadType
               _svaValueInputOption
               _svaInsertDataOption
-              _svaBearerToken
               _svaIncludeValuesInResponse
               _svaResponseDateTimeRenderOption
               _svaCallback
diff --git a/gen/Network/Google/Resource/Sheets/Spreadsheets/Values/BatchClear.hs b/gen/Network/Google/Resource/Sheets/Spreadsheets/Values/BatchClear.hs
--- a/gen/Network/Google/Resource/Sheets/Spreadsheets/Values/BatchClear.hs
+++ b/gen/Network/Google/Resource/Sheets/Spreadsheets/Values/BatchClear.hs
@@ -38,12 +38,10 @@
     -- * Request Lenses
     , svbcXgafv
     , svbcUploadProtocol
-    , svbcPp
     , svbcAccessToken
     , svbcSpreadsheetId
     , svbcUploadType
     , svbcPayload
-    , svbcBearerToken
     , svbcCallback
     ) where
 
@@ -59,14 +57,12 @@
            "values:batchClear" :>
              QueryParam "$.xgafv" Xgafv :>
                QueryParam "upload_protocol" Text :>
-                 QueryParam "pp" Bool :>
-                   QueryParam "access_token" Text :>
-                     QueryParam "uploadType" Text :>
-                       QueryParam "bearer_token" Text :>
-                         QueryParam "callback" Text :>
-                           QueryParam "alt" AltJSON :>
-                             ReqBody '[JSON] BatchClearValuesRequest :>
-                               Post '[JSON] BatchClearValuesResponse
+                 QueryParam "access_token" Text :>
+                   QueryParam "uploadType" Text :>
+                     QueryParam "callback" Text :>
+                       QueryParam "alt" AltJSON :>
+                         ReqBody '[JSON] BatchClearValuesRequest :>
+                           Post '[JSON] BatchClearValuesResponse
 
 -- | Clears one or more ranges of values from a spreadsheet. The caller must
 -- specify the spreadsheet ID and one or more ranges. Only values are
@@ -77,12 +73,10 @@
 data SpreadsheetsValuesBatchClear = SpreadsheetsValuesBatchClear'
     { _svbcXgafv          :: !(Maybe Xgafv)
     , _svbcUploadProtocol :: !(Maybe Text)
-    , _svbcPp             :: !Bool
     , _svbcAccessToken    :: !(Maybe Text)
     , _svbcSpreadsheetId  :: !Text
     , _svbcUploadType     :: !(Maybe Text)
     , _svbcPayload        :: !BatchClearValuesRequest
-    , _svbcBearerToken    :: !(Maybe Text)
     , _svbcCallback       :: !(Maybe Text)
     } deriving (Eq,Show,Data,Typeable,Generic)
 
@@ -94,8 +88,6 @@
 --
 -- * 'svbcUploadProtocol'
 --
--- * 'svbcPp'
---
 -- * 'svbcAccessToken'
 --
 -- * 'svbcSpreadsheetId'
@@ -104,8 +96,6 @@
 --
 -- * 'svbcPayload'
 --
--- * 'svbcBearerToken'
---
 -- * 'svbcCallback'
 spreadsheetsValuesBatchClear
     :: Text -- ^ 'svbcSpreadsheetId'
@@ -115,12 +105,10 @@
     SpreadsheetsValuesBatchClear'
     { _svbcXgafv = Nothing
     , _svbcUploadProtocol = Nothing
-    , _svbcPp = True
     , _svbcAccessToken = Nothing
     , _svbcSpreadsheetId = pSvbcSpreadsheetId_
     , _svbcUploadType = Nothing
     , _svbcPayload = pSvbcPayload_
-    , _svbcBearerToken = Nothing
     , _svbcCallback = Nothing
     }
 
@@ -135,10 +123,6 @@
   = lens _svbcUploadProtocol
       (\ s a -> s{_svbcUploadProtocol = a})
 
--- | Pretty-print response.
-svbcPp :: Lens' SpreadsheetsValuesBatchClear Bool
-svbcPp = lens _svbcPp (\ s a -> s{_svbcPp = a})
-
 -- | OAuth access token.
 svbcAccessToken :: Lens' SpreadsheetsValuesBatchClear (Maybe Text)
 svbcAccessToken
@@ -162,12 +146,6 @@
 svbcPayload
   = lens _svbcPayload (\ s a -> s{_svbcPayload = a})
 
--- | OAuth bearer token.
-svbcBearerToken :: Lens' SpreadsheetsValuesBatchClear (Maybe Text)
-svbcBearerToken
-  = lens _svbcBearerToken
-      (\ s a -> s{_svbcBearerToken = a})
-
 -- | JSONP
 svbcCallback :: Lens' SpreadsheetsValuesBatchClear (Maybe Text)
 svbcCallback
@@ -179,14 +157,13 @@
              BatchClearValuesResponse
         type Scopes SpreadsheetsValuesBatchClear =
              '["https://www.googleapis.com/auth/drive",
+               "https://www.googleapis.com/auth/drive.file",
                "https://www.googleapis.com/auth/spreadsheets"]
         requestClient SpreadsheetsValuesBatchClear'{..}
           = go _svbcSpreadsheetId _svbcXgafv
               _svbcUploadProtocol
-              (Just _svbcPp)
               _svbcAccessToken
               _svbcUploadType
-              _svbcBearerToken
               _svbcCallback
               (Just AltJSON)
               _svbcPayload
diff --git a/gen/Network/Google/Resource/Sheets/Spreadsheets/Values/BatchClearByDataFilter.hs b/gen/Network/Google/Resource/Sheets/Spreadsheets/Values/BatchClearByDataFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Sheets/Spreadsheets/Values/BatchClearByDataFilter.hs
@@ -0,0 +1,183 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Sheets.Spreadsheets.Values.BatchClearByDataFilter
+-- 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)
+--
+-- Clears one or more ranges of values from a spreadsheet. The caller must
+-- specify the spreadsheet ID and one or more DataFilters. Ranges matching
+-- any of the specified data filters will be cleared. Only values are
+-- cleared -- all other properties of the cell (such as formatting, data
+-- validation, etc..) are kept.
+--
+-- /See:/ <https://developers.google.com/sheets/ Google Sheets API Reference> for @sheets.spreadsheets.values.batchClearByDataFilter@.
+module Network.Google.Resource.Sheets.Spreadsheets.Values.BatchClearByDataFilter
+    (
+    -- * REST Resource
+      SpreadsheetsValuesBatchClearByDataFilterResource
+
+    -- * Creating a Request
+    , spreadsheetsValuesBatchClearByDataFilter
+    , SpreadsheetsValuesBatchClearByDataFilter
+
+    -- * Request Lenses
+    , svbcbdfXgafv
+    , svbcbdfUploadProtocol
+    , svbcbdfAccessToken
+    , svbcbdfSpreadsheetId
+    , svbcbdfUploadType
+    , svbcbdfPayload
+    , svbcbdfCallback
+    ) where
+
+import           Network.Google.Prelude
+import           Network.Google.Sheets.Types
+
+-- | A resource alias for @sheets.spreadsheets.values.batchClearByDataFilter@ method which the
+-- 'SpreadsheetsValuesBatchClearByDataFilter' request conforms to.
+type SpreadsheetsValuesBatchClearByDataFilterResource
+     =
+     "v4" :>
+       "spreadsheets" :>
+         Capture "spreadsheetId" Text :>
+           "values:batchClearByDataFilter" :>
+             QueryParam "$.xgafv" Xgafv :>
+               QueryParam "upload_protocol" Text :>
+                 QueryParam "access_token" Text :>
+                   QueryParam "uploadType" Text :>
+                     QueryParam "callback" Text :>
+                       QueryParam "alt" AltJSON :>
+                         ReqBody '[JSON] BatchClearValuesByDataFilterRequest
+                           :> Post '[JSON] BatchClearValuesByDataFilterResponse
+
+-- | Clears one or more ranges of values from a spreadsheet. The caller must
+-- specify the spreadsheet ID and one or more DataFilters. Ranges matching
+-- any of the specified data filters will be cleared. Only values are
+-- cleared -- all other properties of the cell (such as formatting, data
+-- validation, etc..) are kept.
+--
+-- /See:/ 'spreadsheetsValuesBatchClearByDataFilter' smart constructor.
+data SpreadsheetsValuesBatchClearByDataFilter = SpreadsheetsValuesBatchClearByDataFilter'
+    { _svbcbdfXgafv          :: !(Maybe Xgafv)
+    , _svbcbdfUploadProtocol :: !(Maybe Text)
+    , _svbcbdfAccessToken    :: !(Maybe Text)
+    , _svbcbdfSpreadsheetId  :: !Text
+    , _svbcbdfUploadType     :: !(Maybe Text)
+    , _svbcbdfPayload        :: !BatchClearValuesByDataFilterRequest
+    , _svbcbdfCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SpreadsheetsValuesBatchClearByDataFilter' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'svbcbdfXgafv'
+--
+-- * 'svbcbdfUploadProtocol'
+--
+-- * 'svbcbdfAccessToken'
+--
+-- * 'svbcbdfSpreadsheetId'
+--
+-- * 'svbcbdfUploadType'
+--
+-- * 'svbcbdfPayload'
+--
+-- * 'svbcbdfCallback'
+spreadsheetsValuesBatchClearByDataFilter
+    :: Text -- ^ 'svbcbdfSpreadsheetId'
+    -> BatchClearValuesByDataFilterRequest -- ^ 'svbcbdfPayload'
+    -> SpreadsheetsValuesBatchClearByDataFilter
+spreadsheetsValuesBatchClearByDataFilter pSvbcbdfSpreadsheetId_ pSvbcbdfPayload_ =
+    SpreadsheetsValuesBatchClearByDataFilter'
+    { _svbcbdfXgafv = Nothing
+    , _svbcbdfUploadProtocol = Nothing
+    , _svbcbdfAccessToken = Nothing
+    , _svbcbdfSpreadsheetId = pSvbcbdfSpreadsheetId_
+    , _svbcbdfUploadType = Nothing
+    , _svbcbdfPayload = pSvbcbdfPayload_
+    , _svbcbdfCallback = Nothing
+    }
+
+-- | V1 error format.
+svbcbdfXgafv :: Lens' SpreadsheetsValuesBatchClearByDataFilter (Maybe Xgafv)
+svbcbdfXgafv
+  = lens _svbcbdfXgafv (\ s a -> s{_svbcbdfXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+svbcbdfUploadProtocol :: Lens' SpreadsheetsValuesBatchClearByDataFilter (Maybe Text)
+svbcbdfUploadProtocol
+  = lens _svbcbdfUploadProtocol
+      (\ s a -> s{_svbcbdfUploadProtocol = a})
+
+-- | OAuth access token.
+svbcbdfAccessToken :: Lens' SpreadsheetsValuesBatchClearByDataFilter (Maybe Text)
+svbcbdfAccessToken
+  = lens _svbcbdfAccessToken
+      (\ s a -> s{_svbcbdfAccessToken = a})
+
+-- | The ID of the spreadsheet to update.
+svbcbdfSpreadsheetId :: Lens' SpreadsheetsValuesBatchClearByDataFilter Text
+svbcbdfSpreadsheetId
+  = lens _svbcbdfSpreadsheetId
+      (\ s a -> s{_svbcbdfSpreadsheetId = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+svbcbdfUploadType :: Lens' SpreadsheetsValuesBatchClearByDataFilter (Maybe Text)
+svbcbdfUploadType
+  = lens _svbcbdfUploadType
+      (\ s a -> s{_svbcbdfUploadType = a})
+
+-- | Multipart request metadata.
+svbcbdfPayload :: Lens' SpreadsheetsValuesBatchClearByDataFilter BatchClearValuesByDataFilterRequest
+svbcbdfPayload
+  = lens _svbcbdfPayload
+      (\ s a -> s{_svbcbdfPayload = a})
+
+-- | JSONP
+svbcbdfCallback :: Lens' SpreadsheetsValuesBatchClearByDataFilter (Maybe Text)
+svbcbdfCallback
+  = lens _svbcbdfCallback
+      (\ s a -> s{_svbcbdfCallback = a})
+
+instance GoogleRequest
+         SpreadsheetsValuesBatchClearByDataFilter where
+        type Rs SpreadsheetsValuesBatchClearByDataFilter =
+             BatchClearValuesByDataFilterResponse
+        type Scopes SpreadsheetsValuesBatchClearByDataFilter
+             =
+             '["https://www.googleapis.com/auth/drive",
+               "https://www.googleapis.com/auth/drive.file",
+               "https://www.googleapis.com/auth/spreadsheets"]
+        requestClient
+          SpreadsheetsValuesBatchClearByDataFilter'{..}
+          = go _svbcbdfSpreadsheetId _svbcbdfXgafv
+              _svbcbdfUploadProtocol
+              _svbcbdfAccessToken
+              _svbcbdfUploadType
+              _svbcbdfCallback
+              (Just AltJSON)
+              _svbcbdfPayload
+              sheetsService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy
+                           SpreadsheetsValuesBatchClearByDataFilterResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Sheets/Spreadsheets/Values/BatchGet.hs b/gen/Network/Google/Resource/Sheets/Spreadsheets/Values/BatchGet.hs
--- a/gen/Network/Google/Resource/Sheets/Spreadsheets/Values/BatchGet.hs
+++ b/gen/Network/Google/Resource/Sheets/Spreadsheets/Values/BatchGet.hs
@@ -37,12 +37,10 @@
     , svbgXgafv
     , svbgValueRenderOption
     , svbgUploadProtocol
-    , svbgPp
     , svbgAccessToken
     , svbgSpreadsheetId
     , svbgUploadType
     , svbgRanges
-    , svbgBearerToken
     , svbgDateTimeRenderOption
     , svbgMajorDimension
     , svbgCallback
@@ -61,16 +59,14 @@
              QueryParam "$.xgafv" Xgafv :>
                QueryParam "valueRenderOption" Text :>
                  QueryParam "upload_protocol" Text :>
-                   QueryParam "pp" Bool :>
-                     QueryParam "access_token" Text :>
-                       QueryParam "uploadType" Text :>
-                         QueryParams "ranges" Text :>
-                           QueryParam "bearer_token" Text :>
-                             QueryParam "dateTimeRenderOption" Text :>
-                               QueryParam "majorDimension" Text :>
-                                 QueryParam "callback" Text :>
-                                   QueryParam "alt" AltJSON :>
-                                     Get '[JSON] BatchGetValuesResponse
+                   QueryParam "access_token" Text :>
+                     QueryParam "uploadType" Text :>
+                       QueryParams "ranges" Text :>
+                         QueryParam "dateTimeRenderOption" Text :>
+                           QueryParam "majorDimension" Text :>
+                             QueryParam "callback" Text :>
+                               QueryParam "alt" AltJSON :>
+                                 Get '[JSON] BatchGetValuesResponse
 
 -- | Returns one or more ranges of values from a spreadsheet. The caller must
 -- specify the spreadsheet ID and one or more ranges.
@@ -80,12 +76,10 @@
     { _svbgXgafv                :: !(Maybe Xgafv)
     , _svbgValueRenderOption    :: !(Maybe Text)
     , _svbgUploadProtocol       :: !(Maybe Text)
-    , _svbgPp                   :: !Bool
     , _svbgAccessToken          :: !(Maybe Text)
     , _svbgSpreadsheetId        :: !Text
     , _svbgUploadType           :: !(Maybe Text)
     , _svbgRanges               :: !(Maybe [Text])
-    , _svbgBearerToken          :: !(Maybe Text)
     , _svbgDateTimeRenderOption :: !(Maybe Text)
     , _svbgMajorDimension       :: !(Maybe Text)
     , _svbgCallback             :: !(Maybe Text)
@@ -101,8 +95,6 @@
 --
 -- * 'svbgUploadProtocol'
 --
--- * 'svbgPp'
---
 -- * 'svbgAccessToken'
 --
 -- * 'svbgSpreadsheetId'
@@ -111,8 +103,6 @@
 --
 -- * 'svbgRanges'
 --
--- * 'svbgBearerToken'
---
 -- * 'svbgDateTimeRenderOption'
 --
 -- * 'svbgMajorDimension'
@@ -126,12 +116,10 @@
     { _svbgXgafv = Nothing
     , _svbgValueRenderOption = Nothing
     , _svbgUploadProtocol = Nothing
-    , _svbgPp = True
     , _svbgAccessToken = Nothing
     , _svbgSpreadsheetId = pSvbgSpreadsheetId_
     , _svbgUploadType = Nothing
     , _svbgRanges = Nothing
-    , _svbgBearerToken = Nothing
     , _svbgDateTimeRenderOption = Nothing
     , _svbgMajorDimension = Nothing
     , _svbgCallback = Nothing
@@ -155,10 +143,6 @@
   = lens _svbgUploadProtocol
       (\ s a -> s{_svbgUploadProtocol = a})
 
--- | Pretty-print response.
-svbgPp :: Lens' SpreadsheetsValuesBatchGet Bool
-svbgPp = lens _svbgPp (\ s a -> s{_svbgPp = a})
-
 -- | OAuth access token.
 svbgAccessToken :: Lens' SpreadsheetsValuesBatchGet (Maybe Text)
 svbgAccessToken
@@ -184,12 +168,6 @@
       _Default
       . _Coerce
 
--- | OAuth bearer token.
-svbgBearerToken :: Lens' SpreadsheetsValuesBatchGet (Maybe Text)
-svbgBearerToken
-  = lens _svbgBearerToken
-      (\ s a -> s{_svbgBearerToken = a})
-
 -- | How dates, times, and durations should be represented in the output.
 -- This is ignored if value_render_option is FORMATTED_VALUE. The default
 -- dateTime render option is [DateTimeRenderOption.SERIAL_NUMBER].
@@ -219,6 +197,7 @@
              BatchGetValuesResponse
         type Scopes SpreadsheetsValuesBatchGet =
              '["https://www.googleapis.com/auth/drive",
+               "https://www.googleapis.com/auth/drive.file",
                "https://www.googleapis.com/auth/drive.readonly",
                "https://www.googleapis.com/auth/spreadsheets",
                "https://www.googleapis.com/auth/spreadsheets.readonly"]
@@ -226,11 +205,9 @@
           = go _svbgSpreadsheetId _svbgXgafv
               _svbgValueRenderOption
               _svbgUploadProtocol
-              (Just _svbgPp)
               _svbgAccessToken
               _svbgUploadType
               (_svbgRanges ^. _Default)
-              _svbgBearerToken
               _svbgDateTimeRenderOption
               _svbgMajorDimension
               _svbgCallback
diff --git a/gen/Network/Google/Resource/Sheets/Spreadsheets/Values/BatchGetByDataFilter.hs b/gen/Network/Google/Resource/Sheets/Spreadsheets/Values/BatchGetByDataFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Sheets/Spreadsheets/Values/BatchGetByDataFilter.hs
@@ -0,0 +1,178 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Sheets.Spreadsheets.Values.BatchGetByDataFilter
+-- 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 one or more ranges of values that match the specified data
+-- filters. The caller must specify the spreadsheet ID and one or more
+-- DataFilters. Ranges that match any of the data filters in the request
+-- will be returned.
+--
+-- /See:/ <https://developers.google.com/sheets/ Google Sheets API Reference> for @sheets.spreadsheets.values.batchGetByDataFilter@.
+module Network.Google.Resource.Sheets.Spreadsheets.Values.BatchGetByDataFilter
+    (
+    -- * REST Resource
+      SpreadsheetsValuesBatchGetByDataFilterResource
+
+    -- * Creating a Request
+    , spreadsheetsValuesBatchGetByDataFilter
+    , SpreadsheetsValuesBatchGetByDataFilter
+
+    -- * Request Lenses
+    , svbgbdfXgafv
+    , svbgbdfUploadProtocol
+    , svbgbdfAccessToken
+    , svbgbdfSpreadsheetId
+    , svbgbdfUploadType
+    , svbgbdfPayload
+    , svbgbdfCallback
+    ) where
+
+import           Network.Google.Prelude
+import           Network.Google.Sheets.Types
+
+-- | A resource alias for @sheets.spreadsheets.values.batchGetByDataFilter@ method which the
+-- 'SpreadsheetsValuesBatchGetByDataFilter' request conforms to.
+type SpreadsheetsValuesBatchGetByDataFilterResource =
+     "v4" :>
+       "spreadsheets" :>
+         Capture "spreadsheetId" Text :>
+           "values:batchGetByDataFilter" :>
+             QueryParam "$.xgafv" Xgafv :>
+               QueryParam "upload_protocol" Text :>
+                 QueryParam "access_token" Text :>
+                   QueryParam "uploadType" Text :>
+                     QueryParam "callback" Text :>
+                       QueryParam "alt" AltJSON :>
+                         ReqBody '[JSON] BatchGetValuesByDataFilterRequest :>
+                           Post '[JSON] BatchGetValuesByDataFilterResponse
+
+-- | Returns one or more ranges of values that match the specified data
+-- filters. The caller must specify the spreadsheet ID and one or more
+-- DataFilters. Ranges that match any of the data filters in the request
+-- will be returned.
+--
+-- /See:/ 'spreadsheetsValuesBatchGetByDataFilter' smart constructor.
+data SpreadsheetsValuesBatchGetByDataFilter = SpreadsheetsValuesBatchGetByDataFilter'
+    { _svbgbdfXgafv          :: !(Maybe Xgafv)
+    , _svbgbdfUploadProtocol :: !(Maybe Text)
+    , _svbgbdfAccessToken    :: !(Maybe Text)
+    , _svbgbdfSpreadsheetId  :: !Text
+    , _svbgbdfUploadType     :: !(Maybe Text)
+    , _svbgbdfPayload        :: !BatchGetValuesByDataFilterRequest
+    , _svbgbdfCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SpreadsheetsValuesBatchGetByDataFilter' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'svbgbdfXgafv'
+--
+-- * 'svbgbdfUploadProtocol'
+--
+-- * 'svbgbdfAccessToken'
+--
+-- * 'svbgbdfSpreadsheetId'
+--
+-- * 'svbgbdfUploadType'
+--
+-- * 'svbgbdfPayload'
+--
+-- * 'svbgbdfCallback'
+spreadsheetsValuesBatchGetByDataFilter
+    :: Text -- ^ 'svbgbdfSpreadsheetId'
+    -> BatchGetValuesByDataFilterRequest -- ^ 'svbgbdfPayload'
+    -> SpreadsheetsValuesBatchGetByDataFilter
+spreadsheetsValuesBatchGetByDataFilter pSvbgbdfSpreadsheetId_ pSvbgbdfPayload_ =
+    SpreadsheetsValuesBatchGetByDataFilter'
+    { _svbgbdfXgafv = Nothing
+    , _svbgbdfUploadProtocol = Nothing
+    , _svbgbdfAccessToken = Nothing
+    , _svbgbdfSpreadsheetId = pSvbgbdfSpreadsheetId_
+    , _svbgbdfUploadType = Nothing
+    , _svbgbdfPayload = pSvbgbdfPayload_
+    , _svbgbdfCallback = Nothing
+    }
+
+-- | V1 error format.
+svbgbdfXgafv :: Lens' SpreadsheetsValuesBatchGetByDataFilter (Maybe Xgafv)
+svbgbdfXgafv
+  = lens _svbgbdfXgafv (\ s a -> s{_svbgbdfXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+svbgbdfUploadProtocol :: Lens' SpreadsheetsValuesBatchGetByDataFilter (Maybe Text)
+svbgbdfUploadProtocol
+  = lens _svbgbdfUploadProtocol
+      (\ s a -> s{_svbgbdfUploadProtocol = a})
+
+-- | OAuth access token.
+svbgbdfAccessToken :: Lens' SpreadsheetsValuesBatchGetByDataFilter (Maybe Text)
+svbgbdfAccessToken
+  = lens _svbgbdfAccessToken
+      (\ s a -> s{_svbgbdfAccessToken = a})
+
+-- | The ID of the spreadsheet to retrieve data from.
+svbgbdfSpreadsheetId :: Lens' SpreadsheetsValuesBatchGetByDataFilter Text
+svbgbdfSpreadsheetId
+  = lens _svbgbdfSpreadsheetId
+      (\ s a -> s{_svbgbdfSpreadsheetId = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+svbgbdfUploadType :: Lens' SpreadsheetsValuesBatchGetByDataFilter (Maybe Text)
+svbgbdfUploadType
+  = lens _svbgbdfUploadType
+      (\ s a -> s{_svbgbdfUploadType = a})
+
+-- | Multipart request metadata.
+svbgbdfPayload :: Lens' SpreadsheetsValuesBatchGetByDataFilter BatchGetValuesByDataFilterRequest
+svbgbdfPayload
+  = lens _svbgbdfPayload
+      (\ s a -> s{_svbgbdfPayload = a})
+
+-- | JSONP
+svbgbdfCallback :: Lens' SpreadsheetsValuesBatchGetByDataFilter (Maybe Text)
+svbgbdfCallback
+  = lens _svbgbdfCallback
+      (\ s a -> s{_svbgbdfCallback = a})
+
+instance GoogleRequest
+         SpreadsheetsValuesBatchGetByDataFilter where
+        type Rs SpreadsheetsValuesBatchGetByDataFilter =
+             BatchGetValuesByDataFilterResponse
+        type Scopes SpreadsheetsValuesBatchGetByDataFilter =
+             '["https://www.googleapis.com/auth/drive",
+               "https://www.googleapis.com/auth/drive.file",
+               "https://www.googleapis.com/auth/spreadsheets"]
+        requestClient
+          SpreadsheetsValuesBatchGetByDataFilter'{..}
+          = go _svbgbdfSpreadsheetId _svbgbdfXgafv
+              _svbgbdfUploadProtocol
+              _svbgbdfAccessToken
+              _svbgbdfUploadType
+              _svbgbdfCallback
+              (Just AltJSON)
+              _svbgbdfPayload
+              sheetsService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy SpreadsheetsValuesBatchGetByDataFilterResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Sheets/Spreadsheets/Values/BatchUpdate.hs b/gen/Network/Google/Resource/Sheets/Spreadsheets/Values/BatchUpdate.hs
--- a/gen/Network/Google/Resource/Sheets/Spreadsheets/Values/BatchUpdate.hs
+++ b/gen/Network/Google/Resource/Sheets/Spreadsheets/Values/BatchUpdate.hs
@@ -37,12 +37,10 @@
     -- * Request Lenses
     , svbuXgafv
     , svbuUploadProtocol
-    , svbuPp
     , svbuAccessToken
     , svbuSpreadsheetId
     , svbuUploadType
     , svbuPayload
-    , svbuBearerToken
     , svbuCallback
     ) where
 
@@ -58,14 +56,12 @@
            "values:batchUpdate" :>
              QueryParam "$.xgafv" Xgafv :>
                QueryParam "upload_protocol" Text :>
-                 QueryParam "pp" Bool :>
-                   QueryParam "access_token" Text :>
-                     QueryParam "uploadType" Text :>
-                       QueryParam "bearer_token" Text :>
-                         QueryParam "callback" Text :>
-                           QueryParam "alt" AltJSON :>
-                             ReqBody '[JSON] BatchUpdateValuesRequest :>
-                               Post '[JSON] BatchUpdateValuesResponse
+                 QueryParam "access_token" Text :>
+                   QueryParam "uploadType" Text :>
+                     QueryParam "callback" Text :>
+                       QueryParam "alt" AltJSON :>
+                         ReqBody '[JSON] BatchUpdateValuesRequest :>
+                           Post '[JSON] BatchUpdateValuesResponse
 
 -- | Sets values in one or more ranges of a spreadsheet. The caller must
 -- specify the spreadsheet ID, a valueInputOption, and one or more
@@ -75,12 +71,10 @@
 data SpreadsheetsValuesBatchUpdate = SpreadsheetsValuesBatchUpdate'
     { _svbuXgafv          :: !(Maybe Xgafv)
     , _svbuUploadProtocol :: !(Maybe Text)
-    , _svbuPp             :: !Bool
     , _svbuAccessToken    :: !(Maybe Text)
     , _svbuSpreadsheetId  :: !Text
     , _svbuUploadType     :: !(Maybe Text)
     , _svbuPayload        :: !BatchUpdateValuesRequest
-    , _svbuBearerToken    :: !(Maybe Text)
     , _svbuCallback       :: !(Maybe Text)
     } deriving (Eq,Show,Data,Typeable,Generic)
 
@@ -92,8 +86,6 @@
 --
 -- * 'svbuUploadProtocol'
 --
--- * 'svbuPp'
---
 -- * 'svbuAccessToken'
 --
 -- * 'svbuSpreadsheetId'
@@ -102,8 +94,6 @@
 --
 -- * 'svbuPayload'
 --
--- * 'svbuBearerToken'
---
 -- * 'svbuCallback'
 spreadsheetsValuesBatchUpdate
     :: Text -- ^ 'svbuSpreadsheetId'
@@ -113,12 +103,10 @@
     SpreadsheetsValuesBatchUpdate'
     { _svbuXgafv = Nothing
     , _svbuUploadProtocol = Nothing
-    , _svbuPp = True
     , _svbuAccessToken = Nothing
     , _svbuSpreadsheetId = pSvbuSpreadsheetId_
     , _svbuUploadType = Nothing
     , _svbuPayload = pSvbuPayload_
-    , _svbuBearerToken = Nothing
     , _svbuCallback = Nothing
     }
 
@@ -133,10 +121,6 @@
   = lens _svbuUploadProtocol
       (\ s a -> s{_svbuUploadProtocol = a})
 
--- | Pretty-print response.
-svbuPp :: Lens' SpreadsheetsValuesBatchUpdate Bool
-svbuPp = lens _svbuPp (\ s a -> s{_svbuPp = a})
-
 -- | OAuth access token.
 svbuAccessToken :: Lens' SpreadsheetsValuesBatchUpdate (Maybe Text)
 svbuAccessToken
@@ -160,12 +144,6 @@
 svbuPayload
   = lens _svbuPayload (\ s a -> s{_svbuPayload = a})
 
--- | OAuth bearer token.
-svbuBearerToken :: Lens' SpreadsheetsValuesBatchUpdate (Maybe Text)
-svbuBearerToken
-  = lens _svbuBearerToken
-      (\ s a -> s{_svbuBearerToken = a})
-
 -- | JSONP
 svbuCallback :: Lens' SpreadsheetsValuesBatchUpdate (Maybe Text)
 svbuCallback
@@ -177,14 +155,13 @@
              BatchUpdateValuesResponse
         type Scopes SpreadsheetsValuesBatchUpdate =
              '["https://www.googleapis.com/auth/drive",
+               "https://www.googleapis.com/auth/drive.file",
                "https://www.googleapis.com/auth/spreadsheets"]
         requestClient SpreadsheetsValuesBatchUpdate'{..}
           = go _svbuSpreadsheetId _svbuXgafv
               _svbuUploadProtocol
-              (Just _svbuPp)
               _svbuAccessToken
               _svbuUploadType
-              _svbuBearerToken
               _svbuCallback
               (Just AltJSON)
               _svbuPayload
diff --git a/gen/Network/Google/Resource/Sheets/Spreadsheets/Values/BatchUpdateByDataFilter.hs b/gen/Network/Google/Resource/Sheets/Spreadsheets/Values/BatchUpdateByDataFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Sheets/Spreadsheets/Values/BatchUpdateByDataFilter.hs
@@ -0,0 +1,179 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Sheets.Spreadsheets.Values.BatchUpdateByDataFilter
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Sets values in one or more ranges of a spreadsheet. The caller must
+-- specify the spreadsheet ID, a valueInputOption, and one or more
+-- DataFilterValueRanges.
+--
+-- /See:/ <https://developers.google.com/sheets/ Google Sheets API Reference> for @sheets.spreadsheets.values.batchUpdateByDataFilter@.
+module Network.Google.Resource.Sheets.Spreadsheets.Values.BatchUpdateByDataFilter
+    (
+    -- * REST Resource
+      SpreadsheetsValuesBatchUpdateByDataFilterResource
+
+    -- * Creating a Request
+    , spreadsheetsValuesBatchUpdateByDataFilter
+    , SpreadsheetsValuesBatchUpdateByDataFilter
+
+    -- * Request Lenses
+    , svbubdfXgafv
+    , svbubdfUploadProtocol
+    , svbubdfAccessToken
+    , svbubdfSpreadsheetId
+    , svbubdfUploadType
+    , svbubdfPayload
+    , svbubdfCallback
+    ) where
+
+import           Network.Google.Prelude
+import           Network.Google.Sheets.Types
+
+-- | A resource alias for @sheets.spreadsheets.values.batchUpdateByDataFilter@ method which the
+-- 'SpreadsheetsValuesBatchUpdateByDataFilter' request conforms to.
+type SpreadsheetsValuesBatchUpdateByDataFilterResource
+     =
+     "v4" :>
+       "spreadsheets" :>
+         Capture "spreadsheetId" Text :>
+           "values:batchUpdateByDataFilter" :>
+             QueryParam "$.xgafv" Xgafv :>
+               QueryParam "upload_protocol" Text :>
+                 QueryParam "access_token" Text :>
+                   QueryParam "uploadType" Text :>
+                     QueryParam "callback" Text :>
+                       QueryParam "alt" AltJSON :>
+                         ReqBody '[JSON] BatchUpdateValuesByDataFilterRequest
+                           :> Post '[JSON] BatchUpdateValuesByDataFilterResponse
+
+-- | Sets values in one or more ranges of a spreadsheet. The caller must
+-- specify the spreadsheet ID, a valueInputOption, and one or more
+-- DataFilterValueRanges.
+--
+-- /See:/ 'spreadsheetsValuesBatchUpdateByDataFilter' smart constructor.
+data SpreadsheetsValuesBatchUpdateByDataFilter = SpreadsheetsValuesBatchUpdateByDataFilter'
+    { _svbubdfXgafv          :: !(Maybe Xgafv)
+    , _svbubdfUploadProtocol :: !(Maybe Text)
+    , _svbubdfAccessToken    :: !(Maybe Text)
+    , _svbubdfSpreadsheetId  :: !Text
+    , _svbubdfUploadType     :: !(Maybe Text)
+    , _svbubdfPayload        :: !BatchUpdateValuesByDataFilterRequest
+    , _svbubdfCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SpreadsheetsValuesBatchUpdateByDataFilter' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'svbubdfXgafv'
+--
+-- * 'svbubdfUploadProtocol'
+--
+-- * 'svbubdfAccessToken'
+--
+-- * 'svbubdfSpreadsheetId'
+--
+-- * 'svbubdfUploadType'
+--
+-- * 'svbubdfPayload'
+--
+-- * 'svbubdfCallback'
+spreadsheetsValuesBatchUpdateByDataFilter
+    :: Text -- ^ 'svbubdfSpreadsheetId'
+    -> BatchUpdateValuesByDataFilterRequest -- ^ 'svbubdfPayload'
+    -> SpreadsheetsValuesBatchUpdateByDataFilter
+spreadsheetsValuesBatchUpdateByDataFilter pSvbubdfSpreadsheetId_ pSvbubdfPayload_ =
+    SpreadsheetsValuesBatchUpdateByDataFilter'
+    { _svbubdfXgafv = Nothing
+    , _svbubdfUploadProtocol = Nothing
+    , _svbubdfAccessToken = Nothing
+    , _svbubdfSpreadsheetId = pSvbubdfSpreadsheetId_
+    , _svbubdfUploadType = Nothing
+    , _svbubdfPayload = pSvbubdfPayload_
+    , _svbubdfCallback = Nothing
+    }
+
+-- | V1 error format.
+svbubdfXgafv :: Lens' SpreadsheetsValuesBatchUpdateByDataFilter (Maybe Xgafv)
+svbubdfXgafv
+  = lens _svbubdfXgafv (\ s a -> s{_svbubdfXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+svbubdfUploadProtocol :: Lens' SpreadsheetsValuesBatchUpdateByDataFilter (Maybe Text)
+svbubdfUploadProtocol
+  = lens _svbubdfUploadProtocol
+      (\ s a -> s{_svbubdfUploadProtocol = a})
+
+-- | OAuth access token.
+svbubdfAccessToken :: Lens' SpreadsheetsValuesBatchUpdateByDataFilter (Maybe Text)
+svbubdfAccessToken
+  = lens _svbubdfAccessToken
+      (\ s a -> s{_svbubdfAccessToken = a})
+
+-- | The ID of the spreadsheet to update.
+svbubdfSpreadsheetId :: Lens' SpreadsheetsValuesBatchUpdateByDataFilter Text
+svbubdfSpreadsheetId
+  = lens _svbubdfSpreadsheetId
+      (\ s a -> s{_svbubdfSpreadsheetId = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+svbubdfUploadType :: Lens' SpreadsheetsValuesBatchUpdateByDataFilter (Maybe Text)
+svbubdfUploadType
+  = lens _svbubdfUploadType
+      (\ s a -> s{_svbubdfUploadType = a})
+
+-- | Multipart request metadata.
+svbubdfPayload :: Lens' SpreadsheetsValuesBatchUpdateByDataFilter BatchUpdateValuesByDataFilterRequest
+svbubdfPayload
+  = lens _svbubdfPayload
+      (\ s a -> s{_svbubdfPayload = a})
+
+-- | JSONP
+svbubdfCallback :: Lens' SpreadsheetsValuesBatchUpdateByDataFilter (Maybe Text)
+svbubdfCallback
+  = lens _svbubdfCallback
+      (\ s a -> s{_svbubdfCallback = a})
+
+instance GoogleRequest
+         SpreadsheetsValuesBatchUpdateByDataFilter where
+        type Rs SpreadsheetsValuesBatchUpdateByDataFilter =
+             BatchUpdateValuesByDataFilterResponse
+        type Scopes SpreadsheetsValuesBatchUpdateByDataFilter
+             =
+             '["https://www.googleapis.com/auth/drive",
+               "https://www.googleapis.com/auth/drive.file",
+               "https://www.googleapis.com/auth/spreadsheets"]
+        requestClient
+          SpreadsheetsValuesBatchUpdateByDataFilter'{..}
+          = go _svbubdfSpreadsheetId _svbubdfXgafv
+              _svbubdfUploadProtocol
+              _svbubdfAccessToken
+              _svbubdfUploadType
+              _svbubdfCallback
+              (Just AltJSON)
+              _svbubdfPayload
+              sheetsService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy
+                           SpreadsheetsValuesBatchUpdateByDataFilterResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Sheets/Spreadsheets/Values/Clear.hs b/gen/Network/Google/Resource/Sheets/Spreadsheets/Values/Clear.hs
--- a/gen/Network/Google/Resource/Sheets/Spreadsheets/Values/Clear.hs
+++ b/gen/Network/Google/Resource/Sheets/Spreadsheets/Values/Clear.hs
@@ -38,12 +38,10 @@
     -- * Request Lenses
     , svcXgafv
     , svcUploadProtocol
-    , svcPp
     , svcAccessToken
     , svcSpreadsheetId
     , svcUploadType
     , svcPayload
-    , svcBearerToken
     , svcRange
     , svcCallback
     ) where
@@ -61,14 +59,12 @@
              CaptureMode "range" "clear" Text :>
                QueryParam "$.xgafv" Xgafv :>
                  QueryParam "upload_protocol" Text :>
-                   QueryParam "pp" Bool :>
-                     QueryParam "access_token" Text :>
-                       QueryParam "uploadType" Text :>
-                         QueryParam "bearer_token" Text :>
-                           QueryParam "callback" Text :>
-                             QueryParam "alt" AltJSON :>
-                               ReqBody '[JSON] ClearValuesRequest :>
-                                 Post '[JSON] ClearValuesResponse
+                   QueryParam "access_token" Text :>
+                     QueryParam "uploadType" Text :>
+                       QueryParam "callback" Text :>
+                         QueryParam "alt" AltJSON :>
+                           ReqBody '[JSON] ClearValuesRequest :>
+                             Post '[JSON] ClearValuesResponse
 
 -- | Clears values from a spreadsheet. The caller must specify the
 -- spreadsheet ID and range. Only values are cleared -- all other
@@ -79,12 +75,10 @@
 data SpreadsheetsValuesClear = SpreadsheetsValuesClear'
     { _svcXgafv          :: !(Maybe Xgafv)
     , _svcUploadProtocol :: !(Maybe Text)
-    , _svcPp             :: !Bool
     , _svcAccessToken    :: !(Maybe Text)
     , _svcSpreadsheetId  :: !Text
     , _svcUploadType     :: !(Maybe Text)
     , _svcPayload        :: !ClearValuesRequest
-    , _svcBearerToken    :: !(Maybe Text)
     , _svcRange          :: !Text
     , _svcCallback       :: !(Maybe Text)
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -97,8 +91,6 @@
 --
 -- * 'svcUploadProtocol'
 --
--- * 'svcPp'
---
 -- * 'svcAccessToken'
 --
 -- * 'svcSpreadsheetId'
@@ -107,8 +99,6 @@
 --
 -- * 'svcPayload'
 --
--- * 'svcBearerToken'
---
 -- * 'svcRange'
 --
 -- * 'svcCallback'
@@ -121,12 +111,10 @@
     SpreadsheetsValuesClear'
     { _svcXgafv = Nothing
     , _svcUploadProtocol = Nothing
-    , _svcPp = True
     , _svcAccessToken = Nothing
     , _svcSpreadsheetId = pSvcSpreadsheetId_
     , _svcUploadType = Nothing
     , _svcPayload = pSvcPayload_
-    , _svcBearerToken = Nothing
     , _svcRange = pSvcRange_
     , _svcCallback = Nothing
     }
@@ -141,10 +129,6 @@
   = lens _svcUploadProtocol
       (\ s a -> s{_svcUploadProtocol = a})
 
--- | Pretty-print response.
-svcPp :: Lens' SpreadsheetsValuesClear Bool
-svcPp = lens _svcPp (\ s a -> s{_svcPp = a})
-
 -- | OAuth access token.
 svcAccessToken :: Lens' SpreadsheetsValuesClear (Maybe Text)
 svcAccessToken
@@ -168,12 +152,6 @@
 svcPayload
   = lens _svcPayload (\ s a -> s{_svcPayload = a})
 
--- | OAuth bearer token.
-svcBearerToken :: Lens' SpreadsheetsValuesClear (Maybe Text)
-svcBearerToken
-  = lens _svcBearerToken
-      (\ s a -> s{_svcBearerToken = a})
-
 -- | The A1 notation of the values to clear.
 svcRange :: Lens' SpreadsheetsValuesClear Text
 svcRange = lens _svcRange (\ s a -> s{_svcRange = a})
@@ -187,14 +165,13 @@
         type Rs SpreadsheetsValuesClear = ClearValuesResponse
         type Scopes SpreadsheetsValuesClear =
              '["https://www.googleapis.com/auth/drive",
+               "https://www.googleapis.com/auth/drive.file",
                "https://www.googleapis.com/auth/spreadsheets"]
         requestClient SpreadsheetsValuesClear'{..}
           = go _svcSpreadsheetId _svcRange _svcXgafv
               _svcUploadProtocol
-              (Just _svcPp)
               _svcAccessToken
               _svcUploadType
-              _svcBearerToken
               _svcCallback
               (Just AltJSON)
               _svcPayload
diff --git a/gen/Network/Google/Resource/Sheets/Spreadsheets/Values/Get.hs b/gen/Network/Google/Resource/Sheets/Spreadsheets/Values/Get.hs
--- a/gen/Network/Google/Resource/Sheets/Spreadsheets/Values/Get.hs
+++ b/gen/Network/Google/Resource/Sheets/Spreadsheets/Values/Get.hs
@@ -37,11 +37,9 @@
     , svgXgafv
     , svgValueRenderOption
     , svgUploadProtocol
-    , svgPp
     , svgAccessToken
     , svgSpreadsheetId
     , svgUploadType
-    , svgBearerToken
     , svgRange
     , svgDateTimeRenderOption
     , svgMajorDimension
@@ -62,15 +60,13 @@
                QueryParam "$.xgafv" Xgafv :>
                  QueryParam "valueRenderOption" Text :>
                    QueryParam "upload_protocol" Text :>
-                     QueryParam "pp" Bool :>
-                       QueryParam "access_token" Text :>
-                         QueryParam "uploadType" Text :>
-                           QueryParam "bearer_token" Text :>
-                             QueryParam "dateTimeRenderOption" Text :>
-                               QueryParam "majorDimension" Text :>
-                                 QueryParam "callback" Text :>
-                                   QueryParam "alt" AltJSON :>
-                                     Get '[JSON] ValueRange
+                     QueryParam "access_token" Text :>
+                       QueryParam "uploadType" Text :>
+                         QueryParam "dateTimeRenderOption" Text :>
+                           QueryParam "majorDimension" Text :>
+                             QueryParam "callback" Text :>
+                               QueryParam "alt" AltJSON :>
+                                 Get '[JSON] ValueRange
 
 -- | Returns a range of values from a spreadsheet. The caller must specify
 -- the spreadsheet ID and a range.
@@ -80,11 +76,9 @@
     { _svgXgafv                :: !(Maybe Xgafv)
     , _svgValueRenderOption    :: !(Maybe Text)
     , _svgUploadProtocol       :: !(Maybe Text)
-    , _svgPp                   :: !Bool
     , _svgAccessToken          :: !(Maybe Text)
     , _svgSpreadsheetId        :: !Text
     , _svgUploadType           :: !(Maybe Text)
-    , _svgBearerToken          :: !(Maybe Text)
     , _svgRange                :: !Text
     , _svgDateTimeRenderOption :: !(Maybe Text)
     , _svgMajorDimension       :: !(Maybe Text)
@@ -101,16 +95,12 @@
 --
 -- * 'svgUploadProtocol'
 --
--- * 'svgPp'
---
 -- * 'svgAccessToken'
 --
 -- * 'svgSpreadsheetId'
 --
 -- * 'svgUploadType'
 --
--- * 'svgBearerToken'
---
 -- * 'svgRange'
 --
 -- * 'svgDateTimeRenderOption'
@@ -127,11 +117,9 @@
     { _svgXgafv = Nothing
     , _svgValueRenderOption = Nothing
     , _svgUploadProtocol = Nothing
-    , _svgPp = True
     , _svgAccessToken = Nothing
     , _svgSpreadsheetId = pSvgSpreadsheetId_
     , _svgUploadType = Nothing
-    , _svgBearerToken = Nothing
     , _svgRange = pSvgRange_
     , _svgDateTimeRenderOption = Nothing
     , _svgMajorDimension = Nothing
@@ -155,10 +143,6 @@
   = lens _svgUploadProtocol
       (\ s a -> s{_svgUploadProtocol = a})
 
--- | Pretty-print response.
-svgPp :: Lens' SpreadsheetsValuesGet Bool
-svgPp = lens _svgPp (\ s a -> s{_svgPp = a})
-
 -- | OAuth access token.
 svgAccessToken :: Lens' SpreadsheetsValuesGet (Maybe Text)
 svgAccessToken
@@ -177,12 +161,6 @@
   = lens _svgUploadType
       (\ s a -> s{_svgUploadType = a})
 
--- | OAuth bearer token.
-svgBearerToken :: Lens' SpreadsheetsValuesGet (Maybe Text)
-svgBearerToken
-  = lens _svgBearerToken
-      (\ s a -> s{_svgBearerToken = a})
-
 -- | The A1 notation of the values to retrieve.
 svgRange :: Lens' SpreadsheetsValuesGet Text
 svgRange = lens _svgRange (\ s a -> s{_svgRange = a})
@@ -214,6 +192,7 @@
         type Rs SpreadsheetsValuesGet = ValueRange
         type Scopes SpreadsheetsValuesGet =
              '["https://www.googleapis.com/auth/drive",
+               "https://www.googleapis.com/auth/drive.file",
                "https://www.googleapis.com/auth/drive.readonly",
                "https://www.googleapis.com/auth/spreadsheets",
                "https://www.googleapis.com/auth/spreadsheets.readonly"]
@@ -221,10 +200,8 @@
           = go _svgSpreadsheetId _svgRange _svgXgafv
               _svgValueRenderOption
               _svgUploadProtocol
-              (Just _svgPp)
               _svgAccessToken
               _svgUploadType
-              _svgBearerToken
               _svgDateTimeRenderOption
               _svgMajorDimension
               _svgCallback
diff --git a/gen/Network/Google/Resource/Sheets/Spreadsheets/Values/Update.hs b/gen/Network/Google/Resource/Sheets/Spreadsheets/Values/Update.hs
--- a/gen/Network/Google/Resource/Sheets/Spreadsheets/Values/Update.hs
+++ b/gen/Network/Google/Resource/Sheets/Spreadsheets/Values/Update.hs
@@ -36,13 +36,11 @@
     -- * Request Lenses
     , svuXgafv
     , svuUploadProtocol
-    , svuPp
     , svuAccessToken
     , svuSpreadsheetId
     , svuUploadType
     , svuValueInputOption
     , svuPayload
-    , svuBearerToken
     , svuRange
     , svuIncludeValuesInResponse
     , svuResponseDateTimeRenderOption
@@ -63,19 +61,16 @@
              Capture "range" Text :>
                QueryParam "$.xgafv" Xgafv :>
                  QueryParam "upload_protocol" Text :>
-                   QueryParam "pp" Bool :>
-                     QueryParam "access_token" Text :>
-                       QueryParam "uploadType" Text :>
-                         QueryParam "valueInputOption" Text :>
-                           QueryParam "bearer_token" Text :>
-                             QueryParam "includeValuesInResponse" Bool :>
-                               QueryParam "responseDateTimeRenderOption" Text :>
-                                 QueryParam "callback" Text :>
-                                   QueryParam "responseValueRenderOption" Text
-                                     :>
-                                     QueryParam "alt" AltJSON :>
-                                       ReqBody '[JSON] ValueRange :>
-                                         Put '[JSON] UpdateValuesResponse
+                   QueryParam "access_token" Text :>
+                     QueryParam "uploadType" Text :>
+                       QueryParam "valueInputOption" Text :>
+                         QueryParam "includeValuesInResponse" Bool :>
+                           QueryParam "responseDateTimeRenderOption" Text :>
+                             QueryParam "callback" Text :>
+                               QueryParam "responseValueRenderOption" Text :>
+                                 QueryParam "alt" AltJSON :>
+                                   ReqBody '[JSON] ValueRange :>
+                                     Put '[JSON] UpdateValuesResponse
 
 -- | Sets values in a range of a spreadsheet. The caller must specify the
 -- spreadsheet ID, range, and a valueInputOption.
@@ -84,13 +79,11 @@
 data SpreadsheetsValuesUpdate = SpreadsheetsValuesUpdate'
     { _svuXgafv                        :: !(Maybe Xgafv)
     , _svuUploadProtocol               :: !(Maybe Text)
-    , _svuPp                           :: !Bool
     , _svuAccessToken                  :: !(Maybe Text)
     , _svuSpreadsheetId                :: !Text
     , _svuUploadType                   :: !(Maybe Text)
     , _svuValueInputOption             :: !(Maybe Text)
     , _svuPayload                      :: !ValueRange
-    , _svuBearerToken                  :: !(Maybe Text)
     , _svuRange                        :: !Text
     , _svuIncludeValuesInResponse      :: !(Maybe Bool)
     , _svuResponseDateTimeRenderOption :: !(Maybe Text)
@@ -106,8 +99,6 @@
 --
 -- * 'svuUploadProtocol'
 --
--- * 'svuPp'
---
 -- * 'svuAccessToken'
 --
 -- * 'svuSpreadsheetId'
@@ -118,8 +109,6 @@
 --
 -- * 'svuPayload'
 --
--- * 'svuBearerToken'
---
 -- * 'svuRange'
 --
 -- * 'svuIncludeValuesInResponse'
@@ -138,13 +127,11 @@
     SpreadsheetsValuesUpdate'
     { _svuXgafv = Nothing
     , _svuUploadProtocol = Nothing
-    , _svuPp = True
     , _svuAccessToken = Nothing
     , _svuSpreadsheetId = pSvuSpreadsheetId_
     , _svuUploadType = Nothing
     , _svuValueInputOption = Nothing
     , _svuPayload = pSvuPayload_
-    , _svuBearerToken = Nothing
     , _svuRange = pSvuRange_
     , _svuIncludeValuesInResponse = Nothing
     , _svuResponseDateTimeRenderOption = Nothing
@@ -162,10 +149,6 @@
   = lens _svuUploadProtocol
       (\ s a -> s{_svuUploadProtocol = a})
 
--- | Pretty-print response.
-svuPp :: Lens' SpreadsheetsValuesUpdate Bool
-svuPp = lens _svuPp (\ s a -> s{_svuPp = a})
-
 -- | OAuth access token.
 svuAccessToken :: Lens' SpreadsheetsValuesUpdate (Maybe Text)
 svuAccessToken
@@ -195,12 +178,6 @@
 svuPayload
   = lens _svuPayload (\ s a -> s{_svuPayload = a})
 
--- | OAuth bearer token.
-svuBearerToken :: Lens' SpreadsheetsValuesUpdate (Maybe Text)
-svuBearerToken
-  = lens _svuBearerToken
-      (\ s a -> s{_svuBearerToken = a})
-
 -- | The A1 notation of the values to update.
 svuRange :: Lens' SpreadsheetsValuesUpdate Text
 svuRange = lens _svuRange (\ s a -> s{_svuRange = a})
@@ -218,7 +195,7 @@
 -- | Determines how dates, times, and durations in the response should be
 -- rendered. This is ignored if response_value_render_option is
 -- FORMATTED_VALUE. The default dateTime render option is
--- [DateTimeRenderOption.SERIAL_NUMBER].
+-- DateTimeRenderOption.SERIAL_NUMBER.
 svuResponseDateTimeRenderOption :: Lens' SpreadsheetsValuesUpdate (Maybe Text)
 svuResponseDateTimeRenderOption
   = lens _svuResponseDateTimeRenderOption
@@ -241,15 +218,14 @@
              UpdateValuesResponse
         type Scopes SpreadsheetsValuesUpdate =
              '["https://www.googleapis.com/auth/drive",
+               "https://www.googleapis.com/auth/drive.file",
                "https://www.googleapis.com/auth/spreadsheets"]
         requestClient SpreadsheetsValuesUpdate'{..}
           = go _svuSpreadsheetId _svuRange _svuXgafv
               _svuUploadProtocol
-              (Just _svuPp)
               _svuAccessToken
               _svuUploadType
               _svuValueInputOption
-              _svuBearerToken
               _svuIncludeValuesInResponse
               _svuResponseDateTimeRenderOption
               _svuCallback
diff --git a/gen/Network/Google/Sheets.hs b/gen/Network/Google/Sheets.hs
--- a/gen/Network/Google/Sheets.hs
+++ b/gen/Network/Google/Sheets.hs
@@ -25,6 +25,7 @@
     , spreadsheetsReadOnlyScope
     , driveReadOnlyScope
     , driveScope
+    , driveFileScope
     , spreadsheetsScope
 
     -- * API Declaration
@@ -38,9 +39,18 @@
     -- ** sheets.spreadsheets.create
     , module Network.Google.Resource.Sheets.Spreadsheets.Create
 
+    -- ** sheets.spreadsheets.developerMetadata.get
+    , module Network.Google.Resource.Sheets.Spreadsheets.DeveloperMetadata.Get
+
+    -- ** sheets.spreadsheets.developerMetadata.search
+    , module Network.Google.Resource.Sheets.Spreadsheets.DeveloperMetadata.Search
+
     -- ** sheets.spreadsheets.get
     , module Network.Google.Resource.Sheets.Spreadsheets.Get
 
+    -- ** sheets.spreadsheets.getByDataFilter
+    , module Network.Google.Resource.Sheets.Spreadsheets.GetByDataFilter
+
     -- ** sheets.spreadsheets.sheets.copyTo
     , module Network.Google.Resource.Sheets.Spreadsheets.Sheets.CopyTo
 
@@ -50,12 +60,21 @@
     -- ** sheets.spreadsheets.values.batchClear
     , module Network.Google.Resource.Sheets.Spreadsheets.Values.BatchClear
 
+    -- ** sheets.spreadsheets.values.batchClearByDataFilter
+    , module Network.Google.Resource.Sheets.Spreadsheets.Values.BatchClearByDataFilter
+
     -- ** sheets.spreadsheets.values.batchGet
     , module Network.Google.Resource.Sheets.Spreadsheets.Values.BatchGet
 
+    -- ** sheets.spreadsheets.values.batchGetByDataFilter
+    , module Network.Google.Resource.Sheets.Spreadsheets.Values.BatchGetByDataFilter
+
     -- ** sheets.spreadsheets.values.batchUpdate
     , module Network.Google.Resource.Sheets.Spreadsheets.Values.BatchUpdate
 
+    -- ** sheets.spreadsheets.values.batchUpdateByDataFilter
+    , module Network.Google.Resource.Sheets.Spreadsheets.Values.BatchUpdateByDataFilter
+
     -- ** sheets.spreadsheets.values.clear
     , module Network.Google.Resource.Sheets.Spreadsheets.Values.Clear
 
@@ -67,6 +86,9 @@
 
     -- * Types
 
+    -- ** BasicChartSpecStackedType
+    , BasicChartSpecStackedType (..)
+
     -- ** PivotGroupSortValueBucket
     , PivotGroupSortValueBucket
     , pivotGroupSortValueBucket
@@ -89,6 +111,12 @@
     -- ** CopyPasteRequestPasteType
     , CopyPasteRequestPasteType (..)
 
+    -- ** DeveloperMetadataLookupLocationMatchingStrategy
+    , DeveloperMetadataLookupLocationMatchingStrategy (..)
+
+    -- ** BatchUpdateValuesByDataFilterRequestResponseDateTimeRenderOption
+    , BatchUpdateValuesByDataFilterRequestResponseDateTimeRenderOption (..)
+
     -- ** DeleteNamedRangeRequest
     , DeleteNamedRangeRequest
     , deleteNamedRangeRequest
@@ -113,17 +141,31 @@
     , batchClearValuesRequest
     , bcvrRanges
 
+    -- ** CreateDeveloperMetadataResponse
+    , CreateDeveloperMetadataResponse
+    , createDeveloperMetadataResponse
+    , cdmrDeveloperMetadata
+
+    -- ** DateTimeRule
+    , DateTimeRule
+    , dateTimeRule
+    , dtrType
+
     -- ** DeleteRangeRequestShiftDimension
     , DeleteRangeRequestShiftDimension (..)
 
     -- ** BasicChartSeriesTargetAxis
     , BasicChartSeriesTargetAxis (..)
 
+    -- ** DataFilterValueRangeMajorDimension
+    , DataFilterValueRangeMajorDimension (..)
+
     -- ** SpreadsheetProperties
     , SpreadsheetProperties
     , spreadsheetProperties
     , spDefaultFormat
     , spLocale
+    , spIterativeCalculationSettings
     , spAutoRecalc
     , spTitle
     , spTimeZone
@@ -136,12 +178,31 @@
     , boRight
     , boTop
 
+    -- ** BatchClearValuesByDataFilterRequest
+    , BatchClearValuesByDataFilterRequest
+    , batchClearValuesByDataFilterRequest
+    , bcvbdfrDataFilters
+
     -- ** TextFormatRun
     , TextFormatRun
     , textFormatRun
     , tfrFormat
     , tfrStartIndex
 
+    -- ** DeleteDimensionGroupRequest
+    , DeleteDimensionGroupRequest
+    , deleteDimensionGroupRequest
+    , ddgrRange
+
+    -- ** UpdateDimensionGroupRequest
+    , UpdateDimensionGroupRequest
+    , updateDimensionGroupRequest
+    , udgrDimensionGroup
+    , udgrFields
+
+    -- ** BubbleChartSpecLegendPosition
+    , BubbleChartSpecLegendPosition (..)
+
     -- ** AddSheetRequest
     , AddSheetRequest
     , addSheetRequest
@@ -153,6 +214,13 @@
     , ssSortOrder
     , ssDimensionIndex
 
+    -- ** DimensionGroup
+    , DimensionGroup
+    , dimensionGroup
+    , dgCollapsed
+    , dgRange
+    , dgDepth
+
     -- ** BatchUpdateValuesRequestResponseDateTimeRenderOption
     , BatchUpdateValuesRequestResponseDateTimeRenderOption (..)
 
@@ -195,6 +263,21 @@
     , autoResizeDimensionsRequest
     , ardrDimensions
 
+    -- ** BubbleChartSpec
+    , BubbleChartSpec
+    , bubbleChartSpec
+    , bcsBubbleTextStyle
+    , bcsBubbleBOrderColor
+    , bcsLegendPosition
+    , bcsDomain
+    , bcsSeries
+    , bcsBubbleLabels
+    , bcsGroupIds
+    , bcsBubbleMinRadiusSize
+    , bcsBubbleMaxRadiusSize
+    , bcsBubbleOpacity
+    , bcsBubbleSizes
+
     -- ** DeleteRangeRequest
     , DeleteRangeRequest
     , deleteRangeRequest
@@ -204,12 +287,15 @@
     -- ** Sheet
     , Sheet
     , sheet
+    , sColumnGroups
     , sData
     , sMerges
+    , sRowGroups
     , sProtectedRanges
     , sBandedRanges
     , sCharts
     , sBasicFilter
+    , sDeveloperMetadata
     , sConditionalFormats
     , sFilterViews
     , sProperties
@@ -232,6 +318,9 @@
     , clearBasicFilterRequest
     , cbfrSheetId
 
+    -- ** BatchGetValuesByDataFilterRequestValueRenderOption
+    , BatchGetValuesByDataFilterRequestValueRenderOption (..)
+
     -- ** UpdateEmbeddedObjectPositionRequest
     , UpdateEmbeddedObjectPositionRequest
     , updateEmbeddedObjectPositionRequest
@@ -251,6 +340,12 @@
     -- ** CellFormatWrapStrategy
     , CellFormatWrapStrategy (..)
 
+    -- ** BatchGetValuesByDataFilterResponse
+    , BatchGetValuesByDataFilterResponse
+    , batchGetValuesByDataFilterResponse
+    , bgvbdfrSpreadsheetId
+    , bgvbdfrValueRanges
+
     -- ** SourceAndDestination
     , SourceAndDestination
     , sourceAndDestination
@@ -286,6 +381,11 @@
     , frrSheetsChanged
     , frrOccurrencesChanged
 
+    -- ** AddDimensionGroupResponse
+    , AddDimensionGroupResponse
+    , addDimensionGroupResponse
+    , adgrDimensionGroups
+
     -- ** PieChartSpec
     , PieChartSpec
     , pieChartSpec
@@ -295,6 +395,19 @@
     , pcsSeries
     , pcsThreeDimensional
 
+    -- ** BatchUpdateValuesByDataFilterResponse
+    , BatchUpdateValuesByDataFilterResponse
+    , batchUpdateValuesByDataFilterResponse
+    , buvbdfrTotalUpdatedColumns
+    , buvbdfrResponses
+    , buvbdfrSpreadsheetId
+    , buvbdfrTotalUpdatedSheets
+    , buvbdfrTotalUpdatedCells
+    , buvbdfrTotalUpdatedRows
+
+    -- ** TextPositionHorizontalAlignment
+    , TextPositionHorizontalAlignment (..)
+
     -- ** AppendValuesResponse
     , AppendValuesResponse
     , appendValuesResponse
@@ -302,6 +415,9 @@
     , avrUpdates
     , avrTableRange
 
+    -- ** DeveloperMetadataVisibility
+    , DeveloperMetadataVisibility (..)
+
     -- ** BatchUpdateValuesRequestResponseValueRenderOption
     , BatchUpdateValuesRequestResponseValueRenderOption (..)
 
@@ -345,10 +461,19 @@
     -- ** BasicChartSeries
     , BasicChartSeries
     , basicChartSeries
-    , bcsTargetAxis
-    , bcsSeries
-    , bcsType
+    , bTargetAxis
+    , bColor
+    , bSeries
+    , bType
+    , bLineStyle
 
+    -- ** PivotGroupRule
+    , PivotGroupRule
+    , pivotGroupRule
+    , pgrDateTimeRule
+    , pgrManualRule
+    , pgrHistogramRule
+
     -- ** AddProtectedRangeRequest
     , AddProtectedRangeRequest
     , addProtectedRangeRequest
@@ -398,6 +523,14 @@
     , mdrDestinationIndex
     , mdrSource
 
+    -- ** BatchGetValuesByDataFilterRequest
+    , BatchGetValuesByDataFilterRequest
+    , batchGetValuesByDataFilterRequest
+    , bgvbdfrValueRenderOption
+    , bgvbdfrDataFilters
+    , bgvbdfrDateTimeRenderOption
+    , bgvbdfrMajorDimension
+
     -- ** CellFormatVerticalAlignment
     , CellFormatVerticalAlignment (..)
 
@@ -426,21 +559,36 @@
     -- ** ConditionValueRelativeDate
     , ConditionValueRelativeDate (..)
 
+    -- ** WaterfallChartCustomSubtotal
+    , WaterfallChartCustomSubtotal
+    , waterfallChartCustomSubtotal
+    , wccsDataIsSubtotal
+    , wccsSubtotalIndex
+    , wccsLabel
+
+    -- ** DeveloperMetadataLocationLocationType
+    , DeveloperMetadataLocationLocationType (..)
+
     -- ** Response
     , Response
     , response
     , rAddFilterView
+    , rCreateDeveloperMetadata
     , rDuplicateFilterView
     , rUpdateEmbeddedObjectPosition
+    , rDeleteDimensionGroup
     , rAddSheet
     , rFindReplace
     , rAddProtectedRange
     , rDeleteConditionalFormatRule
     , rUpdateConditionalFormatRule
+    , rDeleteDeveloperMetadata
+    , rUpdateDeveloperMetadata
     , rAddNamedRange
     , rAddChart
     , rAddBanding
     , rDuplicateSheet
+    , rAddDimensionGroup
 
     -- ** FilterCriteria
     , FilterCriteria
@@ -468,9 +616,31 @@
     , dcfrrSheetId
     , dcfrrIndex
 
+    -- ** UpdateDeveloperMetadataRequest
+    , UpdateDeveloperMetadataRequest
+    , updateDeveloperMetadataRequest
+    , udmrDataFilters
+    , udmrDeveloperMetadata
+    , udmrFields
+
     -- ** SortSpecSortOrder
     , SortSpecSortOrder (..)
 
+    -- ** DeleteDeveloperMetadataRequest
+    , DeleteDeveloperMetadataRequest
+    , deleteDeveloperMetadataRequest
+    , ddmrDataFilter
+
+    -- ** WaterfallChartSpec
+    , WaterfallChartSpec
+    , waterfallChartSpec
+    , wcsStackedType
+    , wcsConnectorLineStyle
+    , wcsDomain
+    , wcsSeries
+    , wcsHideConnectorLines
+    , wcsFirstValueIsTotal
+
     -- ** OverlayPosition
     , OverlayPosition
     , overlayPosition
@@ -485,6 +655,14 @@
     , deleteEmbeddedObjectRequest
     , deorObjectId
 
+    -- ** DeveloperMetadataLocation
+    , DeveloperMetadataLocation
+    , developerMetadataLocation
+    , dmlSpreadsheet
+    , dmlDimensionRange
+    , dmlSheetId
+    , dmlLocationType
+
     -- ** SheetProperties
     , SheetProperties
     , sheetProperties
@@ -525,14 +703,26 @@
     , sprNamedRanges
     , sprSpreadsheetId
     , sprSpreadsheetURL
+    , sprDeveloperMetadata
     , sprProperties
 
+    -- ** CandlestickChartSpec
+    , CandlestickChartSpec
+    , candlestickChartSpec
+    , ccsData
+    , ccsDomain
+
     -- ** InsertDimensionRequest
     , InsertDimensionRequest
     , insertDimensionRequest
     , idrRange
     , idrInheritFromBefore
 
+    -- ** SearchDeveloperMetadataResponse
+    , SearchDeveloperMetadataResponse
+    , searchDeveloperMetadataResponse
+    , sdmrMatchedDeveloperMetadata
+
     -- ** PivotValueSummarizeFunction
     , PivotValueSummarizeFunction (..)
 
@@ -543,6 +733,9 @@
     , ipValue
     , ipType
 
+    -- ** OrgChartSpecNodeSize
+    , OrgChartSpecNodeSize (..)
+
     -- ** CellData
     , CellData
     , cellData
@@ -557,6 +750,9 @@
     , cdHyperlink
     , cdEffectiveValue
 
+    -- ** BatchUpdateValuesByDataFilterRequestResponseValueRenderOption
+    , BatchUpdateValuesByDataFilterRequestResponseValueRenderOption (..)
+
     -- ** ChartSourceRange
     , ChartSourceRange
     , chartSourceRange
@@ -567,6 +763,12 @@
     , addNamedRangeResponse
     , anrrNamedRange
 
+    -- ** WaterfallChartDomain
+    , WaterfallChartDomain
+    , waterfallChartDomain
+    , wcdReversed
+    , wcdData
+
     -- ** AddChartResponse
     , AddChartResponse
     , addChartResponse
@@ -583,18 +785,51 @@
     , setBasicFilterRequest
     , sbfrFilter
 
+    -- ** IterativeCalculationSettings
+    , IterativeCalculationSettings
+    , iterativeCalculationSettings
+    , icsMaxIterations
+    , icsConvergenceThreshold
+
+    -- ** UpdateValuesByDataFilterResponse
+    , UpdateValuesByDataFilterResponse
+    , updateValuesByDataFilterResponse
+    , uvbdfrUpdatedCells
+    , uvbdfrUpdatedRows
+    , uvbdfrUpdatedRange
+    , uvbdfrUpdatedData
+    , uvbdfrUpdatedColumns
+    , uvbdfrDataFilter
+
     -- ** GridProperties
     , GridProperties
     , gridProperties
     , gpFrozenColumnCount
     , gpColumnCount
+    , gpColumnGroupControlAfter
     , gpHideGridlines
     , gpFrozenRowCount
+    , gpRowGroupControlAfter
     , gpRowCount
 
+    -- ** LineStyleType
+    , LineStyleType (..)
+
+    -- ** HistogramChartSpec
+    , HistogramChartSpec
+    , histogramChartSpec
+    , hcsLegendPosition
+    , hcsSeries
+    , hcsShowItemDividers
+    , hcsOutlierPercentile
+    , hcsBucketSize
+
     -- ** CellFormatHyperlinkDisplayType
     , CellFormatHyperlinkDisplayType (..)
 
+    -- ** BatchUpdateValuesByDataFilterRequestValueInputOption
+    , BatchUpdateValuesByDataFilterRequestValueInputOption (..)
+
     -- ** BasicFilterCriteria
     , BasicFilterCriteria
     , basicFilterCriteria
@@ -624,6 +859,20 @@
     , afrUseAlternateSeries
     , afrRange
 
+    -- ** DeveloperMetadataLookup
+    , DeveloperMetadataLookup
+    , developerMetadataLookup
+    , dLocationMatchingStrategy
+    , dMetadataId
+    , dVisibility
+    , dMetadataKey
+    , dLocationType
+    , dMetadataLocation
+    , dMetadataValue
+
+    -- ** HistogramChartSpecLegendPosition
+    , HistogramChartSpecLegendPosition (..)
+
     -- ** DuplicateSheetRequest
     , DuplicateSheetRequest
     , duplicateSheetRequest
@@ -632,6 +881,12 @@
     , dsrSourceSheetId
     , dsrNewSheetId
 
+    -- ** TextRotation
+    , TextRotation
+    , textRotation
+    , trAngle
+    , trVertical
+
     -- ** DuplicateFilterViewResponse
     , DuplicateFilterViewResponse
     , duplicateFilterViewResponse
@@ -649,6 +904,13 @@
     , buvrResponseDateTimeRenderOption
     , buvrResponseValueRenderOption
 
+    -- ** DataFilterValueRange
+    , DataFilterValueRange
+    , dataFilterValueRange
+    , dfvrValues
+    , dfvrDataFilter
+    , dfvrMajorDimension
+
     -- ** AddChartRequest
     , AddChartRequest
     , addChartRequest
@@ -661,15 +923,28 @@
     , nrName
     , nrRange
 
+    -- ** DeveloperMetadataLookupLocationType
+    , DeveloperMetadataLookupLocationType (..)
+
     -- ** MergeCellsRequest
     , MergeCellsRequest
     , mergeCellsRequest
     , mcrMergeType
     , mcrRange
 
+    -- ** ManualRule
+    , ManualRule
+    , manualRule
+    , mrGroups
+
     -- ** MergeCellsRequestMergeType
     , MergeCellsRequestMergeType (..)
 
+    -- ** TextPosition
+    , TextPosition
+    , textPosition
+    , tpHorizontalAlignment
+
     -- ** CellFormatHorizontalAlignment
     , CellFormatHorizontalAlignment (..)
 
@@ -680,6 +955,16 @@
     , boColor
     , boWidth
 
+    -- ** SearchDeveloperMetadataRequest
+    , SearchDeveloperMetadataRequest
+    , searchDeveloperMetadataRequest
+    , sdmrDataFilters
+
+    -- ** CandlestickSeries
+    , CandlestickSeries
+    , candlestickSeries
+    , csData
+
     -- ** ExtendedValue
     , ExtendedValue
     , extendedValue
@@ -694,6 +979,9 @@
     , addNamedRangeRequest
     , aNamedRange
 
+    -- ** WaterfallChartSpecStackedType
+    , WaterfallChartSpecStackedType (..)
+
     -- ** PivotFilterCriteria
     , PivotFilterCriteria
     , pivotFilterCriteria
@@ -713,6 +1001,18 @@
     , uFields
     , uProperties
 
+    -- ** DateTimeRuleType
+    , DateTimeRuleType (..)
+
+    -- ** DeveloperMetadataLookupVisibility
+    , DeveloperMetadataLookupVisibility (..)
+
+    -- ** CandlestickDomain
+    , CandlestickDomain
+    , candlestickDomain
+    , cdReversed
+    , cdData
+
     -- ** AddProtectedRangeResponse
     , AddProtectedRangeResponse
     , addProtectedRangeResponse
@@ -731,8 +1031,12 @@
     , pvSourceColumnOffSet
     , pvFormula
     , pvName
+    , pvCalculatedDisplayType
     , pvSummarizeFunction
 
+    -- ** BasicChartSpecCompareMode
+    , BasicChartSpecCompareMode (..)
+
     -- ** UnmergeCellsRequest
     , UnmergeCellsRequest
     , unmergeCellsRequest
@@ -746,6 +1050,25 @@
     -- ** BooleanConditionType
     , BooleanConditionType (..)
 
+    -- ** AddDimensionGroupRequest
+    , AddDimensionGroupRequest
+    , addDimensionGroupRequest
+    , adgrRange
+
+    -- ** WaterfallChartColumnStyle
+    , WaterfallChartColumnStyle
+    , waterfallChartColumnStyle
+    , wColor
+    , wLabel
+
+    -- ** CandlestickData
+    , CandlestickData
+    , candlestickData
+    , cdLowSeries
+    , cdHighSeries
+    , cdOpenSeries
+    , cdCloseSeries
+
     -- ** BandedRange
     , BandedRange
     , bandedRange
@@ -768,6 +1091,15 @@
     -- ** ValueRangeMajorDimension
     , ValueRangeMajorDimension (..)
 
+    -- ** BatchUpdateValuesByDataFilterRequest
+    , BatchUpdateValuesByDataFilterRequest
+    , batchUpdateValuesByDataFilterRequest
+    , buvbdfrData
+    , buvbdfrValueInputOption
+    , buvbdfrIncludeValuesInResponse
+    , buvbdfrResponseDateTimeRenderOption
+    , buvbdfrResponseValueRenderOption
+
     -- ** PivotGroupSortOrder
     , PivotGroupSortOrder (..)
 
@@ -833,6 +1165,12 @@
     -- ** CopyPasteRequestPasteOrientation
     , CopyPasteRequestPasteOrientation (..)
 
+    -- ** GetSpreadsheetByDataFilterRequest
+    , GetSpreadsheetByDataFilterRequest
+    , getSpreadsheetByDataFilterRequest
+    , gsbdfrDataFilters
+    , gsbdfrIncludeGridData
+
     -- ** BatchUpdateSpreadsheetRequest
     , BatchUpdateSpreadsheetRequest
     , batchUpdateSpreadsheetRequest
@@ -854,6 +1192,11 @@
     , uvrUpdatedData
     , uvrUpdatedColumns
 
+    -- ** DeleteDimensionGroupResponse
+    , DeleteDimensionGroupResponse
+    , deleteDimensionGroupResponse
+    , ddgrDimensionGroups
+
     -- ** CopySheetToAnotherSpreadsheetRequest
     , CopySheetToAnotherSpreadsheetRequest
     , copySheetToAnotherSpreadsheetRequest
@@ -873,6 +1216,22 @@
     -- ** CellFormatTextDirection
     , CellFormatTextDirection (..)
 
+    -- ** BatchClearValuesByDataFilterResponse
+    , BatchClearValuesByDataFilterResponse
+    , batchClearValuesByDataFilterResponse
+    , bcvbdfrClearedRanges
+    , bcvbdfrSpreadsheetId
+
+    -- ** WaterfallChartSeries
+    , WaterfallChartSeries
+    , waterfallChartSeries
+    , wcsData
+    , wcsCustomSubtotals
+    , wcsNegativeColumnsStyle
+    , wcsHideTrailingSubtotal
+    , wcsSubtotalColumnsStyle
+    , wcsPositiveColumnsStyle
+
     -- ** BasicChartSeriesType
     , BasicChartSeriesType (..)
 
@@ -890,6 +1249,7 @@
     , cfBOrders
     , cfVerticalAlignment
     , cfBackgRoundColor
+    , cfTextRotation
     , cfHyperlinkDisplayType
     , cfWrapStrategy
     , cfNumberFormat
@@ -926,9 +1286,13 @@
     , prRequestingUserCanEdit
     , prDescription
 
+    -- ** PivotValueCalculatedDisplayType
+    , PivotValueCalculatedDisplayType (..)
+
     -- ** BasicChartAxis
     , BasicChartAxis
     , basicChartAxis
+    , bcaTitleTextPosition
     , bcaFormat
     , bcaTitle
     , bcaPosition
@@ -948,6 +1312,9 @@
     , nfPattern
     , nfType
 
+    -- ** BatchGetValuesByDataFilterRequestDateTimeRenderOption
+    , BatchGetValuesByDataFilterRequestDateTimeRenderOption (..)
+
     -- ** BatchUpdateSpreadsheetResponse
     , BatchUpdateSpreadsheetResponse
     , batchUpdateSpreadsheetResponse
@@ -955,6 +1322,13 @@
     , busrReplies
     , busrUpdatedSpreadsheet
 
+    -- ** DataFilter
+    , DataFilter
+    , dataFilter
+    , dfGridRange
+    , dfA1Range
+    , dfDeveloperMetadataLookup
+
     -- ** SetDataValidationRequest
     , SetDataValidationRequest
     , setDataValidationRequest
@@ -983,17 +1357,30 @@
     -- ** PivotGroup
     , PivotGroup
     , pivotGroup
+    , pgRepeatHeadings
     , pgValueMetadata
     , pgSourceColumnOffSet
     , pgSortOrder
     , pgShowTotals
     , pgValueBucket
+    , pgLabel
+    , pgGroupRule
 
     -- ** AddBandingResponse
     , AddBandingResponse
     , addBandingResponse
     , aBandedRange
 
+    -- ** OrgChartSpec
+    , OrgChartSpec
+    , orgChartSpec
+    , ocsNodeColor
+    , ocsNodeSize
+    , ocsTooltips
+    , ocsSelectedNodeColor
+    , ocsLabels
+    , ocsParentLabels
+
     -- ** CutPasteRequestPasteType
     , CutPasteRequestPasteType (..)
 
@@ -1003,6 +1390,33 @@
     -- ** ErrorValueType
     , ErrorValueType (..)
 
+    -- ** RandomizeRangeRequest
+    , RandomizeRangeRequest
+    , randomizeRangeRequest
+    , rrrRange
+
+    -- ** HistogramSeries
+    , HistogramSeries
+    , histogramSeries
+    , hsBarColor
+    , hsData
+
+    -- ** TreemapChartSpec
+    , TreemapChartSpec
+    , treemapChartSpec
+    , tcsHintedLevels
+    , tcsMaxValue
+    , tcsHeaderColor
+    , tcsSizeData
+    , tcsColorData
+    , tcsHideTooltips
+    , tcsLevels
+    , tcsLabels
+    , tcsColorScale
+    , tcsTextFormat
+    , tcsMinValue
+    , tcsParentLabels
+
     -- ** ConditionalFormatRule
     , ConditionalFormatRule
     , conditionalFormatRule
@@ -1013,19 +1427,50 @@
     -- ** BasicChartSpec
     , BasicChartSpec
     , basicChartSpec
-    , bHeaderCount
-    , bLegendPosition
-    , bSeries
-    , bChartType
-    , bDomains
-    , bAxis
+    , basHeaderCount
+    , basLineSmoothing
+    , basInterpolateNulls
+    , basStackedType
+    , basLegendPosition
+    , basSeries
+    , basCompareMode
+    , basChartType
+    , basThreeDimensional
+    , basDomains
+    , basAxis
 
+    -- ** ManualRuleGroup
+    , ManualRuleGroup
+    , manualRuleGroup
+    , mrgItems
+    , mrgGroupName
+
+    -- ** BatchGetValuesByDataFilterRequestMajorDimension
+    , BatchGetValuesByDataFilterRequestMajorDimension (..)
+
     -- ** AddConditionalFormatRuleRequest
     , AddConditionalFormatRuleRequest
     , addConditionalFormatRuleRequest
     , acfrrRule
     , acfrrIndex
 
+    -- ** DeveloperMetadata
+    , DeveloperMetadata
+    , developerMetadata
+    , dmLocation
+    , dmMetadataId
+    , dmVisibility
+    , dmMetadataKey
+    , dmMetadataValue
+
+    -- ** TreemapChartColorScale
+    , TreemapChartColorScale
+    , treemapChartColorScale
+    , tccsMinValueColor
+    , tccsNoDataColor
+    , tccsMaxValueColor
+    , tccsMidValueColor
+
     -- ** PivotTableValueLayout
     , PivotTableValueLayout (..)
 
@@ -1045,20 +1490,45 @@
     , tfBold
     , tfStrikethrough
 
+    -- ** CreateDeveloperMetadataRequest
+    , CreateDeveloperMetadataRequest
+    , createDeveloperMetadataRequest
+    , cDeveloperMetadata
+
     -- ** BatchClearValuesResponse
     , BatchClearValuesResponse
     , batchClearValuesResponse
     , bcvrClearedRanges
     , bcvrSpreadsheetId
 
+    -- ** MatchedValueRange
+    , MatchedValueRange
+    , matchedValueRange
+    , mvrValueRange
+    , mvrDataFilters
+
     -- ** BasicChartDomain
     , BasicChartDomain
     , basicChartDomain
+    , bcdReversed
     , bcdDomain
 
     -- ** InterpolationPointType
     , InterpolationPointType (..)
 
+    -- ** HistogramRule
+    , HistogramRule
+    , histogramRule
+    , hrStart
+    , hrInterval
+    , hrEnd
+
+    -- ** MatchedDeveloperMetadata
+    , MatchedDeveloperMetadata
+    , matchedDeveloperMetadata
+    , mdmDataFilters
+    , mdmDeveloperMetadata
+
     -- ** TextToColumnsRequestDelimiterType
     , TextToColumnsRequestDelimiterType (..)
 
@@ -1082,8 +1552,23 @@
     -- ** ChartSpec
     , ChartSpec
     , chartSpec
+    , csTitleTextPosition
+    , csFontName
+    , csSubtitleTextPosition
+    , csBackgRoundColor
+    , csCandlestickChart
+    , csWaterfallChart
+    , csTitleTextFormat
+    , csSubtitle
+    , csAltText
+    , csHistogramChart
+    , csBubbleChart
+    , csMaximized
+    , csSubtitleTextFormat
     , csTitle
     , csPieChart
+    , csOrgChart
+    , csTreemapChart
     , csBasicChart
     , csHiddenDimensionStrategy
 
@@ -1093,6 +1578,7 @@
     , dpHiddenByFilter
     , dpPixelSize
     , dpHiddenByUser
+    , dpDeveloperMetadata
 
     -- ** UpdateBandingRequest
     , UpdateBandingRequest
@@ -1111,6 +1597,16 @@
     , deleteBandingRequest
     , dbrBandedRangeId
 
+    -- ** DeleteDeveloperMetadataResponse
+    , DeleteDeveloperMetadataResponse
+    , deleteDeveloperMetadataResponse
+    , ddmrDeletedDeveloperMetadata
+
+    -- ** UpdateDeveloperMetadataResponse
+    , UpdateDeveloperMetadataResponse
+    , updateDeveloperMetadataResponse
+    , uDeveloperMetadata
+
     -- ** Request'
     , Request'
     , request'
@@ -1118,8 +1614,10 @@
     , reqDeleteProtectedRange
     , reqUpdateProtectedRange
     , reqUpdateCells
+    , reqCreateDeveloperMetadata
     , reqDuplicateFilterView
     , reqAddConditionalFormatRule
+    , reqRandomizeRange
     , reqSortRange
     , reqUpdateNamedRange
     , reqDeleteNamedRange
@@ -1132,6 +1630,8 @@
     , reqUpdateEmbeddedObjectPosition
     , reqDeleteRange
     , reqCopyPaste
+    , reqUpdateDimensionGroup
+    , reqDeleteDimensionGroup
     , reqAutoResizeDimensions
     , reqAddSheet
     , reqFindReplace
@@ -1147,6 +1647,8 @@
     , reqDeleteConditionalFormatRule
     , reqUpdateConditionalFormatRule
     , reqDeleteEmbeddedObject
+    , reqDeleteDeveloperMetadata
+    , reqUpdateDeveloperMetadata
     , reqMergeCells
     , reqAddNamedRange
     , reqAddChart
@@ -1157,6 +1659,7 @@
     , reqUpdateChartSpec
     , reqSetBasicFilter
     , reqTextToColumns
+    , reqAddDimensionGroup
     , reqUpdateSpreadsheetProperties
     , reqDeleteSheet
     , reqUnmergeCells
@@ -1164,6 +1667,12 @@
     , reqAppendDimension
     , reqSetDataValidation
 
+    -- ** LineStyle
+    , LineStyle
+    , lineStyle
+    , lsWidth
+    , lsType
+
     -- ** DeleteConditionalFormatRuleResponse
     , DeleteConditionalFormatRuleResponse
     , deleteConditionalFormatRuleResponse
@@ -1181,12 +1690,18 @@
 import           Network.Google.Prelude
 import           Network.Google.Resource.Sheets.Spreadsheets.BatchUpdate
 import           Network.Google.Resource.Sheets.Spreadsheets.Create
+import           Network.Google.Resource.Sheets.Spreadsheets.DeveloperMetadata.Get
+import           Network.Google.Resource.Sheets.Spreadsheets.DeveloperMetadata.Search
 import           Network.Google.Resource.Sheets.Spreadsheets.Get
+import           Network.Google.Resource.Sheets.Spreadsheets.GetByDataFilter
 import           Network.Google.Resource.Sheets.Spreadsheets.Sheets.CopyTo
 import           Network.Google.Resource.Sheets.Spreadsheets.Values.Append
 import           Network.Google.Resource.Sheets.Spreadsheets.Values.BatchClear
+import           Network.Google.Resource.Sheets.Spreadsheets.Values.BatchClearByDataFilter
 import           Network.Google.Resource.Sheets.Spreadsheets.Values.BatchGet
+import           Network.Google.Resource.Sheets.Spreadsheets.Values.BatchGetByDataFilter
 import           Network.Google.Resource.Sheets.Spreadsheets.Values.BatchUpdate
+import           Network.Google.Resource.Sheets.Spreadsheets.Values.BatchUpdateByDataFilter
 import           Network.Google.Resource.Sheets.Spreadsheets.Values.Clear
 import           Network.Google.Resource.Sheets.Spreadsheets.Values.Get
 import           Network.Google.Resource.Sheets.Spreadsheets.Values.Update
@@ -1200,12 +1715,19 @@
 type SheetsAPI =
      SpreadsheetsSheetsCopyToResource :<|>
        SpreadsheetsValuesBatchClearResource
+       :<|> SpreadsheetsValuesBatchClearByDataFilterResource
        :<|> SpreadsheetsValuesGetResource
+       :<|> SpreadsheetsValuesBatchGetByDataFilterResource
        :<|> SpreadsheetsValuesClearResource
        :<|> SpreadsheetsValuesBatchGetResource
        :<|> SpreadsheetsValuesBatchUpdateResource
        :<|> SpreadsheetsValuesAppendResource
+       :<|>
+       SpreadsheetsValuesBatchUpdateByDataFilterResource
        :<|> SpreadsheetsValuesUpdateResource
+       :<|> SpreadsheetsDeveloperMetadataGetResource
+       :<|> SpreadsheetsDeveloperMetadataSearchResource
+       :<|> SpreadsheetsGetByDataFilterResource
        :<|> SpreadsheetsGetResource
        :<|> SpreadsheetsCreateResource
        :<|> SpreadsheetsBatchUpdateResource
diff --git a/gen/Network/Google/Sheets/Types.hs b/gen/Network/Google/Sheets/Types.hs
--- a/gen/Network/Google/Sheets/Types.hs
+++ b/gen/Network/Google/Sheets/Types.hs
@@ -23,8 +23,12 @@
     , spreadsheetsReadOnlyScope
     , driveReadOnlyScope
     , driveScope
+    , driveFileScope
     , spreadsheetsScope
 
+    -- * BasicChartSpecStackedType
+    , BasicChartSpecStackedType (..)
+
     -- * PivotGroupSortValueBucket
     , PivotGroupSortValueBucket
     , pivotGroupSortValueBucket
@@ -47,6 +51,12 @@
     -- * CopyPasteRequestPasteType
     , CopyPasteRequestPasteType (..)
 
+    -- * DeveloperMetadataLookupLocationMatchingStrategy
+    , DeveloperMetadataLookupLocationMatchingStrategy (..)
+
+    -- * BatchUpdateValuesByDataFilterRequestResponseDateTimeRenderOption
+    , BatchUpdateValuesByDataFilterRequestResponseDateTimeRenderOption (..)
+
     -- * DeleteNamedRangeRequest
     , DeleteNamedRangeRequest
     , deleteNamedRangeRequest
@@ -71,17 +81,31 @@
     , batchClearValuesRequest
     , bcvrRanges
 
+    -- * CreateDeveloperMetadataResponse
+    , CreateDeveloperMetadataResponse
+    , createDeveloperMetadataResponse
+    , cdmrDeveloperMetadata
+
+    -- * DateTimeRule
+    , DateTimeRule
+    , dateTimeRule
+    , dtrType
+
     -- * DeleteRangeRequestShiftDimension
     , DeleteRangeRequestShiftDimension (..)
 
     -- * BasicChartSeriesTargetAxis
     , BasicChartSeriesTargetAxis (..)
 
+    -- * DataFilterValueRangeMajorDimension
+    , DataFilterValueRangeMajorDimension (..)
+
     -- * SpreadsheetProperties
     , SpreadsheetProperties
     , spreadsheetProperties
     , spDefaultFormat
     , spLocale
+    , spIterativeCalculationSettings
     , spAutoRecalc
     , spTitle
     , spTimeZone
@@ -94,12 +118,31 @@
     , boRight
     , boTop
 
+    -- * BatchClearValuesByDataFilterRequest
+    , BatchClearValuesByDataFilterRequest
+    , batchClearValuesByDataFilterRequest
+    , bcvbdfrDataFilters
+
     -- * TextFormatRun
     , TextFormatRun
     , textFormatRun
     , tfrFormat
     , tfrStartIndex
 
+    -- * DeleteDimensionGroupRequest
+    , DeleteDimensionGroupRequest
+    , deleteDimensionGroupRequest
+    , ddgrRange
+
+    -- * UpdateDimensionGroupRequest
+    , UpdateDimensionGroupRequest
+    , updateDimensionGroupRequest
+    , udgrDimensionGroup
+    , udgrFields
+
+    -- * BubbleChartSpecLegendPosition
+    , BubbleChartSpecLegendPosition (..)
+
     -- * AddSheetRequest
     , AddSheetRequest
     , addSheetRequest
@@ -111,6 +154,13 @@
     , ssSortOrder
     , ssDimensionIndex
 
+    -- * DimensionGroup
+    , DimensionGroup
+    , dimensionGroup
+    , dgCollapsed
+    , dgRange
+    , dgDepth
+
     -- * BatchUpdateValuesRequestResponseDateTimeRenderOption
     , BatchUpdateValuesRequestResponseDateTimeRenderOption (..)
 
@@ -153,6 +203,21 @@
     , autoResizeDimensionsRequest
     , ardrDimensions
 
+    -- * BubbleChartSpec
+    , BubbleChartSpec
+    , bubbleChartSpec
+    , bcsBubbleTextStyle
+    , bcsBubbleBOrderColor
+    , bcsLegendPosition
+    , bcsDomain
+    , bcsSeries
+    , bcsBubbleLabels
+    , bcsGroupIds
+    , bcsBubbleMinRadiusSize
+    , bcsBubbleMaxRadiusSize
+    , bcsBubbleOpacity
+    , bcsBubbleSizes
+
     -- * DeleteRangeRequest
     , DeleteRangeRequest
     , deleteRangeRequest
@@ -162,12 +227,15 @@
     -- * Sheet
     , Sheet
     , sheet
+    , sColumnGroups
     , sData
     , sMerges
+    , sRowGroups
     , sProtectedRanges
     , sBandedRanges
     , sCharts
     , sBasicFilter
+    , sDeveloperMetadata
     , sConditionalFormats
     , sFilterViews
     , sProperties
@@ -190,6 +258,9 @@
     , clearBasicFilterRequest
     , cbfrSheetId
 
+    -- * BatchGetValuesByDataFilterRequestValueRenderOption
+    , BatchGetValuesByDataFilterRequestValueRenderOption (..)
+
     -- * UpdateEmbeddedObjectPositionRequest
     , UpdateEmbeddedObjectPositionRequest
     , updateEmbeddedObjectPositionRequest
@@ -209,6 +280,12 @@
     -- * CellFormatWrapStrategy
     , CellFormatWrapStrategy (..)
 
+    -- * BatchGetValuesByDataFilterResponse
+    , BatchGetValuesByDataFilterResponse
+    , batchGetValuesByDataFilterResponse
+    , bgvbdfrSpreadsheetId
+    , bgvbdfrValueRanges
+
     -- * SourceAndDestination
     , SourceAndDestination
     , sourceAndDestination
@@ -244,6 +321,11 @@
     , frrSheetsChanged
     , frrOccurrencesChanged
 
+    -- * AddDimensionGroupResponse
+    , AddDimensionGroupResponse
+    , addDimensionGroupResponse
+    , adgrDimensionGroups
+
     -- * PieChartSpec
     , PieChartSpec
     , pieChartSpec
@@ -253,6 +335,19 @@
     , pcsSeries
     , pcsThreeDimensional
 
+    -- * BatchUpdateValuesByDataFilterResponse
+    , BatchUpdateValuesByDataFilterResponse
+    , batchUpdateValuesByDataFilterResponse
+    , buvbdfrTotalUpdatedColumns
+    , buvbdfrResponses
+    , buvbdfrSpreadsheetId
+    , buvbdfrTotalUpdatedSheets
+    , buvbdfrTotalUpdatedCells
+    , buvbdfrTotalUpdatedRows
+
+    -- * TextPositionHorizontalAlignment
+    , TextPositionHorizontalAlignment (..)
+
     -- * AppendValuesResponse
     , AppendValuesResponse
     , appendValuesResponse
@@ -260,6 +355,9 @@
     , avrUpdates
     , avrTableRange
 
+    -- * DeveloperMetadataVisibility
+    , DeveloperMetadataVisibility (..)
+
     -- * BatchUpdateValuesRequestResponseValueRenderOption
     , BatchUpdateValuesRequestResponseValueRenderOption (..)
 
@@ -303,10 +401,19 @@
     -- * BasicChartSeries
     , BasicChartSeries
     , basicChartSeries
-    , bcsTargetAxis
-    , bcsSeries
-    , bcsType
+    , bTargetAxis
+    , bColor
+    , bSeries
+    , bType
+    , bLineStyle
 
+    -- * PivotGroupRule
+    , PivotGroupRule
+    , pivotGroupRule
+    , pgrDateTimeRule
+    , pgrManualRule
+    , pgrHistogramRule
+
     -- * AddProtectedRangeRequest
     , AddProtectedRangeRequest
     , addProtectedRangeRequest
@@ -356,6 +463,14 @@
     , mdrDestinationIndex
     , mdrSource
 
+    -- * BatchGetValuesByDataFilterRequest
+    , BatchGetValuesByDataFilterRequest
+    , batchGetValuesByDataFilterRequest
+    , bgvbdfrValueRenderOption
+    , bgvbdfrDataFilters
+    , bgvbdfrDateTimeRenderOption
+    , bgvbdfrMajorDimension
+
     -- * CellFormatVerticalAlignment
     , CellFormatVerticalAlignment (..)
 
@@ -384,21 +499,36 @@
     -- * ConditionValueRelativeDate
     , ConditionValueRelativeDate (..)
 
+    -- * WaterfallChartCustomSubtotal
+    , WaterfallChartCustomSubtotal
+    , waterfallChartCustomSubtotal
+    , wccsDataIsSubtotal
+    , wccsSubtotalIndex
+    , wccsLabel
+
+    -- * DeveloperMetadataLocationLocationType
+    , DeveloperMetadataLocationLocationType (..)
+
     -- * Response
     , Response
     , response
     , rAddFilterView
+    , rCreateDeveloperMetadata
     , rDuplicateFilterView
     , rUpdateEmbeddedObjectPosition
+    , rDeleteDimensionGroup
     , rAddSheet
     , rFindReplace
     , rAddProtectedRange
     , rDeleteConditionalFormatRule
     , rUpdateConditionalFormatRule
+    , rDeleteDeveloperMetadata
+    , rUpdateDeveloperMetadata
     , rAddNamedRange
     , rAddChart
     , rAddBanding
     , rDuplicateSheet
+    , rAddDimensionGroup
 
     -- * FilterCriteria
     , FilterCriteria
@@ -426,9 +556,31 @@
     , dcfrrSheetId
     , dcfrrIndex
 
+    -- * UpdateDeveloperMetadataRequest
+    , UpdateDeveloperMetadataRequest
+    , updateDeveloperMetadataRequest
+    , udmrDataFilters
+    , udmrDeveloperMetadata
+    , udmrFields
+
     -- * SortSpecSortOrder
     , SortSpecSortOrder (..)
 
+    -- * DeleteDeveloperMetadataRequest
+    , DeleteDeveloperMetadataRequest
+    , deleteDeveloperMetadataRequest
+    , ddmrDataFilter
+
+    -- * WaterfallChartSpec
+    , WaterfallChartSpec
+    , waterfallChartSpec
+    , wcsStackedType
+    , wcsConnectorLineStyle
+    , wcsDomain
+    , wcsSeries
+    , wcsHideConnectorLines
+    , wcsFirstValueIsTotal
+
     -- * OverlayPosition
     , OverlayPosition
     , overlayPosition
@@ -443,6 +595,14 @@
     , deleteEmbeddedObjectRequest
     , deorObjectId
 
+    -- * DeveloperMetadataLocation
+    , DeveloperMetadataLocation
+    , developerMetadataLocation
+    , dmlSpreadsheet
+    , dmlDimensionRange
+    , dmlSheetId
+    , dmlLocationType
+
     -- * SheetProperties
     , SheetProperties
     , sheetProperties
@@ -483,14 +643,26 @@
     , sprNamedRanges
     , sprSpreadsheetId
     , sprSpreadsheetURL
+    , sprDeveloperMetadata
     , sprProperties
 
+    -- * CandlestickChartSpec
+    , CandlestickChartSpec
+    , candlestickChartSpec
+    , ccsData
+    , ccsDomain
+
     -- * InsertDimensionRequest
     , InsertDimensionRequest
     , insertDimensionRequest
     , idrRange
     , idrInheritFromBefore
 
+    -- * SearchDeveloperMetadataResponse
+    , SearchDeveloperMetadataResponse
+    , searchDeveloperMetadataResponse
+    , sdmrMatchedDeveloperMetadata
+
     -- * PivotValueSummarizeFunction
     , PivotValueSummarizeFunction (..)
 
@@ -501,6 +673,9 @@
     , ipValue
     , ipType
 
+    -- * OrgChartSpecNodeSize
+    , OrgChartSpecNodeSize (..)
+
     -- * CellData
     , CellData
     , cellData
@@ -515,6 +690,9 @@
     , cdHyperlink
     , cdEffectiveValue
 
+    -- * BatchUpdateValuesByDataFilterRequestResponseValueRenderOption
+    , BatchUpdateValuesByDataFilterRequestResponseValueRenderOption (..)
+
     -- * ChartSourceRange
     , ChartSourceRange
     , chartSourceRange
@@ -525,6 +703,12 @@
     , addNamedRangeResponse
     , anrrNamedRange
 
+    -- * WaterfallChartDomain
+    , WaterfallChartDomain
+    , waterfallChartDomain
+    , wcdReversed
+    , wcdData
+
     -- * AddChartResponse
     , AddChartResponse
     , addChartResponse
@@ -541,18 +725,51 @@
     , setBasicFilterRequest
     , sbfrFilter
 
+    -- * IterativeCalculationSettings
+    , IterativeCalculationSettings
+    , iterativeCalculationSettings
+    , icsMaxIterations
+    , icsConvergenceThreshold
+
+    -- * UpdateValuesByDataFilterResponse
+    , UpdateValuesByDataFilterResponse
+    , updateValuesByDataFilterResponse
+    , uvbdfrUpdatedCells
+    , uvbdfrUpdatedRows
+    , uvbdfrUpdatedRange
+    , uvbdfrUpdatedData
+    , uvbdfrUpdatedColumns
+    , uvbdfrDataFilter
+
     -- * GridProperties
     , GridProperties
     , gridProperties
     , gpFrozenColumnCount
     , gpColumnCount
+    , gpColumnGroupControlAfter
     , gpHideGridlines
     , gpFrozenRowCount
+    , gpRowGroupControlAfter
     , gpRowCount
 
+    -- * LineStyleType
+    , LineStyleType (..)
+
+    -- * HistogramChartSpec
+    , HistogramChartSpec
+    , histogramChartSpec
+    , hcsLegendPosition
+    , hcsSeries
+    , hcsShowItemDividers
+    , hcsOutlierPercentile
+    , hcsBucketSize
+
     -- * CellFormatHyperlinkDisplayType
     , CellFormatHyperlinkDisplayType (..)
 
+    -- * BatchUpdateValuesByDataFilterRequestValueInputOption
+    , BatchUpdateValuesByDataFilterRequestValueInputOption (..)
+
     -- * BasicFilterCriteria
     , BasicFilterCriteria
     , basicFilterCriteria
@@ -582,6 +799,20 @@
     , afrUseAlternateSeries
     , afrRange
 
+    -- * DeveloperMetadataLookup
+    , DeveloperMetadataLookup
+    , developerMetadataLookup
+    , dLocationMatchingStrategy
+    , dMetadataId
+    , dVisibility
+    , dMetadataKey
+    , dLocationType
+    , dMetadataLocation
+    , dMetadataValue
+
+    -- * HistogramChartSpecLegendPosition
+    , HistogramChartSpecLegendPosition (..)
+
     -- * DuplicateSheetRequest
     , DuplicateSheetRequest
     , duplicateSheetRequest
@@ -590,6 +821,12 @@
     , dsrSourceSheetId
     , dsrNewSheetId
 
+    -- * TextRotation
+    , TextRotation
+    , textRotation
+    , trAngle
+    , trVertical
+
     -- * DuplicateFilterViewResponse
     , DuplicateFilterViewResponse
     , duplicateFilterViewResponse
@@ -607,6 +844,13 @@
     , buvrResponseDateTimeRenderOption
     , buvrResponseValueRenderOption
 
+    -- * DataFilterValueRange
+    , DataFilterValueRange
+    , dataFilterValueRange
+    , dfvrValues
+    , dfvrDataFilter
+    , dfvrMajorDimension
+
     -- * AddChartRequest
     , AddChartRequest
     , addChartRequest
@@ -619,15 +863,28 @@
     , nrName
     , nrRange
 
+    -- * DeveloperMetadataLookupLocationType
+    , DeveloperMetadataLookupLocationType (..)
+
     -- * MergeCellsRequest
     , MergeCellsRequest
     , mergeCellsRequest
     , mcrMergeType
     , mcrRange
 
+    -- * ManualRule
+    , ManualRule
+    , manualRule
+    , mrGroups
+
     -- * MergeCellsRequestMergeType
     , MergeCellsRequestMergeType (..)
 
+    -- * TextPosition
+    , TextPosition
+    , textPosition
+    , tpHorizontalAlignment
+
     -- * CellFormatHorizontalAlignment
     , CellFormatHorizontalAlignment (..)
 
@@ -638,6 +895,16 @@
     , boColor
     , boWidth
 
+    -- * SearchDeveloperMetadataRequest
+    , SearchDeveloperMetadataRequest
+    , searchDeveloperMetadataRequest
+    , sdmrDataFilters
+
+    -- * CandlestickSeries
+    , CandlestickSeries
+    , candlestickSeries
+    , csData
+
     -- * ExtendedValue
     , ExtendedValue
     , extendedValue
@@ -652,6 +919,9 @@
     , addNamedRangeRequest
     , aNamedRange
 
+    -- * WaterfallChartSpecStackedType
+    , WaterfallChartSpecStackedType (..)
+
     -- * PivotFilterCriteria
     , PivotFilterCriteria
     , pivotFilterCriteria
@@ -671,6 +941,18 @@
     , uFields
     , uProperties
 
+    -- * DateTimeRuleType
+    , DateTimeRuleType (..)
+
+    -- * DeveloperMetadataLookupVisibility
+    , DeveloperMetadataLookupVisibility (..)
+
+    -- * CandlestickDomain
+    , CandlestickDomain
+    , candlestickDomain
+    , cdReversed
+    , cdData
+
     -- * AddProtectedRangeResponse
     , AddProtectedRangeResponse
     , addProtectedRangeResponse
@@ -689,8 +971,12 @@
     , pvSourceColumnOffSet
     , pvFormula
     , pvName
+    , pvCalculatedDisplayType
     , pvSummarizeFunction
 
+    -- * BasicChartSpecCompareMode
+    , BasicChartSpecCompareMode (..)
+
     -- * UnmergeCellsRequest
     , UnmergeCellsRequest
     , unmergeCellsRequest
@@ -704,6 +990,25 @@
     -- * BooleanConditionType
     , BooleanConditionType (..)
 
+    -- * AddDimensionGroupRequest
+    , AddDimensionGroupRequest
+    , addDimensionGroupRequest
+    , adgrRange
+
+    -- * WaterfallChartColumnStyle
+    , WaterfallChartColumnStyle
+    , waterfallChartColumnStyle
+    , wColor
+    , wLabel
+
+    -- * CandlestickData
+    , CandlestickData
+    , candlestickData
+    , cdLowSeries
+    , cdHighSeries
+    , cdOpenSeries
+    , cdCloseSeries
+
     -- * BandedRange
     , BandedRange
     , bandedRange
@@ -726,6 +1031,15 @@
     -- * ValueRangeMajorDimension
     , ValueRangeMajorDimension (..)
 
+    -- * BatchUpdateValuesByDataFilterRequest
+    , BatchUpdateValuesByDataFilterRequest
+    , batchUpdateValuesByDataFilterRequest
+    , buvbdfrData
+    , buvbdfrValueInputOption
+    , buvbdfrIncludeValuesInResponse
+    , buvbdfrResponseDateTimeRenderOption
+    , buvbdfrResponseValueRenderOption
+
     -- * PivotGroupSortOrder
     , PivotGroupSortOrder (..)
 
@@ -791,6 +1105,12 @@
     -- * CopyPasteRequestPasteOrientation
     , CopyPasteRequestPasteOrientation (..)
 
+    -- * GetSpreadsheetByDataFilterRequest
+    , GetSpreadsheetByDataFilterRequest
+    , getSpreadsheetByDataFilterRequest
+    , gsbdfrDataFilters
+    , gsbdfrIncludeGridData
+
     -- * BatchUpdateSpreadsheetRequest
     , BatchUpdateSpreadsheetRequest
     , batchUpdateSpreadsheetRequest
@@ -812,6 +1132,11 @@
     , uvrUpdatedData
     , uvrUpdatedColumns
 
+    -- * DeleteDimensionGroupResponse
+    , DeleteDimensionGroupResponse
+    , deleteDimensionGroupResponse
+    , ddgrDimensionGroups
+
     -- * CopySheetToAnotherSpreadsheetRequest
     , CopySheetToAnotherSpreadsheetRequest
     , copySheetToAnotherSpreadsheetRequest
@@ -831,6 +1156,22 @@
     -- * CellFormatTextDirection
     , CellFormatTextDirection (..)
 
+    -- * BatchClearValuesByDataFilterResponse
+    , BatchClearValuesByDataFilterResponse
+    , batchClearValuesByDataFilterResponse
+    , bcvbdfrClearedRanges
+    , bcvbdfrSpreadsheetId
+
+    -- * WaterfallChartSeries
+    , WaterfallChartSeries
+    , waterfallChartSeries
+    , wcsData
+    , wcsCustomSubtotals
+    , wcsNegativeColumnsStyle
+    , wcsHideTrailingSubtotal
+    , wcsSubtotalColumnsStyle
+    , wcsPositiveColumnsStyle
+
     -- * BasicChartSeriesType
     , BasicChartSeriesType (..)
 
@@ -848,6 +1189,7 @@
     , cfBOrders
     , cfVerticalAlignment
     , cfBackgRoundColor
+    , cfTextRotation
     , cfHyperlinkDisplayType
     , cfWrapStrategy
     , cfNumberFormat
@@ -884,9 +1226,13 @@
     , prRequestingUserCanEdit
     , prDescription
 
+    -- * PivotValueCalculatedDisplayType
+    , PivotValueCalculatedDisplayType (..)
+
     -- * BasicChartAxis
     , BasicChartAxis
     , basicChartAxis
+    , bcaTitleTextPosition
     , bcaFormat
     , bcaTitle
     , bcaPosition
@@ -906,6 +1252,9 @@
     , nfPattern
     , nfType
 
+    -- * BatchGetValuesByDataFilterRequestDateTimeRenderOption
+    , BatchGetValuesByDataFilterRequestDateTimeRenderOption (..)
+
     -- * BatchUpdateSpreadsheetResponse
     , BatchUpdateSpreadsheetResponse
     , batchUpdateSpreadsheetResponse
@@ -913,6 +1262,13 @@
     , busrReplies
     , busrUpdatedSpreadsheet
 
+    -- * DataFilter
+    , DataFilter
+    , dataFilter
+    , dfGridRange
+    , dfA1Range
+    , dfDeveloperMetadataLookup
+
     -- * SetDataValidationRequest
     , SetDataValidationRequest
     , setDataValidationRequest
@@ -941,17 +1297,30 @@
     -- * PivotGroup
     , PivotGroup
     , pivotGroup
+    , pgRepeatHeadings
     , pgValueMetadata
     , pgSourceColumnOffSet
     , pgSortOrder
     , pgShowTotals
     , pgValueBucket
+    , pgLabel
+    , pgGroupRule
 
     -- * AddBandingResponse
     , AddBandingResponse
     , addBandingResponse
     , aBandedRange
 
+    -- * OrgChartSpec
+    , OrgChartSpec
+    , orgChartSpec
+    , ocsNodeColor
+    , ocsNodeSize
+    , ocsTooltips
+    , ocsSelectedNodeColor
+    , ocsLabels
+    , ocsParentLabels
+
     -- * CutPasteRequestPasteType
     , CutPasteRequestPasteType (..)
 
@@ -961,6 +1330,33 @@
     -- * ErrorValueType
     , ErrorValueType (..)
 
+    -- * RandomizeRangeRequest
+    , RandomizeRangeRequest
+    , randomizeRangeRequest
+    , rrrRange
+
+    -- * HistogramSeries
+    , HistogramSeries
+    , histogramSeries
+    , hsBarColor
+    , hsData
+
+    -- * TreemapChartSpec
+    , TreemapChartSpec
+    , treemapChartSpec
+    , tcsHintedLevels
+    , tcsMaxValue
+    , tcsHeaderColor
+    , tcsSizeData
+    , tcsColorData
+    , tcsHideTooltips
+    , tcsLevels
+    , tcsLabels
+    , tcsColorScale
+    , tcsTextFormat
+    , tcsMinValue
+    , tcsParentLabels
+
     -- * ConditionalFormatRule
     , ConditionalFormatRule
     , conditionalFormatRule
@@ -971,19 +1367,50 @@
     -- * BasicChartSpec
     , BasicChartSpec
     , basicChartSpec
-    , bHeaderCount
-    , bLegendPosition
-    , bSeries
-    , bChartType
-    , bDomains
-    , bAxis
+    , basHeaderCount
+    , basLineSmoothing
+    , basInterpolateNulls
+    , basStackedType
+    , basLegendPosition
+    , basSeries
+    , basCompareMode
+    , basChartType
+    , basThreeDimensional
+    , basDomains
+    , basAxis
 
+    -- * ManualRuleGroup
+    , ManualRuleGroup
+    , manualRuleGroup
+    , mrgItems
+    , mrgGroupName
+
+    -- * BatchGetValuesByDataFilterRequestMajorDimension
+    , BatchGetValuesByDataFilterRequestMajorDimension (..)
+
     -- * AddConditionalFormatRuleRequest
     , AddConditionalFormatRuleRequest
     , addConditionalFormatRuleRequest
     , acfrrRule
     , acfrrIndex
 
+    -- * DeveloperMetadata
+    , DeveloperMetadata
+    , developerMetadata
+    , dmLocation
+    , dmMetadataId
+    , dmVisibility
+    , dmMetadataKey
+    , dmMetadataValue
+
+    -- * TreemapChartColorScale
+    , TreemapChartColorScale
+    , treemapChartColorScale
+    , tccsMinValueColor
+    , tccsNoDataColor
+    , tccsMaxValueColor
+    , tccsMidValueColor
+
     -- * PivotTableValueLayout
     , PivotTableValueLayout (..)
 
@@ -1003,20 +1430,45 @@
     , tfBold
     , tfStrikethrough
 
+    -- * CreateDeveloperMetadataRequest
+    , CreateDeveloperMetadataRequest
+    , createDeveloperMetadataRequest
+    , cDeveloperMetadata
+
     -- * BatchClearValuesResponse
     , BatchClearValuesResponse
     , batchClearValuesResponse
     , bcvrClearedRanges
     , bcvrSpreadsheetId
 
+    -- * MatchedValueRange
+    , MatchedValueRange
+    , matchedValueRange
+    , mvrValueRange
+    , mvrDataFilters
+
     -- * BasicChartDomain
     , BasicChartDomain
     , basicChartDomain
+    , bcdReversed
     , bcdDomain
 
     -- * InterpolationPointType
     , InterpolationPointType (..)
 
+    -- * HistogramRule
+    , HistogramRule
+    , histogramRule
+    , hrStart
+    , hrInterval
+    , hrEnd
+
+    -- * MatchedDeveloperMetadata
+    , MatchedDeveloperMetadata
+    , matchedDeveloperMetadata
+    , mdmDataFilters
+    , mdmDeveloperMetadata
+
     -- * TextToColumnsRequestDelimiterType
     , TextToColumnsRequestDelimiterType (..)
 
@@ -1040,8 +1492,23 @@
     -- * ChartSpec
     , ChartSpec
     , chartSpec
+    , csTitleTextPosition
+    , csFontName
+    , csSubtitleTextPosition
+    , csBackgRoundColor
+    , csCandlestickChart
+    , csWaterfallChart
+    , csTitleTextFormat
+    , csSubtitle
+    , csAltText
+    , csHistogramChart
+    , csBubbleChart
+    , csMaximized
+    , csSubtitleTextFormat
     , csTitle
     , csPieChart
+    , csOrgChart
+    , csTreemapChart
     , csBasicChart
     , csHiddenDimensionStrategy
 
@@ -1051,6 +1518,7 @@
     , dpHiddenByFilter
     , dpPixelSize
     , dpHiddenByUser
+    , dpDeveloperMetadata
 
     -- * UpdateBandingRequest
     , UpdateBandingRequest
@@ -1069,6 +1537,16 @@
     , deleteBandingRequest
     , dbrBandedRangeId
 
+    -- * DeleteDeveloperMetadataResponse
+    , DeleteDeveloperMetadataResponse
+    , deleteDeveloperMetadataResponse
+    , ddmrDeletedDeveloperMetadata
+
+    -- * UpdateDeveloperMetadataResponse
+    , UpdateDeveloperMetadataResponse
+    , updateDeveloperMetadataResponse
+    , uDeveloperMetadata
+
     -- * Request'
     , Request'
     , request'
@@ -1076,8 +1554,10 @@
     , reqDeleteProtectedRange
     , reqUpdateProtectedRange
     , reqUpdateCells
+    , reqCreateDeveloperMetadata
     , reqDuplicateFilterView
     , reqAddConditionalFormatRule
+    , reqRandomizeRange
     , reqSortRange
     , reqUpdateNamedRange
     , reqDeleteNamedRange
@@ -1090,6 +1570,8 @@
     , reqUpdateEmbeddedObjectPosition
     , reqDeleteRange
     , reqCopyPaste
+    , reqUpdateDimensionGroup
+    , reqDeleteDimensionGroup
     , reqAutoResizeDimensions
     , reqAddSheet
     , reqFindReplace
@@ -1105,6 +1587,8 @@
     , reqDeleteConditionalFormatRule
     , reqUpdateConditionalFormatRule
     , reqDeleteEmbeddedObject
+    , reqDeleteDeveloperMetadata
+    , reqUpdateDeveloperMetadata
     , reqMergeCells
     , reqAddNamedRange
     , reqAddChart
@@ -1115,6 +1599,7 @@
     , reqUpdateChartSpec
     , reqSetBasicFilter
     , reqTextToColumns
+    , reqAddDimensionGroup
     , reqUpdateSpreadsheetProperties
     , reqDeleteSheet
     , reqUnmergeCells
@@ -1122,6 +1607,12 @@
     , reqAppendDimension
     , reqSetDataValidation
 
+    -- * LineStyle
+    , LineStyle
+    , lineStyle
+    , lsWidth
+    , lsType
+
     -- * DeleteConditionalFormatRuleResponse
     , DeleteConditionalFormatRuleResponse
     , deleteConditionalFormatRuleResponse
@@ -1150,14 +1641,19 @@
 spreadsheetsReadOnlyScope :: Proxy '["https://www.googleapis.com/auth/spreadsheets.readonly"]
 spreadsheetsReadOnlyScope = Proxy;
 
--- | View the files in your Google Drive
+-- | See and download all your Google Drive files
 driveReadOnlyScope :: Proxy '["https://www.googleapis.com/auth/drive.readonly"]
 driveReadOnlyScope = Proxy;
 
--- | View and manage the files in your Google Drive
+-- | See, edit, create, and delete all of your Google Drive files
 driveScope :: Proxy '["https://www.googleapis.com/auth/drive"]
 driveScope = Proxy;
 
--- | View and manage your spreadsheets in Google Drive
+-- | View and manage Google Drive files and folders that you have opened or
+-- created with this app
+driveFileScope :: Proxy '["https://www.googleapis.com/auth/drive.file"]
+driveFileScope = Proxy;
+
+-- | See, edit, create, and delete your spreadsheets in Google Drive
 spreadsheetsScope :: Proxy '["https://www.googleapis.com/auth/spreadsheets"]
 spreadsheetsScope = Proxy;
diff --git a/gen/Network/Google/Sheets/Types/Product.hs b/gen/Network/Google/Sheets/Types/Product.hs
--- a/gen/Network/Google/Sheets/Types/Product.hs
+++ b/gen/Network/Google/Sheets/Types/Product.hs
@@ -250,8741 +250,12978 @@
 -- /See:/ 'updateNamedRangeRequest' smart constructor.
 data UpdateNamedRangeRequest = UpdateNamedRangeRequest'
     { _unrrNamedRange :: !(Maybe NamedRange)
-    , _unrrFields     :: !(Maybe FieldMask)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'UpdateNamedRangeRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'unrrNamedRange'
---
--- * 'unrrFields'
-updateNamedRangeRequest
-    :: UpdateNamedRangeRequest
-updateNamedRangeRequest =
-    UpdateNamedRangeRequest'
-    { _unrrNamedRange = Nothing
-    , _unrrFields = Nothing
-    }
-
--- | The named range to update with the new properties.
-unrrNamedRange :: Lens' UpdateNamedRangeRequest (Maybe NamedRange)
-unrrNamedRange
-  = lens _unrrNamedRange
-      (\ s a -> s{_unrrNamedRange = a})
-
--- | The fields that should be updated. At least one field must be specified.
--- The root \`namedRange\` is implied and should not be specified. A single
--- \`\"*\"\` can be used as short-hand for listing every field.
-unrrFields :: Lens' UpdateNamedRangeRequest (Maybe FieldMask)
-unrrFields
-  = lens _unrrFields (\ s a -> s{_unrrFields = a})
-
-instance FromJSON UpdateNamedRangeRequest where
-        parseJSON
-          = withObject "UpdateNamedRangeRequest"
-              (\ o ->
-                 UpdateNamedRangeRequest' <$>
-                   (o .:? "namedRange") <*> (o .:? "fields"))
-
-instance ToJSON UpdateNamedRangeRequest where
-        toJSON UpdateNamedRangeRequest'{..}
-          = object
-              (catMaybes
-                 [("namedRange" .=) <$> _unrrNamedRange,
-                  ("fields" .=) <$> _unrrFields])
-
--- | The data included in a domain or series.
---
--- /See:/ 'chartData' smart constructor.
-newtype ChartData = ChartData'
-    { _cdSourceRange :: Maybe ChartSourceRange
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ChartData' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cdSourceRange'
-chartData
-    :: ChartData
-chartData =
-    ChartData'
-    { _cdSourceRange = Nothing
-    }
-
--- | The source ranges of the data.
-cdSourceRange :: Lens' ChartData (Maybe ChartSourceRange)
-cdSourceRange
-  = lens _cdSourceRange
-      (\ s a -> s{_cdSourceRange = a})
-
-instance FromJSON ChartData where
-        parseJSON
-          = withObject "ChartData"
-              (\ o -> ChartData' <$> (o .:? "sourceRange"))
-
-instance ToJSON ChartData where
-        toJSON ChartData'{..}
-          = object
-              (catMaybes [("sourceRange" .=) <$> _cdSourceRange])
-
--- | The request for clearing more than one range of values in a spreadsheet.
---
--- /See:/ 'batchClearValuesRequest' smart constructor.
-newtype BatchClearValuesRequest = BatchClearValuesRequest'
-    { _bcvrRanges :: Maybe [Text]
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'BatchClearValuesRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'bcvrRanges'
-batchClearValuesRequest
-    :: BatchClearValuesRequest
-batchClearValuesRequest =
-    BatchClearValuesRequest'
-    { _bcvrRanges = Nothing
-    }
-
--- | The ranges to clear, in A1 notation.
-bcvrRanges :: Lens' BatchClearValuesRequest [Text]
-bcvrRanges
-  = lens _bcvrRanges (\ s a -> s{_bcvrRanges = a}) .
-      _Default
-      . _Coerce
-
-instance FromJSON BatchClearValuesRequest where
-        parseJSON
-          = withObject "BatchClearValuesRequest"
-              (\ o ->
-                 BatchClearValuesRequest' <$>
-                   (o .:? "ranges" .!= mempty))
-
-instance ToJSON BatchClearValuesRequest where
-        toJSON BatchClearValuesRequest'{..}
-          = object (catMaybes [("ranges" .=) <$> _bcvrRanges])
-
--- | Properties of a spreadsheet.
---
--- /See:/ 'spreadsheetProperties' smart constructor.
-data SpreadsheetProperties = SpreadsheetProperties'
-    { _spDefaultFormat :: !(Maybe CellFormat)
-    , _spLocale        :: !(Maybe Text)
-    , _spAutoRecalc    :: !(Maybe SpreadsheetPropertiesAutoRecalc)
-    , _spTitle         :: !(Maybe Text)
-    , _spTimeZone      :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'SpreadsheetProperties' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'spDefaultFormat'
---
--- * 'spLocale'
---
--- * 'spAutoRecalc'
---
--- * 'spTitle'
---
--- * 'spTimeZone'
-spreadsheetProperties
-    :: SpreadsheetProperties
-spreadsheetProperties =
-    SpreadsheetProperties'
-    { _spDefaultFormat = Nothing
-    , _spLocale = Nothing
-    , _spAutoRecalc = Nothing
-    , _spTitle = Nothing
-    , _spTimeZone = Nothing
-    }
-
--- | The default format of all cells in the spreadsheet.
--- CellData.effectiveFormat will not be set if the cell\'s format is equal
--- to this default format. This field is read-only.
-spDefaultFormat :: Lens' SpreadsheetProperties (Maybe CellFormat)
-spDefaultFormat
-  = lens _spDefaultFormat
-      (\ s a -> s{_spDefaultFormat = a})
-
--- | The locale of the spreadsheet in one of the following formats: * an ISO
--- 639-1 language code such as \`en\` * an ISO 639-2 language code such as
--- \`fil\`, if no 639-1 code exists * a combination of the ISO language
--- code and country code, such as \`en_US\` Note: when updating this field,
--- not all locales\/languages are supported.
-spLocale :: Lens' SpreadsheetProperties (Maybe Text)
-spLocale = lens _spLocale (\ s a -> s{_spLocale = a})
-
--- | The amount of time to wait before volatile functions are recalculated.
-spAutoRecalc :: Lens' SpreadsheetProperties (Maybe SpreadsheetPropertiesAutoRecalc)
-spAutoRecalc
-  = lens _spAutoRecalc (\ s a -> s{_spAutoRecalc = a})
-
--- | The title of the spreadsheet.
-spTitle :: Lens' SpreadsheetProperties (Maybe Text)
-spTitle = lens _spTitle (\ s a -> s{_spTitle = a})
-
--- | The time zone of the spreadsheet, in CLDR format such as
--- \`America\/New_York\`. If the time zone isn\'t recognized, this may be a
--- custom time zone such as \`GMT-07:00\`.
-spTimeZone :: Lens' SpreadsheetProperties (Maybe Text)
-spTimeZone
-  = lens _spTimeZone (\ s a -> s{_spTimeZone = a})
-
-instance FromJSON SpreadsheetProperties where
-        parseJSON
-          = withObject "SpreadsheetProperties"
-              (\ o ->
-                 SpreadsheetProperties' <$>
-                   (o .:? "defaultFormat") <*> (o .:? "locale") <*>
-                     (o .:? "autoRecalc")
-                     <*> (o .:? "title")
-                     <*> (o .:? "timeZone"))
-
-instance ToJSON SpreadsheetProperties where
-        toJSON SpreadsheetProperties'{..}
-          = object
-              (catMaybes
-                 [("defaultFormat" .=) <$> _spDefaultFormat,
-                  ("locale" .=) <$> _spLocale,
-                  ("autoRecalc" .=) <$> _spAutoRecalc,
-                  ("title" .=) <$> _spTitle,
-                  ("timeZone" .=) <$> _spTimeZone])
-
--- | The borders of the cell.
---
--- /See:/ 'bOrders' smart constructor.
-data BOrders = BOrders'
-    { _boBottom :: !(Maybe BOrder)
-    , _boLeft   :: !(Maybe BOrder)
-    , _boRight  :: !(Maybe BOrder)
-    , _boTop    :: !(Maybe BOrder)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'BOrders' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'boBottom'
---
--- * 'boLeft'
---
--- * 'boRight'
---
--- * 'boTop'
-bOrders
-    :: BOrders
-bOrders =
-    BOrders'
-    { _boBottom = Nothing
-    , _boLeft = Nothing
-    , _boRight = Nothing
-    , _boTop = Nothing
-    }
-
--- | The bottom border of the cell.
-boBottom :: Lens' BOrders (Maybe BOrder)
-boBottom = lens _boBottom (\ s a -> s{_boBottom = a})
-
--- | The left border of the cell.
-boLeft :: Lens' BOrders (Maybe BOrder)
-boLeft = lens _boLeft (\ s a -> s{_boLeft = a})
-
--- | The right border of the cell.
-boRight :: Lens' BOrders (Maybe BOrder)
-boRight = lens _boRight (\ s a -> s{_boRight = a})
-
--- | The top border of the cell.
-boTop :: Lens' BOrders (Maybe BOrder)
-boTop = lens _boTop (\ s a -> s{_boTop = a})
-
-instance FromJSON BOrders where
-        parseJSON
-          = withObject "BOrders"
-              (\ o ->
-                 BOrders' <$>
-                   (o .:? "bottom") <*> (o .:? "left") <*>
-                     (o .:? "right")
-                     <*> (o .:? "top"))
-
-instance ToJSON BOrders where
-        toJSON BOrders'{..}
-          = object
-              (catMaybes
-                 [("bottom" .=) <$> _boBottom,
-                  ("left" .=) <$> _boLeft, ("right" .=) <$> _boRight,
-                  ("top" .=) <$> _boTop])
-
--- | A run of a text format. The format of this run continues until the start
--- index of the next run. When updating, all fields must be set.
---
--- /See:/ 'textFormatRun' smart constructor.
-data TextFormatRun = TextFormatRun'
-    { _tfrFormat     :: !(Maybe TextFormat)
-    , _tfrStartIndex :: !(Maybe (Textual Int32))
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'TextFormatRun' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tfrFormat'
---
--- * 'tfrStartIndex'
-textFormatRun
-    :: TextFormatRun
-textFormatRun =
-    TextFormatRun'
-    { _tfrFormat = Nothing
-    , _tfrStartIndex = Nothing
-    }
-
--- | The format of this run. Absent values inherit the cell\'s format.
-tfrFormat :: Lens' TextFormatRun (Maybe TextFormat)
-tfrFormat
-  = lens _tfrFormat (\ s a -> s{_tfrFormat = a})
-
--- | The character index where this run starts.
-tfrStartIndex :: Lens' TextFormatRun (Maybe Int32)
-tfrStartIndex
-  = lens _tfrStartIndex
-      (\ s a -> s{_tfrStartIndex = a})
-      . mapping _Coerce
-
-instance FromJSON TextFormatRun where
-        parseJSON
-          = withObject "TextFormatRun"
-              (\ o ->
-                 TextFormatRun' <$>
-                   (o .:? "format") <*> (o .:? "startIndex"))
-
-instance ToJSON TextFormatRun where
-        toJSON TextFormatRun'{..}
-          = object
-              (catMaybes
-                 [("format" .=) <$> _tfrFormat,
-                  ("startIndex" .=) <$> _tfrStartIndex])
-
--- | Adds a new sheet. When a sheet is added at a given index, all subsequent
--- sheets\' indexes are incremented. To add an object sheet, use
--- AddChartRequest instead and specify EmbeddedObjectPosition.sheetId or
--- EmbeddedObjectPosition.newSheet.
---
--- /See:/ 'addSheetRequest' smart constructor.
-newtype AddSheetRequest = AddSheetRequest'
-    { _asrProperties :: Maybe SheetProperties
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AddSheetRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'asrProperties'
-addSheetRequest
-    :: AddSheetRequest
-addSheetRequest =
-    AddSheetRequest'
-    { _asrProperties = Nothing
-    }
-
--- | The properties the new sheet should have. All properties are optional.
--- The sheetId field is optional; if one is not set, an id will be randomly
--- generated. (It is an error to specify the ID of a sheet that already
--- exists.)
-asrProperties :: Lens' AddSheetRequest (Maybe SheetProperties)
-asrProperties
-  = lens _asrProperties
-      (\ s a -> s{_asrProperties = a})
-
-instance FromJSON AddSheetRequest where
-        parseJSON
-          = withObject "AddSheetRequest"
-              (\ o -> AddSheetRequest' <$> (o .:? "properties"))
-
-instance ToJSON AddSheetRequest where
-        toJSON AddSheetRequest'{..}
-          = object
-              (catMaybes [("properties" .=) <$> _asrProperties])
-
--- | A sort order associated with a specific column or row.
---
--- /See:/ 'sortSpec' smart constructor.
-data SortSpec = SortSpec'
-    { _ssSortOrder      :: !(Maybe SortSpecSortOrder)
-    , _ssDimensionIndex :: !(Maybe (Textual Int32))
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'SortSpec' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ssSortOrder'
---
--- * 'ssDimensionIndex'
-sortSpec
-    :: SortSpec
-sortSpec =
-    SortSpec'
-    { _ssSortOrder = Nothing
-    , _ssDimensionIndex = Nothing
-    }
-
--- | The order data should be sorted.
-ssSortOrder :: Lens' SortSpec (Maybe SortSpecSortOrder)
-ssSortOrder
-  = lens _ssSortOrder (\ s a -> s{_ssSortOrder = a})
-
--- | The dimension the sort should be applied to.
-ssDimensionIndex :: Lens' SortSpec (Maybe Int32)
-ssDimensionIndex
-  = lens _ssDimensionIndex
-      (\ s a -> s{_ssDimensionIndex = a})
-      . mapping _Coerce
-
-instance FromJSON SortSpec where
-        parseJSON
-          = withObject "SortSpec"
-              (\ o ->
-                 SortSpec' <$>
-                   (o .:? "sortOrder") <*> (o .:? "dimensionIndex"))
-
-instance ToJSON SortSpec where
-        toJSON SortSpec'{..}
-          = object
-              (catMaybes
-                 [("sortOrder" .=) <$> _ssSortOrder,
-                  ("dimensionIndex" .=) <$> _ssDimensionIndex])
-
--- | Copies data from the source to the destination.
---
--- /See:/ 'copyPasteRequest' smart constructor.
-data CopyPasteRequest = CopyPasteRequest'
-    { _cprDestination      :: !(Maybe GridRange)
-    , _cprSource           :: !(Maybe GridRange)
-    , _cprPasteOrientation :: !(Maybe CopyPasteRequestPasteOrientation)
-    , _cprPasteType        :: !(Maybe CopyPasteRequestPasteType)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CopyPasteRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cprDestination'
---
--- * 'cprSource'
---
--- * 'cprPasteOrientation'
---
--- * 'cprPasteType'
-copyPasteRequest
-    :: CopyPasteRequest
-copyPasteRequest =
-    CopyPasteRequest'
-    { _cprDestination = Nothing
-    , _cprSource = Nothing
-    , _cprPasteOrientation = Nothing
-    , _cprPasteType = Nothing
-    }
-
--- | The location to paste to. If the range covers a span that\'s a multiple
--- of the source\'s height or width, then the data will be repeated to fill
--- in the destination range. If the range is smaller than the source range,
--- the entire source data will still be copied (beyond the end of the
--- destination range).
-cprDestination :: Lens' CopyPasteRequest (Maybe GridRange)
-cprDestination
-  = lens _cprDestination
-      (\ s a -> s{_cprDestination = a})
-
--- | The source range to copy.
-cprSource :: Lens' CopyPasteRequest (Maybe GridRange)
-cprSource
-  = lens _cprSource (\ s a -> s{_cprSource = a})
-
--- | How that data should be oriented when pasting.
-cprPasteOrientation :: Lens' CopyPasteRequest (Maybe CopyPasteRequestPasteOrientation)
-cprPasteOrientation
-  = lens _cprPasteOrientation
-      (\ s a -> s{_cprPasteOrientation = a})
-
--- | What kind of data to paste.
-cprPasteType :: Lens' CopyPasteRequest (Maybe CopyPasteRequestPasteType)
-cprPasteType
-  = lens _cprPasteType (\ s a -> s{_cprPasteType = a})
-
-instance FromJSON CopyPasteRequest where
-        parseJSON
-          = withObject "CopyPasteRequest"
-              (\ o ->
-                 CopyPasteRequest' <$>
-                   (o .:? "destination") <*> (o .:? "source") <*>
-                     (o .:? "pasteOrientation")
-                     <*> (o .:? "pasteType"))
-
-instance ToJSON CopyPasteRequest where
-        toJSON CopyPasteRequest'{..}
-          = object
-              (catMaybes
-                 [("destination" .=) <$> _cprDestination,
-                  ("source" .=) <$> _cprSource,
-                  ("pasteOrientation" .=) <$> _cprPasteOrientation,
-                  ("pasteType" .=) <$> _cprPasteType])
-
--- | A range on a sheet. All indexes are zero-based. Indexes are half open,
--- e.g the start index is inclusive and the end index is exclusive --
--- [start_index, end_index). Missing indexes indicate the range is
--- unbounded on that side. For example, if \`\"Sheet1\"\` is sheet ID 0,
--- then: \`Sheet1!A1:A1 == sheet_id: 0, start_row_index: 0, end_row_index:
--- 1, start_column_index: 0, end_column_index: 1\` \`Sheet1!A3:B4 ==
--- sheet_id: 0, start_row_index: 2, end_row_index: 4, start_column_index:
--- 0, end_column_index: 2\` \`Sheet1!A:B == sheet_id: 0,
--- start_column_index: 0, end_column_index: 2\` \`Sheet1!A5:B == sheet_id:
--- 0, start_row_index: 4, start_column_index: 0, end_column_index: 2\`
--- \`Sheet1 == sheet_id:0\` The start index must always be less than or
--- equal to the end index. If the start index equals the end index, then
--- the range is empty. Empty ranges are typically not meaningful and are
--- usually rendered in the UI as \`#REF!\`.
---
--- /See:/ 'gridRange' smart constructor.
-data GridRange = GridRange'
-    { _grEndColumnIndex   :: !(Maybe (Textual Int32))
-    , _grStartColumnIndex :: !(Maybe (Textual Int32))
-    , _grEndRowIndex      :: !(Maybe (Textual Int32))
-    , _grStartRowIndex    :: !(Maybe (Textual Int32))
-    , _grSheetId          :: !(Maybe (Textual Int32))
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'GridRange' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'grEndColumnIndex'
---
--- * 'grStartColumnIndex'
---
--- * 'grEndRowIndex'
---
--- * 'grStartRowIndex'
---
--- * 'grSheetId'
-gridRange
-    :: GridRange
-gridRange =
-    GridRange'
-    { _grEndColumnIndex = Nothing
-    , _grStartColumnIndex = Nothing
-    , _grEndRowIndex = Nothing
-    , _grStartRowIndex = Nothing
-    , _grSheetId = Nothing
-    }
-
--- | The end column (exclusive) of the range, or not set if unbounded.
-grEndColumnIndex :: Lens' GridRange (Maybe Int32)
-grEndColumnIndex
-  = lens _grEndColumnIndex
-      (\ s a -> s{_grEndColumnIndex = a})
-      . mapping _Coerce
-
--- | The start column (inclusive) of the range, or not set if unbounded.
-grStartColumnIndex :: Lens' GridRange (Maybe Int32)
-grStartColumnIndex
-  = lens _grStartColumnIndex
-      (\ s a -> s{_grStartColumnIndex = a})
-      . mapping _Coerce
-
--- | The end row (exclusive) of the range, or not set if unbounded.
-grEndRowIndex :: Lens' GridRange (Maybe Int32)
-grEndRowIndex
-  = lens _grEndRowIndex
-      (\ s a -> s{_grEndRowIndex = a})
-      . mapping _Coerce
-
--- | The start row (inclusive) of the range, or not set if unbounded.
-grStartRowIndex :: Lens' GridRange (Maybe Int32)
-grStartRowIndex
-  = lens _grStartRowIndex
-      (\ s a -> s{_grStartRowIndex = a})
-      . mapping _Coerce
-
--- | The sheet this range is on.
-grSheetId :: Lens' GridRange (Maybe Int32)
-grSheetId
-  = lens _grSheetId (\ s a -> s{_grSheetId = a}) .
-      mapping _Coerce
-
-instance FromJSON GridRange where
-        parseJSON
-          = withObject "GridRange"
-              (\ o ->
-                 GridRange' <$>
-                   (o .:? "endColumnIndex") <*>
-                     (o .:? "startColumnIndex")
-                     <*> (o .:? "endRowIndex")
-                     <*> (o .:? "startRowIndex")
-                     <*> (o .:? "sheetId"))
-
-instance ToJSON GridRange where
-        toJSON GridRange'{..}
-          = object
-              (catMaybes
-                 [("endColumnIndex" .=) <$> _grEndColumnIndex,
-                  ("startColumnIndex" .=) <$> _grStartColumnIndex,
-                  ("endRowIndex" .=) <$> _grEndRowIndex,
-                  ("startRowIndex" .=) <$> _grStartRowIndex,
-                  ("sheetId" .=) <$> _grSheetId])
-
--- | The result of adding a filter view.
---
--- /See:/ 'addFilterViewResponse' smart constructor.
-newtype AddFilterViewResponse = AddFilterViewResponse'
-    { _afvrFilter :: Maybe FilterView
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AddFilterViewResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'afvrFilter'
-addFilterViewResponse
-    :: AddFilterViewResponse
-addFilterViewResponse =
-    AddFilterViewResponse'
-    { _afvrFilter = Nothing
-    }
-
--- | The newly added filter view.
-afvrFilter :: Lens' AddFilterViewResponse (Maybe FilterView)
-afvrFilter
-  = lens _afvrFilter (\ s a -> s{_afvrFilter = a})
-
-instance FromJSON AddFilterViewResponse where
-        parseJSON
-          = withObject "AddFilterViewResponse"
-              (\ o -> AddFilterViewResponse' <$> (o .:? "filter"))
-
-instance ToJSON AddFilterViewResponse where
-        toJSON AddFilterViewResponse'{..}
-          = object (catMaybes [("filter" .=) <$> _afvrFilter])
-
--- | A condition that can evaluate to true or false. BooleanConditions are
--- used by conditional formatting, data validation, and the criteria in
--- filters.
---
--- /See:/ 'booleanCondition' smart constructor.
-data BooleanCondition = BooleanCondition'
-    { _bcValues :: !(Maybe [ConditionValue])
-    , _bcType   :: !(Maybe BooleanConditionType)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'BooleanCondition' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'bcValues'
---
--- * 'bcType'
-booleanCondition
-    :: BooleanCondition
-booleanCondition =
-    BooleanCondition'
-    { _bcValues = Nothing
-    , _bcType = Nothing
-    }
-
--- | The values of the condition. The number of supported values depends on
--- the condition type. Some support zero values, others one or two values,
--- and ConditionType.ONE_OF_LIST supports an arbitrary number of values.
-bcValues :: Lens' BooleanCondition [ConditionValue]
-bcValues
-  = lens _bcValues (\ s a -> s{_bcValues = a}) .
-      _Default
-      . _Coerce
-
--- | The type of condition.
-bcType :: Lens' BooleanCondition (Maybe BooleanConditionType)
-bcType = lens _bcType (\ s a -> s{_bcType = a})
-
-instance FromJSON BooleanCondition where
-        parseJSON
-          = withObject "BooleanCondition"
-              (\ o ->
-                 BooleanCondition' <$>
-                   (o .:? "values" .!= mempty) <*> (o .:? "type"))
-
-instance ToJSON BooleanCondition where
-        toJSON BooleanCondition'{..}
-          = object
-              (catMaybes
-                 [("values" .=) <$> _bcValues,
-                  ("type" .=) <$> _bcType])
-
--- | Automatically resizes one or more dimensions based on the contents of
--- the cells in that dimension.
---
--- /See:/ 'autoResizeDimensionsRequest' smart constructor.
-newtype AutoResizeDimensionsRequest = AutoResizeDimensionsRequest'
-    { _ardrDimensions :: Maybe DimensionRange
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AutoResizeDimensionsRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ardrDimensions'
-autoResizeDimensionsRequest
-    :: AutoResizeDimensionsRequest
-autoResizeDimensionsRequest =
-    AutoResizeDimensionsRequest'
-    { _ardrDimensions = Nothing
-    }
-
--- | The dimensions to automatically resize. Only COLUMNS are supported.
-ardrDimensions :: Lens' AutoResizeDimensionsRequest (Maybe DimensionRange)
-ardrDimensions
-  = lens _ardrDimensions
-      (\ s a -> s{_ardrDimensions = a})
-
-instance FromJSON AutoResizeDimensionsRequest where
-        parseJSON
-          = withObject "AutoResizeDimensionsRequest"
-              (\ o ->
-                 AutoResizeDimensionsRequest' <$>
-                   (o .:? "dimensions"))
-
-instance ToJSON AutoResizeDimensionsRequest where
-        toJSON AutoResizeDimensionsRequest'{..}
-          = object
-              (catMaybes [("dimensions" .=) <$> _ardrDimensions])
-
--- | Deletes a range of cells, shifting other cells into the deleted area.
---
--- /See:/ 'deleteRangeRequest' smart constructor.
-data DeleteRangeRequest = DeleteRangeRequest'
-    { _drrShiftDimension :: !(Maybe DeleteRangeRequestShiftDimension)
-    , _drrRange          :: !(Maybe GridRange)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeleteRangeRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'drrShiftDimension'
---
--- * 'drrRange'
-deleteRangeRequest
-    :: DeleteRangeRequest
-deleteRangeRequest =
-    DeleteRangeRequest'
-    { _drrShiftDimension = Nothing
-    , _drrRange = Nothing
-    }
-
--- | The dimension from which deleted cells will be replaced with. If ROWS,
--- existing cells will be shifted upward to replace the deleted cells. If
--- COLUMNS, existing cells will be shifted left to replace the deleted
--- cells.
-drrShiftDimension :: Lens' DeleteRangeRequest (Maybe DeleteRangeRequestShiftDimension)
-drrShiftDimension
-  = lens _drrShiftDimension
-      (\ s a -> s{_drrShiftDimension = a})
-
--- | The range of cells to delete.
-drrRange :: Lens' DeleteRangeRequest (Maybe GridRange)
-drrRange = lens _drrRange (\ s a -> s{_drrRange = a})
-
-instance FromJSON DeleteRangeRequest where
-        parseJSON
-          = withObject "DeleteRangeRequest"
-              (\ o ->
-                 DeleteRangeRequest' <$>
-                   (o .:? "shiftDimension") <*> (o .:? "range"))
-
-instance ToJSON DeleteRangeRequest where
-        toJSON DeleteRangeRequest'{..}
-          = object
-              (catMaybes
-                 [("shiftDimension" .=) <$> _drrShiftDimension,
-                  ("range" .=) <$> _drrRange])
-
--- | A sheet in a spreadsheet.
---
--- /See:/ 'sheet' smart constructor.
-data Sheet = Sheet'
-    { _sData               :: !(Maybe [GridData])
-    , _sMerges             :: !(Maybe [GridRange])
-    , _sProtectedRanges    :: !(Maybe [ProtectedRange])
-    , _sBandedRanges       :: !(Maybe [BandedRange])
-    , _sCharts             :: !(Maybe [EmbeddedChart])
-    , _sBasicFilter        :: !(Maybe BasicFilter)
-    , _sConditionalFormats :: !(Maybe [ConditionalFormatRule])
-    , _sFilterViews        :: !(Maybe [FilterView])
-    , _sProperties         :: !(Maybe SheetProperties)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Sheet' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sData'
---
--- * 'sMerges'
---
--- * 'sProtectedRanges'
---
--- * 'sBandedRanges'
---
--- * 'sCharts'
---
--- * 'sBasicFilter'
---
--- * 'sConditionalFormats'
---
--- * 'sFilterViews'
---
--- * 'sProperties'
-sheet
-    :: Sheet
-sheet =
-    Sheet'
-    { _sData = Nothing
-    , _sMerges = Nothing
-    , _sProtectedRanges = Nothing
-    , _sBandedRanges = Nothing
-    , _sCharts = Nothing
-    , _sBasicFilter = Nothing
-    , _sConditionalFormats = Nothing
-    , _sFilterViews = Nothing
-    , _sProperties = Nothing
-    }
-
--- | Data in the grid, if this is a grid sheet. The number of GridData
--- objects returned is dependent on the number of ranges requested on this
--- sheet. For example, if this is representing \`Sheet1\`, and the
--- spreadsheet was requested with ranges \`Sheet1!A1:C10\` and
--- \`Sheet1!D15:E20\`, then the first GridData will have a
--- startRow\/startColumn of \`0\`, while the second one will have
--- \`startRow 14\` (zero-based row 15), and \`startColumn 3\` (zero-based
--- column D).
-sData :: Lens' Sheet [GridData]
-sData
-  = lens _sData (\ s a -> s{_sData = a}) . _Default .
-      _Coerce
-
--- | The ranges that are merged together.
-sMerges :: Lens' Sheet [GridRange]
-sMerges
-  = lens _sMerges (\ s a -> s{_sMerges = a}) . _Default
-      . _Coerce
-
--- | The protected ranges in this sheet.
-sProtectedRanges :: Lens' Sheet [ProtectedRange]
-sProtectedRanges
-  = lens _sProtectedRanges
-      (\ s a -> s{_sProtectedRanges = a})
-      . _Default
-      . _Coerce
-
--- | The banded (i.e. alternating colors) ranges on this sheet.
-sBandedRanges :: Lens' Sheet [BandedRange]
-sBandedRanges
-  = lens _sBandedRanges
-      (\ s a -> s{_sBandedRanges = a})
-      . _Default
-      . _Coerce
-
--- | The specifications of every chart on this sheet.
-sCharts :: Lens' Sheet [EmbeddedChart]
-sCharts
-  = lens _sCharts (\ s a -> s{_sCharts = a}) . _Default
-      . _Coerce
-
--- | The filter on this sheet, if any.
-sBasicFilter :: Lens' Sheet (Maybe BasicFilter)
-sBasicFilter
-  = lens _sBasicFilter (\ s a -> s{_sBasicFilter = a})
-
--- | The conditional format rules in this sheet.
-sConditionalFormats :: Lens' Sheet [ConditionalFormatRule]
-sConditionalFormats
-  = lens _sConditionalFormats
-      (\ s a -> s{_sConditionalFormats = a})
-      . _Default
-      . _Coerce
-
--- | The filter views in this sheet.
-sFilterViews :: Lens' Sheet [FilterView]
-sFilterViews
-  = lens _sFilterViews (\ s a -> s{_sFilterViews = a})
-      . _Default
-      . _Coerce
-
--- | The properties of the sheet.
-sProperties :: Lens' Sheet (Maybe SheetProperties)
-sProperties
-  = lens _sProperties (\ s a -> s{_sProperties = a})
-
-instance FromJSON Sheet where
-        parseJSON
-          = withObject "Sheet"
-              (\ o ->
-                 Sheet' <$>
-                   (o .:? "data" .!= mempty) <*>
-                     (o .:? "merges" .!= mempty)
-                     <*> (o .:? "protectedRanges" .!= mempty)
-                     <*> (o .:? "bandedRanges" .!= mempty)
-                     <*> (o .:? "charts" .!= mempty)
-                     <*> (o .:? "basicFilter")
-                     <*> (o .:? "conditionalFormats" .!= mempty)
-                     <*> (o .:? "filterViews" .!= mempty)
-                     <*> (o .:? "properties"))
-
-instance ToJSON Sheet where
-        toJSON Sheet'{..}
-          = object
-              (catMaybes
-                 [("data" .=) <$> _sData, ("merges" .=) <$> _sMerges,
-                  ("protectedRanges" .=) <$> _sProtectedRanges,
-                  ("bandedRanges" .=) <$> _sBandedRanges,
-                  ("charts" .=) <$> _sCharts,
-                  ("basicFilter" .=) <$> _sBasicFilter,
-                  ("conditionalFormats" .=) <$> _sConditionalFormats,
-                  ("filterViews" .=) <$> _sFilterViews,
-                  ("properties" .=) <$> _sProperties])
-
--- | A coordinate in a sheet. All indexes are zero-based.
---
--- /See:/ 'gridCoordinate' smart constructor.
-data GridCoordinate = GridCoordinate'
-    { _gcColumnIndex :: !(Maybe (Textual Int32))
-    , _gcRowIndex    :: !(Maybe (Textual Int32))
-    , _gcSheetId     :: !(Maybe (Textual Int32))
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'GridCoordinate' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gcColumnIndex'
---
--- * 'gcRowIndex'
---
--- * 'gcSheetId'
-gridCoordinate
-    :: GridCoordinate
-gridCoordinate =
-    GridCoordinate'
-    { _gcColumnIndex = Nothing
-    , _gcRowIndex = Nothing
-    , _gcSheetId = Nothing
-    }
-
--- | The column index of the coordinate.
-gcColumnIndex :: Lens' GridCoordinate (Maybe Int32)
-gcColumnIndex
-  = lens _gcColumnIndex
-      (\ s a -> s{_gcColumnIndex = a})
-      . mapping _Coerce
-
--- | The row index of the coordinate.
-gcRowIndex :: Lens' GridCoordinate (Maybe Int32)
-gcRowIndex
-  = lens _gcRowIndex (\ s a -> s{_gcRowIndex = a}) .
-      mapping _Coerce
-
--- | The sheet this coordinate is on.
-gcSheetId :: Lens' GridCoordinate (Maybe Int32)
-gcSheetId
-  = lens _gcSheetId (\ s a -> s{_gcSheetId = a}) .
-      mapping _Coerce
-
-instance FromJSON GridCoordinate where
-        parseJSON
-          = withObject "GridCoordinate"
-              (\ o ->
-                 GridCoordinate' <$>
-                   (o .:? "columnIndex") <*> (o .:? "rowIndex") <*>
-                     (o .:? "sheetId"))
-
-instance ToJSON GridCoordinate where
-        toJSON GridCoordinate'{..}
-          = object
-              (catMaybes
-                 [("columnIndex" .=) <$> _gcColumnIndex,
-                  ("rowIndex" .=) <$> _gcRowIndex,
-                  ("sheetId" .=) <$> _gcSheetId])
-
--- | The response when clearing a range of values in a spreadsheet.
---
--- /See:/ 'clearValuesResponse' smart constructor.
-data ClearValuesResponse = ClearValuesResponse'
-    { _cvrClearedRange  :: !(Maybe Text)
-    , _cvrSpreadsheetId :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ClearValuesResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cvrClearedRange'
---
--- * 'cvrSpreadsheetId'
-clearValuesResponse
-    :: ClearValuesResponse
-clearValuesResponse =
-    ClearValuesResponse'
-    { _cvrClearedRange = Nothing
-    , _cvrSpreadsheetId = Nothing
-    }
-
--- | The range (in A1 notation) that was cleared. (If the request was for an
--- unbounded range or a ranger larger than the bounds of the sheet, this
--- will be the actual range that was cleared, bounded to the sheet\'s
--- limits.)
-cvrClearedRange :: Lens' ClearValuesResponse (Maybe Text)
-cvrClearedRange
-  = lens _cvrClearedRange
-      (\ s a -> s{_cvrClearedRange = a})
-
--- | The spreadsheet the updates were applied to.
-cvrSpreadsheetId :: Lens' ClearValuesResponse (Maybe Text)
-cvrSpreadsheetId
-  = lens _cvrSpreadsheetId
-      (\ s a -> s{_cvrSpreadsheetId = a})
-
-instance FromJSON ClearValuesResponse where
-        parseJSON
-          = withObject "ClearValuesResponse"
-              (\ o ->
-                 ClearValuesResponse' <$>
-                   (o .:? "clearedRange") <*> (o .:? "spreadsheetId"))
-
-instance ToJSON ClearValuesResponse where
-        toJSON ClearValuesResponse'{..}
-          = object
-              (catMaybes
-                 [("clearedRange" .=) <$> _cvrClearedRange,
-                  ("spreadsheetId" .=) <$> _cvrSpreadsheetId])
-
--- | Clears the basic filter, if any exists on the sheet.
---
--- /See:/ 'clearBasicFilterRequest' smart constructor.
-newtype ClearBasicFilterRequest = ClearBasicFilterRequest'
-    { _cbfrSheetId :: Maybe (Textual Int32)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ClearBasicFilterRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cbfrSheetId'
-clearBasicFilterRequest
-    :: ClearBasicFilterRequest
-clearBasicFilterRequest =
-    ClearBasicFilterRequest'
-    { _cbfrSheetId = Nothing
-    }
-
--- | The sheet ID on which the basic filter should be cleared.
-cbfrSheetId :: Lens' ClearBasicFilterRequest (Maybe Int32)
-cbfrSheetId
-  = lens _cbfrSheetId (\ s a -> s{_cbfrSheetId = a}) .
-      mapping _Coerce
-
-instance FromJSON ClearBasicFilterRequest where
-        parseJSON
-          = withObject "ClearBasicFilterRequest"
-              (\ o ->
-                 ClearBasicFilterRequest' <$> (o .:? "sheetId"))
-
-instance ToJSON ClearBasicFilterRequest where
-        toJSON ClearBasicFilterRequest'{..}
-          = object
-              (catMaybes [("sheetId" .=) <$> _cbfrSheetId])
-
--- | Update an embedded object\'s position (such as a moving or resizing a
--- chart or image).
---
--- /See:/ 'updateEmbeddedObjectPositionRequest' smart constructor.
-data UpdateEmbeddedObjectPositionRequest = UpdateEmbeddedObjectPositionRequest'
-    { _ueoprNewPosition :: !(Maybe EmbeddedObjectPosition)
-    , _ueoprObjectId    :: !(Maybe (Textual Int32))
-    , _ueoprFields      :: !(Maybe FieldMask)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'UpdateEmbeddedObjectPositionRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ueoprNewPosition'
---
--- * 'ueoprObjectId'
---
--- * 'ueoprFields'
-updateEmbeddedObjectPositionRequest
-    :: UpdateEmbeddedObjectPositionRequest
-updateEmbeddedObjectPositionRequest =
-    UpdateEmbeddedObjectPositionRequest'
-    { _ueoprNewPosition = Nothing
-    , _ueoprObjectId = Nothing
-    , _ueoprFields = Nothing
-    }
-
--- | An explicit position to move the embedded object to. If
--- newPosition.sheetId is set, a new sheet with that ID will be created. If
--- newPosition.newSheet is set to true, a new sheet will be created with an
--- ID that will be chosen for you.
-ueoprNewPosition :: Lens' UpdateEmbeddedObjectPositionRequest (Maybe EmbeddedObjectPosition)
-ueoprNewPosition
-  = lens _ueoprNewPosition
-      (\ s a -> s{_ueoprNewPosition = a})
-
--- | The ID of the object to moved.
-ueoprObjectId :: Lens' UpdateEmbeddedObjectPositionRequest (Maybe Int32)
-ueoprObjectId
-  = lens _ueoprObjectId
-      (\ s a -> s{_ueoprObjectId = a})
-      . mapping _Coerce
-
--- | The fields of OverlayPosition that should be updated when setting a new
--- position. Used only if newPosition.overlayPosition is set, in which case
--- at least one field must be specified. The root
--- \`newPosition.overlayPosition\` is implied and should not be specified.
--- A single \`\"*\"\` can be used as short-hand for listing every field.
-ueoprFields :: Lens' UpdateEmbeddedObjectPositionRequest (Maybe FieldMask)
-ueoprFields
-  = lens _ueoprFields (\ s a -> s{_ueoprFields = a})
-
-instance FromJSON UpdateEmbeddedObjectPositionRequest
-         where
-        parseJSON
-          = withObject "UpdateEmbeddedObjectPositionRequest"
-              (\ o ->
-                 UpdateEmbeddedObjectPositionRequest' <$>
-                   (o .:? "newPosition") <*> (o .:? "objectId") <*>
-                     (o .:? "fields"))
-
-instance ToJSON UpdateEmbeddedObjectPositionRequest
-         where
-        toJSON UpdateEmbeddedObjectPositionRequest'{..}
-          = object
-              (catMaybes
-                 [("newPosition" .=) <$> _ueoprNewPosition,
-                  ("objectId" .=) <$> _ueoprObjectId,
-                  ("fields" .=) <$> _ueoprFields])
-
--- | A rule that may or may not match, depending on the condition.
---
--- /See:/ 'booleanRule' smart constructor.
-data BooleanRule = BooleanRule'
-    { _brFormat    :: !(Maybe CellFormat)
-    , _brCondition :: !(Maybe BooleanCondition)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'BooleanRule' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'brFormat'
---
--- * 'brCondition'
-booleanRule
-    :: BooleanRule
-booleanRule =
-    BooleanRule'
-    { _brFormat = Nothing
-    , _brCondition = Nothing
-    }
-
--- | The format to apply. Conditional formatting can only apply a subset of
--- formatting: bold, italic, strikethrough, foreground color & background
--- color.
-brFormat :: Lens' BooleanRule (Maybe CellFormat)
-brFormat = lens _brFormat (\ s a -> s{_brFormat = a})
-
--- | The condition of the rule. If the condition evaluates to true, the
--- format will be applied.
-brCondition :: Lens' BooleanRule (Maybe BooleanCondition)
-brCondition
-  = lens _brCondition (\ s a -> s{_brCondition = a})
-
-instance FromJSON BooleanRule where
-        parseJSON
-          = withObject "BooleanRule"
-              (\ o ->
-                 BooleanRule' <$>
-                   (o .:? "format") <*> (o .:? "condition"))
-
-instance ToJSON BooleanRule where
-        toJSON BooleanRule'{..}
-          = object
-              (catMaybes
-                 [("format" .=) <$> _brFormat,
-                  ("condition" .=) <$> _brCondition])
-
--- | A combination of a source range and how to extend that source.
---
--- /See:/ 'sourceAndDestination' smart constructor.
-data SourceAndDestination = SourceAndDestination'
-    { _sadDimension  :: !(Maybe SourceAndDestinationDimension)
-    , _sadSource     :: !(Maybe GridRange)
-    , _sadFillLength :: !(Maybe (Textual Int32))
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'SourceAndDestination' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sadDimension'
---
--- * 'sadSource'
---
--- * 'sadFillLength'
-sourceAndDestination
-    :: SourceAndDestination
-sourceAndDestination =
-    SourceAndDestination'
-    { _sadDimension = Nothing
-    , _sadSource = Nothing
-    , _sadFillLength = Nothing
-    }
-
--- | The dimension that data should be filled into.
-sadDimension :: Lens' SourceAndDestination (Maybe SourceAndDestinationDimension)
-sadDimension
-  = lens _sadDimension (\ s a -> s{_sadDimension = a})
-
--- | The location of the data to use as the source of the autofill.
-sadSource :: Lens' SourceAndDestination (Maybe GridRange)
-sadSource
-  = lens _sadSource (\ s a -> s{_sadSource = a})
-
--- | The number of rows or columns that data should be filled into. Positive
--- numbers expand beyond the last row or last column of the source.
--- Negative numbers expand before the first row or first column of the
--- source.
-sadFillLength :: Lens' SourceAndDestination (Maybe Int32)
-sadFillLength
-  = lens _sadFillLength
-      (\ s a -> s{_sadFillLength = a})
-      . mapping _Coerce
-
-instance FromJSON SourceAndDestination where
-        parseJSON
-          = withObject "SourceAndDestination"
-              (\ o ->
-                 SourceAndDestination' <$>
-                   (o .:? "dimension") <*> (o .:? "source") <*>
-                     (o .:? "fillLength"))
-
-instance ToJSON SourceAndDestination where
-        toJSON SourceAndDestination'{..}
-          = object
-              (catMaybes
-                 [("dimension" .=) <$> _sadDimension,
-                  ("source" .=) <$> _sadSource,
-                  ("fillLength" .=) <$> _sadFillLength])
-
--- | Inserts data into the spreadsheet starting at the specified coordinate.
---
--- /See:/ 'pasteDataRequest' smart constructor.
-data PasteDataRequest = PasteDataRequest'
-    { _pdrData       :: !(Maybe Text)
-    , _pdrCoordinate :: !(Maybe GridCoordinate)
-    , _pdrHTML       :: !(Maybe Bool)
-    , _pdrType       :: !(Maybe PasteDataRequestType)
-    , _pdrDelimiter  :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'PasteDataRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'pdrData'
---
--- * 'pdrCoordinate'
---
--- * 'pdrHTML'
---
--- * 'pdrType'
---
--- * 'pdrDelimiter'
-pasteDataRequest
-    :: PasteDataRequest
-pasteDataRequest =
-    PasteDataRequest'
-    { _pdrData = Nothing
-    , _pdrCoordinate = Nothing
-    , _pdrHTML = Nothing
-    , _pdrType = Nothing
-    , _pdrDelimiter = Nothing
-    }
-
--- | The data to insert.
-pdrData :: Lens' PasteDataRequest (Maybe Text)
-pdrData = lens _pdrData (\ s a -> s{_pdrData = a})
-
--- | The coordinate at which the data should start being inserted.
-pdrCoordinate :: Lens' PasteDataRequest (Maybe GridCoordinate)
-pdrCoordinate
-  = lens _pdrCoordinate
-      (\ s a -> s{_pdrCoordinate = a})
-
--- | True if the data is HTML.
-pdrHTML :: Lens' PasteDataRequest (Maybe Bool)
-pdrHTML = lens _pdrHTML (\ s a -> s{_pdrHTML = a})
-
--- | How the data should be pasted.
-pdrType :: Lens' PasteDataRequest (Maybe PasteDataRequestType)
-pdrType = lens _pdrType (\ s a -> s{_pdrType = a})
-
--- | The delimiter in the data.
-pdrDelimiter :: Lens' PasteDataRequest (Maybe Text)
-pdrDelimiter
-  = lens _pdrDelimiter (\ s a -> s{_pdrDelimiter = a})
-
-instance FromJSON PasteDataRequest where
-        parseJSON
-          = withObject "PasteDataRequest"
-              (\ o ->
-                 PasteDataRequest' <$>
-                   (o .:? "data") <*> (o .:? "coordinate") <*>
-                     (o .:? "html")
-                     <*> (o .:? "type")
-                     <*> (o .:? "delimiter"))
-
-instance ToJSON PasteDataRequest where
-        toJSON PasteDataRequest'{..}
-          = object
-              (catMaybes
-                 [("data" .=) <$> _pdrData,
-                  ("coordinate" .=) <$> _pdrCoordinate,
-                  ("html" .=) <$> _pdrHTML, ("type" .=) <$> _pdrType,
-                  ("delimiter" .=) <$> _pdrDelimiter])
-
--- | Adds new cells after the last row with data in a sheet, inserting new
--- rows into the sheet if necessary.
---
--- /See:/ 'appendCellsRequest' smart constructor.
-data AppendCellsRequest = AppendCellsRequest'
-    { _acrRows    :: !(Maybe [RowData])
-    , _acrSheetId :: !(Maybe (Textual Int32))
-    , _acrFields  :: !(Maybe FieldMask)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AppendCellsRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'acrRows'
---
--- * 'acrSheetId'
---
--- * 'acrFields'
-appendCellsRequest
-    :: AppendCellsRequest
-appendCellsRequest =
-    AppendCellsRequest'
-    { _acrRows = Nothing
-    , _acrSheetId = Nothing
-    , _acrFields = Nothing
-    }
-
--- | The data to append.
-acrRows :: Lens' AppendCellsRequest [RowData]
-acrRows
-  = lens _acrRows (\ s a -> s{_acrRows = a}) . _Default
-      . _Coerce
-
--- | The sheet ID to append the data to.
-acrSheetId :: Lens' AppendCellsRequest (Maybe Int32)
-acrSheetId
-  = lens _acrSheetId (\ s a -> s{_acrSheetId = a}) .
-      mapping _Coerce
-
--- | The fields of CellData that should be updated. At least one field must
--- be specified. The root is the CellData; \'row.values.\' should not be
--- specified. A single \`\"*\"\` can be used as short-hand for listing
--- every field.
-acrFields :: Lens' AppendCellsRequest (Maybe FieldMask)
-acrFields
-  = lens _acrFields (\ s a -> s{_acrFields = a})
-
-instance FromJSON AppendCellsRequest where
-        parseJSON
-          = withObject "AppendCellsRequest"
-              (\ o ->
-                 AppendCellsRequest' <$>
-                   (o .:? "rows" .!= mempty) <*> (o .:? "sheetId") <*>
-                     (o .:? "fields"))
-
-instance ToJSON AppendCellsRequest where
-        toJSON AppendCellsRequest'{..}
-          = object
-              (catMaybes
-                 [("rows" .=) <$> _acrRows,
-                  ("sheetId" .=) <$> _acrSheetId,
-                  ("fields" .=) <$> _acrFields])
-
--- | The result of the find\/replace.
---
--- /See:/ 'findReplaceResponse' smart constructor.
-data FindReplaceResponse = FindReplaceResponse'
-    { _frrValuesChanged      :: !(Maybe (Textual Int32))
-    , _frrFormulasChanged    :: !(Maybe (Textual Int32))
-    , _frrRowsChanged        :: !(Maybe (Textual Int32))
-    , _frrSheetsChanged      :: !(Maybe (Textual Int32))
-    , _frrOccurrencesChanged :: !(Maybe (Textual Int32))
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'FindReplaceResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'frrValuesChanged'
---
--- * 'frrFormulasChanged'
---
--- * 'frrRowsChanged'
---
--- * 'frrSheetsChanged'
---
--- * 'frrOccurrencesChanged'
-findReplaceResponse
-    :: FindReplaceResponse
-findReplaceResponse =
-    FindReplaceResponse'
-    { _frrValuesChanged = Nothing
-    , _frrFormulasChanged = Nothing
-    , _frrRowsChanged = Nothing
-    , _frrSheetsChanged = Nothing
-    , _frrOccurrencesChanged = Nothing
-    }
-
--- | The number of non-formula cells changed.
-frrValuesChanged :: Lens' FindReplaceResponse (Maybe Int32)
-frrValuesChanged
-  = lens _frrValuesChanged
-      (\ s a -> s{_frrValuesChanged = a})
-      . mapping _Coerce
-
--- | The number of formula cells changed.
-frrFormulasChanged :: Lens' FindReplaceResponse (Maybe Int32)
-frrFormulasChanged
-  = lens _frrFormulasChanged
-      (\ s a -> s{_frrFormulasChanged = a})
-      . mapping _Coerce
-
--- | The number of rows changed.
-frrRowsChanged :: Lens' FindReplaceResponse (Maybe Int32)
-frrRowsChanged
-  = lens _frrRowsChanged
-      (\ s a -> s{_frrRowsChanged = a})
-      . mapping _Coerce
-
--- | The number of sheets changed.
-frrSheetsChanged :: Lens' FindReplaceResponse (Maybe Int32)
-frrSheetsChanged
-  = lens _frrSheetsChanged
-      (\ s a -> s{_frrSheetsChanged = a})
-      . mapping _Coerce
-
--- | The number of occurrences (possibly multiple within a cell) changed. For
--- example, if replacing \`\"e\"\` with \`\"o\"\` in \`\"Google Sheets\"\`,
--- this would be \`\"3\"\` because \`\"Google Sheets\"\` -> \`\"Googlo
--- Shoots\"\`.
-frrOccurrencesChanged :: Lens' FindReplaceResponse (Maybe Int32)
-frrOccurrencesChanged
-  = lens _frrOccurrencesChanged
-      (\ s a -> s{_frrOccurrencesChanged = a})
-      . mapping _Coerce
-
-instance FromJSON FindReplaceResponse where
-        parseJSON
-          = withObject "FindReplaceResponse"
-              (\ o ->
-                 FindReplaceResponse' <$>
-                   (o .:? "valuesChanged") <*> (o .:? "formulasChanged")
-                     <*> (o .:? "rowsChanged")
-                     <*> (o .:? "sheetsChanged")
-                     <*> (o .:? "occurrencesChanged"))
-
-instance ToJSON FindReplaceResponse where
-        toJSON FindReplaceResponse'{..}
-          = object
-              (catMaybes
-                 [("valuesChanged" .=) <$> _frrValuesChanged,
-                  ("formulasChanged" .=) <$> _frrFormulasChanged,
-                  ("rowsChanged" .=) <$> _frrRowsChanged,
-                  ("sheetsChanged" .=) <$> _frrSheetsChanged,
-                  ("occurrencesChanged" .=) <$>
-                    _frrOccurrencesChanged])
-
--- | A </chart/interactive/docs/gallery/piechart pie chart>.
---
--- /See:/ 'pieChartSpec' smart constructor.
-data PieChartSpec = PieChartSpec'
-    { _pcsPieHole          :: !(Maybe (Textual Double))
-    , _pcsLegendPosition   :: !(Maybe PieChartSpecLegendPosition)
-    , _pcsDomain           :: !(Maybe ChartData)
-    , _pcsSeries           :: !(Maybe ChartData)
-    , _pcsThreeDimensional :: !(Maybe Bool)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'PieChartSpec' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'pcsPieHole'
---
--- * 'pcsLegendPosition'
---
--- * 'pcsDomain'
---
--- * 'pcsSeries'
---
--- * 'pcsThreeDimensional'
-pieChartSpec
-    :: PieChartSpec
-pieChartSpec =
-    PieChartSpec'
-    { _pcsPieHole = Nothing
-    , _pcsLegendPosition = Nothing
-    , _pcsDomain = Nothing
-    , _pcsSeries = Nothing
-    , _pcsThreeDimensional = Nothing
-    }
-
--- | The size of the hole in the pie chart.
-pcsPieHole :: Lens' PieChartSpec (Maybe Double)
-pcsPieHole
-  = lens _pcsPieHole (\ s a -> s{_pcsPieHole = a}) .
-      mapping _Coerce
-
--- | Where the legend of the pie chart should be drawn.
-pcsLegendPosition :: Lens' PieChartSpec (Maybe PieChartSpecLegendPosition)
-pcsLegendPosition
-  = lens _pcsLegendPosition
-      (\ s a -> s{_pcsLegendPosition = a})
-
--- | The data that covers the domain of the pie chart.
-pcsDomain :: Lens' PieChartSpec (Maybe ChartData)
-pcsDomain
-  = lens _pcsDomain (\ s a -> s{_pcsDomain = a})
-
--- | The data that covers the one and only series of the pie chart.
-pcsSeries :: Lens' PieChartSpec (Maybe ChartData)
-pcsSeries
-  = lens _pcsSeries (\ s a -> s{_pcsSeries = a})
-
--- | True if the pie is three dimensional.
-pcsThreeDimensional :: Lens' PieChartSpec (Maybe Bool)
-pcsThreeDimensional
-  = lens _pcsThreeDimensional
-      (\ s a -> s{_pcsThreeDimensional = a})
-
-instance FromJSON PieChartSpec where
-        parseJSON
-          = withObject "PieChartSpec"
-              (\ o ->
-                 PieChartSpec' <$>
-                   (o .:? "pieHole") <*> (o .:? "legendPosition") <*>
-                     (o .:? "domain")
-                     <*> (o .:? "series")
-                     <*> (o .:? "threeDimensional"))
-
-instance ToJSON PieChartSpec where
-        toJSON PieChartSpec'{..}
-          = object
-              (catMaybes
-                 [("pieHole" .=) <$> _pcsPieHole,
-                  ("legendPosition" .=) <$> _pcsLegendPosition,
-                  ("domain" .=) <$> _pcsDomain,
-                  ("series" .=) <$> _pcsSeries,
-                  ("threeDimensional" .=) <$> _pcsThreeDimensional])
-
--- | The response when updating a range of values in a spreadsheet.
---
--- /See:/ 'appendValuesResponse' smart constructor.
-data AppendValuesResponse = AppendValuesResponse'
-    { _avrSpreadsheetId :: !(Maybe Text)
-    , _avrUpdates       :: !(Maybe UpdateValuesResponse)
-    , _avrTableRange    :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AppendValuesResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'avrSpreadsheetId'
---
--- * 'avrUpdates'
---
--- * 'avrTableRange'
-appendValuesResponse
-    :: AppendValuesResponse
-appendValuesResponse =
-    AppendValuesResponse'
-    { _avrSpreadsheetId = Nothing
-    , _avrUpdates = Nothing
-    , _avrTableRange = Nothing
-    }
-
--- | The spreadsheet the updates were applied to.
-avrSpreadsheetId :: Lens' AppendValuesResponse (Maybe Text)
-avrSpreadsheetId
-  = lens _avrSpreadsheetId
-      (\ s a -> s{_avrSpreadsheetId = a})
-
--- | Information about the updates that were applied.
-avrUpdates :: Lens' AppendValuesResponse (Maybe UpdateValuesResponse)
-avrUpdates
-  = lens _avrUpdates (\ s a -> s{_avrUpdates = a})
-
--- | The range (in A1 notation) of the table that values are being appended
--- to (before the values were appended). Empty if no table was found.
-avrTableRange :: Lens' AppendValuesResponse (Maybe Text)
-avrTableRange
-  = lens _avrTableRange
-      (\ s a -> s{_avrTableRange = a})
-
-instance FromJSON AppendValuesResponse where
-        parseJSON
-          = withObject "AppendValuesResponse"
-              (\ o ->
-                 AppendValuesResponse' <$>
-                   (o .:? "spreadsheetId") <*> (o .:? "updates") <*>
-                     (o .:? "tableRange"))
-
-instance ToJSON AppendValuesResponse where
-        toJSON AppendValuesResponse'{..}
-          = object
-              (catMaybes
-                 [("spreadsheetId" .=) <$> _avrSpreadsheetId,
-                  ("updates" .=) <$> _avrUpdates,
-                  ("tableRange" .=) <$> _avrTableRange])
-
--- | A data validation rule.
---
--- /See:/ 'dataValidationRule' smart constructor.
-data DataValidationRule = DataValidationRule'
-    { _dvrShowCustomUi :: !(Maybe Bool)
-    , _dvrInputMessage :: !(Maybe Text)
-    , _dvrStrict       :: !(Maybe Bool)
-    , _dvrCondition    :: !(Maybe BooleanCondition)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DataValidationRule' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dvrShowCustomUi'
---
--- * 'dvrInputMessage'
---
--- * 'dvrStrict'
---
--- * 'dvrCondition'
-dataValidationRule
-    :: DataValidationRule
-dataValidationRule =
-    DataValidationRule'
-    { _dvrShowCustomUi = Nothing
-    , _dvrInputMessage = Nothing
-    , _dvrStrict = Nothing
-    , _dvrCondition = Nothing
-    }
-
--- | True if the UI should be customized based on the kind of condition. If
--- true, \"List\" conditions will show a dropdown.
-dvrShowCustomUi :: Lens' DataValidationRule (Maybe Bool)
-dvrShowCustomUi
-  = lens _dvrShowCustomUi
-      (\ s a -> s{_dvrShowCustomUi = a})
-
--- | A message to show the user when adding data to the cell.
-dvrInputMessage :: Lens' DataValidationRule (Maybe Text)
-dvrInputMessage
-  = lens _dvrInputMessage
-      (\ s a -> s{_dvrInputMessage = a})
-
--- | True if invalid data should be rejected.
-dvrStrict :: Lens' DataValidationRule (Maybe Bool)
-dvrStrict
-  = lens _dvrStrict (\ s a -> s{_dvrStrict = a})
-
--- | The condition that data in the cell must match.
-dvrCondition :: Lens' DataValidationRule (Maybe BooleanCondition)
-dvrCondition
-  = lens _dvrCondition (\ s a -> s{_dvrCondition = a})
-
-instance FromJSON DataValidationRule where
-        parseJSON
-          = withObject "DataValidationRule"
-              (\ o ->
-                 DataValidationRule' <$>
-                   (o .:? "showCustomUi") <*> (o .:? "inputMessage") <*>
-                     (o .:? "strict")
-                     <*> (o .:? "condition"))
-
-instance ToJSON DataValidationRule where
-        toJSON DataValidationRule'{..}
-          = object
-              (catMaybes
-                 [("showCustomUi" .=) <$> _dvrShowCustomUi,
-                  ("inputMessage" .=) <$> _dvrInputMessage,
-                  ("strict" .=) <$> _dvrStrict,
-                  ("condition" .=) <$> _dvrCondition])
-
--- | A filter view.
---
--- /See:/ 'filterView' smart constructor.
-data FilterView = FilterView'
-    { _fvSortSpecs    :: !(Maybe [SortSpec])
-    , _fvNamedRangeId :: !(Maybe Text)
-    , _fvRange        :: !(Maybe GridRange)
-    , _fvFilterViewId :: !(Maybe (Textual Int32))
-    , _fvTitle        :: !(Maybe Text)
-    , _fvCriteria     :: !(Maybe FilterViewCriteria)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'FilterView' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'fvSortSpecs'
---
--- * 'fvNamedRangeId'
---
--- * 'fvRange'
---
--- * 'fvFilterViewId'
---
--- * 'fvTitle'
---
--- * 'fvCriteria'
-filterView
-    :: FilterView
-filterView =
-    FilterView'
-    { _fvSortSpecs = Nothing
-    , _fvNamedRangeId = Nothing
-    , _fvRange = Nothing
-    , _fvFilterViewId = Nothing
-    , _fvTitle = Nothing
-    , _fvCriteria = Nothing
-    }
-
--- | The sort order per column. Later specifications are used when values are
--- equal in the earlier specifications.
-fvSortSpecs :: Lens' FilterView [SortSpec]
-fvSortSpecs
-  = lens _fvSortSpecs (\ s a -> s{_fvSortSpecs = a}) .
-      _Default
-      . _Coerce
-
--- | The named range this filter view is backed by, if any. When writing,
--- only one of range or named_range_id may be set.
-fvNamedRangeId :: Lens' FilterView (Maybe Text)
-fvNamedRangeId
-  = lens _fvNamedRangeId
-      (\ s a -> s{_fvNamedRangeId = a})
-
--- | The range this filter view covers. When writing, only one of range or
--- named_range_id may be set.
-fvRange :: Lens' FilterView (Maybe GridRange)
-fvRange = lens _fvRange (\ s a -> s{_fvRange = a})
-
--- | The ID of the filter view.
-fvFilterViewId :: Lens' FilterView (Maybe Int32)
-fvFilterViewId
-  = lens _fvFilterViewId
-      (\ s a -> s{_fvFilterViewId = a})
-      . mapping _Coerce
-
--- | The name of the filter view.
-fvTitle :: Lens' FilterView (Maybe Text)
-fvTitle = lens _fvTitle (\ s a -> s{_fvTitle = a})
-
--- | The criteria for showing\/hiding values per column. The map\'s key is
--- the column index, and the value is the criteria for that column.
-fvCriteria :: Lens' FilterView (Maybe FilterViewCriteria)
-fvCriteria
-  = lens _fvCriteria (\ s a -> s{_fvCriteria = a})
-
-instance FromJSON FilterView where
-        parseJSON
-          = withObject "FilterView"
-              (\ o ->
-                 FilterView' <$>
-                   (o .:? "sortSpecs" .!= mempty) <*>
-                     (o .:? "namedRangeId")
-                     <*> (o .:? "range")
-                     <*> (o .:? "filterViewId")
-                     <*> (o .:? "title")
-                     <*> (o .:? "criteria"))
-
-instance ToJSON FilterView where
-        toJSON FilterView'{..}
-          = object
-              (catMaybes
-                 [("sortSpecs" .=) <$> _fvSortSpecs,
-                  ("namedRangeId" .=) <$> _fvNamedRangeId,
-                  ("range" .=) <$> _fvRange,
-                  ("filterViewId" .=) <$> _fvFilterViewId,
-                  ("title" .=) <$> _fvTitle,
-                  ("criteria" .=) <$> _fvCriteria])
-
--- | Represents a color in the RGBA color space. This representation is
--- designed for simplicity of conversion to\/from color representations in
--- various languages over compactness; for example, the fields of this
--- representation can be trivially provided to the constructor of
--- \"java.awt.Color\" in Java; it can also be trivially provided to
--- UIColor\'s \"+colorWithRed:green:blue:alpha\" method in iOS; and, with
--- just a little work, it can be easily formatted into a CSS \"rgba()\"
--- string in JavaScript, as well. Here are some examples: Example (Java):
--- import com.google.type.Color; \/\/ ... public static java.awt.Color
--- fromProto(Color protocolor) { float alpha = protocolor.hasAlpha() ?
--- protocolor.getAlpha().getValue() : 1.0; return new java.awt.Color(
--- protocolor.getRed(), protocolor.getGreen(), protocolor.getBlue(),
--- alpha); } public static Color toProto(java.awt.Color color) { float red
--- = (float) color.getRed(); float green = (float) color.getGreen(); float
--- blue = (float) color.getBlue(); float denominator = 255.0; Color.Builder
--- resultBuilder = Color .newBuilder() .setRed(red \/ denominator)
--- .setGreen(green \/ denominator) .setBlue(blue \/ denominator); int alpha
--- = color.getAlpha(); if (alpha != 255) { result.setAlpha( FloatValue
--- .newBuilder() .setValue(((float) alpha) \/ denominator) .build()); }
--- return resultBuilder.build(); } \/\/ ... Example (iOS \/ Obj-C): \/\/
--- ... static UIColor* fromProto(Color* protocolor) { float red =
--- [protocolor red]; float green = [protocolor green]; float blue =
--- [protocolor blue]; FloatValue* alpha_wrapper = [protocolor alpha]; float
--- alpha = 1.0; if (alpha_wrapper != nil) { alpha = [alpha_wrapper value];
--- } return [UIColor colorWithRed:red green:green blue:blue alpha:alpha]; }
--- static Color* toProto(UIColor* color) { CGFloat red, green, blue, alpha;
--- if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) { return
--- nil; } Color* result = [Color alloc] init]; [result setRed:red]; [result
--- setGreen:green]; [result setBlue:blue]; if (alpha \<= 0.9999) { [result
--- setAlpha:floatWrapperWithValue(alpha)]; } [result autorelease]; return
--- result; } \/\/ ... Example (JavaScript): \/\/ ... var protoToCssColor =
--- function(rgb_color) { var redFrac = rgb_color.red || 0.0; var greenFrac
--- = rgb_color.green || 0.0; var blueFrac = rgb_color.blue || 0.0; var red
--- = Math.floor(redFrac * 255); var green = Math.floor(greenFrac * 255);
--- var blue = Math.floor(blueFrac * 255); if (!(\'alpha\' in rgb_color)) {
--- return rgbToCssColor_(red, green, blue); } var alphaFrac =
--- rgb_color.alpha.value || 0.0; var rgbParams = [red, green,
--- blue].join(\',\'); return [\'rgba(\', rgbParams, \',\', alphaFrac,
--- \')\'].join(\'\'); }; var rgbToCssColor_ = function(red, green, blue) {
--- var rgbNumber = new Number((red \<\< 16) | (green \<\< 8) | blue); var
--- hexString = rgbNumber.toString(16); var missingZeros = 6 -
--- hexString.length; var resultBuilder = [\'#\']; for (var i = 0; i \<
--- missingZeros; i++) { resultBuilder.push(\'0\'); }
--- resultBuilder.push(hexString); return resultBuilder.join(\'\'); }; \/\/
--- ...
---
--- /See:/ 'color' smart constructor.
-data Color = Color'
-    { _cRed   :: !(Maybe (Textual Double))
-    , _cAlpha :: !(Maybe (Textual Double))
-    , _cGreen :: !(Maybe (Textual Double))
-    , _cBlue  :: !(Maybe (Textual Double))
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Color' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cRed'
---
--- * 'cAlpha'
---
--- * 'cGreen'
---
--- * 'cBlue'
-color
-    :: Color
-color =
-    Color'
-    { _cRed = Nothing
-    , _cAlpha = Nothing
-    , _cGreen = Nothing
-    , _cBlue = Nothing
-    }
-
--- | The amount of red in the color as a value in the interval [0, 1].
-cRed :: Lens' Color (Maybe Double)
-cRed
-  = lens _cRed (\ s a -> s{_cRed = a}) .
-      mapping _Coerce
-
--- | The fraction of this color that should be applied to the pixel. That is,
--- the final pixel color is defined by the equation: pixel color = alpha *
--- (this color) + (1.0 - alpha) * (background color) This means that a
--- value of 1.0 corresponds to a solid color, whereas a value of 0.0
--- corresponds to a completely transparent color. This uses a wrapper
--- message rather than a simple float scalar so that it is possible to
--- distinguish between a default value and the value being unset. If
--- omitted, this color object is to be rendered as a solid color (as if the
--- alpha value had been explicitly given with a value of 1.0).
-cAlpha :: Lens' Color (Maybe Double)
-cAlpha
-  = lens _cAlpha (\ s a -> s{_cAlpha = a}) .
-      mapping _Coerce
-
--- | The amount of green in the color as a value in the interval [0, 1].
-cGreen :: Lens' Color (Maybe Double)
-cGreen
-  = lens _cGreen (\ s a -> s{_cGreen = a}) .
-      mapping _Coerce
-
--- | The amount of blue in the color as a value in the interval [0, 1].
-cBlue :: Lens' Color (Maybe Double)
-cBlue
-  = lens _cBlue (\ s a -> s{_cBlue = a}) .
-      mapping _Coerce
-
-instance FromJSON Color where
-        parseJSON
-          = withObject "Color"
-              (\ o ->
-                 Color' <$>
-                   (o .:? "red") <*> (o .:? "alpha") <*> (o .:? "green")
-                     <*> (o .:? "blue"))
-
-instance ToJSON Color where
-        toJSON Color'{..}
-          = object
-              (catMaybes
-                 [("red" .=) <$> _cRed, ("alpha" .=) <$> _cAlpha,
-                  ("green" .=) <$> _cGreen, ("blue" .=) <$> _cBlue])
-
--- | Deletes a particular filter view.
---
--- /See:/ 'deleteFilterViewRequest' smart constructor.
-newtype DeleteFilterViewRequest = DeleteFilterViewRequest'
-    { _dfvrFilterId :: Maybe (Textual Int32)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeleteFilterViewRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dfvrFilterId'
-deleteFilterViewRequest
-    :: DeleteFilterViewRequest
-deleteFilterViewRequest =
-    DeleteFilterViewRequest'
-    { _dfvrFilterId = Nothing
-    }
-
--- | The ID of the filter to delete.
-dfvrFilterId :: Lens' DeleteFilterViewRequest (Maybe Int32)
-dfvrFilterId
-  = lens _dfvrFilterId (\ s a -> s{_dfvrFilterId = a})
-      . mapping _Coerce
-
-instance FromJSON DeleteFilterViewRequest where
-        parseJSON
-          = withObject "DeleteFilterViewRequest"
-              (\ o ->
-                 DeleteFilterViewRequest' <$> (o .:? "filterId"))
-
-instance ToJSON DeleteFilterViewRequest where
-        toJSON DeleteFilterViewRequest'{..}
-          = object
-              (catMaybes [("filterId" .=) <$> _dfvrFilterId])
-
--- | Updates properties of the filter view.
---
--- /See:/ 'updateFilterViewRequest' smart constructor.
-data UpdateFilterViewRequest = UpdateFilterViewRequest'
-    { _ufvrFilter :: !(Maybe FilterView)
-    , _ufvrFields :: !(Maybe FieldMask)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'UpdateFilterViewRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ufvrFilter'
---
--- * 'ufvrFields'
-updateFilterViewRequest
-    :: UpdateFilterViewRequest
-updateFilterViewRequest =
-    UpdateFilterViewRequest'
-    { _ufvrFilter = Nothing
-    , _ufvrFields = Nothing
-    }
-
--- | The new properties of the filter view.
-ufvrFilter :: Lens' UpdateFilterViewRequest (Maybe FilterView)
-ufvrFilter
-  = lens _ufvrFilter (\ s a -> s{_ufvrFilter = a})
-
--- | The fields that should be updated. At least one field must be specified.
--- The root \`filter\` is implied and should not be specified. A single
--- \`\"*\"\` can be used as short-hand for listing every field.
-ufvrFields :: Lens' UpdateFilterViewRequest (Maybe FieldMask)
-ufvrFields
-  = lens _ufvrFields (\ s a -> s{_ufvrFields = a})
-
-instance FromJSON UpdateFilterViewRequest where
-        parseJSON
-          = withObject "UpdateFilterViewRequest"
-              (\ o ->
-                 UpdateFilterViewRequest' <$>
-                   (o .:? "filter") <*> (o .:? "fields"))
-
-instance ToJSON UpdateFilterViewRequest where
-        toJSON UpdateFilterViewRequest'{..}
-          = object
-              (catMaybes
-                 [("filter" .=) <$> _ufvrFilter,
-                  ("fields" .=) <$> _ufvrFields])
-
--- | A single series of data in a chart. For example, if charting stock
--- prices over time, multiple series may exist, one for the \"Open Price\",
--- \"High Price\", \"Low Price\" and \"Close Price\".
---
--- /See:/ 'basicChartSeries' smart constructor.
-data BasicChartSeries = BasicChartSeries'
-    { _bcsTargetAxis :: !(Maybe BasicChartSeriesTargetAxis)
-    , _bcsSeries     :: !(Maybe ChartData)
-    , _bcsType       :: !(Maybe BasicChartSeriesType)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'BasicChartSeries' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'bcsTargetAxis'
---
--- * 'bcsSeries'
---
--- * 'bcsType'
-basicChartSeries
-    :: BasicChartSeries
-basicChartSeries =
-    BasicChartSeries'
-    { _bcsTargetAxis = Nothing
-    , _bcsSeries = Nothing
-    , _bcsType = Nothing
-    }
-
--- | The minor axis that will specify the range of values for this series.
--- For example, if charting stocks over time, the \"Volume\" series may
--- want to be pinned to the right with the prices pinned to the left,
--- because the scale of trading volume is different than the scale of
--- prices. It is an error to specify an axis that isn\'t a valid minor axis
--- for the chart\'s type.
-bcsTargetAxis :: Lens' BasicChartSeries (Maybe BasicChartSeriesTargetAxis)
-bcsTargetAxis
-  = lens _bcsTargetAxis
-      (\ s a -> s{_bcsTargetAxis = a})
-
--- | The data being visualized in this chart series.
-bcsSeries :: Lens' BasicChartSeries (Maybe ChartData)
-bcsSeries
-  = lens _bcsSeries (\ s a -> s{_bcsSeries = a})
-
--- | The type of this series. Valid only if the chartType is COMBO. Different
--- types will change the way the series is visualized. Only LINE, AREA, and
--- COLUMN are supported.
-bcsType :: Lens' BasicChartSeries (Maybe BasicChartSeriesType)
-bcsType = lens _bcsType (\ s a -> s{_bcsType = a})
-
-instance FromJSON BasicChartSeries where
-        parseJSON
-          = withObject "BasicChartSeries"
-              (\ o ->
-                 BasicChartSeries' <$>
-                   (o .:? "targetAxis") <*> (o .:? "series") <*>
-                     (o .:? "type"))
-
-instance ToJSON BasicChartSeries where
-        toJSON BasicChartSeries'{..}
-          = object
-              (catMaybes
-                 [("targetAxis" .=) <$> _bcsTargetAxis,
-                  ("series" .=) <$> _bcsSeries,
-                  ("type" .=) <$> _bcsType])
-
--- | Adds a new protected range.
---
--- /See:/ 'addProtectedRangeRequest' smart constructor.
-newtype AddProtectedRangeRequest = AddProtectedRangeRequest'
-    { _aprrProtectedRange :: Maybe ProtectedRange
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AddProtectedRangeRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'aprrProtectedRange'
-addProtectedRangeRequest
-    :: AddProtectedRangeRequest
-addProtectedRangeRequest =
-    AddProtectedRangeRequest'
-    { _aprrProtectedRange = Nothing
-    }
-
--- | The protected range to be added. The protectedRangeId field is optional;
--- if one is not set, an id will be randomly generated. (It is an error to
--- specify the ID of a range that already exists.)
-aprrProtectedRange :: Lens' AddProtectedRangeRequest (Maybe ProtectedRange)
-aprrProtectedRange
-  = lens _aprrProtectedRange
-      (\ s a -> s{_aprrProtectedRange = a})
-
-instance FromJSON AddProtectedRangeRequest where
-        parseJSON
-          = withObject "AddProtectedRangeRequest"
-              (\ o ->
-                 AddProtectedRangeRequest' <$>
-                   (o .:? "protectedRange"))
-
-instance ToJSON AddProtectedRangeRequest where
-        toJSON AddProtectedRangeRequest'{..}
-          = object
-              (catMaybes
-                 [("protectedRange" .=) <$> _aprrProtectedRange])
-
--- | Updates all cells in the range to the values in the given Cell object.
--- Only the fields listed in the fields field are updated; others are
--- unchanged. If writing a cell with a formula, the formula\'s ranges will
--- automatically increment for each field in the range. For example, if
--- writing a cell with formula \`=A1\` into range B2:C4, B2 would be
--- \`=A1\`, B3 would be \`=A2\`, B4 would be \`=A3\`, C2 would be \`=B1\`,
--- C3 would be \`=B2\`, C4 would be \`=B3\`. To keep the formula\'s ranges
--- static, use the \`$\` indicator. For example, use the formula \`=$A$1\`
--- to prevent both the row and the column from incrementing.
---
--- /See:/ 'repeatCellRequest' smart constructor.
-data RepeatCellRequest = RepeatCellRequest'
-    { _rcrCell   :: !(Maybe CellData)
-    , _rcrRange  :: !(Maybe GridRange)
-    , _rcrFields :: !(Maybe FieldMask)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'RepeatCellRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rcrCell'
---
--- * 'rcrRange'
---
--- * 'rcrFields'
-repeatCellRequest
-    :: RepeatCellRequest
-repeatCellRequest =
-    RepeatCellRequest'
-    { _rcrCell = Nothing
-    , _rcrRange = Nothing
-    , _rcrFields = Nothing
-    }
-
--- | The data to write.
-rcrCell :: Lens' RepeatCellRequest (Maybe CellData)
-rcrCell = lens _rcrCell (\ s a -> s{_rcrCell = a})
-
--- | The range to repeat the cell in.
-rcrRange :: Lens' RepeatCellRequest (Maybe GridRange)
-rcrRange = lens _rcrRange (\ s a -> s{_rcrRange = a})
-
--- | The fields that should be updated. At least one field must be specified.
--- The root \`cell\` is implied and should not be specified. A single
--- \`\"*\"\` can be used as short-hand for listing every field.
-rcrFields :: Lens' RepeatCellRequest (Maybe FieldMask)
-rcrFields
-  = lens _rcrFields (\ s a -> s{_rcrFields = a})
-
-instance FromJSON RepeatCellRequest where
-        parseJSON
-          = withObject "RepeatCellRequest"
-              (\ o ->
-                 RepeatCellRequest' <$>
-                   (o .:? "cell") <*> (o .:? "range") <*>
-                     (o .:? "fields"))
-
-instance ToJSON RepeatCellRequest where
-        toJSON RepeatCellRequest'{..}
-          = object
-              (catMaybes
-                 [("cell" .=) <$> _rcrCell,
-                  ("range" .=) <$> _rcrRange,
-                  ("fields" .=) <$> _rcrFields])
-
--- | The value of the condition.
---
--- /See:/ 'conditionValue' smart constructor.
-data ConditionValue = ConditionValue'
-    { _cvRelativeDate     :: !(Maybe ConditionValueRelativeDate)
-    , _cvUserEnteredValue :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ConditionValue' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cvRelativeDate'
---
--- * 'cvUserEnteredValue'
-conditionValue
-    :: ConditionValue
-conditionValue =
-    ConditionValue'
-    { _cvRelativeDate = Nothing
-    , _cvUserEnteredValue = Nothing
-    }
-
--- | A relative date (based on the current date). Valid only if the type is
--- DATE_BEFORE, DATE_AFTER, DATE_ON_OR_BEFORE or DATE_ON_OR_AFTER. Relative
--- dates are not supported in data validation. They are supported only in
--- conditional formatting and conditional filters.
-cvRelativeDate :: Lens' ConditionValue (Maybe ConditionValueRelativeDate)
-cvRelativeDate
-  = lens _cvRelativeDate
-      (\ s a -> s{_cvRelativeDate = a})
-
--- | A value the condition is based on. The value will be parsed as if the
--- user typed into a cell. Formulas are supported (and must begin with an
--- \`=\`).
-cvUserEnteredValue :: Lens' ConditionValue (Maybe Text)
-cvUserEnteredValue
-  = lens _cvUserEnteredValue
-      (\ s a -> s{_cvUserEnteredValue = a})
-
-instance FromJSON ConditionValue where
-        parseJSON
-          = withObject "ConditionValue"
-              (\ o ->
-                 ConditionValue' <$>
-                   (o .:? "relativeDate") <*>
-                     (o .:? "userEnteredValue"))
-
-instance ToJSON ConditionValue where
-        toJSON ConditionValue'{..}
-          = object
-              (catMaybes
-                 [("relativeDate" .=) <$> _cvRelativeDate,
-                  ("userEnteredValue" .=) <$> _cvUserEnteredValue])
-
--- | Deletes the dimensions from the sheet.
---
--- /See:/ 'deleteDimensionRequest' smart constructor.
-newtype DeleteDimensionRequest = DeleteDimensionRequest'
-    { _ddrRange :: Maybe DimensionRange
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeleteDimensionRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ddrRange'
-deleteDimensionRequest
-    :: DeleteDimensionRequest
-deleteDimensionRequest =
-    DeleteDimensionRequest'
-    { _ddrRange = Nothing
-    }
-
--- | The dimensions to delete from the sheet.
-ddrRange :: Lens' DeleteDimensionRequest (Maybe DimensionRange)
-ddrRange = lens _ddrRange (\ s a -> s{_ddrRange = a})
-
-instance FromJSON DeleteDimensionRequest where
-        parseJSON
-          = withObject "DeleteDimensionRequest"
-              (\ o -> DeleteDimensionRequest' <$> (o .:? "range"))
-
-instance ToJSON DeleteDimensionRequest where
-        toJSON DeleteDimensionRequest'{..}
-          = object (catMaybes [("range" .=) <$> _ddrRange])
-
--- | The request for clearing a range of values in a spreadsheet.
---
--- /See:/ 'clearValuesRequest' smart constructor.
-data ClearValuesRequest =
-    ClearValuesRequest'
-    deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ClearValuesRequest' with the minimum fields required to make a request.
---
-clearValuesRequest
-    :: ClearValuesRequest
-clearValuesRequest = ClearValuesRequest'
-
-instance FromJSON ClearValuesRequest where
-        parseJSON
-          = withObject "ClearValuesRequest"
-              (\ o -> pure ClearValuesRequest')
-
-instance ToJSON ClearValuesRequest where
-        toJSON = const emptyObject
-
--- | Finds and replaces data in cells over a range, sheet, or all sheets.
---
--- /See:/ 'findReplaceRequest' smart constructor.
-data FindReplaceRequest = FindReplaceRequest'
-    { _frrMatchCase       :: !(Maybe Bool)
-    , _frrAllSheets       :: !(Maybe Bool)
-    , _frrIncludeFormulas :: !(Maybe Bool)
-    , _frrMatchEntireCell :: !(Maybe Bool)
-    , _frrRange           :: !(Maybe GridRange)
-    , _frrSheetId         :: !(Maybe (Textual Int32))
-    , _frrFind            :: !(Maybe Text)
-    , _frrSearchByRegex   :: !(Maybe Bool)
-    , _frrReplacement     :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'FindReplaceRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'frrMatchCase'
---
--- * 'frrAllSheets'
---
--- * 'frrIncludeFormulas'
---
--- * 'frrMatchEntireCell'
---
--- * 'frrRange'
---
--- * 'frrSheetId'
---
--- * 'frrFind'
---
--- * 'frrSearchByRegex'
---
--- * 'frrReplacement'
-findReplaceRequest
-    :: FindReplaceRequest
-findReplaceRequest =
-    FindReplaceRequest'
-    { _frrMatchCase = Nothing
-    , _frrAllSheets = Nothing
-    , _frrIncludeFormulas = Nothing
-    , _frrMatchEntireCell = Nothing
-    , _frrRange = Nothing
-    , _frrSheetId = Nothing
-    , _frrFind = Nothing
-    , _frrSearchByRegex = Nothing
-    , _frrReplacement = Nothing
-    }
-
--- | True if the search is case sensitive.
-frrMatchCase :: Lens' FindReplaceRequest (Maybe Bool)
-frrMatchCase
-  = lens _frrMatchCase (\ s a -> s{_frrMatchCase = a})
-
--- | True to find\/replace over all sheets.
-frrAllSheets :: Lens' FindReplaceRequest (Maybe Bool)
-frrAllSheets
-  = lens _frrAllSheets (\ s a -> s{_frrAllSheets = a})
-
--- | True if the search should include cells with formulas. False to skip
--- cells with formulas.
-frrIncludeFormulas :: Lens' FindReplaceRequest (Maybe Bool)
-frrIncludeFormulas
-  = lens _frrIncludeFormulas
-      (\ s a -> s{_frrIncludeFormulas = a})
-
--- | True if the find value should match the entire cell.
-frrMatchEntireCell :: Lens' FindReplaceRequest (Maybe Bool)
-frrMatchEntireCell
-  = lens _frrMatchEntireCell
-      (\ s a -> s{_frrMatchEntireCell = a})
-
--- | The range to find\/replace over.
-frrRange :: Lens' FindReplaceRequest (Maybe GridRange)
-frrRange = lens _frrRange (\ s a -> s{_frrRange = a})
-
--- | The sheet to find\/replace over.
-frrSheetId :: Lens' FindReplaceRequest (Maybe Int32)
-frrSheetId
-  = lens _frrSheetId (\ s a -> s{_frrSheetId = a}) .
-      mapping _Coerce
-
--- | The value to search.
-frrFind :: Lens' FindReplaceRequest (Maybe Text)
-frrFind = lens _frrFind (\ s a -> s{_frrFind = a})
-
--- | True if the find value is a regex. The regular expression and
--- replacement should follow Java regex rules at
--- https:\/\/docs.oracle.com\/javase\/8\/docs\/api\/java\/util\/regex\/Pattern.html.
--- The replacement string is allowed to refer to capturing groups. For
--- example, if one cell has the contents \`\"Google Sheets\"\` and another
--- has \`\"Google Docs\"\`, then searching for \`\"o.* (.*)\"\` with a
--- replacement of \`\"$1 Rocks\"\` would change the contents of the cells
--- to \`\"GSheets Rocks\"\` and \`\"GDocs Rocks\"\` respectively.
-frrSearchByRegex :: Lens' FindReplaceRequest (Maybe Bool)
-frrSearchByRegex
-  = lens _frrSearchByRegex
-      (\ s a -> s{_frrSearchByRegex = a})
-
--- | The value to use as the replacement.
-frrReplacement :: Lens' FindReplaceRequest (Maybe Text)
-frrReplacement
-  = lens _frrReplacement
-      (\ s a -> s{_frrReplacement = a})
-
-instance FromJSON FindReplaceRequest where
-        parseJSON
-          = withObject "FindReplaceRequest"
-              (\ o ->
-                 FindReplaceRequest' <$>
-                   (o .:? "matchCase") <*> (o .:? "allSheets") <*>
-                     (o .:? "includeFormulas")
-                     <*> (o .:? "matchEntireCell")
-                     <*> (o .:? "range")
-                     <*> (o .:? "sheetId")
-                     <*> (o .:? "find")
-                     <*> (o .:? "searchByRegex")
-                     <*> (o .:? "replacement"))
-
-instance ToJSON FindReplaceRequest where
-        toJSON FindReplaceRequest'{..}
-          = object
-              (catMaybes
-                 [("matchCase" .=) <$> _frrMatchCase,
-                  ("allSheets" .=) <$> _frrAllSheets,
-                  ("includeFormulas" .=) <$> _frrIncludeFormulas,
-                  ("matchEntireCell" .=) <$> _frrMatchEntireCell,
-                  ("range" .=) <$> _frrRange,
-                  ("sheetId" .=) <$> _frrSheetId,
-                  ("find" .=) <$> _frrFind,
-                  ("searchByRegex" .=) <$> _frrSearchByRegex,
-                  ("replacement" .=) <$> _frrReplacement])
-
--- | Moves one or more rows or columns.
---
--- /See:/ 'moveDimensionRequest' smart constructor.
-data MoveDimensionRequest = MoveDimensionRequest'
-    { _mdrDestinationIndex :: !(Maybe (Textual Int32))
-    , _mdrSource           :: !(Maybe DimensionRange)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'MoveDimensionRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'mdrDestinationIndex'
---
--- * 'mdrSource'
-moveDimensionRequest
-    :: MoveDimensionRequest
-moveDimensionRequest =
-    MoveDimensionRequest'
-    { _mdrDestinationIndex = Nothing
-    , _mdrSource = Nothing
-    }
-
--- | The zero-based start index of where to move the source data to, based on
--- the coordinates *before* the source data is removed from the grid.
--- Existing data will be shifted down or right (depending on the dimension)
--- to make room for the moved dimensions. The source dimensions are removed
--- from the grid, so the the data may end up in a different index than
--- specified. For example, given \`A1..A5\` of \`0, 1, 2, 3, 4\` and
--- wanting to move \`\"1\"\` and \`\"2\"\` to between \`\"3\"\` and
--- \`\"4\"\`, the source would be \`ROWS [1..3)\`,and the destination index
--- would be \`\"4\"\` (the zero-based index of row 5). The end result would
--- be \`A1..A5\` of \`0, 3, 1, 2, 4\`.
-mdrDestinationIndex :: Lens' MoveDimensionRequest (Maybe Int32)
-mdrDestinationIndex
-  = lens _mdrDestinationIndex
-      (\ s a -> s{_mdrDestinationIndex = a})
-      . mapping _Coerce
-
--- | The source dimensions to move.
-mdrSource :: Lens' MoveDimensionRequest (Maybe DimensionRange)
-mdrSource
-  = lens _mdrSource (\ s a -> s{_mdrSource = a})
-
-instance FromJSON MoveDimensionRequest where
-        parseJSON
-          = withObject "MoveDimensionRequest"
-              (\ o ->
-                 MoveDimensionRequest' <$>
-                   (o .:? "destinationIndex") <*> (o .:? "source"))
-
-instance ToJSON MoveDimensionRequest where
-        toJSON MoveDimensionRequest'{..}
-          = object
-              (catMaybes
-                 [("destinationIndex" .=) <$> _mdrDestinationIndex,
-                  ("source" .=) <$> _mdrSource])
-
--- | A rule that applies a gradient color scale format, based on the
--- interpolation points listed. The format of a cell will vary based on its
--- contents as compared to the values of the interpolation points.
---
--- /See:/ 'gradientRule' smart constructor.
-data GradientRule = GradientRule'
-    { _grMidpoint :: !(Maybe InterpolationPoint)
-    , _grMaxpoint :: !(Maybe InterpolationPoint)
-    , _grMinpoint :: !(Maybe InterpolationPoint)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'GradientRule' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'grMidpoint'
---
--- * 'grMaxpoint'
---
--- * 'grMinpoint'
-gradientRule
-    :: GradientRule
-gradientRule =
-    GradientRule'
-    { _grMidpoint = Nothing
-    , _grMaxpoint = Nothing
-    , _grMinpoint = Nothing
-    }
-
--- | An optional midway interpolation point.
-grMidpoint :: Lens' GradientRule (Maybe InterpolationPoint)
-grMidpoint
-  = lens _grMidpoint (\ s a -> s{_grMidpoint = a})
-
--- | The final interpolation point.
-grMaxpoint :: Lens' GradientRule (Maybe InterpolationPoint)
-grMaxpoint
-  = lens _grMaxpoint (\ s a -> s{_grMaxpoint = a})
-
--- | The starting interpolation point.
-grMinpoint :: Lens' GradientRule (Maybe InterpolationPoint)
-grMinpoint
-  = lens _grMinpoint (\ s a -> s{_grMinpoint = a})
-
-instance FromJSON GradientRule where
-        parseJSON
-          = withObject "GradientRule"
-              (\ o ->
-                 GradientRule' <$>
-                   (o .:? "midpoint") <*> (o .:? "maxpoint") <*>
-                     (o .:? "minpoint"))
-
-instance ToJSON GradientRule where
-        toJSON GradientRule'{..}
-          = object
-              (catMaybes
-                 [("midpoint" .=) <$> _grMidpoint,
-                  ("maxpoint" .=) <$> _grMaxpoint,
-                  ("minpoint" .=) <$> _grMinpoint])
-
--- | Moves data from the source to the destination.
---
--- /See:/ 'cutPasteRequest' smart constructor.
-data CutPasteRequest = CutPasteRequest'
-    { _cDestination :: !(Maybe GridCoordinate)
-    , _cSource      :: !(Maybe GridRange)
-    , _cPasteType   :: !(Maybe CutPasteRequestPasteType)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CutPasteRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cDestination'
---
--- * 'cSource'
---
--- * 'cPasteType'
-cutPasteRequest
-    :: CutPasteRequest
-cutPasteRequest =
-    CutPasteRequest'
-    { _cDestination = Nothing
-    , _cSource = Nothing
-    , _cPasteType = Nothing
-    }
-
--- | The top-left coordinate where the data should be pasted.
-cDestination :: Lens' CutPasteRequest (Maybe GridCoordinate)
-cDestination
-  = lens _cDestination (\ s a -> s{_cDestination = a})
-
--- | The source data to cut.
-cSource :: Lens' CutPasteRequest (Maybe GridRange)
-cSource = lens _cSource (\ s a -> s{_cSource = a})
-
--- | What kind of data to paste. All the source data will be cut, regardless
--- of what is pasted.
-cPasteType :: Lens' CutPasteRequest (Maybe CutPasteRequestPasteType)
-cPasteType
-  = lens _cPasteType (\ s a -> s{_cPasteType = a})
-
-instance FromJSON CutPasteRequest where
-        parseJSON
-          = withObject "CutPasteRequest"
-              (\ o ->
-                 CutPasteRequest' <$>
-                   (o .:? "destination") <*> (o .:? "source") <*>
-                     (o .:? "pasteType"))
-
-instance ToJSON CutPasteRequest where
-        toJSON CutPasteRequest'{..}
-          = object
-              (catMaybes
-                 [("destination" .=) <$> _cDestination,
-                  ("source" .=) <$> _cSource,
-                  ("pasteType" .=) <$> _cPasteType])
-
--- | The result of updating an embedded object\'s position.
---
--- /See:/ 'updateEmbeddedObjectPositionResponse' smart constructor.
-newtype UpdateEmbeddedObjectPositionResponse = UpdateEmbeddedObjectPositionResponse'
-    { _ueoprPosition :: Maybe EmbeddedObjectPosition
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'UpdateEmbeddedObjectPositionResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ueoprPosition'
-updateEmbeddedObjectPositionResponse
-    :: UpdateEmbeddedObjectPositionResponse
-updateEmbeddedObjectPositionResponse =
-    UpdateEmbeddedObjectPositionResponse'
-    { _ueoprPosition = Nothing
-    }
-
--- | The new position of the embedded object.
-ueoprPosition :: Lens' UpdateEmbeddedObjectPositionResponse (Maybe EmbeddedObjectPosition)
-ueoprPosition
-  = lens _ueoprPosition
-      (\ s a -> s{_ueoprPosition = a})
-
-instance FromJSON
-         UpdateEmbeddedObjectPositionResponse where
-        parseJSON
-          = withObject "UpdateEmbeddedObjectPositionResponse"
-              (\ o ->
-                 UpdateEmbeddedObjectPositionResponse' <$>
-                   (o .:? "position"))
-
-instance ToJSON UpdateEmbeddedObjectPositionResponse
-         where
-        toJSON UpdateEmbeddedObjectPositionResponse'{..}
-          = object
-              (catMaybes [("position" .=) <$> _ueoprPosition])
-
--- | A single response from an update.
---
--- /See:/ 'response' smart constructor.
-data Response = Response'
-    { _rAddFilterView                :: !(Maybe AddFilterViewResponse)
-    , _rDuplicateFilterView          :: !(Maybe DuplicateFilterViewResponse)
-    , _rUpdateEmbeddedObjectPosition :: !(Maybe UpdateEmbeddedObjectPositionResponse)
-    , _rAddSheet                     :: !(Maybe AddSheetResponse)
-    , _rFindReplace                  :: !(Maybe FindReplaceResponse)
-    , _rAddProtectedRange            :: !(Maybe AddProtectedRangeResponse)
-    , _rDeleteConditionalFormatRule  :: !(Maybe DeleteConditionalFormatRuleResponse)
-    , _rUpdateConditionalFormatRule  :: !(Maybe UpdateConditionalFormatRuleResponse)
-    , _rAddNamedRange                :: !(Maybe AddNamedRangeResponse)
-    , _rAddChart                     :: !(Maybe AddChartResponse)
-    , _rAddBanding                   :: !(Maybe AddBandingResponse)
-    , _rDuplicateSheet               :: !(Maybe DuplicateSheetResponse)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Response' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rAddFilterView'
---
--- * 'rDuplicateFilterView'
---
--- * 'rUpdateEmbeddedObjectPosition'
---
--- * 'rAddSheet'
---
--- * 'rFindReplace'
---
--- * 'rAddProtectedRange'
---
--- * 'rDeleteConditionalFormatRule'
---
--- * 'rUpdateConditionalFormatRule'
---
--- * 'rAddNamedRange'
---
--- * 'rAddChart'
---
--- * 'rAddBanding'
---
--- * 'rDuplicateSheet'
-response
-    :: Response
-response =
-    Response'
-    { _rAddFilterView = Nothing
-    , _rDuplicateFilterView = Nothing
-    , _rUpdateEmbeddedObjectPosition = Nothing
-    , _rAddSheet = Nothing
-    , _rFindReplace = Nothing
-    , _rAddProtectedRange = Nothing
-    , _rDeleteConditionalFormatRule = Nothing
-    , _rUpdateConditionalFormatRule = Nothing
-    , _rAddNamedRange = Nothing
-    , _rAddChart = Nothing
-    , _rAddBanding = Nothing
-    , _rDuplicateSheet = Nothing
-    }
-
--- | A reply from adding a filter view.
-rAddFilterView :: Lens' Response (Maybe AddFilterViewResponse)
-rAddFilterView
-  = lens _rAddFilterView
-      (\ s a -> s{_rAddFilterView = a})
-
--- | A reply from duplicating a filter view.
-rDuplicateFilterView :: Lens' Response (Maybe DuplicateFilterViewResponse)
-rDuplicateFilterView
-  = lens _rDuplicateFilterView
-      (\ s a -> s{_rDuplicateFilterView = a})
-
--- | A reply from updating an embedded object\'s position.
-rUpdateEmbeddedObjectPosition :: Lens' Response (Maybe UpdateEmbeddedObjectPositionResponse)
-rUpdateEmbeddedObjectPosition
-  = lens _rUpdateEmbeddedObjectPosition
-      (\ s a -> s{_rUpdateEmbeddedObjectPosition = a})
-
--- | A reply from adding a sheet.
-rAddSheet :: Lens' Response (Maybe AddSheetResponse)
-rAddSheet
-  = lens _rAddSheet (\ s a -> s{_rAddSheet = a})
-
--- | A reply from doing a find\/replace.
-rFindReplace :: Lens' Response (Maybe FindReplaceResponse)
-rFindReplace
-  = lens _rFindReplace (\ s a -> s{_rFindReplace = a})
-
--- | A reply from adding a protected range.
-rAddProtectedRange :: Lens' Response (Maybe AddProtectedRangeResponse)
-rAddProtectedRange
-  = lens _rAddProtectedRange
-      (\ s a -> s{_rAddProtectedRange = a})
-
--- | A reply from deleting a conditional format rule.
-rDeleteConditionalFormatRule :: Lens' Response (Maybe DeleteConditionalFormatRuleResponse)
-rDeleteConditionalFormatRule
-  = lens _rDeleteConditionalFormatRule
-      (\ s a -> s{_rDeleteConditionalFormatRule = a})
-
--- | A reply from updating a conditional format rule.
-rUpdateConditionalFormatRule :: Lens' Response (Maybe UpdateConditionalFormatRuleResponse)
-rUpdateConditionalFormatRule
-  = lens _rUpdateConditionalFormatRule
-      (\ s a -> s{_rUpdateConditionalFormatRule = a})
-
--- | A reply from adding a named range.
-rAddNamedRange :: Lens' Response (Maybe AddNamedRangeResponse)
-rAddNamedRange
-  = lens _rAddNamedRange
-      (\ s a -> s{_rAddNamedRange = a})
-
--- | A reply from adding a chart.
-rAddChart :: Lens' Response (Maybe AddChartResponse)
-rAddChart
-  = lens _rAddChart (\ s a -> s{_rAddChart = a})
-
--- | A reply from adding a banded range.
-rAddBanding :: Lens' Response (Maybe AddBandingResponse)
-rAddBanding
-  = lens _rAddBanding (\ s a -> s{_rAddBanding = a})
-
--- | A reply from duplicating a sheet.
-rDuplicateSheet :: Lens' Response (Maybe DuplicateSheetResponse)
-rDuplicateSheet
-  = lens _rDuplicateSheet
-      (\ s a -> s{_rDuplicateSheet = a})
-
-instance FromJSON Response where
-        parseJSON
-          = withObject "Response"
-              (\ o ->
-                 Response' <$>
-                   (o .:? "addFilterView") <*>
-                     (o .:? "duplicateFilterView")
-                     <*> (o .:? "updateEmbeddedObjectPosition")
-                     <*> (o .:? "addSheet")
-                     <*> (o .:? "findReplace")
-                     <*> (o .:? "addProtectedRange")
-                     <*> (o .:? "deleteConditionalFormatRule")
-                     <*> (o .:? "updateConditionalFormatRule")
-                     <*> (o .:? "addNamedRange")
-                     <*> (o .:? "addChart")
-                     <*> (o .:? "addBanding")
-                     <*> (o .:? "duplicateSheet"))
-
-instance ToJSON Response where
-        toJSON Response'{..}
-          = object
-              (catMaybes
-                 [("addFilterView" .=) <$> _rAddFilterView,
-                  ("duplicateFilterView" .=) <$> _rDuplicateFilterView,
-                  ("updateEmbeddedObjectPosition" .=) <$>
-                    _rUpdateEmbeddedObjectPosition,
-                  ("addSheet" .=) <$> _rAddSheet,
-                  ("findReplace" .=) <$> _rFindReplace,
-                  ("addProtectedRange" .=) <$> _rAddProtectedRange,
-                  ("deleteConditionalFormatRule" .=) <$>
-                    _rDeleteConditionalFormatRule,
-                  ("updateConditionalFormatRule" .=) <$>
-                    _rUpdateConditionalFormatRule,
-                  ("addNamedRange" .=) <$> _rAddNamedRange,
-                  ("addChart" .=) <$> _rAddChart,
-                  ("addBanding" .=) <$> _rAddBanding,
-                  ("duplicateSheet" .=) <$> _rDuplicateSheet])
-
--- | Criteria for showing\/hiding rows in a filter or filter view.
---
--- /See:/ 'filterCriteria' smart constructor.
-data FilterCriteria = FilterCriteria'
-    { _fcHiddenValues :: !(Maybe [Text])
-    , _fcCondition    :: !(Maybe BooleanCondition)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'FilterCriteria' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'fcHiddenValues'
---
--- * 'fcCondition'
-filterCriteria
-    :: FilterCriteria
-filterCriteria =
-    FilterCriteria'
-    { _fcHiddenValues = Nothing
-    , _fcCondition = Nothing
-    }
-
--- | Values that should be hidden.
-fcHiddenValues :: Lens' FilterCriteria [Text]
-fcHiddenValues
-  = lens _fcHiddenValues
-      (\ s a -> s{_fcHiddenValues = a})
-      . _Default
-      . _Coerce
-
--- | A condition that must be true for values to be shown. (This does not
--- override hiddenValues -- if a value is listed there, it will still be
--- hidden.)
-fcCondition :: Lens' FilterCriteria (Maybe BooleanCondition)
-fcCondition
-  = lens _fcCondition (\ s a -> s{_fcCondition = a})
-
-instance FromJSON FilterCriteria where
-        parseJSON
-          = withObject "FilterCriteria"
-              (\ o ->
-                 FilterCriteria' <$>
-                   (o .:? "hiddenValues" .!= mempty) <*>
-                     (o .:? "condition"))
-
-instance ToJSON FilterCriteria where
-        toJSON FilterCriteria'{..}
-          = object
-              (catMaybes
-                 [("hiddenValues" .=) <$> _fcHiddenValues,
-                  ("condition" .=) <$> _fcCondition])
-
--- | An error in a cell.
---
--- /See:/ 'errorValue' smart constructor.
-data ErrorValue = ErrorValue'
-    { _evType    :: !(Maybe ErrorValueType)
-    , _evMessage :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ErrorValue' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'evType'
---
--- * 'evMessage'
-errorValue
-    :: ErrorValue
-errorValue =
-    ErrorValue'
-    { _evType = Nothing
-    , _evMessage = Nothing
-    }
-
--- | The type of error.
-evType :: Lens' ErrorValue (Maybe ErrorValueType)
-evType = lens _evType (\ s a -> s{_evType = a})
-
--- | A message with more information about the error (in the spreadsheet\'s
--- locale).
-evMessage :: Lens' ErrorValue (Maybe Text)
-evMessage
-  = lens _evMessage (\ s a -> s{_evMessage = a})
-
-instance FromJSON ErrorValue where
-        parseJSON
-          = withObject "ErrorValue"
-              (\ o ->
-                 ErrorValue' <$> (o .:? "type") <*> (o .:? "message"))
-
-instance ToJSON ErrorValue where
-        toJSON ErrorValue'{..}
-          = object
-              (catMaybes
-                 [("type" .=) <$> _evType,
-                  ("message" .=) <$> _evMessage])
-
--- | Updates a conditional format rule at the given index, or moves a
--- conditional format rule to another index.
---
--- /See:/ 'updateConditionalFormatRuleRequest' smart constructor.
-data UpdateConditionalFormatRuleRequest = UpdateConditionalFormatRuleRequest'
-    { _ucfrrRule     :: !(Maybe ConditionalFormatRule)
-    , _ucfrrNewIndex :: !(Maybe (Textual Int32))
-    , _ucfrrSheetId  :: !(Maybe (Textual Int32))
-    , _ucfrrIndex    :: !(Maybe (Textual Int32))
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'UpdateConditionalFormatRuleRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ucfrrRule'
---
--- * 'ucfrrNewIndex'
---
--- * 'ucfrrSheetId'
---
--- * 'ucfrrIndex'
-updateConditionalFormatRuleRequest
-    :: UpdateConditionalFormatRuleRequest
-updateConditionalFormatRuleRequest =
-    UpdateConditionalFormatRuleRequest'
-    { _ucfrrRule = Nothing
-    , _ucfrrNewIndex = Nothing
-    , _ucfrrSheetId = Nothing
-    , _ucfrrIndex = Nothing
-    }
-
--- | The rule that should replace the rule at the given index.
-ucfrrRule :: Lens' UpdateConditionalFormatRuleRequest (Maybe ConditionalFormatRule)
-ucfrrRule
-  = lens _ucfrrRule (\ s a -> s{_ucfrrRule = a})
-
--- | The zero-based new index the rule should end up at.
-ucfrrNewIndex :: Lens' UpdateConditionalFormatRuleRequest (Maybe Int32)
-ucfrrNewIndex
-  = lens _ucfrrNewIndex
-      (\ s a -> s{_ucfrrNewIndex = a})
-      . mapping _Coerce
-
--- | The sheet of the rule to move. Required if new_index is set, unused
--- otherwise.
-ucfrrSheetId :: Lens' UpdateConditionalFormatRuleRequest (Maybe Int32)
-ucfrrSheetId
-  = lens _ucfrrSheetId (\ s a -> s{_ucfrrSheetId = a})
-      . mapping _Coerce
-
--- | The zero-based index of the rule that should be replaced or moved.
-ucfrrIndex :: Lens' UpdateConditionalFormatRuleRequest (Maybe Int32)
-ucfrrIndex
-  = lens _ucfrrIndex (\ s a -> s{_ucfrrIndex = a}) .
-      mapping _Coerce
-
-instance FromJSON UpdateConditionalFormatRuleRequest
-         where
-        parseJSON
-          = withObject "UpdateConditionalFormatRuleRequest"
-              (\ o ->
-                 UpdateConditionalFormatRuleRequest' <$>
-                   (o .:? "rule") <*> (o .:? "newIndex") <*>
-                     (o .:? "sheetId")
-                     <*> (o .:? "index"))
-
-instance ToJSON UpdateConditionalFormatRuleRequest
-         where
-        toJSON UpdateConditionalFormatRuleRequest'{..}
-          = object
-              (catMaybes
-                 [("rule" .=) <$> _ucfrrRule,
-                  ("newIndex" .=) <$> _ucfrrNewIndex,
-                  ("sheetId" .=) <$> _ucfrrSheetId,
-                  ("index" .=) <$> _ucfrrIndex])
-
--- | Deletes a conditional format rule at the given index. All subsequent
--- rules\' indexes are decremented.
---
--- /See:/ 'deleteConditionalFormatRuleRequest' smart constructor.
-data DeleteConditionalFormatRuleRequest = DeleteConditionalFormatRuleRequest'
-    { _dcfrrSheetId :: !(Maybe (Textual Int32))
-    , _dcfrrIndex   :: !(Maybe (Textual Int32))
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeleteConditionalFormatRuleRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dcfrrSheetId'
---
--- * 'dcfrrIndex'
-deleteConditionalFormatRuleRequest
-    :: DeleteConditionalFormatRuleRequest
-deleteConditionalFormatRuleRequest =
-    DeleteConditionalFormatRuleRequest'
-    { _dcfrrSheetId = Nothing
-    , _dcfrrIndex = Nothing
-    }
-
--- | The sheet the rule is being deleted from.
-dcfrrSheetId :: Lens' DeleteConditionalFormatRuleRequest (Maybe Int32)
-dcfrrSheetId
-  = lens _dcfrrSheetId (\ s a -> s{_dcfrrSheetId = a})
-      . mapping _Coerce
-
--- | The zero-based index of the rule to be deleted.
-dcfrrIndex :: Lens' DeleteConditionalFormatRuleRequest (Maybe Int32)
-dcfrrIndex
-  = lens _dcfrrIndex (\ s a -> s{_dcfrrIndex = a}) .
-      mapping _Coerce
-
-instance FromJSON DeleteConditionalFormatRuleRequest
-         where
-        parseJSON
-          = withObject "DeleteConditionalFormatRuleRequest"
-              (\ o ->
-                 DeleteConditionalFormatRuleRequest' <$>
-                   (o .:? "sheetId") <*> (o .:? "index"))
-
-instance ToJSON DeleteConditionalFormatRuleRequest
-         where
-        toJSON DeleteConditionalFormatRuleRequest'{..}
-          = object
-              (catMaybes
-                 [("sheetId" .=) <$> _dcfrrSheetId,
-                  ("index" .=) <$> _dcfrrIndex])
-
--- | The location an object is overlaid on top of a grid.
---
--- /See:/ 'overlayPosition' smart constructor.
-data OverlayPosition = OverlayPosition'
-    { _opHeightPixels  :: !(Maybe (Textual Int32))
-    , _opOffSetYPixels :: !(Maybe (Textual Int32))
-    , _opAnchorCell    :: !(Maybe GridCoordinate)
-    , _opWidthPixels   :: !(Maybe (Textual Int32))
-    , _opOffSetXPixels :: !(Maybe (Textual Int32))
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'OverlayPosition' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'opHeightPixels'
---
--- * 'opOffSetYPixels'
---
--- * 'opAnchorCell'
---
--- * 'opWidthPixels'
---
--- * 'opOffSetXPixels'
-overlayPosition
-    :: OverlayPosition
-overlayPosition =
-    OverlayPosition'
-    { _opHeightPixels = Nothing
-    , _opOffSetYPixels = Nothing
-    , _opAnchorCell = Nothing
-    , _opWidthPixels = Nothing
-    , _opOffSetXPixels = Nothing
-    }
-
--- | The height of the object, in pixels. Defaults to 371.
-opHeightPixels :: Lens' OverlayPosition (Maybe Int32)
-opHeightPixels
-  = lens _opHeightPixels
-      (\ s a -> s{_opHeightPixels = a})
-      . mapping _Coerce
-
--- | The vertical offset, in pixels, that the object is offset from the
--- anchor cell.
-opOffSetYPixels :: Lens' OverlayPosition (Maybe Int32)
-opOffSetYPixels
-  = lens _opOffSetYPixels
-      (\ s a -> s{_opOffSetYPixels = a})
-      . mapping _Coerce
-
--- | The cell the object is anchored to.
-opAnchorCell :: Lens' OverlayPosition (Maybe GridCoordinate)
-opAnchorCell
-  = lens _opAnchorCell (\ s a -> s{_opAnchorCell = a})
-
--- | The width of the object, in pixels. Defaults to 600.
-opWidthPixels :: Lens' OverlayPosition (Maybe Int32)
-opWidthPixels
-  = lens _opWidthPixels
-      (\ s a -> s{_opWidthPixels = a})
-      . mapping _Coerce
-
--- | The horizontal offset, in pixels, that the object is offset from the
--- anchor cell.
-opOffSetXPixels :: Lens' OverlayPosition (Maybe Int32)
-opOffSetXPixels
-  = lens _opOffSetXPixels
-      (\ s a -> s{_opOffSetXPixels = a})
-      . mapping _Coerce
-
-instance FromJSON OverlayPosition where
-        parseJSON
-          = withObject "OverlayPosition"
-              (\ o ->
-                 OverlayPosition' <$>
-                   (o .:? "heightPixels") <*> (o .:? "offsetYPixels")
-                     <*> (o .:? "anchorCell")
-                     <*> (o .:? "widthPixels")
-                     <*> (o .:? "offsetXPixels"))
-
-instance ToJSON OverlayPosition where
-        toJSON OverlayPosition'{..}
-          = object
-              (catMaybes
-                 [("heightPixels" .=) <$> _opHeightPixels,
-                  ("offsetYPixels" .=) <$> _opOffSetYPixels,
-                  ("anchorCell" .=) <$> _opAnchorCell,
-                  ("widthPixels" .=) <$> _opWidthPixels,
-                  ("offsetXPixels" .=) <$> _opOffSetXPixels])
-
--- | Deletes the embedded object with the given ID.
---
--- /See:/ 'deleteEmbeddedObjectRequest' smart constructor.
-newtype DeleteEmbeddedObjectRequest = DeleteEmbeddedObjectRequest'
-    { _deorObjectId :: Maybe (Textual Int32)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeleteEmbeddedObjectRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'deorObjectId'
-deleteEmbeddedObjectRequest
-    :: DeleteEmbeddedObjectRequest
-deleteEmbeddedObjectRequest =
-    DeleteEmbeddedObjectRequest'
-    { _deorObjectId = Nothing
-    }
-
--- | The ID of the embedded object to delete.
-deorObjectId :: Lens' DeleteEmbeddedObjectRequest (Maybe Int32)
-deorObjectId
-  = lens _deorObjectId (\ s a -> s{_deorObjectId = a})
-      . mapping _Coerce
-
-instance FromJSON DeleteEmbeddedObjectRequest where
-        parseJSON
-          = withObject "DeleteEmbeddedObjectRequest"
-              (\ o ->
-                 DeleteEmbeddedObjectRequest' <$> (o .:? "objectId"))
-
-instance ToJSON DeleteEmbeddedObjectRequest where
-        toJSON DeleteEmbeddedObjectRequest'{..}
-          = object
-              (catMaybes [("objectId" .=) <$> _deorObjectId])
-
--- | Properties of a sheet.
---
--- /See:/ 'sheetProperties' smart constructor.
-data SheetProperties = SheetProperties'
-    { _sTabColor       :: !(Maybe Color)
-    , _sGridProperties :: !(Maybe GridProperties)
-    , _sSheetType      :: !(Maybe SheetPropertiesSheetType)
-    , _sHidden         :: !(Maybe Bool)
-    , _sSheetId        :: !(Maybe (Textual Int32))
-    , _sTitle          :: !(Maybe Text)
-    , _sRightToLeft    :: !(Maybe Bool)
-    , _sIndex          :: !(Maybe (Textual Int32))
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'SheetProperties' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sTabColor'
---
--- * 'sGridProperties'
---
--- * 'sSheetType'
---
--- * 'sHidden'
---
--- * 'sSheetId'
---
--- * 'sTitle'
---
--- * 'sRightToLeft'
---
--- * 'sIndex'
-sheetProperties
-    :: SheetProperties
-sheetProperties =
-    SheetProperties'
-    { _sTabColor = Nothing
-    , _sGridProperties = Nothing
-    , _sSheetType = Nothing
-    , _sHidden = Nothing
-    , _sSheetId = Nothing
-    , _sTitle = Nothing
-    , _sRightToLeft = Nothing
-    , _sIndex = Nothing
-    }
-
--- | The color of the tab in the UI.
-sTabColor :: Lens' SheetProperties (Maybe Color)
-sTabColor
-  = lens _sTabColor (\ s a -> s{_sTabColor = a})
-
--- | Additional properties of the sheet if this sheet is a grid. (If the
--- sheet is an object sheet, containing a chart or image, then this field
--- will be absent.) When writing it is an error to set any grid properties
--- on non-grid sheets.
-sGridProperties :: Lens' SheetProperties (Maybe GridProperties)
-sGridProperties
-  = lens _sGridProperties
-      (\ s a -> s{_sGridProperties = a})
-
--- | The type of sheet. Defaults to GRID. This field cannot be changed once
--- set.
-sSheetType :: Lens' SheetProperties (Maybe SheetPropertiesSheetType)
-sSheetType
-  = lens _sSheetType (\ s a -> s{_sSheetType = a})
-
--- | True if the sheet is hidden in the UI, false if it\'s visible.
-sHidden :: Lens' SheetProperties (Maybe Bool)
-sHidden = lens _sHidden (\ s a -> s{_sHidden = a})
-
--- | The ID of the sheet. Must be non-negative. This field cannot be changed
--- once set.
-sSheetId :: Lens' SheetProperties (Maybe Int32)
-sSheetId
-  = lens _sSheetId (\ s a -> s{_sSheetId = a}) .
-      mapping _Coerce
-
--- | The name of the sheet.
-sTitle :: Lens' SheetProperties (Maybe Text)
-sTitle = lens _sTitle (\ s a -> s{_sTitle = a})
-
--- | True if the sheet is an RTL sheet instead of an LTR sheet.
-sRightToLeft :: Lens' SheetProperties (Maybe Bool)
-sRightToLeft
-  = lens _sRightToLeft (\ s a -> s{_sRightToLeft = a})
-
--- | The index of the sheet within the spreadsheet. When adding or updating
--- sheet properties, if this field is excluded then the sheet will be added
--- or moved to the end of the sheet list. When updating sheet indices or
--- inserting sheets, movement is considered in \"before the move\" indexes.
--- For example, if there were 3 sheets (S1, S2, S3) in order to move S1
--- ahead of S2 the index would have to be set to 2. A sheet index update
--- request will be ignored if the requested index is identical to the
--- sheets current index or if the requested new index is equal to the
--- current sheet index + 1.
-sIndex :: Lens' SheetProperties (Maybe Int32)
-sIndex
-  = lens _sIndex (\ s a -> s{_sIndex = a}) .
-      mapping _Coerce
-
-instance FromJSON SheetProperties where
-        parseJSON
-          = withObject "SheetProperties"
-              (\ o ->
-                 SheetProperties' <$>
-                   (o .:? "tabColor") <*> (o .:? "gridProperties") <*>
-                     (o .:? "sheetType")
-                     <*> (o .:? "hidden")
-                     <*> (o .:? "sheetId")
-                     <*> (o .:? "title")
-                     <*> (o .:? "rightToLeft")
-                     <*> (o .:? "index"))
-
-instance ToJSON SheetProperties where
-        toJSON SheetProperties'{..}
-          = object
-              (catMaybes
-                 [("tabColor" .=) <$> _sTabColor,
-                  ("gridProperties" .=) <$> _sGridProperties,
-                  ("sheetType" .=) <$> _sSheetType,
-                  ("hidden" .=) <$> _sHidden,
-                  ("sheetId" .=) <$> _sSheetId,
-                  ("title" .=) <$> _sTitle,
-                  ("rightToLeft" .=) <$> _sRightToLeft,
-                  ("index" .=) <$> _sIndex])
-
--- | The criteria for showing\/hiding values per column. The map\'s key is
--- the column index, and the value is the criteria for that column.
---
--- /See:/ 'filterViewCriteria' smart constructor.
-newtype FilterViewCriteria = FilterViewCriteria'
-    { _fvcAddtional :: HashMap Text FilterCriteria
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'FilterViewCriteria' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'fvcAddtional'
-filterViewCriteria
-    :: HashMap Text FilterCriteria -- ^ 'fvcAddtional'
-    -> FilterViewCriteria
-filterViewCriteria pFvcAddtional_ =
-    FilterViewCriteria'
-    { _fvcAddtional = _Coerce # pFvcAddtional_
-    }
-
-fvcAddtional :: Lens' FilterViewCriteria (HashMap Text FilterCriteria)
-fvcAddtional
-  = lens _fvcAddtional (\ s a -> s{_fvcAddtional = a})
-      . _Coerce
-
-instance FromJSON FilterViewCriteria where
-        parseJSON
-          = withObject "FilterViewCriteria"
-              (\ o -> FilterViewCriteria' <$> (parseJSONObject o))
-
-instance ToJSON FilterViewCriteria where
-        toJSON = toJSON . _fvcAddtional
-
--- | The response when updating a range of values in a spreadsheet.
---
--- /See:/ 'batchUpdateValuesResponse' smart constructor.
-data BatchUpdateValuesResponse = BatchUpdateValuesResponse'
-    { _buvrTotalUpdatedColumns :: !(Maybe (Textual Int32))
-    , _buvrResponses           :: !(Maybe [UpdateValuesResponse])
-    , _buvrSpreadsheetId       :: !(Maybe Text)
-    , _buvrTotalUpdatedSheets  :: !(Maybe (Textual Int32))
-    , _buvrTotalUpdatedCells   :: !(Maybe (Textual Int32))
-    , _buvrTotalUpdatedRows    :: !(Maybe (Textual Int32))
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'BatchUpdateValuesResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'buvrTotalUpdatedColumns'
---
--- * 'buvrResponses'
---
--- * 'buvrSpreadsheetId'
---
--- * 'buvrTotalUpdatedSheets'
---
--- * 'buvrTotalUpdatedCells'
---
--- * 'buvrTotalUpdatedRows'
-batchUpdateValuesResponse
-    :: BatchUpdateValuesResponse
-batchUpdateValuesResponse =
-    BatchUpdateValuesResponse'
-    { _buvrTotalUpdatedColumns = Nothing
-    , _buvrResponses = Nothing
-    , _buvrSpreadsheetId = Nothing
-    , _buvrTotalUpdatedSheets = Nothing
-    , _buvrTotalUpdatedCells = Nothing
-    , _buvrTotalUpdatedRows = Nothing
-    }
-
--- | The total number of columns where at least one cell in the column was
--- updated.
-buvrTotalUpdatedColumns :: Lens' BatchUpdateValuesResponse (Maybe Int32)
-buvrTotalUpdatedColumns
-  = lens _buvrTotalUpdatedColumns
-      (\ s a -> s{_buvrTotalUpdatedColumns = a})
-      . mapping _Coerce
-
--- | One UpdateValuesResponse per requested range, in the same order as the
--- requests appeared.
-buvrResponses :: Lens' BatchUpdateValuesResponse [UpdateValuesResponse]
-buvrResponses
-  = lens _buvrResponses
-      (\ s a -> s{_buvrResponses = a})
-      . _Default
-      . _Coerce
-
--- | The spreadsheet the updates were applied to.
-buvrSpreadsheetId :: Lens' BatchUpdateValuesResponse (Maybe Text)
-buvrSpreadsheetId
-  = lens _buvrSpreadsheetId
-      (\ s a -> s{_buvrSpreadsheetId = a})
-
--- | The total number of sheets where at least one cell in the sheet was
--- updated.
-buvrTotalUpdatedSheets :: Lens' BatchUpdateValuesResponse (Maybe Int32)
-buvrTotalUpdatedSheets
-  = lens _buvrTotalUpdatedSheets
-      (\ s a -> s{_buvrTotalUpdatedSheets = a})
-      . mapping _Coerce
-
--- | The total number of cells updated.
-buvrTotalUpdatedCells :: Lens' BatchUpdateValuesResponse (Maybe Int32)
-buvrTotalUpdatedCells
-  = lens _buvrTotalUpdatedCells
-      (\ s a -> s{_buvrTotalUpdatedCells = a})
-      . mapping _Coerce
-
--- | The total number of rows where at least one cell in the row was updated.
-buvrTotalUpdatedRows :: Lens' BatchUpdateValuesResponse (Maybe Int32)
-buvrTotalUpdatedRows
-  = lens _buvrTotalUpdatedRows
-      (\ s a -> s{_buvrTotalUpdatedRows = a})
-      . mapping _Coerce
-
-instance FromJSON BatchUpdateValuesResponse where
-        parseJSON
-          = withObject "BatchUpdateValuesResponse"
-              (\ o ->
-                 BatchUpdateValuesResponse' <$>
-                   (o .:? "totalUpdatedColumns") <*>
-                     (o .:? "responses" .!= mempty)
-                     <*> (o .:? "spreadsheetId")
-                     <*> (o .:? "totalUpdatedSheets")
-                     <*> (o .:? "totalUpdatedCells")
-                     <*> (o .:? "totalUpdatedRows"))
-
-instance ToJSON BatchUpdateValuesResponse where
-        toJSON BatchUpdateValuesResponse'{..}
-          = object
-              (catMaybes
-                 [("totalUpdatedColumns" .=) <$>
-                    _buvrTotalUpdatedColumns,
-                  ("responses" .=) <$> _buvrResponses,
-                  ("spreadsheetId" .=) <$> _buvrSpreadsheetId,
-                  ("totalUpdatedSheets" .=) <$>
-                    _buvrTotalUpdatedSheets,
-                  ("totalUpdatedCells" .=) <$> _buvrTotalUpdatedCells,
-                  ("totalUpdatedRows" .=) <$> _buvrTotalUpdatedRows])
-
--- | Updates properties of the sheet with the specified sheetId.
---
--- /See:/ 'updateSheetPropertiesRequest' smart constructor.
-data UpdateSheetPropertiesRequest = UpdateSheetPropertiesRequest'
-    { _usprFields     :: !(Maybe FieldMask)
-    , _usprProperties :: !(Maybe SheetProperties)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'UpdateSheetPropertiesRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'usprFields'
---
--- * 'usprProperties'
-updateSheetPropertiesRequest
-    :: UpdateSheetPropertiesRequest
-updateSheetPropertiesRequest =
-    UpdateSheetPropertiesRequest'
-    { _usprFields = Nothing
-    , _usprProperties = Nothing
-    }
-
--- | The fields that should be updated. At least one field must be specified.
--- The root \`properties\` is implied and should not be specified. A single
--- \`\"*\"\` can be used as short-hand for listing every field.
-usprFields :: Lens' UpdateSheetPropertiesRequest (Maybe FieldMask)
-usprFields
-  = lens _usprFields (\ s a -> s{_usprFields = a})
-
--- | The properties to update.
-usprProperties :: Lens' UpdateSheetPropertiesRequest (Maybe SheetProperties)
-usprProperties
-  = lens _usprProperties
-      (\ s a -> s{_usprProperties = a})
-
-instance FromJSON UpdateSheetPropertiesRequest where
-        parseJSON
-          = withObject "UpdateSheetPropertiesRequest"
-              (\ o ->
-                 UpdateSheetPropertiesRequest' <$>
-                   (o .:? "fields") <*> (o .:? "properties"))
-
-instance ToJSON UpdateSheetPropertiesRequest where
-        toJSON UpdateSheetPropertiesRequest'{..}
-          = object
-              (catMaybes
-                 [("fields" .=) <$> _usprFields,
-                  ("properties" .=) <$> _usprProperties])
-
--- | Resource that represents a spreadsheet.
---
--- /See:/ 'spreadsheet' smart constructor.
-data Spreadsheet = Spreadsheet'
-    { _sprSheets         :: !(Maybe [Sheet])
-    , _sprNamedRanges    :: !(Maybe [NamedRange])
-    , _sprSpreadsheetId  :: !(Maybe Text)
-    , _sprSpreadsheetURL :: !(Maybe Text)
-    , _sprProperties     :: !(Maybe SpreadsheetProperties)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Spreadsheet' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sprSheets'
---
--- * 'sprNamedRanges'
---
--- * 'sprSpreadsheetId'
---
--- * 'sprSpreadsheetURL'
---
--- * 'sprProperties'
-spreadsheet
-    :: Spreadsheet
-spreadsheet =
-    Spreadsheet'
-    { _sprSheets = Nothing
-    , _sprNamedRanges = Nothing
-    , _sprSpreadsheetId = Nothing
-    , _sprSpreadsheetURL = Nothing
-    , _sprProperties = Nothing
-    }
-
--- | The sheets that are part of a spreadsheet.
-sprSheets :: Lens' Spreadsheet [Sheet]
-sprSheets
-  = lens _sprSheets (\ s a -> s{_sprSheets = a}) .
-      _Default
-      . _Coerce
-
--- | The named ranges defined in a spreadsheet.
-sprNamedRanges :: Lens' Spreadsheet [NamedRange]
-sprNamedRanges
-  = lens _sprNamedRanges
-      (\ s a -> s{_sprNamedRanges = a})
-      . _Default
-      . _Coerce
-
--- | The ID of the spreadsheet. This field is read-only.
-sprSpreadsheetId :: Lens' Spreadsheet (Maybe Text)
-sprSpreadsheetId
-  = lens _sprSpreadsheetId
-      (\ s a -> s{_sprSpreadsheetId = a})
-
--- | The url of the spreadsheet. This field is read-only.
-sprSpreadsheetURL :: Lens' Spreadsheet (Maybe Text)
-sprSpreadsheetURL
-  = lens _sprSpreadsheetURL
-      (\ s a -> s{_sprSpreadsheetURL = a})
-
--- | Overall properties of a spreadsheet.
-sprProperties :: Lens' Spreadsheet (Maybe SpreadsheetProperties)
-sprProperties
-  = lens _sprProperties
-      (\ s a -> s{_sprProperties = a})
-
-instance FromJSON Spreadsheet where
-        parseJSON
-          = withObject "Spreadsheet"
-              (\ o ->
-                 Spreadsheet' <$>
-                   (o .:? "sheets" .!= mempty) <*>
-                     (o .:? "namedRanges" .!= mempty)
-                     <*> (o .:? "spreadsheetId")
-                     <*> (o .:? "spreadsheetUrl")
-                     <*> (o .:? "properties"))
-
-instance ToJSON Spreadsheet where
-        toJSON Spreadsheet'{..}
-          = object
-              (catMaybes
-                 [("sheets" .=) <$> _sprSheets,
-                  ("namedRanges" .=) <$> _sprNamedRanges,
-                  ("spreadsheetId" .=) <$> _sprSpreadsheetId,
-                  ("spreadsheetUrl" .=) <$> _sprSpreadsheetURL,
-                  ("properties" .=) <$> _sprProperties])
-
--- | Inserts rows or columns in a sheet at a particular index.
---
--- /See:/ 'insertDimensionRequest' smart constructor.
-data InsertDimensionRequest = InsertDimensionRequest'
-    { _idrRange             :: !(Maybe DimensionRange)
-    , _idrInheritFromBefore :: !(Maybe Bool)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InsertDimensionRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'idrRange'
---
--- * 'idrInheritFromBefore'
-insertDimensionRequest
-    :: InsertDimensionRequest
-insertDimensionRequest =
-    InsertDimensionRequest'
-    { _idrRange = Nothing
-    , _idrInheritFromBefore = Nothing
-    }
-
--- | The dimensions to insert. Both the start and end indexes must be
--- bounded.
-idrRange :: Lens' InsertDimensionRequest (Maybe DimensionRange)
-idrRange = lens _idrRange (\ s a -> s{_idrRange = a})
-
--- | Whether dimension properties should be extended from the dimensions
--- before or after the newly inserted dimensions. True to inherit from the
--- dimensions before (in which case the start index must be greater than
--- 0), and false to inherit from the dimensions after. For example, if row
--- index 0 has red background and row index 1 has a green background, then
--- inserting 2 rows at index 1 can inherit either the green or red
--- background. If \`inheritFromBefore\` is true, the two new rows will be
--- red (because the row before the insertion point was red), whereas if
--- \`inheritFromBefore\` is false, the two new rows will be green (because
--- the row after the insertion point was green).
-idrInheritFromBefore :: Lens' InsertDimensionRequest (Maybe Bool)
-idrInheritFromBefore
-  = lens _idrInheritFromBefore
-      (\ s a -> s{_idrInheritFromBefore = a})
-
-instance FromJSON InsertDimensionRequest where
-        parseJSON
-          = withObject "InsertDimensionRequest"
-              (\ o ->
-                 InsertDimensionRequest' <$>
-                   (o .:? "range") <*> (o .:? "inheritFromBefore"))
-
-instance ToJSON InsertDimensionRequest where
-        toJSON InsertDimensionRequest'{..}
-          = object
-              (catMaybes
-                 [("range" .=) <$> _idrRange,
-                  ("inheritFromBefore" .=) <$> _idrInheritFromBefore])
-
--- | A single interpolation point on a gradient conditional format. These pin
--- the gradient color scale according to the color, type and value chosen.
---
--- /See:/ 'interpolationPoint' smart constructor.
-data InterpolationPoint = InterpolationPoint'
-    { _ipColor :: !(Maybe Color)
-    , _ipValue :: !(Maybe Text)
-    , _ipType  :: !(Maybe InterpolationPointType)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InterpolationPoint' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ipColor'
---
--- * 'ipValue'
---
--- * 'ipType'
-interpolationPoint
-    :: InterpolationPoint
-interpolationPoint =
-    InterpolationPoint'
-    { _ipColor = Nothing
-    , _ipValue = Nothing
-    , _ipType = Nothing
-    }
-
--- | The color this interpolation point should use.
-ipColor :: Lens' InterpolationPoint (Maybe Color)
-ipColor = lens _ipColor (\ s a -> s{_ipColor = a})
-
--- | The value this interpolation point uses. May be a formula. Unused if
--- type is MIN or MAX.
-ipValue :: Lens' InterpolationPoint (Maybe Text)
-ipValue = lens _ipValue (\ s a -> s{_ipValue = a})
-
--- | How the value should be interpreted.
-ipType :: Lens' InterpolationPoint (Maybe InterpolationPointType)
-ipType = lens _ipType (\ s a -> s{_ipType = a})
-
-instance FromJSON InterpolationPoint where
-        parseJSON
-          = withObject "InterpolationPoint"
-              (\ o ->
-                 InterpolationPoint' <$>
-                   (o .:? "color") <*> (o .:? "value") <*>
-                     (o .:? "type"))
-
-instance ToJSON InterpolationPoint where
-        toJSON InterpolationPoint'{..}
-          = object
-              (catMaybes
-                 [("color" .=) <$> _ipColor,
-                  ("value" .=) <$> _ipValue, ("type" .=) <$> _ipType])
-
--- | Data about a specific cell.
---
--- /See:/ 'cellData' smart constructor.
-data CellData = CellData'
-    { _cdTextFormatRuns    :: !(Maybe [TextFormatRun])
-    , _cdNote              :: !(Maybe Text)
-    , _cdUserEnteredValue  :: !(Maybe ExtendedValue)
-    , _cdUserEnteredFormat :: !(Maybe CellFormat)
-    , _cdEffectiveFormat   :: !(Maybe CellFormat)
-    , _cdPivotTable        :: !(Maybe PivotTable)
-    , _cdFormattedValue    :: !(Maybe Text)
-    , _cdDataValidation    :: !(Maybe DataValidationRule)
-    , _cdHyperlink         :: !(Maybe Text)
-    , _cdEffectiveValue    :: !(Maybe ExtendedValue)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CellData' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cdTextFormatRuns'
---
--- * 'cdNote'
---
--- * 'cdUserEnteredValue'
---
--- * 'cdUserEnteredFormat'
---
--- * 'cdEffectiveFormat'
---
--- * 'cdPivotTable'
---
--- * 'cdFormattedValue'
---
--- * 'cdDataValidation'
---
--- * 'cdHyperlink'
---
--- * 'cdEffectiveValue'
-cellData
-    :: CellData
-cellData =
-    CellData'
-    { _cdTextFormatRuns = Nothing
-    , _cdNote = Nothing
-    , _cdUserEnteredValue = Nothing
-    , _cdUserEnteredFormat = Nothing
-    , _cdEffectiveFormat = Nothing
-    , _cdPivotTable = Nothing
-    , _cdFormattedValue = Nothing
-    , _cdDataValidation = Nothing
-    , _cdHyperlink = Nothing
-    , _cdEffectiveValue = Nothing
-    }
-
--- | Runs of rich text applied to subsections of the cell. Runs are only
--- valid on user entered strings, not formulas, bools, or numbers. Runs
--- start at specific indexes in the text and continue until the next run.
--- Properties of a run will continue unless explicitly changed in a
--- subsequent run (and properties of the first run will continue the
--- properties of the cell unless explicitly changed). When writing, the new
--- runs will overwrite any prior runs. When writing a new
--- user_entered_value, previous runs will be erased.
-cdTextFormatRuns :: Lens' CellData [TextFormatRun]
-cdTextFormatRuns
-  = lens _cdTextFormatRuns
-      (\ s a -> s{_cdTextFormatRuns = a})
-      . _Default
-      . _Coerce
-
--- | Any note on the cell.
-cdNote :: Lens' CellData (Maybe Text)
-cdNote = lens _cdNote (\ s a -> s{_cdNote = a})
-
--- | The value the user entered in the cell. e.g, \`1234\`, \`\'Hello\'\`, or
--- \`=NOW()\` Note: Dates, Times and DateTimes are represented as doubles
--- in serial number format.
-cdUserEnteredValue :: Lens' CellData (Maybe ExtendedValue)
-cdUserEnteredValue
-  = lens _cdUserEnteredValue
-      (\ s a -> s{_cdUserEnteredValue = a})
-
--- | The format the user entered for the cell. When writing, the new format
--- will be merged with the existing format.
-cdUserEnteredFormat :: Lens' CellData (Maybe CellFormat)
-cdUserEnteredFormat
-  = lens _cdUserEnteredFormat
-      (\ s a -> s{_cdUserEnteredFormat = a})
-
--- | The effective format being used by the cell. This includes the results
--- of applying any conditional formatting and, if the cell contains a
--- formula, the computed number format. If the effective format is the
--- default format, effective format will not be written. This field is
--- read-only.
-cdEffectiveFormat :: Lens' CellData (Maybe CellFormat)
-cdEffectiveFormat
-  = lens _cdEffectiveFormat
-      (\ s a -> s{_cdEffectiveFormat = a})
-
--- | A pivot table anchored at this cell. The size of pivot table itself is
--- computed dynamically based on its data, grouping, filters, values, etc.
--- Only the top-left cell of the pivot table contains the pivot table
--- definition. The other cells will contain the calculated values of the
--- results of the pivot in their effective_value fields.
-cdPivotTable :: Lens' CellData (Maybe PivotTable)
-cdPivotTable
-  = lens _cdPivotTable (\ s a -> s{_cdPivotTable = a})
-
--- | The formatted value of the cell. This is the value as it\'s shown to the
--- user. This field is read-only.
-cdFormattedValue :: Lens' CellData (Maybe Text)
-cdFormattedValue
-  = lens _cdFormattedValue
-      (\ s a -> s{_cdFormattedValue = a})
-
--- | A data validation rule on the cell, if any. When writing, the new data
--- validation rule will overwrite any prior rule.
-cdDataValidation :: Lens' CellData (Maybe DataValidationRule)
-cdDataValidation
-  = lens _cdDataValidation
-      (\ s a -> s{_cdDataValidation = a})
-
--- | A hyperlink this cell points to, if any. This field is read-only. (To
--- set it, use a \`=HYPERLINK\` formula.)
-cdHyperlink :: Lens' CellData (Maybe Text)
-cdHyperlink
-  = lens _cdHyperlink (\ s a -> s{_cdHyperlink = a})
-
--- | The effective value of the cell. For cells with formulas, this will be
--- the calculated value. For cells with literals, this will be the same as
--- the user_entered_value. This field is read-only.
-cdEffectiveValue :: Lens' CellData (Maybe ExtendedValue)
-cdEffectiveValue
-  = lens _cdEffectiveValue
-      (\ s a -> s{_cdEffectiveValue = a})
-
-instance FromJSON CellData where
-        parseJSON
-          = withObject "CellData"
-              (\ o ->
-                 CellData' <$>
-                   (o .:? "textFormatRuns" .!= mempty) <*>
-                     (o .:? "note")
-                     <*> (o .:? "userEnteredValue")
-                     <*> (o .:? "userEnteredFormat")
-                     <*> (o .:? "effectiveFormat")
-                     <*> (o .:? "pivotTable")
-                     <*> (o .:? "formattedValue")
-                     <*> (o .:? "dataValidation")
-                     <*> (o .:? "hyperlink")
-                     <*> (o .:? "effectiveValue"))
-
-instance ToJSON CellData where
-        toJSON CellData'{..}
-          = object
-              (catMaybes
-                 [("textFormatRuns" .=) <$> _cdTextFormatRuns,
-                  ("note" .=) <$> _cdNote,
-                  ("userEnteredValue" .=) <$> _cdUserEnteredValue,
-                  ("userEnteredFormat" .=) <$> _cdUserEnteredFormat,
-                  ("effectiveFormat" .=) <$> _cdEffectiveFormat,
-                  ("pivotTable" .=) <$> _cdPivotTable,
-                  ("formattedValue" .=) <$> _cdFormattedValue,
-                  ("dataValidation" .=) <$> _cdDataValidation,
-                  ("hyperlink" .=) <$> _cdHyperlink,
-                  ("effectiveValue" .=) <$> _cdEffectiveValue])
-
--- | Source ranges for a chart.
---
--- /See:/ 'chartSourceRange' smart constructor.
-newtype ChartSourceRange = ChartSourceRange'
-    { _csrSources :: Maybe [GridRange]
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ChartSourceRange' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'csrSources'
-chartSourceRange
-    :: ChartSourceRange
-chartSourceRange =
-    ChartSourceRange'
-    { _csrSources = Nothing
-    }
-
--- | The ranges of data for a series or domain. Exactly one dimension must
--- have a length of 1, and all sources in the list must have the same
--- dimension with length 1. The domain (if it exists) & all series must
--- have the same number of source ranges. If using more than one source
--- range, then the source range at a given offset must be contiguous across
--- the domain and series. For example, these are valid configurations:
--- domain sources: A1:A5 series1 sources: B1:B5 series2 sources: D6:D10
--- domain sources: A1:A5, C10:C12 series1 sources: B1:B5, D10:D12 series2
--- sources: C1:C5, E10:E12
-csrSources :: Lens' ChartSourceRange [GridRange]
-csrSources
-  = lens _csrSources (\ s a -> s{_csrSources = a}) .
-      _Default
-      . _Coerce
-
-instance FromJSON ChartSourceRange where
-        parseJSON
-          = withObject "ChartSourceRange"
-              (\ o ->
-                 ChartSourceRange' <$> (o .:? "sources" .!= mempty))
-
-instance ToJSON ChartSourceRange where
-        toJSON ChartSourceRange'{..}
-          = object (catMaybes [("sources" .=) <$> _csrSources])
-
--- | The result of adding a named range.
---
--- /See:/ 'addNamedRangeResponse' smart constructor.
-newtype AddNamedRangeResponse = AddNamedRangeResponse'
-    { _anrrNamedRange :: Maybe NamedRange
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AddNamedRangeResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'anrrNamedRange'
-addNamedRangeResponse
-    :: AddNamedRangeResponse
-addNamedRangeResponse =
-    AddNamedRangeResponse'
-    { _anrrNamedRange = Nothing
-    }
-
--- | The named range to add.
-anrrNamedRange :: Lens' AddNamedRangeResponse (Maybe NamedRange)
-anrrNamedRange
-  = lens _anrrNamedRange
-      (\ s a -> s{_anrrNamedRange = a})
-
-instance FromJSON AddNamedRangeResponse where
-        parseJSON
-          = withObject "AddNamedRangeResponse"
-              (\ o ->
-                 AddNamedRangeResponse' <$> (o .:? "namedRange"))
-
-instance ToJSON AddNamedRangeResponse where
-        toJSON AddNamedRangeResponse'{..}
-          = object
-              (catMaybes [("namedRange" .=) <$> _anrrNamedRange])
-
--- | The result of adding a chart to a spreadsheet.
---
--- /See:/ 'addChartResponse' smart constructor.
-newtype AddChartResponse = AddChartResponse'
-    { _acrChart :: Maybe EmbeddedChart
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AddChartResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'acrChart'
-addChartResponse
-    :: AddChartResponse
-addChartResponse =
-    AddChartResponse'
-    { _acrChart = Nothing
-    }
-
--- | The newly added chart.
-acrChart :: Lens' AddChartResponse (Maybe EmbeddedChart)
-acrChart = lens _acrChart (\ s a -> s{_acrChart = a})
-
-instance FromJSON AddChartResponse where
-        parseJSON
-          = withObject "AddChartResponse"
-              (\ o -> AddChartResponse' <$> (o .:? "chart"))
-
-instance ToJSON AddChartResponse where
-        toJSON AddChartResponse'{..}
-          = object (catMaybes [("chart" .=) <$> _acrChart])
-
--- | Updates a chart\'s specifications. (This does not move or resize a
--- chart. To move or resize a chart, use
--- UpdateEmbeddedObjectPositionRequest.)
---
--- /See:/ 'updateChartSpecRequest' smart constructor.
-data UpdateChartSpecRequest = UpdateChartSpecRequest'
-    { _ucsrSpec    :: !(Maybe ChartSpec)
-    , _ucsrChartId :: !(Maybe (Textual Int32))
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'UpdateChartSpecRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ucsrSpec'
---
--- * 'ucsrChartId'
-updateChartSpecRequest
-    :: UpdateChartSpecRequest
-updateChartSpecRequest =
-    UpdateChartSpecRequest'
-    { _ucsrSpec = Nothing
-    , _ucsrChartId = Nothing
-    }
-
--- | The specification to apply to the chart.
-ucsrSpec :: Lens' UpdateChartSpecRequest (Maybe ChartSpec)
-ucsrSpec = lens _ucsrSpec (\ s a -> s{_ucsrSpec = a})
-
--- | The ID of the chart to update.
-ucsrChartId :: Lens' UpdateChartSpecRequest (Maybe Int32)
-ucsrChartId
-  = lens _ucsrChartId (\ s a -> s{_ucsrChartId = a}) .
-      mapping _Coerce
-
-instance FromJSON UpdateChartSpecRequest where
-        parseJSON
-          = withObject "UpdateChartSpecRequest"
-              (\ o ->
-                 UpdateChartSpecRequest' <$>
-                   (o .:? "spec") <*> (o .:? "chartId"))
-
-instance ToJSON UpdateChartSpecRequest where
-        toJSON UpdateChartSpecRequest'{..}
-          = object
-              (catMaybes
-                 [("spec" .=) <$> _ucsrSpec,
-                  ("chartId" .=) <$> _ucsrChartId])
-
--- | Sets the basic filter associated with a sheet.
---
--- /See:/ 'setBasicFilterRequest' smart constructor.
-newtype SetBasicFilterRequest = SetBasicFilterRequest'
-    { _sbfrFilter :: Maybe BasicFilter
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'SetBasicFilterRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sbfrFilter'
-setBasicFilterRequest
-    :: SetBasicFilterRequest
-setBasicFilterRequest =
-    SetBasicFilterRequest'
-    { _sbfrFilter = Nothing
-    }
-
--- | The filter to set.
-sbfrFilter :: Lens' SetBasicFilterRequest (Maybe BasicFilter)
-sbfrFilter
-  = lens _sbfrFilter (\ s a -> s{_sbfrFilter = a})
-
-instance FromJSON SetBasicFilterRequest where
-        parseJSON
-          = withObject "SetBasicFilterRequest"
-              (\ o -> SetBasicFilterRequest' <$> (o .:? "filter"))
-
-instance ToJSON SetBasicFilterRequest where
-        toJSON SetBasicFilterRequest'{..}
-          = object (catMaybes [("filter" .=) <$> _sbfrFilter])
-
--- | Properties of a grid.
---
--- /See:/ 'gridProperties' smart constructor.
-data GridProperties = GridProperties'
-    { _gpFrozenColumnCount :: !(Maybe (Textual Int32))
-    , _gpColumnCount       :: !(Maybe (Textual Int32))
-    , _gpHideGridlines     :: !(Maybe Bool)
-    , _gpFrozenRowCount    :: !(Maybe (Textual Int32))
-    , _gpRowCount          :: !(Maybe (Textual Int32))
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'GridProperties' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gpFrozenColumnCount'
---
--- * 'gpColumnCount'
---
--- * 'gpHideGridlines'
---
--- * 'gpFrozenRowCount'
---
--- * 'gpRowCount'
-gridProperties
-    :: GridProperties
-gridProperties =
-    GridProperties'
-    { _gpFrozenColumnCount = Nothing
-    , _gpColumnCount = Nothing
-    , _gpHideGridlines = Nothing
-    , _gpFrozenRowCount = Nothing
-    , _gpRowCount = Nothing
-    }
-
--- | The number of columns that are frozen in the grid.
-gpFrozenColumnCount :: Lens' GridProperties (Maybe Int32)
-gpFrozenColumnCount
-  = lens _gpFrozenColumnCount
-      (\ s a -> s{_gpFrozenColumnCount = a})
-      . mapping _Coerce
-
--- | The number of columns in the grid.
-gpColumnCount :: Lens' GridProperties (Maybe Int32)
-gpColumnCount
-  = lens _gpColumnCount
-      (\ s a -> s{_gpColumnCount = a})
-      . mapping _Coerce
-
--- | True if the grid isn\'t showing gridlines in the UI.
-gpHideGridlines :: Lens' GridProperties (Maybe Bool)
-gpHideGridlines
-  = lens _gpHideGridlines
-      (\ s a -> s{_gpHideGridlines = a})
-
--- | The number of rows that are frozen in the grid.
-gpFrozenRowCount :: Lens' GridProperties (Maybe Int32)
-gpFrozenRowCount
-  = lens _gpFrozenRowCount
-      (\ s a -> s{_gpFrozenRowCount = a})
-      . mapping _Coerce
-
--- | The number of rows in the grid.
-gpRowCount :: Lens' GridProperties (Maybe Int32)
-gpRowCount
-  = lens _gpRowCount (\ s a -> s{_gpRowCount = a}) .
-      mapping _Coerce
-
-instance FromJSON GridProperties where
-        parseJSON
-          = withObject "GridProperties"
-              (\ o ->
-                 GridProperties' <$>
-                   (o .:? "frozenColumnCount") <*> (o .:? "columnCount")
-                     <*> (o .:? "hideGridlines")
-                     <*> (o .:? "frozenRowCount")
-                     <*> (o .:? "rowCount"))
-
-instance ToJSON GridProperties where
-        toJSON GridProperties'{..}
-          = object
-              (catMaybes
-                 [("frozenColumnCount" .=) <$> _gpFrozenColumnCount,
-                  ("columnCount" .=) <$> _gpColumnCount,
-                  ("hideGridlines" .=) <$> _gpHideGridlines,
-                  ("frozenRowCount" .=) <$> _gpFrozenRowCount,
-                  ("rowCount" .=) <$> _gpRowCount])
-
--- | The criteria for showing\/hiding values per column. The map\'s key is
--- the column index, and the value is the criteria for that column.
---
--- /See:/ 'basicFilterCriteria' smart constructor.
-newtype BasicFilterCriteria = BasicFilterCriteria'
-    { _bfcAddtional :: HashMap Text FilterCriteria
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'BasicFilterCriteria' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'bfcAddtional'
-basicFilterCriteria
-    :: HashMap Text FilterCriteria -- ^ 'bfcAddtional'
-    -> BasicFilterCriteria
-basicFilterCriteria pBfcAddtional_ =
-    BasicFilterCriteria'
-    { _bfcAddtional = _Coerce # pBfcAddtional_
-    }
-
-bfcAddtional :: Lens' BasicFilterCriteria (HashMap Text FilterCriteria)
-bfcAddtional
-  = lens _bfcAddtional (\ s a -> s{_bfcAddtional = a})
-      . _Coerce
-
-instance FromJSON BasicFilterCriteria where
-        parseJSON
-          = withObject "BasicFilterCriteria"
-              (\ o -> BasicFilterCriteria' <$> (parseJSONObject o))
-
-instance ToJSON BasicFilterCriteria where
-        toJSON = toJSON . _bfcAddtional
-
--- | Adds a new banded range to the spreadsheet.
---
--- /See:/ 'addBandingRequest' smart constructor.
-newtype AddBandingRequest = AddBandingRequest'
-    { _abrBandedRange :: Maybe BandedRange
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AddBandingRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'abrBandedRange'
-addBandingRequest
-    :: AddBandingRequest
-addBandingRequest =
-    AddBandingRequest'
-    { _abrBandedRange = Nothing
-    }
-
--- | The banded range to add. The bandedRangeId field is optional; if one is
--- not set, an id will be randomly generated. (It is an error to specify
--- the ID of a range that already exists.)
-abrBandedRange :: Lens' AddBandingRequest (Maybe BandedRange)
-abrBandedRange
-  = lens _abrBandedRange
-      (\ s a -> s{_abrBandedRange = a})
-
-instance FromJSON AddBandingRequest where
-        parseJSON
-          = withObject "AddBandingRequest"
-              (\ o -> AddBandingRequest' <$> (o .:? "bandedRange"))
-
-instance ToJSON AddBandingRequest where
-        toJSON AddBandingRequest'{..}
-          = object
-              (catMaybes [("bandedRange" .=) <$> _abrBandedRange])
-
--- | Updates properties of dimensions within the specified range.
---
--- /See:/ 'updateDimensionPropertiesRequest' smart constructor.
-data UpdateDimensionPropertiesRequest = UpdateDimensionPropertiesRequest'
-    { _udprRange      :: !(Maybe DimensionRange)
-    , _udprFields     :: !(Maybe FieldMask)
-    , _udprProperties :: !(Maybe DimensionProperties)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'UpdateDimensionPropertiesRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'udprRange'
---
--- * 'udprFields'
---
--- * 'udprProperties'
-updateDimensionPropertiesRequest
-    :: UpdateDimensionPropertiesRequest
-updateDimensionPropertiesRequest =
-    UpdateDimensionPropertiesRequest'
-    { _udprRange = Nothing
-    , _udprFields = Nothing
-    , _udprProperties = Nothing
-    }
-
--- | The rows or columns to update.
-udprRange :: Lens' UpdateDimensionPropertiesRequest (Maybe DimensionRange)
-udprRange
-  = lens _udprRange (\ s a -> s{_udprRange = a})
-
--- | The fields that should be updated. At least one field must be specified.
--- The root \`properties\` is implied and should not be specified. A single
--- \`\"*\"\` can be used as short-hand for listing every field.
-udprFields :: Lens' UpdateDimensionPropertiesRequest (Maybe FieldMask)
-udprFields
-  = lens _udprFields (\ s a -> s{_udprFields = a})
-
--- | Properties to update.
-udprProperties :: Lens' UpdateDimensionPropertiesRequest (Maybe DimensionProperties)
-udprProperties
-  = lens _udprProperties
-      (\ s a -> s{_udprProperties = a})
-
-instance FromJSON UpdateDimensionPropertiesRequest
-         where
-        parseJSON
-          = withObject "UpdateDimensionPropertiesRequest"
-              (\ o ->
-                 UpdateDimensionPropertiesRequest' <$>
-                   (o .:? "range") <*> (o .:? "fields") <*>
-                     (o .:? "properties"))
-
-instance ToJSON UpdateDimensionPropertiesRequest
-         where
-        toJSON UpdateDimensionPropertiesRequest'{..}
-          = object
-              (catMaybes
-                 [("range" .=) <$> _udprRange,
-                  ("fields" .=) <$> _udprFields,
-                  ("properties" .=) <$> _udprProperties])
-
--- | An optional mapping of filters per source column offset. The filters
--- will be applied before aggregating data into the pivot table. The map\'s
--- key is the column offset of the source range that you want to filter,
--- and the value is the criteria for that column. For example, if the
--- source was \`C10:E15\`, a key of \`0\` will have the filter for column
--- \`C\`, whereas the key \`1\` is for column \`D\`.
---
--- /See:/ 'pivotTableCriteria' smart constructor.
-newtype PivotTableCriteria = PivotTableCriteria'
-    { _ptcAddtional :: HashMap Text PivotFilterCriteria
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'PivotTableCriteria' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ptcAddtional'
-pivotTableCriteria
-    :: HashMap Text PivotFilterCriteria -- ^ 'ptcAddtional'
-    -> PivotTableCriteria
-pivotTableCriteria pPtcAddtional_ =
-    PivotTableCriteria'
-    { _ptcAddtional = _Coerce # pPtcAddtional_
-    }
-
-ptcAddtional :: Lens' PivotTableCriteria (HashMap Text PivotFilterCriteria)
-ptcAddtional
-  = lens _ptcAddtional (\ s a -> s{_ptcAddtional = a})
-      . _Coerce
-
-instance FromJSON PivotTableCriteria where
-        parseJSON
-          = withObject "PivotTableCriteria"
-              (\ o -> PivotTableCriteria' <$> (parseJSONObject o))
-
-instance ToJSON PivotTableCriteria where
-        toJSON = toJSON . _ptcAddtional
-
--- | Fills in more data based on existing data.
---
--- /See:/ 'autoFillRequest' smart constructor.
-data AutoFillRequest = AutoFillRequest'
-    { _afrSourceAndDestination :: !(Maybe SourceAndDestination)
-    , _afrUseAlternateSeries   :: !(Maybe Bool)
-    , _afrRange                :: !(Maybe GridRange)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AutoFillRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'afrSourceAndDestination'
---
--- * 'afrUseAlternateSeries'
---
--- * 'afrRange'
-autoFillRequest
-    :: AutoFillRequest
-autoFillRequest =
-    AutoFillRequest'
-    { _afrSourceAndDestination = Nothing
-    , _afrUseAlternateSeries = Nothing
-    , _afrRange = Nothing
-    }
-
--- | The source and destination areas to autofill. This explicitly lists the
--- source of the autofill and where to extend that data.
-afrSourceAndDestination :: Lens' AutoFillRequest (Maybe SourceAndDestination)
-afrSourceAndDestination
-  = lens _afrSourceAndDestination
-      (\ s a -> s{_afrSourceAndDestination = a})
-
--- | True if we should generate data with the \"alternate\" series. This
--- differs based on the type and amount of source data.
-afrUseAlternateSeries :: Lens' AutoFillRequest (Maybe Bool)
-afrUseAlternateSeries
-  = lens _afrUseAlternateSeries
-      (\ s a -> s{_afrUseAlternateSeries = a})
-
--- | The range to autofill. This will examine the range and detect the
--- location that has data and automatically fill that data in to the rest
--- of the range.
-afrRange :: Lens' AutoFillRequest (Maybe GridRange)
-afrRange = lens _afrRange (\ s a -> s{_afrRange = a})
-
-instance FromJSON AutoFillRequest where
-        parseJSON
-          = withObject "AutoFillRequest"
-              (\ o ->
-                 AutoFillRequest' <$>
-                   (o .:? "sourceAndDestination") <*>
-                     (o .:? "useAlternateSeries")
-                     <*> (o .:? "range"))
-
-instance ToJSON AutoFillRequest where
-        toJSON AutoFillRequest'{..}
-          = object
-              (catMaybes
-                 [("sourceAndDestination" .=) <$>
-                    _afrSourceAndDestination,
-                  ("useAlternateSeries" .=) <$> _afrUseAlternateSeries,
-                  ("range" .=) <$> _afrRange])
-
--- | Duplicates the contents of a sheet.
---
--- /See:/ 'duplicateSheetRequest' smart constructor.
-data DuplicateSheetRequest = DuplicateSheetRequest'
-    { _dsrNewSheetName     :: !(Maybe Text)
-    , _dsrInsertSheetIndex :: !(Maybe (Textual Int32))
-    , _dsrSourceSheetId    :: !(Maybe (Textual Int32))
-    , _dsrNewSheetId       :: !(Maybe (Textual Int32))
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DuplicateSheetRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dsrNewSheetName'
---
--- * 'dsrInsertSheetIndex'
---
--- * 'dsrSourceSheetId'
---
--- * 'dsrNewSheetId'
-duplicateSheetRequest
-    :: DuplicateSheetRequest
-duplicateSheetRequest =
-    DuplicateSheetRequest'
-    { _dsrNewSheetName = Nothing
-    , _dsrInsertSheetIndex = Nothing
-    , _dsrSourceSheetId = Nothing
-    , _dsrNewSheetId = Nothing
-    }
-
--- | The name of the new sheet. If empty, a new name is chosen for you.
-dsrNewSheetName :: Lens' DuplicateSheetRequest (Maybe Text)
-dsrNewSheetName
-  = lens _dsrNewSheetName
-      (\ s a -> s{_dsrNewSheetName = a})
-
--- | The zero-based index where the new sheet should be inserted. The index
--- of all sheets after this are incremented.
-dsrInsertSheetIndex :: Lens' DuplicateSheetRequest (Maybe Int32)
-dsrInsertSheetIndex
-  = lens _dsrInsertSheetIndex
-      (\ s a -> s{_dsrInsertSheetIndex = a})
-      . mapping _Coerce
-
--- | The sheet to duplicate.
-dsrSourceSheetId :: Lens' DuplicateSheetRequest (Maybe Int32)
-dsrSourceSheetId
-  = lens _dsrSourceSheetId
-      (\ s a -> s{_dsrSourceSheetId = a})
-      . mapping _Coerce
-
--- | If set, the ID of the new sheet. If not set, an ID is chosen. If set,
--- the ID must not conflict with any existing sheet ID. If set, it must be
--- non-negative.
-dsrNewSheetId :: Lens' DuplicateSheetRequest (Maybe Int32)
-dsrNewSheetId
-  = lens _dsrNewSheetId
-      (\ s a -> s{_dsrNewSheetId = a})
-      . mapping _Coerce
-
-instance FromJSON DuplicateSheetRequest where
-        parseJSON
-          = withObject "DuplicateSheetRequest"
-              (\ o ->
-                 DuplicateSheetRequest' <$>
-                   (o .:? "newSheetName") <*> (o .:? "insertSheetIndex")
-                     <*> (o .:? "sourceSheetId")
-                     <*> (o .:? "newSheetId"))
-
-instance ToJSON DuplicateSheetRequest where
-        toJSON DuplicateSheetRequest'{..}
-          = object
-              (catMaybes
-                 [("newSheetName" .=) <$> _dsrNewSheetName,
-                  ("insertSheetIndex" .=) <$> _dsrInsertSheetIndex,
-                  ("sourceSheetId" .=) <$> _dsrSourceSheetId,
-                  ("newSheetId" .=) <$> _dsrNewSheetId])
-
--- | The result of a filter view being duplicated.
---
--- /See:/ 'duplicateFilterViewResponse' smart constructor.
-newtype DuplicateFilterViewResponse = DuplicateFilterViewResponse'
-    { _dfvrFilter :: Maybe FilterView
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DuplicateFilterViewResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dfvrFilter'
-duplicateFilterViewResponse
-    :: DuplicateFilterViewResponse
-duplicateFilterViewResponse =
-    DuplicateFilterViewResponse'
-    { _dfvrFilter = Nothing
-    }
-
--- | The newly created filter.
-dfvrFilter :: Lens' DuplicateFilterViewResponse (Maybe FilterView)
-dfvrFilter
-  = lens _dfvrFilter (\ s a -> s{_dfvrFilter = a})
-
-instance FromJSON DuplicateFilterViewResponse where
-        parseJSON
-          = withObject "DuplicateFilterViewResponse"
-              (\ o ->
-                 DuplicateFilterViewResponse' <$> (o .:? "filter"))
-
-instance ToJSON DuplicateFilterViewResponse where
-        toJSON DuplicateFilterViewResponse'{..}
-          = object (catMaybes [("filter" .=) <$> _dfvrFilter])
-
--- | The request for updating more than one range of values in a spreadsheet.
---
--- /See:/ 'batchUpdateValuesRequest' smart constructor.
-data BatchUpdateValuesRequest = BatchUpdateValuesRequest'
-    { _buvrData                         :: !(Maybe [ValueRange])
-    , _buvrValueInputOption             :: !(Maybe BatchUpdateValuesRequestValueInputOption)
-    , _buvrIncludeValuesInResponse      :: !(Maybe Bool)
-    , _buvrResponseDateTimeRenderOption :: !(Maybe BatchUpdateValuesRequestResponseDateTimeRenderOption)
-    , _buvrResponseValueRenderOption    :: !(Maybe BatchUpdateValuesRequestResponseValueRenderOption)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'BatchUpdateValuesRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'buvrData'
---
--- * 'buvrValueInputOption'
---
--- * 'buvrIncludeValuesInResponse'
---
--- * 'buvrResponseDateTimeRenderOption'
---
--- * 'buvrResponseValueRenderOption'
-batchUpdateValuesRequest
-    :: BatchUpdateValuesRequest
-batchUpdateValuesRequest =
-    BatchUpdateValuesRequest'
-    { _buvrData = Nothing
-    , _buvrValueInputOption = Nothing
-    , _buvrIncludeValuesInResponse = Nothing
-    , _buvrResponseDateTimeRenderOption = Nothing
-    , _buvrResponseValueRenderOption = Nothing
-    }
-
--- | The new values to apply to the spreadsheet.
-buvrData :: Lens' BatchUpdateValuesRequest [ValueRange]
-buvrData
-  = lens _buvrData (\ s a -> s{_buvrData = a}) .
-      _Default
-      . _Coerce
-
--- | How the input data should be interpreted.
-buvrValueInputOption :: Lens' BatchUpdateValuesRequest (Maybe BatchUpdateValuesRequestValueInputOption)
-buvrValueInputOption
-  = lens _buvrValueInputOption
-      (\ s a -> s{_buvrValueInputOption = a})
-
--- | Determines if the update response should include the values of the cells
--- that were updated. By default, responses do not include the updated
--- values. The \`updatedData\` field within each of the
--- BatchUpdateValuesResponse.responses will contain the updated values. If
--- the range to write was larger than than the range actually written, the
--- response will include all values in the requested range (excluding
--- trailing empty rows and columns).
-buvrIncludeValuesInResponse :: Lens' BatchUpdateValuesRequest (Maybe Bool)
-buvrIncludeValuesInResponse
-  = lens _buvrIncludeValuesInResponse
-      (\ s a -> s{_buvrIncludeValuesInResponse = a})
-
--- | Determines how dates, times, and durations in the response should be
--- rendered. This is ignored if response_value_render_option is
--- FORMATTED_VALUE. The default dateTime render option is
--- [DateTimeRenderOption.SERIAL_NUMBER].
-buvrResponseDateTimeRenderOption :: Lens' BatchUpdateValuesRequest (Maybe BatchUpdateValuesRequestResponseDateTimeRenderOption)
-buvrResponseDateTimeRenderOption
-  = lens _buvrResponseDateTimeRenderOption
-      (\ s a -> s{_buvrResponseDateTimeRenderOption = a})
-
--- | Determines how values in the response should be rendered. The default
--- render option is ValueRenderOption.FORMATTED_VALUE.
-buvrResponseValueRenderOption :: Lens' BatchUpdateValuesRequest (Maybe BatchUpdateValuesRequestResponseValueRenderOption)
-buvrResponseValueRenderOption
-  = lens _buvrResponseValueRenderOption
-      (\ s a -> s{_buvrResponseValueRenderOption = a})
-
-instance FromJSON BatchUpdateValuesRequest where
-        parseJSON
-          = withObject "BatchUpdateValuesRequest"
-              (\ o ->
-                 BatchUpdateValuesRequest' <$>
-                   (o .:? "data" .!= mempty) <*>
-                     (o .:? "valueInputOption")
-                     <*> (o .:? "includeValuesInResponse")
-                     <*> (o .:? "responseDateTimeRenderOption")
-                     <*> (o .:? "responseValueRenderOption"))
-
-instance ToJSON BatchUpdateValuesRequest where
-        toJSON BatchUpdateValuesRequest'{..}
-          = object
-              (catMaybes
-                 [("data" .=) <$> _buvrData,
-                  ("valueInputOption" .=) <$> _buvrValueInputOption,
-                  ("includeValuesInResponse" .=) <$>
-                    _buvrIncludeValuesInResponse,
-                  ("responseDateTimeRenderOption" .=) <$>
-                    _buvrResponseDateTimeRenderOption,
-                  ("responseValueRenderOption" .=) <$>
-                    _buvrResponseValueRenderOption])
-
--- | Adds a chart to a sheet in the spreadsheet.
---
--- /See:/ 'addChartRequest' smart constructor.
-newtype AddChartRequest = AddChartRequest'
-    { _aChart :: Maybe EmbeddedChart
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AddChartRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'aChart'
-addChartRequest
-    :: AddChartRequest
-addChartRequest =
-    AddChartRequest'
-    { _aChart = Nothing
-    }
-
--- | The chart that should be added to the spreadsheet, including the
--- position where it should be placed. The chartId field is optional; if
--- one is not set, an id will be randomly generated. (It is an error to
--- specify the ID of a chart that already exists.)
-aChart :: Lens' AddChartRequest (Maybe EmbeddedChart)
-aChart = lens _aChart (\ s a -> s{_aChart = a})
-
-instance FromJSON AddChartRequest where
-        parseJSON
-          = withObject "AddChartRequest"
-              (\ o -> AddChartRequest' <$> (o .:? "chart"))
-
-instance ToJSON AddChartRequest where
-        toJSON AddChartRequest'{..}
-          = object (catMaybes [("chart" .=) <$> _aChart])
-
--- | A named range.
---
--- /See:/ 'namedRange' smart constructor.
-data NamedRange = NamedRange'
-    { _nrNamedRangeId :: !(Maybe Text)
-    , _nrName         :: !(Maybe Text)
-    , _nrRange        :: !(Maybe GridRange)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'NamedRange' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'nrNamedRangeId'
---
--- * 'nrName'
---
--- * 'nrRange'
-namedRange
-    :: NamedRange
-namedRange =
-    NamedRange'
-    { _nrNamedRangeId = Nothing
-    , _nrName = Nothing
-    , _nrRange = Nothing
-    }
-
--- | The ID of the named range.
-nrNamedRangeId :: Lens' NamedRange (Maybe Text)
-nrNamedRangeId
-  = lens _nrNamedRangeId
-      (\ s a -> s{_nrNamedRangeId = a})
-
--- | The name of the named range.
-nrName :: Lens' NamedRange (Maybe Text)
-nrName = lens _nrName (\ s a -> s{_nrName = a})
-
--- | The range this represents.
-nrRange :: Lens' NamedRange (Maybe GridRange)
-nrRange = lens _nrRange (\ s a -> s{_nrRange = a})
-
-instance FromJSON NamedRange where
-        parseJSON
-          = withObject "NamedRange"
-              (\ o ->
-                 NamedRange' <$>
-                   (o .:? "namedRangeId") <*> (o .:? "name") <*>
-                     (o .:? "range"))
-
-instance ToJSON NamedRange where
-        toJSON NamedRange'{..}
-          = object
-              (catMaybes
-                 [("namedRangeId" .=) <$> _nrNamedRangeId,
-                  ("name" .=) <$> _nrName, ("range" .=) <$> _nrRange])
-
--- | Merges all cells in the range.
---
--- /See:/ 'mergeCellsRequest' smart constructor.
-data MergeCellsRequest = MergeCellsRequest'
-    { _mcrMergeType :: !(Maybe MergeCellsRequestMergeType)
-    , _mcrRange     :: !(Maybe GridRange)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'MergeCellsRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'mcrMergeType'
---
--- * 'mcrRange'
-mergeCellsRequest
-    :: MergeCellsRequest
-mergeCellsRequest =
-    MergeCellsRequest'
-    { _mcrMergeType = Nothing
-    , _mcrRange = Nothing
-    }
-
--- | How the cells should be merged.
-mcrMergeType :: Lens' MergeCellsRequest (Maybe MergeCellsRequestMergeType)
-mcrMergeType
-  = lens _mcrMergeType (\ s a -> s{_mcrMergeType = a})
-
--- | The range of cells to merge.
-mcrRange :: Lens' MergeCellsRequest (Maybe GridRange)
-mcrRange = lens _mcrRange (\ s a -> s{_mcrRange = a})
-
-instance FromJSON MergeCellsRequest where
-        parseJSON
-          = withObject "MergeCellsRequest"
-              (\ o ->
-                 MergeCellsRequest' <$>
-                   (o .:? "mergeType") <*> (o .:? "range"))
-
-instance ToJSON MergeCellsRequest where
-        toJSON MergeCellsRequest'{..}
-          = object
-              (catMaybes
-                 [("mergeType" .=) <$> _mcrMergeType,
-                  ("range" .=) <$> _mcrRange])
-
--- | A border along a cell.
---
--- /See:/ 'bOrder' smart constructor.
-data BOrder = BOrder'
-    { _boStyle :: !(Maybe BOrderStyle)
-    , _boColor :: !(Maybe Color)
-    , _boWidth :: !(Maybe (Textual Int32))
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'BOrder' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'boStyle'
---
--- * 'boColor'
---
--- * 'boWidth'
-bOrder
-    :: BOrder
-bOrder =
-    BOrder'
-    { _boStyle = Nothing
-    , _boColor = Nothing
-    , _boWidth = Nothing
-    }
-
--- | The style of the border.
-boStyle :: Lens' BOrder (Maybe BOrderStyle)
-boStyle = lens _boStyle (\ s a -> s{_boStyle = a})
-
--- | The color of the border.
-boColor :: Lens' BOrder (Maybe Color)
-boColor = lens _boColor (\ s a -> s{_boColor = a})
-
--- | The width of the border, in pixels. Deprecated; the width is determined
--- by the \"style\" field.
-boWidth :: Lens' BOrder (Maybe Int32)
-boWidth
-  = lens _boWidth (\ s a -> s{_boWidth = a}) .
-      mapping _Coerce
-
-instance FromJSON BOrder where
-        parseJSON
-          = withObject "BOrder"
-              (\ o ->
-                 BOrder' <$>
-                   (o .:? "style") <*> (o .:? "color") <*>
-                     (o .:? "width"))
-
-instance ToJSON BOrder where
-        toJSON BOrder'{..}
-          = object
-              (catMaybes
-                 [("style" .=) <$> _boStyle,
-                  ("color" .=) <$> _boColor,
-                  ("width" .=) <$> _boWidth])
-
--- | The kinds of value that a cell in a spreadsheet can have.
---
--- /See:/ 'extendedValue' smart constructor.
-data ExtendedValue = ExtendedValue'
-    { _evBoolValue    :: !(Maybe Bool)
-    , _evNumberValue  :: !(Maybe (Textual Double))
-    , _evErrorValue   :: !(Maybe ErrorValue)
-    , _evStringValue  :: !(Maybe Text)
-    , _evFormulaValue :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ExtendedValue' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'evBoolValue'
---
--- * 'evNumberValue'
---
--- * 'evErrorValue'
---
--- * 'evStringValue'
---
--- * 'evFormulaValue'
-extendedValue
-    :: ExtendedValue
-extendedValue =
-    ExtendedValue'
-    { _evBoolValue = Nothing
-    , _evNumberValue = Nothing
-    , _evErrorValue = Nothing
-    , _evStringValue = Nothing
-    , _evFormulaValue = Nothing
-    }
-
--- | Represents a boolean value.
-evBoolValue :: Lens' ExtendedValue (Maybe Bool)
-evBoolValue
-  = lens _evBoolValue (\ s a -> s{_evBoolValue = a})
-
--- | Represents a double value. Note: Dates, Times and DateTimes are
--- represented as doubles in \"serial number\" format.
-evNumberValue :: Lens' ExtendedValue (Maybe Double)
-evNumberValue
-  = lens _evNumberValue
-      (\ s a -> s{_evNumberValue = a})
-      . mapping _Coerce
-
--- | Represents an error. This field is read-only.
-evErrorValue :: Lens' ExtendedValue (Maybe ErrorValue)
-evErrorValue
-  = lens _evErrorValue (\ s a -> s{_evErrorValue = a})
-
--- | Represents a string value. Leading single quotes are not included. For
--- example, if the user typed \`\'123\` into the UI, this would be
--- represented as a \`stringValue\` of \`\"123\"\`.
-evStringValue :: Lens' ExtendedValue (Maybe Text)
-evStringValue
-  = lens _evStringValue
-      (\ s a -> s{_evStringValue = a})
-
--- | Represents a formula.
-evFormulaValue :: Lens' ExtendedValue (Maybe Text)
-evFormulaValue
-  = lens _evFormulaValue
-      (\ s a -> s{_evFormulaValue = a})
-
-instance FromJSON ExtendedValue where
-        parseJSON
-          = withObject "ExtendedValue"
-              (\ o ->
-                 ExtendedValue' <$>
-                   (o .:? "boolValue") <*> (o .:? "numberValue") <*>
-                     (o .:? "errorValue")
-                     <*> (o .:? "stringValue")
-                     <*> (o .:? "formulaValue"))
-
-instance ToJSON ExtendedValue where
-        toJSON ExtendedValue'{..}
-          = object
-              (catMaybes
-                 [("boolValue" .=) <$> _evBoolValue,
-                  ("numberValue" .=) <$> _evNumberValue,
-                  ("errorValue" .=) <$> _evErrorValue,
-                  ("stringValue" .=) <$> _evStringValue,
-                  ("formulaValue" .=) <$> _evFormulaValue])
-
--- | Adds a named range to the spreadsheet.
---
--- /See:/ 'addNamedRangeRequest' smart constructor.
-newtype AddNamedRangeRequest = AddNamedRangeRequest'
-    { _aNamedRange :: Maybe NamedRange
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AddNamedRangeRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'aNamedRange'
-addNamedRangeRequest
-    :: AddNamedRangeRequest
-addNamedRangeRequest =
-    AddNamedRangeRequest'
-    { _aNamedRange = Nothing
-    }
-
--- | The named range to add. The namedRangeId field is optional; if one is
--- not set, an id will be randomly generated. (It is an error to specify
--- the ID of a range that already exists.)
-aNamedRange :: Lens' AddNamedRangeRequest (Maybe NamedRange)
-aNamedRange
-  = lens _aNamedRange (\ s a -> s{_aNamedRange = a})
-
-instance FromJSON AddNamedRangeRequest where
-        parseJSON
-          = withObject "AddNamedRangeRequest"
-              (\ o ->
-                 AddNamedRangeRequest' <$> (o .:? "namedRange"))
-
-instance ToJSON AddNamedRangeRequest where
-        toJSON AddNamedRangeRequest'{..}
-          = object
-              (catMaybes [("namedRange" .=) <$> _aNamedRange])
-
--- | Criteria for showing\/hiding rows in a pivot table.
---
--- /See:/ 'pivotFilterCriteria' smart constructor.
-newtype PivotFilterCriteria = PivotFilterCriteria'
-    { _pfcVisibleValues :: Maybe [Text]
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'PivotFilterCriteria' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'pfcVisibleValues'
-pivotFilterCriteria
-    :: PivotFilterCriteria
-pivotFilterCriteria =
-    PivotFilterCriteria'
-    { _pfcVisibleValues = Nothing
-    }
-
--- | Values that should be included. Values not listed here are excluded.
-pfcVisibleValues :: Lens' PivotFilterCriteria [Text]
-pfcVisibleValues
-  = lens _pfcVisibleValues
-      (\ s a -> s{_pfcVisibleValues = a})
-      . _Default
-      . _Coerce
-
-instance FromJSON PivotFilterCriteria where
-        parseJSON
-          = withObject "PivotFilterCriteria"
-              (\ o ->
-                 PivotFilterCriteria' <$>
-                   (o .:? "visibleValues" .!= mempty))
-
-instance ToJSON PivotFilterCriteria where
-        toJSON PivotFilterCriteria'{..}
-          = object
-              (catMaybes
-                 [("visibleValues" .=) <$> _pfcVisibleValues])
-
--- | A range along a single dimension on a sheet. All indexes are zero-based.
--- Indexes are half open: the start index is inclusive and the end index is
--- exclusive. Missing indexes indicate the range is unbounded on that side.
---
--- /See:/ 'dimensionRange' smart constructor.
-data DimensionRange = DimensionRange'
-    { _drDimension  :: !(Maybe DimensionRangeDimension)
-    , _drEndIndex   :: !(Maybe (Textual Int32))
-    , _drSheetId    :: !(Maybe (Textual Int32))
-    , _drStartIndex :: !(Maybe (Textual Int32))
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DimensionRange' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'drDimension'
---
--- * 'drEndIndex'
---
--- * 'drSheetId'
---
--- * 'drStartIndex'
-dimensionRange
-    :: DimensionRange
-dimensionRange =
-    DimensionRange'
-    { _drDimension = Nothing
-    , _drEndIndex = Nothing
-    , _drSheetId = Nothing
-    , _drStartIndex = Nothing
-    }
-
--- | The dimension of the span.
-drDimension :: Lens' DimensionRange (Maybe DimensionRangeDimension)
-drDimension
-  = lens _drDimension (\ s a -> s{_drDimension = a})
-
--- | The end (exclusive) of the span, or not set if unbounded.
-drEndIndex :: Lens' DimensionRange (Maybe Int32)
-drEndIndex
-  = lens _drEndIndex (\ s a -> s{_drEndIndex = a}) .
-      mapping _Coerce
-
--- | The sheet this span is on.
-drSheetId :: Lens' DimensionRange (Maybe Int32)
-drSheetId
-  = lens _drSheetId (\ s a -> s{_drSheetId = a}) .
-      mapping _Coerce
-
--- | The start (inclusive) of the span, or not set if unbounded.
-drStartIndex :: Lens' DimensionRange (Maybe Int32)
-drStartIndex
-  = lens _drStartIndex (\ s a -> s{_drStartIndex = a})
-      . mapping _Coerce
-
-instance FromJSON DimensionRange where
-        parseJSON
-          = withObject "DimensionRange"
-              (\ o ->
-                 DimensionRange' <$>
-                   (o .:? "dimension") <*> (o .:? "endIndex") <*>
-                     (o .:? "sheetId")
-                     <*> (o .:? "startIndex"))
-
-instance ToJSON DimensionRange where
-        toJSON DimensionRange'{..}
-          = object
-              (catMaybes
-                 [("dimension" .=) <$> _drDimension,
-                  ("endIndex" .=) <$> _drEndIndex,
-                  ("sheetId" .=) <$> _drSheetId,
-                  ("startIndex" .=) <$> _drStartIndex])
-
--- | Updates properties of a spreadsheet.
---
--- /See:/ 'updateSpreadsheetPropertiesRequest' smart constructor.
-data UpdateSpreadsheetPropertiesRequest = UpdateSpreadsheetPropertiesRequest'
-    { _uFields     :: !(Maybe FieldMask)
-    , _uProperties :: !(Maybe SpreadsheetProperties)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'UpdateSpreadsheetPropertiesRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'uFields'
---
--- * 'uProperties'
-updateSpreadsheetPropertiesRequest
-    :: UpdateSpreadsheetPropertiesRequest
-updateSpreadsheetPropertiesRequest =
-    UpdateSpreadsheetPropertiesRequest'
-    { _uFields = Nothing
-    , _uProperties = Nothing
-    }
-
--- | The fields that should be updated. At least one field must be specified.
--- The root \'properties\' is implied and should not be specified. A single
--- \`\"*\"\` can be used as short-hand for listing every field.
-uFields :: Lens' UpdateSpreadsheetPropertiesRequest (Maybe FieldMask)
-uFields = lens _uFields (\ s a -> s{_uFields = a})
-
--- | The properties to update.
-uProperties :: Lens' UpdateSpreadsheetPropertiesRequest (Maybe SpreadsheetProperties)
-uProperties
-  = lens _uProperties (\ s a -> s{_uProperties = a})
-
-instance FromJSON UpdateSpreadsheetPropertiesRequest
-         where
-        parseJSON
-          = withObject "UpdateSpreadsheetPropertiesRequest"
-              (\ o ->
-                 UpdateSpreadsheetPropertiesRequest' <$>
-                   (o .:? "fields") <*> (o .:? "properties"))
-
-instance ToJSON UpdateSpreadsheetPropertiesRequest
-         where
-        toJSON UpdateSpreadsheetPropertiesRequest'{..}
-          = object
-              (catMaybes
-                 [("fields" .=) <$> _uFields,
-                  ("properties" .=) <$> _uProperties])
-
--- | The result of adding a new protected range.
---
--- /See:/ 'addProtectedRangeResponse' smart constructor.
-newtype AddProtectedRangeResponse = AddProtectedRangeResponse'
-    { _aProtectedRange :: Maybe ProtectedRange
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AddProtectedRangeResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'aProtectedRange'
-addProtectedRangeResponse
-    :: AddProtectedRangeResponse
-addProtectedRangeResponse =
-    AddProtectedRangeResponse'
-    { _aProtectedRange = Nothing
-    }
-
--- | The newly added protected range.
-aProtectedRange :: Lens' AddProtectedRangeResponse (Maybe ProtectedRange)
-aProtectedRange
-  = lens _aProtectedRange
-      (\ s a -> s{_aProtectedRange = a})
-
-instance FromJSON AddProtectedRangeResponse where
-        parseJSON
-          = withObject "AddProtectedRangeResponse"
-              (\ o ->
-                 AddProtectedRangeResponse' <$>
-                   (o .:? "protectedRange"))
-
-instance ToJSON AddProtectedRangeResponse where
-        toJSON AddProtectedRangeResponse'{..}
-          = object
-              (catMaybes
-                 [("protectedRange" .=) <$> _aProtectedRange])
-
--- | Appends rows or columns to the end of a sheet.
---
--- /See:/ 'appendDimensionRequest' smart constructor.
-data AppendDimensionRequest = AppendDimensionRequest'
-    { _adrLength    :: !(Maybe (Textual Int32))
-    , _adrDimension :: !(Maybe AppendDimensionRequestDimension)
-    , _adrSheetId   :: !(Maybe (Textual Int32))
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AppendDimensionRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'adrLength'
---
--- * 'adrDimension'
---
--- * 'adrSheetId'
-appendDimensionRequest
-    :: AppendDimensionRequest
-appendDimensionRequest =
-    AppendDimensionRequest'
-    { _adrLength = Nothing
-    , _adrDimension = Nothing
-    , _adrSheetId = Nothing
-    }
-
--- | The number of rows or columns to append.
-adrLength :: Lens' AppendDimensionRequest (Maybe Int32)
-adrLength
-  = lens _adrLength (\ s a -> s{_adrLength = a}) .
-      mapping _Coerce
-
--- | Whether rows or columns should be appended.
-adrDimension :: Lens' AppendDimensionRequest (Maybe AppendDimensionRequestDimension)
-adrDimension
-  = lens _adrDimension (\ s a -> s{_adrDimension = a})
-
--- | The sheet to append rows or columns to.
-adrSheetId :: Lens' AppendDimensionRequest (Maybe Int32)
-adrSheetId
-  = lens _adrSheetId (\ s a -> s{_adrSheetId = a}) .
-      mapping _Coerce
-
-instance FromJSON AppendDimensionRequest where
-        parseJSON
-          = withObject "AppendDimensionRequest"
-              (\ o ->
-                 AppendDimensionRequest' <$>
-                   (o .:? "length") <*> (o .:? "dimension") <*>
-                     (o .:? "sheetId"))
-
-instance ToJSON AppendDimensionRequest where
-        toJSON AppendDimensionRequest'{..}
-          = object
-              (catMaybes
-                 [("length" .=) <$> _adrLength,
-                  ("dimension" .=) <$> _adrDimension,
-                  ("sheetId" .=) <$> _adrSheetId])
-
--- | The definition of how a value in a pivot table should be calculated.
---
--- /See:/ 'pivotValue' smart constructor.
-data PivotValue = PivotValue'
-    { _pvSourceColumnOffSet :: !(Maybe (Textual Int32))
-    , _pvFormula            :: !(Maybe Text)
-    , _pvName               :: !(Maybe Text)
-    , _pvSummarizeFunction  :: !(Maybe PivotValueSummarizeFunction)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'PivotValue' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'pvSourceColumnOffSet'
---
--- * 'pvFormula'
---
--- * 'pvName'
---
--- * 'pvSummarizeFunction'
-pivotValue
-    :: PivotValue
-pivotValue =
-    PivotValue'
-    { _pvSourceColumnOffSet = Nothing
-    , _pvFormula = Nothing
-    , _pvName = Nothing
-    , _pvSummarizeFunction = Nothing
-    }
-
--- | The column offset of the source range that this value reads from. For
--- example, if the source was \`C10:E15\`, a \`sourceColumnOffset\` of
--- \`0\` means this value refers to column \`C\`, whereas the offset \`1\`
--- would refer to column \`D\`.
-pvSourceColumnOffSet :: Lens' PivotValue (Maybe Int32)
-pvSourceColumnOffSet
-  = lens _pvSourceColumnOffSet
-      (\ s a -> s{_pvSourceColumnOffSet = a})
-      . mapping _Coerce
-
--- | A custom formula to calculate the value. The formula must start with an
--- \`=\` character.
-pvFormula :: Lens' PivotValue (Maybe Text)
-pvFormula
-  = lens _pvFormula (\ s a -> s{_pvFormula = a})
-
--- | A name to use for the value. This is only used if formula was set.
--- Otherwise, the column name is used.
-pvName :: Lens' PivotValue (Maybe Text)
-pvName = lens _pvName (\ s a -> s{_pvName = a})
-
--- | A function to summarize the value. If formula is set, the only supported
--- values are SUM and CUSTOM. If sourceColumnOffset is set, then \`CUSTOM\`
--- is not supported.
-pvSummarizeFunction :: Lens' PivotValue (Maybe PivotValueSummarizeFunction)
-pvSummarizeFunction
-  = lens _pvSummarizeFunction
-      (\ s a -> s{_pvSummarizeFunction = a})
-
-instance FromJSON PivotValue where
-        parseJSON
-          = withObject "PivotValue"
-              (\ o ->
-                 PivotValue' <$>
-                   (o .:? "sourceColumnOffset") <*> (o .:? "formula")
-                     <*> (o .:? "name")
-                     <*> (o .:? "summarizeFunction"))
-
-instance ToJSON PivotValue where
-        toJSON PivotValue'{..}
-          = object
-              (catMaybes
-                 [("sourceColumnOffset" .=) <$> _pvSourceColumnOffSet,
-                  ("formula" .=) <$> _pvFormula,
-                  ("name" .=) <$> _pvName,
-                  ("summarizeFunction" .=) <$> _pvSummarizeFunction])
-
--- | Unmerges cells in the given range.
---
--- /See:/ 'unmergeCellsRequest' smart constructor.
-newtype UnmergeCellsRequest = UnmergeCellsRequest'
-    { _ucrRange :: Maybe GridRange
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'UnmergeCellsRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ucrRange'
-unmergeCellsRequest
-    :: UnmergeCellsRequest
-unmergeCellsRequest =
-    UnmergeCellsRequest'
-    { _ucrRange = Nothing
-    }
-
--- | The range within which all cells should be unmerged. If the range spans
--- multiple merges, all will be unmerged. The range must not partially span
--- any merge.
-ucrRange :: Lens' UnmergeCellsRequest (Maybe GridRange)
-ucrRange = lens _ucrRange (\ s a -> s{_ucrRange = a})
-
-instance FromJSON UnmergeCellsRequest where
-        parseJSON
-          = withObject "UnmergeCellsRequest"
-              (\ o -> UnmergeCellsRequest' <$> (o .:? "range"))
-
-instance ToJSON UnmergeCellsRequest where
-        toJSON UnmergeCellsRequest'{..}
-          = object (catMaybes [("range" .=) <$> _ucrRange])
-
--- | Deletes the requested sheet.
---
--- /See:/ 'deleteSheetRequest' smart constructor.
-newtype DeleteSheetRequest = DeleteSheetRequest'
-    { _dsrSheetId :: Maybe (Textual Int32)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeleteSheetRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dsrSheetId'
-deleteSheetRequest
-    :: DeleteSheetRequest
-deleteSheetRequest =
-    DeleteSheetRequest'
-    { _dsrSheetId = Nothing
-    }
-
--- | The ID of the sheet to delete.
-dsrSheetId :: Lens' DeleteSheetRequest (Maybe Int32)
-dsrSheetId
-  = lens _dsrSheetId (\ s a -> s{_dsrSheetId = a}) .
-      mapping _Coerce
-
-instance FromJSON DeleteSheetRequest where
-        parseJSON
-          = withObject "DeleteSheetRequest"
-              (\ o -> DeleteSheetRequest' <$> (o .:? "sheetId"))
-
-instance ToJSON DeleteSheetRequest where
-        toJSON DeleteSheetRequest'{..}
-          = object (catMaybes [("sheetId" .=) <$> _dsrSheetId])
-
--- | A banded (alternating colors) range in a sheet.
---
--- /See:/ 'bandedRange' smart constructor.
-data BandedRange = BandedRange'
-    { _brBandedRangeId    :: !(Maybe (Textual Int32))
-    , _brRowProperties    :: !(Maybe BandingProperties)
-    , _brRange            :: !(Maybe GridRange)
-    , _brColumnProperties :: !(Maybe BandingProperties)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'BandedRange' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'brBandedRangeId'
---
--- * 'brRowProperties'
---
--- * 'brRange'
---
--- * 'brColumnProperties'
-bandedRange
-    :: BandedRange
-bandedRange =
-    BandedRange'
-    { _brBandedRangeId = Nothing
-    , _brRowProperties = Nothing
-    , _brRange = Nothing
-    , _brColumnProperties = Nothing
-    }
-
--- | The id of the banded range.
-brBandedRangeId :: Lens' BandedRange (Maybe Int32)
-brBandedRangeId
-  = lens _brBandedRangeId
-      (\ s a -> s{_brBandedRangeId = a})
-      . mapping _Coerce
-
--- | Properties for row bands. These properties will be applied on a
--- row-by-row basis throughout all the rows in the range. At least one of
--- row_properties or column_properties must be specified.
-brRowProperties :: Lens' BandedRange (Maybe BandingProperties)
-brRowProperties
-  = lens _brRowProperties
-      (\ s a -> s{_brRowProperties = a})
-
--- | The range over which these properties are applied.
-brRange :: Lens' BandedRange (Maybe GridRange)
-brRange = lens _brRange (\ s a -> s{_brRange = a})
-
--- | Properties for column bands. These properties will be applied on a
--- column- by-column basis throughout all the columns in the range. At
--- least one of row_properties or column_properties must be specified.
-brColumnProperties :: Lens' BandedRange (Maybe BandingProperties)
-brColumnProperties
-  = lens _brColumnProperties
-      (\ s a -> s{_brColumnProperties = a})
-
-instance FromJSON BandedRange where
-        parseJSON
-          = withObject "BandedRange"
-              (\ o ->
-                 BandedRange' <$>
-                   (o .:? "bandedRangeId") <*> (o .:? "rowProperties")
-                     <*> (o .:? "range")
-                     <*> (o .:? "columnProperties"))
-
-instance ToJSON BandedRange where
-        toJSON BandedRange'{..}
-          = object
-              (catMaybes
-                 [("bandedRangeId" .=) <$> _brBandedRangeId,
-                  ("rowProperties" .=) <$> _brRowProperties,
-                  ("range" .=) <$> _brRange,
-                  ("columnProperties" .=) <$> _brColumnProperties])
-
--- | Updates the borders of a range. If a field is not set in the request,
--- that means the border remains as-is. For example, with two subsequent
--- UpdateBordersRequest: 1. range: A1:A5 \`{ top: RED, bottom: WHITE }\` 2.
--- range: A1:A5 \`{ left: BLUE }\` That would result in A1:A5 having a
--- borders of \`{ top: RED, bottom: WHITE, left: BLUE }\`. If you want to
--- clear a border, explicitly set the style to NONE.
---
--- /See:/ 'updateBOrdersRequest' smart constructor.
-data UpdateBOrdersRequest = UpdateBOrdersRequest'
-    { _uborBottom          :: !(Maybe BOrder)
-    , _uborInnerHorizontal :: !(Maybe BOrder)
-    , _uborLeft            :: !(Maybe BOrder)
-    , _uborInnerVertical   :: !(Maybe BOrder)
-    , _uborRange           :: !(Maybe GridRange)
-    , _uborRight           :: !(Maybe BOrder)
-    , _uborTop             :: !(Maybe BOrder)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'UpdateBOrdersRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'uborBottom'
---
--- * 'uborInnerHorizontal'
---
--- * 'uborLeft'
---
--- * 'uborInnerVertical'
---
--- * 'uborRange'
---
--- * 'uborRight'
---
--- * 'uborTop'
-updateBOrdersRequest
-    :: UpdateBOrdersRequest
-updateBOrdersRequest =
-    UpdateBOrdersRequest'
-    { _uborBottom = Nothing
-    , _uborInnerHorizontal = Nothing
-    , _uborLeft = Nothing
-    , _uborInnerVertical = Nothing
-    , _uborRange = Nothing
-    , _uborRight = Nothing
-    , _uborTop = Nothing
-    }
-
--- | The border to put at the bottom of the range.
-uborBottom :: Lens' UpdateBOrdersRequest (Maybe BOrder)
-uborBottom
-  = lens _uborBottom (\ s a -> s{_uborBottom = a})
-
--- | The horizontal border to put within the range.
-uborInnerHorizontal :: Lens' UpdateBOrdersRequest (Maybe BOrder)
-uborInnerHorizontal
-  = lens _uborInnerHorizontal
-      (\ s a -> s{_uborInnerHorizontal = a})
-
--- | The border to put at the left of the range.
-uborLeft :: Lens' UpdateBOrdersRequest (Maybe BOrder)
-uborLeft = lens _uborLeft (\ s a -> s{_uborLeft = a})
-
--- | The vertical border to put within the range.
-uborInnerVertical :: Lens' UpdateBOrdersRequest (Maybe BOrder)
-uborInnerVertical
-  = lens _uborInnerVertical
-      (\ s a -> s{_uborInnerVertical = a})
-
--- | The range whose borders should be updated.
-uborRange :: Lens' UpdateBOrdersRequest (Maybe GridRange)
-uborRange
-  = lens _uborRange (\ s a -> s{_uborRange = a})
-
--- | The border to put at the right of the range.
-uborRight :: Lens' UpdateBOrdersRequest (Maybe BOrder)
-uborRight
-  = lens _uborRight (\ s a -> s{_uborRight = a})
-
--- | The border to put at the top of the range.
-uborTop :: Lens' UpdateBOrdersRequest (Maybe BOrder)
-uborTop = lens _uborTop (\ s a -> s{_uborTop = a})
-
-instance FromJSON UpdateBOrdersRequest where
-        parseJSON
-          = withObject "UpdateBOrdersRequest"
-              (\ o ->
-                 UpdateBOrdersRequest' <$>
-                   (o .:? "bottom") <*> (o .:? "innerHorizontal") <*>
-                     (o .:? "left")
-                     <*> (o .:? "innerVertical")
-                     <*> (o .:? "range")
-                     <*> (o .:? "right")
-                     <*> (o .:? "top"))
-
-instance ToJSON UpdateBOrdersRequest where
-        toJSON UpdateBOrdersRequest'{..}
-          = object
-              (catMaybes
-                 [("bottom" .=) <$> _uborBottom,
-                  ("innerHorizontal" .=) <$> _uborInnerHorizontal,
-                  ("left" .=) <$> _uborLeft,
-                  ("innerVertical" .=) <$> _uborInnerVertical,
-                  ("range" .=) <$> _uborRange,
-                  ("right" .=) <$> _uborRight,
-                  ("top" .=) <$> _uborTop])
-
--- | A chart embedded in a sheet.
---
--- /See:/ 'embeddedChart' smart constructor.
-data EmbeddedChart = EmbeddedChart'
-    { _ecSpec     :: !(Maybe ChartSpec)
-    , _ecPosition :: !(Maybe EmbeddedObjectPosition)
-    , _ecChartId  :: !(Maybe (Textual Int32))
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'EmbeddedChart' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ecSpec'
---
--- * 'ecPosition'
---
--- * 'ecChartId'
-embeddedChart
-    :: EmbeddedChart
-embeddedChart =
-    EmbeddedChart'
-    { _ecSpec = Nothing
-    , _ecPosition = Nothing
-    , _ecChartId = Nothing
-    }
-
--- | The specification of the chart.
-ecSpec :: Lens' EmbeddedChart (Maybe ChartSpec)
-ecSpec = lens _ecSpec (\ s a -> s{_ecSpec = a})
-
--- | The position of the chart.
-ecPosition :: Lens' EmbeddedChart (Maybe EmbeddedObjectPosition)
-ecPosition
-  = lens _ecPosition (\ s a -> s{_ecPosition = a})
-
--- | The ID of the chart.
-ecChartId :: Lens' EmbeddedChart (Maybe Int32)
-ecChartId
-  = lens _ecChartId (\ s a -> s{_ecChartId = a}) .
-      mapping _Coerce
-
-instance FromJSON EmbeddedChart where
-        parseJSON
-          = withObject "EmbeddedChart"
-              (\ o ->
-                 EmbeddedChart' <$>
-                   (o .:? "spec") <*> (o .:? "position") <*>
-                     (o .:? "chartId"))
-
-instance ToJSON EmbeddedChart where
-        toJSON EmbeddedChart'{..}
-          = object
-              (catMaybes
-                 [("spec" .=) <$> _ecSpec,
-                  ("position" .=) <$> _ecPosition,
-                  ("chartId" .=) <$> _ecChartId])
-
--- | Data about each cell in a row.
---
--- /See:/ 'rowData' smart constructor.
-newtype RowData = RowData'
-    { _rdValues :: Maybe [CellData]
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'RowData' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rdValues'
-rowData
-    :: RowData
-rowData =
-    RowData'
-    { _rdValues = Nothing
-    }
-
--- | The values in the row, one per column.
-rdValues :: Lens' RowData [CellData]
-rdValues
-  = lens _rdValues (\ s a -> s{_rdValues = a}) .
-      _Default
-      . _Coerce
-
-instance FromJSON RowData where
-        parseJSON
-          = withObject "RowData"
-              (\ o -> RowData' <$> (o .:? "values" .!= mempty))
-
-instance ToJSON RowData where
-        toJSON RowData'{..}
-          = object (catMaybes [("values" .=) <$> _rdValues])
-
--- | The editors of a protected range.
---
--- /See:/ 'editors' smart constructor.
-data Editors = Editors'
-    { _eGroups             :: !(Maybe [Text])
-    , _eUsers              :: !(Maybe [Text])
-    , _eDomainUsersCanEdit :: !(Maybe Bool)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Editors' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'eGroups'
---
--- * 'eUsers'
---
--- * 'eDomainUsersCanEdit'
-editors
-    :: Editors
-editors =
-    Editors'
-    { _eGroups = Nothing
-    , _eUsers = Nothing
-    , _eDomainUsersCanEdit = Nothing
-    }
-
--- | The email addresses of groups with edit access to the protected range.
-eGroups :: Lens' Editors [Text]
-eGroups
-  = lens _eGroups (\ s a -> s{_eGroups = a}) . _Default
-      . _Coerce
-
--- | The email addresses of users with edit access to the protected range.
-eUsers :: Lens' Editors [Text]
-eUsers
-  = lens _eUsers (\ s a -> s{_eUsers = a}) . _Default .
-      _Coerce
-
--- | True if anyone in the document\'s domain has edit access to the
--- protected range. Domain protection is only supported on documents within
--- a domain.
-eDomainUsersCanEdit :: Lens' Editors (Maybe Bool)
-eDomainUsersCanEdit
-  = lens _eDomainUsersCanEdit
-      (\ s a -> s{_eDomainUsersCanEdit = a})
-
-instance FromJSON Editors where
-        parseJSON
-          = withObject "Editors"
-              (\ o ->
-                 Editors' <$>
-                   (o .:? "groups" .!= mempty) <*>
-                     (o .:? "users" .!= mempty)
-                     <*> (o .:? "domainUsersCanEdit"))
-
-instance ToJSON Editors where
-        toJSON Editors'{..}
-          = object
-              (catMaybes
-                 [("groups" .=) <$> _eGroups,
-                  ("users" .=) <$> _eUsers,
-                  ("domainUsersCanEdit" .=) <$> _eDomainUsersCanEdit])
-
--- | A pivot table.
---
--- /See:/ 'pivotTable' smart constructor.
-data PivotTable = PivotTable'
-    { _ptValues      :: !(Maybe [PivotValue])
-    , _ptValueLayout :: !(Maybe PivotTableValueLayout)
-    , _ptRows        :: !(Maybe [PivotGroup])
-    , _ptSource      :: !(Maybe GridRange)
-    , _ptColumns     :: !(Maybe [PivotGroup])
-    , _ptCriteria    :: !(Maybe PivotTableCriteria)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'PivotTable' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ptValues'
---
--- * 'ptValueLayout'
---
--- * 'ptRows'
---
--- * 'ptSource'
---
--- * 'ptColumns'
---
--- * 'ptCriteria'
-pivotTable
-    :: PivotTable
-pivotTable =
-    PivotTable'
-    { _ptValues = Nothing
-    , _ptValueLayout = Nothing
-    , _ptRows = Nothing
-    , _ptSource = Nothing
-    , _ptColumns = Nothing
-    , _ptCriteria = Nothing
-    }
-
--- | A list of values to include in the pivot table.
-ptValues :: Lens' PivotTable [PivotValue]
-ptValues
-  = lens _ptValues (\ s a -> s{_ptValues = a}) .
-      _Default
-      . _Coerce
-
--- | Whether values should be listed horizontally (as columns) or vertically
--- (as rows).
-ptValueLayout :: Lens' PivotTable (Maybe PivotTableValueLayout)
-ptValueLayout
-  = lens _ptValueLayout
-      (\ s a -> s{_ptValueLayout = a})
-
--- | Each row grouping in the pivot table.
-ptRows :: Lens' PivotTable [PivotGroup]
-ptRows
-  = lens _ptRows (\ s a -> s{_ptRows = a}) . _Default .
-      _Coerce
-
--- | The range the pivot table is reading data from.
-ptSource :: Lens' PivotTable (Maybe GridRange)
-ptSource = lens _ptSource (\ s a -> s{_ptSource = a})
-
--- | Each column grouping in the pivot table.
-ptColumns :: Lens' PivotTable [PivotGroup]
-ptColumns
-  = lens _ptColumns (\ s a -> s{_ptColumns = a}) .
-      _Default
-      . _Coerce
-
--- | An optional mapping of filters per source column offset. The filters
--- will be applied before aggregating data into the pivot table. The map\'s
--- key is the column offset of the source range that you want to filter,
--- and the value is the criteria for that column. For example, if the
--- source was \`C10:E15\`, a key of \`0\` will have the filter for column
--- \`C\`, whereas the key \`1\` is for column \`D\`.
-ptCriteria :: Lens' PivotTable (Maybe PivotTableCriteria)
-ptCriteria
-  = lens _ptCriteria (\ s a -> s{_ptCriteria = a})
-
-instance FromJSON PivotTable where
-        parseJSON
-          = withObject "PivotTable"
-              (\ o ->
-                 PivotTable' <$>
-                   (o .:? "values" .!= mempty) <*> (o .:? "valueLayout")
-                     <*> (o .:? "rows" .!= mempty)
-                     <*> (o .:? "source")
-                     <*> (o .:? "columns" .!= mempty)
-                     <*> (o .:? "criteria"))
-
-instance ToJSON PivotTable where
-        toJSON PivotTable'{..}
-          = object
-              (catMaybes
-                 [("values" .=) <$> _ptValues,
-                  ("valueLayout" .=) <$> _ptValueLayout,
-                  ("rows" .=) <$> _ptRows, ("source" .=) <$> _ptSource,
-                  ("columns" .=) <$> _ptColumns,
-                  ("criteria" .=) <$> _ptCriteria])
-
--- | The position of an embedded object such as a chart.
---
--- /See:/ 'embeddedObjectPosition' smart constructor.
-data EmbeddedObjectPosition = EmbeddedObjectPosition'
-    { _eopOverlayPosition :: !(Maybe OverlayPosition)
-    , _eopSheetId         :: !(Maybe (Textual Int32))
-    , _eopNewSheet        :: !(Maybe Bool)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'EmbeddedObjectPosition' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'eopOverlayPosition'
---
--- * 'eopSheetId'
---
--- * 'eopNewSheet'
-embeddedObjectPosition
-    :: EmbeddedObjectPosition
-embeddedObjectPosition =
-    EmbeddedObjectPosition'
-    { _eopOverlayPosition = Nothing
-    , _eopSheetId = Nothing
-    , _eopNewSheet = Nothing
-    }
-
--- | The position at which the object is overlaid on top of a grid.
-eopOverlayPosition :: Lens' EmbeddedObjectPosition (Maybe OverlayPosition)
-eopOverlayPosition
-  = lens _eopOverlayPosition
-      (\ s a -> s{_eopOverlayPosition = a})
-
--- | The sheet this is on. Set only if the embedded object is on its own
--- sheet. Must be non-negative.
-eopSheetId :: Lens' EmbeddedObjectPosition (Maybe Int32)
-eopSheetId
-  = lens _eopSheetId (\ s a -> s{_eopSheetId = a}) .
-      mapping _Coerce
-
--- | If true, the embedded object will be put on a new sheet whose ID is
--- chosen for you. Used only when writing.
-eopNewSheet :: Lens' EmbeddedObjectPosition (Maybe Bool)
-eopNewSheet
-  = lens _eopNewSheet (\ s a -> s{_eopNewSheet = a})
-
-instance FromJSON EmbeddedObjectPosition where
-        parseJSON
-          = withObject "EmbeddedObjectPosition"
-              (\ o ->
-                 EmbeddedObjectPosition' <$>
-                   (o .:? "overlayPosition") <*> (o .:? "sheetId") <*>
-                     (o .:? "newSheet"))
-
-instance ToJSON EmbeddedObjectPosition where
-        toJSON EmbeddedObjectPosition'{..}
-          = object
-              (catMaybes
-                 [("overlayPosition" .=) <$> _eopOverlayPosition,
-                  ("sheetId" .=) <$> _eopSheetId,
-                  ("newSheet" .=) <$> _eopNewSheet])
-
--- | The default filter associated with a sheet.
---
--- /See:/ 'basicFilter' smart constructor.
-data BasicFilter = BasicFilter'
-    { _bfSortSpecs :: !(Maybe [SortSpec])
-    , _bfRange     :: !(Maybe GridRange)
-    , _bfCriteria  :: !(Maybe BasicFilterCriteria)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'BasicFilter' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'bfSortSpecs'
---
--- * 'bfRange'
---
--- * 'bfCriteria'
-basicFilter
-    :: BasicFilter
-basicFilter =
-    BasicFilter'
-    { _bfSortSpecs = Nothing
-    , _bfRange = Nothing
-    , _bfCriteria = Nothing
-    }
-
--- | The sort order per column. Later specifications are used when values are
--- equal in the earlier specifications.
-bfSortSpecs :: Lens' BasicFilter [SortSpec]
-bfSortSpecs
-  = lens _bfSortSpecs (\ s a -> s{_bfSortSpecs = a}) .
-      _Default
-      . _Coerce
-
--- | The range the filter covers.
-bfRange :: Lens' BasicFilter (Maybe GridRange)
-bfRange = lens _bfRange (\ s a -> s{_bfRange = a})
-
--- | The criteria for showing\/hiding values per column. The map\'s key is
--- the column index, and the value is the criteria for that column.
-bfCriteria :: Lens' BasicFilter (Maybe BasicFilterCriteria)
-bfCriteria
-  = lens _bfCriteria (\ s a -> s{_bfCriteria = a})
-
-instance FromJSON BasicFilter where
-        parseJSON
-          = withObject "BasicFilter"
-              (\ o ->
-                 BasicFilter' <$>
-                   (o .:? "sortSpecs" .!= mempty) <*> (o .:? "range")
-                     <*> (o .:? "criteria"))
-
-instance ToJSON BasicFilter where
-        toJSON BasicFilter'{..}
-          = object
-              (catMaybes
-                 [("sortSpecs" .=) <$> _bfSortSpecs,
-                  ("range" .=) <$> _bfRange,
-                  ("criteria" .=) <$> _bfCriteria])
-
--- | Splits a column of text into multiple columns, based on a delimiter in
--- each cell.
---
--- /See:/ 'textToColumnsRequest' smart constructor.
-data TextToColumnsRequest = TextToColumnsRequest'
-    { _ttcrDelimiterType :: !(Maybe TextToColumnsRequestDelimiterType)
-    , _ttcrSource        :: !(Maybe GridRange)
-    , _ttcrDelimiter     :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'TextToColumnsRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ttcrDelimiterType'
---
--- * 'ttcrSource'
---
--- * 'ttcrDelimiter'
-textToColumnsRequest
-    :: TextToColumnsRequest
-textToColumnsRequest =
-    TextToColumnsRequest'
-    { _ttcrDelimiterType = Nothing
-    , _ttcrSource = Nothing
-    , _ttcrDelimiter = Nothing
-    }
-
--- | The delimiter type to use.
-ttcrDelimiterType :: Lens' TextToColumnsRequest (Maybe TextToColumnsRequestDelimiterType)
-ttcrDelimiterType
-  = lens _ttcrDelimiterType
-      (\ s a -> s{_ttcrDelimiterType = a})
-
--- | The source data range. This must span exactly one column.
-ttcrSource :: Lens' TextToColumnsRequest (Maybe GridRange)
-ttcrSource
-  = lens _ttcrSource (\ s a -> s{_ttcrSource = a})
-
--- | The delimiter to use. Used only if delimiterType is CUSTOM.
-ttcrDelimiter :: Lens' TextToColumnsRequest (Maybe Text)
-ttcrDelimiter
-  = lens _ttcrDelimiter
-      (\ s a -> s{_ttcrDelimiter = a})
-
-instance FromJSON TextToColumnsRequest where
-        parseJSON
-          = withObject "TextToColumnsRequest"
-              (\ o ->
-                 TextToColumnsRequest' <$>
-                   (o .:? "delimiterType") <*> (o .:? "source") <*>
-                     (o .:? "delimiter"))
-
-instance ToJSON TextToColumnsRequest where
-        toJSON TextToColumnsRequest'{..}
-          = object
-              (catMaybes
-                 [("delimiterType" .=) <$> _ttcrDelimiterType,
-                  ("source" .=) <$> _ttcrSource,
-                  ("delimiter" .=) <$> _ttcrDelimiter])
-
--- | The request for updating any aspect of a spreadsheet.
---
--- /See:/ 'batchUpdateSpreadsheetRequest' smart constructor.
-data BatchUpdateSpreadsheetRequest = BatchUpdateSpreadsheetRequest'
-    { _busrResponseIncludeGridData      :: !(Maybe Bool)
-    , _busrResponseRanges               :: !(Maybe [Text])
-    , _busrRequests                     :: !(Maybe [Request'])
-    , _busrIncludeSpreadsheetInResponse :: !(Maybe Bool)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'BatchUpdateSpreadsheetRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'busrResponseIncludeGridData'
---
--- * 'busrResponseRanges'
---
--- * 'busrRequests'
---
--- * 'busrIncludeSpreadsheetInResponse'
-batchUpdateSpreadsheetRequest
-    :: BatchUpdateSpreadsheetRequest
-batchUpdateSpreadsheetRequest =
-    BatchUpdateSpreadsheetRequest'
-    { _busrResponseIncludeGridData = Nothing
-    , _busrResponseRanges = Nothing
-    , _busrRequests = Nothing
-    , _busrIncludeSpreadsheetInResponse = Nothing
-    }
-
--- | True if grid data should be returned. Meaningful only if if
--- include_spreadsheet_response is \'true\'. This parameter is ignored if a
--- field mask was set in the request.
-busrResponseIncludeGridData :: Lens' BatchUpdateSpreadsheetRequest (Maybe Bool)
-busrResponseIncludeGridData
-  = lens _busrResponseIncludeGridData
-      (\ s a -> s{_busrResponseIncludeGridData = a})
-
--- | Limits the ranges included in the response spreadsheet. Meaningful only
--- if include_spreadsheet_response is \'true\'.
-busrResponseRanges :: Lens' BatchUpdateSpreadsheetRequest [Text]
-busrResponseRanges
-  = lens _busrResponseRanges
-      (\ s a -> s{_busrResponseRanges = a})
-      . _Default
-      . _Coerce
-
--- | A list of updates to apply to the spreadsheet.
-busrRequests :: Lens' BatchUpdateSpreadsheetRequest [Request']
-busrRequests
-  = lens _busrRequests (\ s a -> s{_busrRequests = a})
-      . _Default
-      . _Coerce
-
--- | Determines if the update response should include the spreadsheet
--- resource.
-busrIncludeSpreadsheetInResponse :: Lens' BatchUpdateSpreadsheetRequest (Maybe Bool)
-busrIncludeSpreadsheetInResponse
-  = lens _busrIncludeSpreadsheetInResponse
-      (\ s a -> s{_busrIncludeSpreadsheetInResponse = a})
-
-instance FromJSON BatchUpdateSpreadsheetRequest where
-        parseJSON
-          = withObject "BatchUpdateSpreadsheetRequest"
-              (\ o ->
-                 BatchUpdateSpreadsheetRequest' <$>
-                   (o .:? "responseIncludeGridData") <*>
-                     (o .:? "responseRanges" .!= mempty)
-                     <*> (o .:? "requests" .!= mempty)
-                     <*> (o .:? "includeSpreadsheetInResponse"))
-
-instance ToJSON BatchUpdateSpreadsheetRequest where
-        toJSON BatchUpdateSpreadsheetRequest'{..}
-          = object
-              (catMaybes
-                 [("responseIncludeGridData" .=) <$>
-                    _busrResponseIncludeGridData,
-                  ("responseRanges" .=) <$> _busrResponseRanges,
-                  ("requests" .=) <$> _busrRequests,
-                  ("includeSpreadsheetInResponse" .=) <$>
-                    _busrIncludeSpreadsheetInResponse])
-
--- | The response when updating a range of values in a spreadsheet.
---
--- /See:/ 'updateValuesResponse' smart constructor.
-data UpdateValuesResponse = UpdateValuesResponse'
-    { _uvrUpdatedCells   :: !(Maybe (Textual Int32))
-    , _uvrSpreadsheetId  :: !(Maybe Text)
-    , _uvrUpdatedRows    :: !(Maybe (Textual Int32))
-    , _uvrUpdatedRange   :: !(Maybe Text)
-    , _uvrUpdatedData    :: !(Maybe ValueRange)
-    , _uvrUpdatedColumns :: !(Maybe (Textual Int32))
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'UpdateValuesResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'uvrUpdatedCells'
---
--- * 'uvrSpreadsheetId'
---
--- * 'uvrUpdatedRows'
---
--- * 'uvrUpdatedRange'
---
--- * 'uvrUpdatedData'
---
--- * 'uvrUpdatedColumns'
-updateValuesResponse
-    :: UpdateValuesResponse
-updateValuesResponse =
-    UpdateValuesResponse'
-    { _uvrUpdatedCells = Nothing
-    , _uvrSpreadsheetId = Nothing
-    , _uvrUpdatedRows = Nothing
-    , _uvrUpdatedRange = Nothing
-    , _uvrUpdatedData = Nothing
-    , _uvrUpdatedColumns = Nothing
-    }
-
--- | The number of cells updated.
-uvrUpdatedCells :: Lens' UpdateValuesResponse (Maybe Int32)
-uvrUpdatedCells
-  = lens _uvrUpdatedCells
-      (\ s a -> s{_uvrUpdatedCells = a})
-      . mapping _Coerce
-
--- | The spreadsheet the updates were applied to.
-uvrSpreadsheetId :: Lens' UpdateValuesResponse (Maybe Text)
-uvrSpreadsheetId
-  = lens _uvrSpreadsheetId
-      (\ s a -> s{_uvrSpreadsheetId = a})
-
--- | The number of rows where at least one cell in the row was updated.
-uvrUpdatedRows :: Lens' UpdateValuesResponse (Maybe Int32)
-uvrUpdatedRows
-  = lens _uvrUpdatedRows
-      (\ s a -> s{_uvrUpdatedRows = a})
-      . mapping _Coerce
-
--- | The range (in A1 notation) that updates were applied to.
-uvrUpdatedRange :: Lens' UpdateValuesResponse (Maybe Text)
-uvrUpdatedRange
-  = lens _uvrUpdatedRange
-      (\ s a -> s{_uvrUpdatedRange = a})
-
--- | The values of the cells after updates were applied. This is only
--- included if the request\'s \`includeValuesInResponse\` field was
--- \`true\`.
-uvrUpdatedData :: Lens' UpdateValuesResponse (Maybe ValueRange)
-uvrUpdatedData
-  = lens _uvrUpdatedData
-      (\ s a -> s{_uvrUpdatedData = a})
-
--- | The number of columns where at least one cell in the column was updated.
-uvrUpdatedColumns :: Lens' UpdateValuesResponse (Maybe Int32)
-uvrUpdatedColumns
-  = lens _uvrUpdatedColumns
-      (\ s a -> s{_uvrUpdatedColumns = a})
-      . mapping _Coerce
-
-instance FromJSON UpdateValuesResponse where
-        parseJSON
-          = withObject "UpdateValuesResponse"
-              (\ o ->
-                 UpdateValuesResponse' <$>
-                   (o .:? "updatedCells") <*> (o .:? "spreadsheetId")
-                     <*> (o .:? "updatedRows")
-                     <*> (o .:? "updatedRange")
-                     <*> (o .:? "updatedData")
-                     <*> (o .:? "updatedColumns"))
-
-instance ToJSON UpdateValuesResponse where
-        toJSON UpdateValuesResponse'{..}
-          = object
-              (catMaybes
-                 [("updatedCells" .=) <$> _uvrUpdatedCells,
-                  ("spreadsheetId" .=) <$> _uvrSpreadsheetId,
-                  ("updatedRows" .=) <$> _uvrUpdatedRows,
-                  ("updatedRange" .=) <$> _uvrUpdatedRange,
-                  ("updatedData" .=) <$> _uvrUpdatedData,
-                  ("updatedColumns" .=) <$> _uvrUpdatedColumns])
-
--- | The request to copy a sheet across spreadsheets.
---
--- /See:/ 'copySheetToAnotherSpreadsheetRequest' smart constructor.
-newtype CopySheetToAnotherSpreadsheetRequest = CopySheetToAnotherSpreadsheetRequest'
-    { _cstasrDestinationSpreadsheetId :: Maybe Text
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CopySheetToAnotherSpreadsheetRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cstasrDestinationSpreadsheetId'
-copySheetToAnotherSpreadsheetRequest
-    :: CopySheetToAnotherSpreadsheetRequest
-copySheetToAnotherSpreadsheetRequest =
-    CopySheetToAnotherSpreadsheetRequest'
-    { _cstasrDestinationSpreadsheetId = Nothing
-    }
-
--- | The ID of the spreadsheet to copy the sheet to.
-cstasrDestinationSpreadsheetId :: Lens' CopySheetToAnotherSpreadsheetRequest (Maybe Text)
-cstasrDestinationSpreadsheetId
-  = lens _cstasrDestinationSpreadsheetId
-      (\ s a -> s{_cstasrDestinationSpreadsheetId = a})
-
-instance FromJSON
-         CopySheetToAnotherSpreadsheetRequest where
-        parseJSON
-          = withObject "CopySheetToAnotherSpreadsheetRequest"
-              (\ o ->
-                 CopySheetToAnotherSpreadsheetRequest' <$>
-                   (o .:? "destinationSpreadsheetId"))
-
-instance ToJSON CopySheetToAnotherSpreadsheetRequest
-         where
-        toJSON CopySheetToAnotherSpreadsheetRequest'{..}
-          = object
-              (catMaybes
-                 [("destinationSpreadsheetId" .=) <$>
-                    _cstasrDestinationSpreadsheetId])
-
--- | Adds a filter view.
---
--- /See:/ 'addFilterViewRequest' smart constructor.
-newtype AddFilterViewRequest = AddFilterViewRequest'
-    { _aFilter :: Maybe FilterView
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AddFilterViewRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'aFilter'
-addFilterViewRequest
-    :: AddFilterViewRequest
-addFilterViewRequest =
-    AddFilterViewRequest'
-    { _aFilter = Nothing
-    }
-
--- | The filter to add. The filterViewId field is optional; if one is not
--- set, an id will be randomly generated. (It is an error to specify the ID
--- of a filter that already exists.)
-aFilter :: Lens' AddFilterViewRequest (Maybe FilterView)
-aFilter = lens _aFilter (\ s a -> s{_aFilter = a})
-
-instance FromJSON AddFilterViewRequest where
-        parseJSON
-          = withObject "AddFilterViewRequest"
-              (\ o -> AddFilterViewRequest' <$> (o .:? "filter"))
-
-instance ToJSON AddFilterViewRequest where
-        toJSON AddFilterViewRequest'{..}
-          = object (catMaybes [("filter" .=) <$> _aFilter])
-
--- | Metadata about a value in a pivot grouping.
---
--- /See:/ 'pivotGroupValueMetadata' smart constructor.
-data PivotGroupValueMetadata = PivotGroupValueMetadata'
-    { _pgvmValue     :: !(Maybe ExtendedValue)
-    , _pgvmCollapsed :: !(Maybe Bool)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'PivotGroupValueMetadata' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'pgvmValue'
---
--- * 'pgvmCollapsed'
-pivotGroupValueMetadata
-    :: PivotGroupValueMetadata
-pivotGroupValueMetadata =
-    PivotGroupValueMetadata'
-    { _pgvmValue = Nothing
-    , _pgvmCollapsed = Nothing
-    }
-
--- | The calculated value the metadata corresponds to. (Note that
--- formulaValue is not valid, because the values will be calculated.)
-pgvmValue :: Lens' PivotGroupValueMetadata (Maybe ExtendedValue)
-pgvmValue
-  = lens _pgvmValue (\ s a -> s{_pgvmValue = a})
-
--- | True if the data corresponding to the value is collapsed.
-pgvmCollapsed :: Lens' PivotGroupValueMetadata (Maybe Bool)
-pgvmCollapsed
-  = lens _pgvmCollapsed
-      (\ s a -> s{_pgvmCollapsed = a})
-
-instance FromJSON PivotGroupValueMetadata where
-        parseJSON
-          = withObject "PivotGroupValueMetadata"
-              (\ o ->
-                 PivotGroupValueMetadata' <$>
-                   (o .:? "value") <*> (o .:? "collapsed"))
-
-instance ToJSON PivotGroupValueMetadata where
-        toJSON PivotGroupValueMetadata'{..}
-          = object
-              (catMaybes
-                 [("value" .=) <$> _pgvmValue,
-                  ("collapsed" .=) <$> _pgvmCollapsed])
-
--- | Updates all cells in a range with new data.
---
--- /See:/ 'updateCellsRequest' smart constructor.
-data UpdateCellsRequest = UpdateCellsRequest'
-    { _updStart  :: !(Maybe GridCoordinate)
-    , _updRows   :: !(Maybe [RowData])
-    , _updRange  :: !(Maybe GridRange)
-    , _updFields :: !(Maybe FieldMask)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'UpdateCellsRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'updStart'
---
--- * 'updRows'
---
--- * 'updRange'
---
--- * 'updFields'
-updateCellsRequest
-    :: UpdateCellsRequest
-updateCellsRequest =
-    UpdateCellsRequest'
-    { _updStart = Nothing
-    , _updRows = Nothing
-    , _updRange = Nothing
-    , _updFields = Nothing
-    }
-
--- | The coordinate to start writing data at. Any number of rows and columns
--- (including a different number of columns per row) may be written.
-updStart :: Lens' UpdateCellsRequest (Maybe GridCoordinate)
-updStart = lens _updStart (\ s a -> s{_updStart = a})
-
--- | The data to write.
-updRows :: Lens' UpdateCellsRequest [RowData]
-updRows
-  = lens _updRows (\ s a -> s{_updRows = a}) . _Default
-      . _Coerce
-
--- | The range to write data to. If the data in rows does not cover the
--- entire requested range, the fields matching those set in fields will be
--- cleared.
-updRange :: Lens' UpdateCellsRequest (Maybe GridRange)
-updRange = lens _updRange (\ s a -> s{_updRange = a})
-
--- | The fields of CellData that should be updated. At least one field must
--- be specified. The root is the CellData; \'row.values.\' should not be
--- specified. A single \`\"*\"\` can be used as short-hand for listing
--- every field.
-updFields :: Lens' UpdateCellsRequest (Maybe FieldMask)
-updFields
-  = lens _updFields (\ s a -> s{_updFields = a})
-
-instance FromJSON UpdateCellsRequest where
-        parseJSON
-          = withObject "UpdateCellsRequest"
-              (\ o ->
-                 UpdateCellsRequest' <$>
-                   (o .:? "start") <*> (o .:? "rows" .!= mempty) <*>
-                     (o .:? "range")
-                     <*> (o .:? "fields"))
-
-instance ToJSON UpdateCellsRequest where
-        toJSON UpdateCellsRequest'{..}
-          = object
-              (catMaybes
-                 [("start" .=) <$> _updStart,
-                  ("rows" .=) <$> _updRows, ("range" .=) <$> _updRange,
-                  ("fields" .=) <$> _updFields])
-
--- | The format of a cell.
---
--- /See:/ 'cellFormat' smart constructor.
-data CellFormat = CellFormat'
-    { _cfBOrders              :: !(Maybe BOrders)
-    , _cfVerticalAlignment    :: !(Maybe CellFormatVerticalAlignment)
-    , _cfBackgRoundColor      :: !(Maybe Color)
-    , _cfHyperlinkDisplayType :: !(Maybe CellFormatHyperlinkDisplayType)
-    , _cfWrapStrategy         :: !(Maybe CellFormatWrapStrategy)
-    , _cfNumberFormat         :: !(Maybe NumberFormat)
-    , _cfTextDirection        :: !(Maybe CellFormatTextDirection)
-    , _cfTextFormat           :: !(Maybe TextFormat)
-    , _cfHorizontalAlignment  :: !(Maybe CellFormatHorizontalAlignment)
-    , _cfPadding              :: !(Maybe Padding)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CellFormat' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cfBOrders'
---
--- * 'cfVerticalAlignment'
---
--- * 'cfBackgRoundColor'
---
--- * 'cfHyperlinkDisplayType'
---
--- * 'cfWrapStrategy'
---
--- * 'cfNumberFormat'
---
--- * 'cfTextDirection'
---
--- * 'cfTextFormat'
---
--- * 'cfHorizontalAlignment'
---
--- * 'cfPadding'
-cellFormat
-    :: CellFormat
-cellFormat =
-    CellFormat'
-    { _cfBOrders = Nothing
-    , _cfVerticalAlignment = Nothing
-    , _cfBackgRoundColor = Nothing
-    , _cfHyperlinkDisplayType = Nothing
-    , _cfWrapStrategy = Nothing
-    , _cfNumberFormat = Nothing
-    , _cfTextDirection = Nothing
-    , _cfTextFormat = Nothing
-    , _cfHorizontalAlignment = Nothing
-    , _cfPadding = Nothing
-    }
-
--- | The borders of the cell.
-cfBOrders :: Lens' CellFormat (Maybe BOrders)
-cfBOrders
-  = lens _cfBOrders (\ s a -> s{_cfBOrders = a})
-
--- | The vertical alignment of the value in the cell.
-cfVerticalAlignment :: Lens' CellFormat (Maybe CellFormatVerticalAlignment)
-cfVerticalAlignment
-  = lens _cfVerticalAlignment
-      (\ s a -> s{_cfVerticalAlignment = a})
-
--- | The background color of the cell.
-cfBackgRoundColor :: Lens' CellFormat (Maybe Color)
-cfBackgRoundColor
-  = lens _cfBackgRoundColor
-      (\ s a -> s{_cfBackgRoundColor = a})
-
--- | How a hyperlink, if it exists, should be displayed in the cell.
-cfHyperlinkDisplayType :: Lens' CellFormat (Maybe CellFormatHyperlinkDisplayType)
-cfHyperlinkDisplayType
-  = lens _cfHyperlinkDisplayType
-      (\ s a -> s{_cfHyperlinkDisplayType = a})
-
--- | The wrap strategy for the value in the cell.
-cfWrapStrategy :: Lens' CellFormat (Maybe CellFormatWrapStrategy)
-cfWrapStrategy
-  = lens _cfWrapStrategy
-      (\ s a -> s{_cfWrapStrategy = a})
-
--- | A format describing how number values should be represented to the user.
-cfNumberFormat :: Lens' CellFormat (Maybe NumberFormat)
-cfNumberFormat
-  = lens _cfNumberFormat
-      (\ s a -> s{_cfNumberFormat = a})
-
--- | The direction of the text in the cell.
-cfTextDirection :: Lens' CellFormat (Maybe CellFormatTextDirection)
-cfTextDirection
-  = lens _cfTextDirection
-      (\ s a -> s{_cfTextDirection = a})
-
--- | The format of the text in the cell (unless overridden by a format run).
-cfTextFormat :: Lens' CellFormat (Maybe TextFormat)
-cfTextFormat
-  = lens _cfTextFormat (\ s a -> s{_cfTextFormat = a})
-
--- | The horizontal alignment of the value in the cell.
-cfHorizontalAlignment :: Lens' CellFormat (Maybe CellFormatHorizontalAlignment)
-cfHorizontalAlignment
-  = lens _cfHorizontalAlignment
-      (\ s a -> s{_cfHorizontalAlignment = a})
-
--- | The padding of the cell.
-cfPadding :: Lens' CellFormat (Maybe Padding)
-cfPadding
-  = lens _cfPadding (\ s a -> s{_cfPadding = a})
-
-instance FromJSON CellFormat where
-        parseJSON
-          = withObject "CellFormat"
-              (\ o ->
-                 CellFormat' <$>
-                   (o .:? "borders") <*> (o .:? "verticalAlignment") <*>
-                     (o .:? "backgroundColor")
-                     <*> (o .:? "hyperlinkDisplayType")
-                     <*> (o .:? "wrapStrategy")
-                     <*> (o .:? "numberFormat")
-                     <*> (o .:? "textDirection")
-                     <*> (o .:? "textFormat")
-                     <*> (o .:? "horizontalAlignment")
-                     <*> (o .:? "padding"))
-
-instance ToJSON CellFormat where
-        toJSON CellFormat'{..}
-          = object
-              (catMaybes
-                 [("borders" .=) <$> _cfBOrders,
-                  ("verticalAlignment" .=) <$> _cfVerticalAlignment,
-                  ("backgroundColor" .=) <$> _cfBackgRoundColor,
-                  ("hyperlinkDisplayType" .=) <$>
-                    _cfHyperlinkDisplayType,
-                  ("wrapStrategy" .=) <$> _cfWrapStrategy,
-                  ("numberFormat" .=) <$> _cfNumberFormat,
-                  ("textDirection" .=) <$> _cfTextDirection,
-                  ("textFormat" .=) <$> _cfTextFormat,
-                  ("horizontalAlignment" .=) <$>
-                    _cfHorizontalAlignment,
-                  ("padding" .=) <$> _cfPadding])
-
--- | Deletes the protected range with the given ID.
---
--- /See:/ 'deleteProtectedRangeRequest' smart constructor.
-newtype DeleteProtectedRangeRequest = DeleteProtectedRangeRequest'
-    { _dprrProtectedRangeId :: Maybe (Textual Int32)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeleteProtectedRangeRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dprrProtectedRangeId'
-deleteProtectedRangeRequest
-    :: DeleteProtectedRangeRequest
-deleteProtectedRangeRequest =
-    DeleteProtectedRangeRequest'
-    { _dprrProtectedRangeId = Nothing
-    }
-
--- | The ID of the protected range to delete.
-dprrProtectedRangeId :: Lens' DeleteProtectedRangeRequest (Maybe Int32)
-dprrProtectedRangeId
-  = lens _dprrProtectedRangeId
-      (\ s a -> s{_dprrProtectedRangeId = a})
-      . mapping _Coerce
-
-instance FromJSON DeleteProtectedRangeRequest where
-        parseJSON
-          = withObject "DeleteProtectedRangeRequest"
-              (\ o ->
-                 DeleteProtectedRangeRequest' <$>
-                   (o .:? "protectedRangeId"))
-
-instance ToJSON DeleteProtectedRangeRequest where
-        toJSON DeleteProtectedRangeRequest'{..}
-          = object
-              (catMaybes
-                 [("protectedRangeId" .=) <$> _dprrProtectedRangeId])
-
--- | Updates an existing protected range with the specified protectedRangeId.
---
--- /See:/ 'updateProtectedRangeRequest' smart constructor.
-data UpdateProtectedRangeRequest = UpdateProtectedRangeRequest'
-    { _uprrProtectedRange :: !(Maybe ProtectedRange)
-    , _uprrFields         :: !(Maybe FieldMask)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'UpdateProtectedRangeRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'uprrProtectedRange'
---
--- * 'uprrFields'
-updateProtectedRangeRequest
-    :: UpdateProtectedRangeRequest
-updateProtectedRangeRequest =
-    UpdateProtectedRangeRequest'
-    { _uprrProtectedRange = Nothing
-    , _uprrFields = Nothing
-    }
-
--- | The protected range to update with the new properties.
-uprrProtectedRange :: Lens' UpdateProtectedRangeRequest (Maybe ProtectedRange)
-uprrProtectedRange
-  = lens _uprrProtectedRange
-      (\ s a -> s{_uprrProtectedRange = a})
-
--- | The fields that should be updated. At least one field must be specified.
--- The root \`protectedRange\` is implied and should not be specified. A
--- single \`\"*\"\` can be used as short-hand for listing every field.
-uprrFields :: Lens' UpdateProtectedRangeRequest (Maybe FieldMask)
-uprrFields
-  = lens _uprrFields (\ s a -> s{_uprrFields = a})
-
-instance FromJSON UpdateProtectedRangeRequest where
-        parseJSON
-          = withObject "UpdateProtectedRangeRequest"
-              (\ o ->
-                 UpdateProtectedRangeRequest' <$>
-                   (o .:? "protectedRange") <*> (o .:? "fields"))
-
-instance ToJSON UpdateProtectedRangeRequest where
-        toJSON UpdateProtectedRangeRequest'{..}
-          = object
-              (catMaybes
-                 [("protectedRange" .=) <$> _uprrProtectedRange,
-                  ("fields" .=) <$> _uprrFields])
-
--- | The result of adding a sheet.
---
--- /See:/ 'addSheetResponse' smart constructor.
-newtype AddSheetResponse = AddSheetResponse'
-    { _aProperties :: Maybe SheetProperties
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AddSheetResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'aProperties'
-addSheetResponse
-    :: AddSheetResponse
-addSheetResponse =
-    AddSheetResponse'
-    { _aProperties = Nothing
-    }
-
--- | The properties of the newly added sheet.
-aProperties :: Lens' AddSheetResponse (Maybe SheetProperties)
-aProperties
-  = lens _aProperties (\ s a -> s{_aProperties = a})
-
-instance FromJSON AddSheetResponse where
-        parseJSON
-          = withObject "AddSheetResponse"
-              (\ o -> AddSheetResponse' <$> (o .:? "properties"))
-
-instance ToJSON AddSheetResponse where
-        toJSON AddSheetResponse'{..}
-          = object
-              (catMaybes [("properties" .=) <$> _aProperties])
-
--- | A protected range.
---
--- /See:/ 'protectedRange' smart constructor.
-data ProtectedRange = ProtectedRange'
-    { _prProtectedRangeId      :: !(Maybe (Textual Int32))
-    , _prWarningOnly           :: !(Maybe Bool)
-    , _prNamedRangeId          :: !(Maybe Text)
-    , _prRange                 :: !(Maybe GridRange)
-    , _prEditors               :: !(Maybe Editors)
-    , _prUnprotectedRanges     :: !(Maybe [GridRange])
-    , _prRequestingUserCanEdit :: !(Maybe Bool)
-    , _prDescription           :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ProtectedRange' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'prProtectedRangeId'
---
--- * 'prWarningOnly'
---
--- * 'prNamedRangeId'
---
--- * 'prRange'
---
--- * 'prEditors'
---
--- * 'prUnprotectedRanges'
---
--- * 'prRequestingUserCanEdit'
---
--- * 'prDescription'
-protectedRange
-    :: ProtectedRange
-protectedRange =
-    ProtectedRange'
-    { _prProtectedRangeId = Nothing
-    , _prWarningOnly = Nothing
-    , _prNamedRangeId = Nothing
-    , _prRange = Nothing
-    , _prEditors = Nothing
-    , _prUnprotectedRanges = Nothing
-    , _prRequestingUserCanEdit = Nothing
-    , _prDescription = Nothing
-    }
-
--- | The ID of the protected range. This field is read-only.
-prProtectedRangeId :: Lens' ProtectedRange (Maybe Int32)
-prProtectedRangeId
-  = lens _prProtectedRangeId
-      (\ s a -> s{_prProtectedRangeId = a})
-      . mapping _Coerce
-
--- | True if this protected range will show a warning when editing.
--- Warning-based protection means that every user can edit data in the
--- protected range, except editing will prompt a warning asking the user to
--- confirm the edit. When writing: if this field is true, then editors is
--- ignored. Additionally, if this field is changed from true to false and
--- the \`editors\` field is not set (nor included in the field mask), then
--- the editors will be set to all the editors in the document.
-prWarningOnly :: Lens' ProtectedRange (Maybe Bool)
-prWarningOnly
-  = lens _prWarningOnly
-      (\ s a -> s{_prWarningOnly = a})
-
--- | The named range this protected range is backed by, if any. When writing,
--- only one of range or named_range_id may be set.
-prNamedRangeId :: Lens' ProtectedRange (Maybe Text)
-prNamedRangeId
-  = lens _prNamedRangeId
-      (\ s a -> s{_prNamedRangeId = a})
-
--- | The range that is being protected. The range may be fully unbounded, in
--- which case this is considered a protected sheet. When writing, only one
--- of range or named_range_id may be set.
-prRange :: Lens' ProtectedRange (Maybe GridRange)
-prRange = lens _prRange (\ s a -> s{_prRange = a})
-
--- | The users and groups with edit access to the protected range. This field
--- is only visible to users with edit access to the protected range and the
--- document. Editors are not supported with warning_only protection.
-prEditors :: Lens' ProtectedRange (Maybe Editors)
-prEditors
-  = lens _prEditors (\ s a -> s{_prEditors = a})
-
--- | The list of unprotected ranges within a protected sheet. Unprotected
--- ranges are only supported on protected sheets.
-prUnprotectedRanges :: Lens' ProtectedRange [GridRange]
-prUnprotectedRanges
-  = lens _prUnprotectedRanges
-      (\ s a -> s{_prUnprotectedRanges = a})
-      . _Default
-      . _Coerce
-
--- | True if the user who requested this protected range can edit the
--- protected area. This field is read-only.
-prRequestingUserCanEdit :: Lens' ProtectedRange (Maybe Bool)
-prRequestingUserCanEdit
-  = lens _prRequestingUserCanEdit
-      (\ s a -> s{_prRequestingUserCanEdit = a})
-
--- | The description of this protected range.
-prDescription :: Lens' ProtectedRange (Maybe Text)
-prDescription
-  = lens _prDescription
-      (\ s a -> s{_prDescription = a})
-
-instance FromJSON ProtectedRange where
-        parseJSON
-          = withObject "ProtectedRange"
-              (\ o ->
-                 ProtectedRange' <$>
-                   (o .:? "protectedRangeId") <*> (o .:? "warningOnly")
-                     <*> (o .:? "namedRangeId")
-                     <*> (o .:? "range")
-                     <*> (o .:? "editors")
-                     <*> (o .:? "unprotectedRanges" .!= mempty)
-                     <*> (o .:? "requestingUserCanEdit")
-                     <*> (o .:? "description"))
-
-instance ToJSON ProtectedRange where
-        toJSON ProtectedRange'{..}
-          = object
-              (catMaybes
-                 [("protectedRangeId" .=) <$> _prProtectedRangeId,
-                  ("warningOnly" .=) <$> _prWarningOnly,
-                  ("namedRangeId" .=) <$> _prNamedRangeId,
-                  ("range" .=) <$> _prRange,
-                  ("editors" .=) <$> _prEditors,
-                  ("unprotectedRanges" .=) <$> _prUnprotectedRanges,
-                  ("requestingUserCanEdit" .=) <$>
-                    _prRequestingUserCanEdit,
-                  ("description" .=) <$> _prDescription])
-
--- | An axis of the chart. A chart may not have more than one axis per axis
--- position.
---
--- /See:/ 'basicChartAxis' smart constructor.
-data BasicChartAxis = BasicChartAxis'
-    { _bcaFormat   :: !(Maybe TextFormat)
-    , _bcaTitle    :: !(Maybe Text)
-    , _bcaPosition :: !(Maybe BasicChartAxisPosition)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'BasicChartAxis' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'bcaFormat'
---
--- * 'bcaTitle'
---
--- * 'bcaPosition'
-basicChartAxis
-    :: BasicChartAxis
-basicChartAxis =
-    BasicChartAxis'
-    { _bcaFormat = Nothing
-    , _bcaTitle = Nothing
-    , _bcaPosition = Nothing
-    }
-
--- | The format of the title. Only valid if the axis is not associated with
--- the domain.
-bcaFormat :: Lens' BasicChartAxis (Maybe TextFormat)
-bcaFormat
-  = lens _bcaFormat (\ s a -> s{_bcaFormat = a})
-
--- | The title of this axis. If set, this overrides any title inferred from
--- headers of the data.
-bcaTitle :: Lens' BasicChartAxis (Maybe Text)
-bcaTitle = lens _bcaTitle (\ s a -> s{_bcaTitle = a})
-
--- | The position of this axis.
-bcaPosition :: Lens' BasicChartAxis (Maybe BasicChartAxisPosition)
-bcaPosition
-  = lens _bcaPosition (\ s a -> s{_bcaPosition = a})
-
-instance FromJSON BasicChartAxis where
-        parseJSON
-          = withObject "BasicChartAxis"
-              (\ o ->
-                 BasicChartAxis' <$>
-                   (o .:? "format") <*> (o .:? "title") <*>
-                     (o .:? "position"))
-
-instance ToJSON BasicChartAxis where
-        toJSON BasicChartAxis'{..}
-          = object
-              (catMaybes
-                 [("format" .=) <$> _bcaFormat,
-                  ("title" .=) <$> _bcaTitle,
-                  ("position" .=) <$> _bcaPosition])
-
--- | Data in the grid, as well as metadata about the dimensions.
---
--- /See:/ 'gridData' smart constructor.
-data GridData = GridData'
-    { _gdRowMetadata    :: !(Maybe [DimensionProperties])
-    , _gdStartRow       :: !(Maybe (Textual Int32))
-    , _gdRowData        :: !(Maybe [RowData])
-    , _gdColumnMetadata :: !(Maybe [DimensionProperties])
-    , _gdStartColumn    :: !(Maybe (Textual Int32))
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'GridData' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gdRowMetadata'
---
--- * 'gdStartRow'
---
--- * 'gdRowData'
---
--- * 'gdColumnMetadata'
---
--- * 'gdStartColumn'
-gridData
-    :: GridData
-gridData =
-    GridData'
-    { _gdRowMetadata = Nothing
-    , _gdStartRow = Nothing
-    , _gdRowData = Nothing
-    , _gdColumnMetadata = Nothing
-    , _gdStartColumn = Nothing
-    }
-
--- | Metadata about the requested rows in the grid, starting with the row in
--- start_row.
-gdRowMetadata :: Lens' GridData [DimensionProperties]
-gdRowMetadata
-  = lens _gdRowMetadata
-      (\ s a -> s{_gdRowMetadata = a})
-      . _Default
-      . _Coerce
-
--- | The first row this GridData refers to, zero-based.
-gdStartRow :: Lens' GridData (Maybe Int32)
-gdStartRow
-  = lens _gdStartRow (\ s a -> s{_gdStartRow = a}) .
-      mapping _Coerce
-
--- | The data in the grid, one entry per row, starting with the row in
--- startRow. The values in RowData will correspond to columns starting at
--- start_column.
-gdRowData :: Lens' GridData [RowData]
-gdRowData
-  = lens _gdRowData (\ s a -> s{_gdRowData = a}) .
-      _Default
-      . _Coerce
-
--- | Metadata about the requested columns in the grid, starting with the
--- column in start_column.
-gdColumnMetadata :: Lens' GridData [DimensionProperties]
-gdColumnMetadata
-  = lens _gdColumnMetadata
-      (\ s a -> s{_gdColumnMetadata = a})
-      . _Default
-      . _Coerce
-
--- | The first column this GridData refers to, zero-based.
-gdStartColumn :: Lens' GridData (Maybe Int32)
-gdStartColumn
-  = lens _gdStartColumn
-      (\ s a -> s{_gdStartColumn = a})
-      . mapping _Coerce
-
-instance FromJSON GridData where
-        parseJSON
-          = withObject "GridData"
-              (\ o ->
-                 GridData' <$>
-                   (o .:? "rowMetadata" .!= mempty) <*>
-                     (o .:? "startRow")
-                     <*> (o .:? "rowData" .!= mempty)
-                     <*> (o .:? "columnMetadata" .!= mempty)
-                     <*> (o .:? "startColumn"))
-
-instance ToJSON GridData where
-        toJSON GridData'{..}
-          = object
-              (catMaybes
-                 [("rowMetadata" .=) <$> _gdRowMetadata,
-                  ("startRow" .=) <$> _gdStartRow,
-                  ("rowData" .=) <$> _gdRowData,
-                  ("columnMetadata" .=) <$> _gdColumnMetadata,
-                  ("startColumn" .=) <$> _gdStartColumn])
-
--- | The number format of a cell.
---
--- /See:/ 'numberFormat' smart constructor.
-data NumberFormat = NumberFormat'
-    { _nfPattern :: !(Maybe Text)
-    , _nfType    :: !(Maybe NumberFormatType)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'NumberFormat' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'nfPattern'
---
--- * 'nfType'
-numberFormat
-    :: NumberFormat
-numberFormat =
-    NumberFormat'
-    { _nfPattern = Nothing
-    , _nfType = Nothing
-    }
-
--- | Pattern string used for formatting. If not set, a default pattern based
--- on the user\'s locale will be used if necessary for the given type. See
--- the [Date and Number Formats guide](\/sheets\/guides\/formats) for more
--- information about the supported patterns.
-nfPattern :: Lens' NumberFormat (Maybe Text)
-nfPattern
-  = lens _nfPattern (\ s a -> s{_nfPattern = a})
-
--- | The type of the number format. When writing, this field must be set.
-nfType :: Lens' NumberFormat (Maybe NumberFormatType)
-nfType = lens _nfType (\ s a -> s{_nfType = a})
-
-instance FromJSON NumberFormat where
-        parseJSON
-          = withObject "NumberFormat"
-              (\ o ->
-                 NumberFormat' <$>
-                   (o .:? "pattern") <*> (o .:? "type"))
-
-instance ToJSON NumberFormat where
-        toJSON NumberFormat'{..}
-          = object
-              (catMaybes
-                 [("pattern" .=) <$> _nfPattern,
-                  ("type" .=) <$> _nfType])
-
--- | The reply for batch updating a spreadsheet.
---
--- /See:/ 'batchUpdateSpreadsheetResponse' smart constructor.
-data BatchUpdateSpreadsheetResponse = BatchUpdateSpreadsheetResponse'
-    { _busrSpreadsheetId      :: !(Maybe Text)
-    , _busrReplies            :: !(Maybe [Response])
-    , _busrUpdatedSpreadsheet :: !(Maybe Spreadsheet)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'BatchUpdateSpreadsheetResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'busrSpreadsheetId'
---
--- * 'busrReplies'
---
--- * 'busrUpdatedSpreadsheet'
-batchUpdateSpreadsheetResponse
-    :: BatchUpdateSpreadsheetResponse
-batchUpdateSpreadsheetResponse =
-    BatchUpdateSpreadsheetResponse'
-    { _busrSpreadsheetId = Nothing
-    , _busrReplies = Nothing
-    , _busrUpdatedSpreadsheet = Nothing
-    }
-
--- | The spreadsheet the updates were applied to.
-busrSpreadsheetId :: Lens' BatchUpdateSpreadsheetResponse (Maybe Text)
-busrSpreadsheetId
-  = lens _busrSpreadsheetId
-      (\ s a -> s{_busrSpreadsheetId = a})
-
--- | The reply of the updates. This maps 1:1 with the updates, although
--- replies to some requests may be empty.
-busrReplies :: Lens' BatchUpdateSpreadsheetResponse [Response]
-busrReplies
-  = lens _busrReplies (\ s a -> s{_busrReplies = a}) .
-      _Default
-      . _Coerce
-
--- | The spreadsheet after updates were applied. This is only set if
--- [BatchUpdateSpreadsheetRequest.include_spreadsheet_in_response] is
--- \`true\`.
-busrUpdatedSpreadsheet :: Lens' BatchUpdateSpreadsheetResponse (Maybe Spreadsheet)
-busrUpdatedSpreadsheet
-  = lens _busrUpdatedSpreadsheet
-      (\ s a -> s{_busrUpdatedSpreadsheet = a})
-
-instance FromJSON BatchUpdateSpreadsheetResponse
-         where
-        parseJSON
-          = withObject "BatchUpdateSpreadsheetResponse"
-              (\ o ->
-                 BatchUpdateSpreadsheetResponse' <$>
-                   (o .:? "spreadsheetId") <*>
-                     (o .:? "replies" .!= mempty)
-                     <*> (o .:? "updatedSpreadsheet"))
-
-instance ToJSON BatchUpdateSpreadsheetResponse where
-        toJSON BatchUpdateSpreadsheetResponse'{..}
-          = object
-              (catMaybes
-                 [("spreadsheetId" .=) <$> _busrSpreadsheetId,
-                  ("replies" .=) <$> _busrReplies,
-                  ("updatedSpreadsheet" .=) <$>
-                    _busrUpdatedSpreadsheet])
-
--- | Sets a data validation rule to every cell in the range. To clear
--- validation in a range, call this with no rule specified.
---
--- /See:/ 'setDataValidationRequest' smart constructor.
-data SetDataValidationRequest = SetDataValidationRequest'
-    { _sdvrRule  :: !(Maybe DataValidationRule)
-    , _sdvrRange :: !(Maybe GridRange)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'SetDataValidationRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sdvrRule'
---
--- * 'sdvrRange'
-setDataValidationRequest
-    :: SetDataValidationRequest
-setDataValidationRequest =
-    SetDataValidationRequest'
-    { _sdvrRule = Nothing
-    , _sdvrRange = Nothing
-    }
-
--- | The data validation rule to set on each cell in the range, or empty to
--- clear the data validation in the range.
-sdvrRule :: Lens' SetDataValidationRequest (Maybe DataValidationRule)
-sdvrRule = lens _sdvrRule (\ s a -> s{_sdvrRule = a})
-
--- | The range the data validation rule should apply to.
-sdvrRange :: Lens' SetDataValidationRequest (Maybe GridRange)
-sdvrRange
-  = lens _sdvrRange (\ s a -> s{_sdvrRange = a})
-
-instance FromJSON SetDataValidationRequest where
-        parseJSON
-          = withObject "SetDataValidationRequest"
-              (\ o ->
-                 SetDataValidationRequest' <$>
-                   (o .:? "rule") <*> (o .:? "range"))
-
-instance ToJSON SetDataValidationRequest where
-        toJSON SetDataValidationRequest'{..}
-          = object
-              (catMaybes
-                 [("rule" .=) <$> _sdvrRule,
-                  ("range" .=) <$> _sdvrRange])
-
--- | Properties referring a single dimension (either row or column). If both
--- BandedRange.row_properties and BandedRange.column_properties are set,
--- the fill colors are applied to cells according to the following rules: *
--- header_color and footer_color take priority over band colors. *
--- first_band_color takes priority over second_band_color. * row_properties
--- takes priority over column_properties. For example, the first row color
--- takes priority over the first column color, but the first column color
--- takes priority over the second row color. Similarly, the row header
--- takes priority over the column header in the top left cell, but the
--- column header takes priority over the first row color if the row header
--- is not set.
---
--- /See:/ 'bandingProperties' smart constructor.
-data BandingProperties = BandingProperties'
-    { _bpSecondBandColor :: !(Maybe Color)
-    , _bpHeaderColor     :: !(Maybe Color)
-    , _bpFooterColor     :: !(Maybe Color)
-    , _bpFirstBandColor  :: !(Maybe Color)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'BandingProperties' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'bpSecondBandColor'
---
--- * 'bpHeaderColor'
---
--- * 'bpFooterColor'
---
--- * 'bpFirstBandColor'
-bandingProperties
-    :: BandingProperties
-bandingProperties =
-    BandingProperties'
-    { _bpSecondBandColor = Nothing
-    , _bpHeaderColor = Nothing
-    , _bpFooterColor = Nothing
-    , _bpFirstBandColor = Nothing
-    }
-
--- | The second color that is alternating. (Required)
-bpSecondBandColor :: Lens' BandingProperties (Maybe Color)
-bpSecondBandColor
-  = lens _bpSecondBandColor
-      (\ s a -> s{_bpSecondBandColor = a})
-
--- | The color of the first row or column. If this field is set, the first
--- row or column will be filled with this color and the colors will
--- alternate between first_band_color and second_band_color starting from
--- the second row or column. Otherwise, the first row or column will be
--- filled with first_band_color and the colors will proceed to alternate as
--- they normally would.
-bpHeaderColor :: Lens' BandingProperties (Maybe Color)
-bpHeaderColor
-  = lens _bpHeaderColor
-      (\ s a -> s{_bpHeaderColor = a})
-
--- | The color of the last row or column. If this field is not set, the last
--- row or column will be filled with either first_band_color or
--- second_band_color, depending on the color of the previous row or column.
-bpFooterColor :: Lens' BandingProperties (Maybe Color)
-bpFooterColor
-  = lens _bpFooterColor
-      (\ s a -> s{_bpFooterColor = a})
-
--- | The first color that is alternating. (Required)
-bpFirstBandColor :: Lens' BandingProperties (Maybe Color)
-bpFirstBandColor
-  = lens _bpFirstBandColor
-      (\ s a -> s{_bpFirstBandColor = a})
-
-instance FromJSON BandingProperties where
-        parseJSON
-          = withObject "BandingProperties"
-              (\ o ->
-                 BandingProperties' <$>
-                   (o .:? "secondBandColor") <*> (o .:? "headerColor")
-                     <*> (o .:? "footerColor")
-                     <*> (o .:? "firstBandColor"))
-
-instance ToJSON BandingProperties where
-        toJSON BandingProperties'{..}
-          = object
-              (catMaybes
-                 [("secondBandColor" .=) <$> _bpSecondBandColor,
-                  ("headerColor" .=) <$> _bpHeaderColor,
-                  ("footerColor" .=) <$> _bpFooterColor,
-                  ("firstBandColor" .=) <$> _bpFirstBandColor])
-
--- | Duplicates a particular filter view.
---
--- /See:/ 'duplicateFilterViewRequest' smart constructor.
-newtype DuplicateFilterViewRequest = DuplicateFilterViewRequest'
-    { _dFilterId :: Maybe (Textual Int32)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DuplicateFilterViewRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dFilterId'
-duplicateFilterViewRequest
-    :: DuplicateFilterViewRequest
-duplicateFilterViewRequest =
-    DuplicateFilterViewRequest'
-    { _dFilterId = Nothing
-    }
-
--- | The ID of the filter being duplicated.
-dFilterId :: Lens' DuplicateFilterViewRequest (Maybe Int32)
-dFilterId
-  = lens _dFilterId (\ s a -> s{_dFilterId = a}) .
-      mapping _Coerce
-
-instance FromJSON DuplicateFilterViewRequest where
-        parseJSON
-          = withObject "DuplicateFilterViewRequest"
-              (\ o ->
-                 DuplicateFilterViewRequest' <$> (o .:? "filterId"))
-
-instance ToJSON DuplicateFilterViewRequest where
-        toJSON DuplicateFilterViewRequest'{..}
-          = object (catMaybes [("filterId" .=) <$> _dFilterId])
-
--- | A single grouping (either row or column) in a pivot table.
---
--- /See:/ 'pivotGroup' smart constructor.
-data PivotGroup = PivotGroup'
-    { _pgValueMetadata      :: !(Maybe [PivotGroupValueMetadata])
-    , _pgSourceColumnOffSet :: !(Maybe (Textual Int32))
-    , _pgSortOrder          :: !(Maybe PivotGroupSortOrder)
-    , _pgShowTotals         :: !(Maybe Bool)
-    , _pgValueBucket        :: !(Maybe PivotGroupSortValueBucket)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'PivotGroup' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'pgValueMetadata'
---
--- * 'pgSourceColumnOffSet'
---
--- * 'pgSortOrder'
---
--- * 'pgShowTotals'
---
--- * 'pgValueBucket'
-pivotGroup
-    :: PivotGroup
-pivotGroup =
-    PivotGroup'
-    { _pgValueMetadata = Nothing
-    , _pgSourceColumnOffSet = Nothing
-    , _pgSortOrder = Nothing
-    , _pgShowTotals = Nothing
-    , _pgValueBucket = Nothing
-    }
-
--- | Metadata about values in the grouping.
-pgValueMetadata :: Lens' PivotGroup [PivotGroupValueMetadata]
-pgValueMetadata
-  = lens _pgValueMetadata
-      (\ s a -> s{_pgValueMetadata = a})
-      . _Default
-      . _Coerce
-
--- | The column offset of the source range that this grouping is based on.
--- For example, if the source was \`C10:E15\`, a \`sourceColumnOffset\` of
--- \`0\` means this group refers to column \`C\`, whereas the offset \`1\`
--- would refer to column \`D\`.
-pgSourceColumnOffSet :: Lens' PivotGroup (Maybe Int32)
-pgSourceColumnOffSet
-  = lens _pgSourceColumnOffSet
-      (\ s a -> s{_pgSourceColumnOffSet = a})
-      . mapping _Coerce
-
--- | The order the values in this group should be sorted.
-pgSortOrder :: Lens' PivotGroup (Maybe PivotGroupSortOrder)
-pgSortOrder
-  = lens _pgSortOrder (\ s a -> s{_pgSortOrder = a})
-
--- | True if the pivot table should include the totals for this grouping.
-pgShowTotals :: Lens' PivotGroup (Maybe Bool)
-pgShowTotals
-  = lens _pgShowTotals (\ s a -> s{_pgShowTotals = a})
-
--- | The bucket of the opposite pivot group to sort by. If not specified,
--- sorting is alphabetical by this group\'s values.
-pgValueBucket :: Lens' PivotGroup (Maybe PivotGroupSortValueBucket)
-pgValueBucket
-  = lens _pgValueBucket
-      (\ s a -> s{_pgValueBucket = a})
-
-instance FromJSON PivotGroup where
-        parseJSON
-          = withObject "PivotGroup"
-              (\ o ->
-                 PivotGroup' <$>
-                   (o .:? "valueMetadata" .!= mempty) <*>
-                     (o .:? "sourceColumnOffset")
-                     <*> (o .:? "sortOrder")
-                     <*> (o .:? "showTotals")
-                     <*> (o .:? "valueBucket"))
-
-instance ToJSON PivotGroup where
-        toJSON PivotGroup'{..}
-          = object
-              (catMaybes
-                 [("valueMetadata" .=) <$> _pgValueMetadata,
-                  ("sourceColumnOffset" .=) <$> _pgSourceColumnOffSet,
-                  ("sortOrder" .=) <$> _pgSortOrder,
-                  ("showTotals" .=) <$> _pgShowTotals,
-                  ("valueBucket" .=) <$> _pgValueBucket])
-
--- | The result of adding a banded range.
---
--- /See:/ 'addBandingResponse' smart constructor.
-newtype AddBandingResponse = AddBandingResponse'
-    { _aBandedRange :: Maybe BandedRange
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AddBandingResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'aBandedRange'
-addBandingResponse
-    :: AddBandingResponse
-addBandingResponse =
-    AddBandingResponse'
-    { _aBandedRange = Nothing
-    }
-
--- | The banded range that was added.
-aBandedRange :: Lens' AddBandingResponse (Maybe BandedRange)
-aBandedRange
-  = lens _aBandedRange (\ s a -> s{_aBandedRange = a})
-
-instance FromJSON AddBandingResponse where
-        parseJSON
-          = withObject "AddBandingResponse"
-              (\ o ->
-                 AddBandingResponse' <$> (o .:? "bandedRange"))
-
-instance ToJSON AddBandingResponse where
-        toJSON AddBandingResponse'{..}
-          = object
-              (catMaybes [("bandedRange" .=) <$> _aBandedRange])
-
--- | A rule describing a conditional format.
---
--- /See:/ 'conditionalFormatRule' smart constructor.
-data ConditionalFormatRule = ConditionalFormatRule'
-    { _cfrBooleanRule  :: !(Maybe BooleanRule)
-    , _cfrGradientRule :: !(Maybe GradientRule)
-    , _cfrRanges       :: !(Maybe [GridRange])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ConditionalFormatRule' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cfrBooleanRule'
---
--- * 'cfrGradientRule'
---
--- * 'cfrRanges'
-conditionalFormatRule
-    :: ConditionalFormatRule
-conditionalFormatRule =
-    ConditionalFormatRule'
-    { _cfrBooleanRule = Nothing
-    , _cfrGradientRule = Nothing
-    , _cfrRanges = Nothing
-    }
-
--- | The formatting is either \"on\" or \"off\" according to the rule.
-cfrBooleanRule :: Lens' ConditionalFormatRule (Maybe BooleanRule)
-cfrBooleanRule
-  = lens _cfrBooleanRule
-      (\ s a -> s{_cfrBooleanRule = a})
-
--- | The formatting will vary based on the gradients in the rule.
-cfrGradientRule :: Lens' ConditionalFormatRule (Maybe GradientRule)
-cfrGradientRule
-  = lens _cfrGradientRule
-      (\ s a -> s{_cfrGradientRule = a})
-
--- | The ranges that will be formatted if the condition is true. All the
--- ranges must be on the same grid.
-cfrRanges :: Lens' ConditionalFormatRule [GridRange]
-cfrRanges
-  = lens _cfrRanges (\ s a -> s{_cfrRanges = a}) .
-      _Default
-      . _Coerce
-
-instance FromJSON ConditionalFormatRule where
-        parseJSON
-          = withObject "ConditionalFormatRule"
-              (\ o ->
-                 ConditionalFormatRule' <$>
-                   (o .:? "booleanRule") <*> (o .:? "gradientRule") <*>
-                     (o .:? "ranges" .!= mempty))
-
-instance ToJSON ConditionalFormatRule where
-        toJSON ConditionalFormatRule'{..}
-          = object
-              (catMaybes
-                 [("booleanRule" .=) <$> _cfrBooleanRule,
-                  ("gradientRule" .=) <$> _cfrGradientRule,
-                  ("ranges" .=) <$> _cfrRanges])
-
--- | The specification for a basic chart. See BasicChartType for the list of
--- charts this supports.
---
--- /See:/ 'basicChartSpec' smart constructor.
-data BasicChartSpec = BasicChartSpec'
-    { _bHeaderCount    :: !(Maybe (Textual Int32))
-    , _bLegendPosition :: !(Maybe BasicChartSpecLegendPosition)
-    , _bSeries         :: !(Maybe [BasicChartSeries])
-    , _bChartType      :: !(Maybe BasicChartSpecChartType)
-    , _bDomains        :: !(Maybe [BasicChartDomain])
-    , _bAxis           :: !(Maybe [BasicChartAxis])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'BasicChartSpec' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'bHeaderCount'
---
--- * 'bLegendPosition'
---
--- * 'bSeries'
---
--- * 'bChartType'
---
--- * 'bDomains'
---
--- * 'bAxis'
-basicChartSpec
-    :: BasicChartSpec
-basicChartSpec =
-    BasicChartSpec'
-    { _bHeaderCount = Nothing
-    , _bLegendPosition = Nothing
-    , _bSeries = Nothing
-    , _bChartType = Nothing
-    , _bDomains = Nothing
-    , _bAxis = Nothing
-    }
-
--- | The number of rows or columns in the data that are \"headers\". If not
--- set, Google Sheets will guess how many rows are headers based on the
--- data. (Note that BasicChartAxis.title may override the axis title
--- inferred from the header values.)
-bHeaderCount :: Lens' BasicChartSpec (Maybe Int32)
-bHeaderCount
-  = lens _bHeaderCount (\ s a -> s{_bHeaderCount = a})
-      . mapping _Coerce
-
--- | The position of the chart legend.
-bLegendPosition :: Lens' BasicChartSpec (Maybe BasicChartSpecLegendPosition)
-bLegendPosition
-  = lens _bLegendPosition
-      (\ s a -> s{_bLegendPosition = a})
-
--- | The data this chart is visualizing.
-bSeries :: Lens' BasicChartSpec [BasicChartSeries]
-bSeries
-  = lens _bSeries (\ s a -> s{_bSeries = a}) . _Default
-      . _Coerce
-
--- | The type of the chart.
-bChartType :: Lens' BasicChartSpec (Maybe BasicChartSpecChartType)
-bChartType
-  = lens _bChartType (\ s a -> s{_bChartType = a})
-
--- | The domain of data this is charting. Only a single domain is currently
--- supported.
-bDomains :: Lens' BasicChartSpec [BasicChartDomain]
-bDomains
-  = lens _bDomains (\ s a -> s{_bDomains = a}) .
-      _Default
-      . _Coerce
-
--- | The axis on the chart.
-bAxis :: Lens' BasicChartSpec [BasicChartAxis]
-bAxis
-  = lens _bAxis (\ s a -> s{_bAxis = a}) . _Default .
-      _Coerce
-
-instance FromJSON BasicChartSpec where
-        parseJSON
-          = withObject "BasicChartSpec"
-              (\ o ->
-                 BasicChartSpec' <$>
-                   (o .:? "headerCount") <*> (o .:? "legendPosition")
-                     <*> (o .:? "series" .!= mempty)
-                     <*> (o .:? "chartType")
-                     <*> (o .:? "domains" .!= mempty)
-                     <*> (o .:? "axis" .!= mempty))
-
-instance ToJSON BasicChartSpec where
-        toJSON BasicChartSpec'{..}
-          = object
-              (catMaybes
-                 [("headerCount" .=) <$> _bHeaderCount,
-                  ("legendPosition" .=) <$> _bLegendPosition,
-                  ("series" .=) <$> _bSeries,
-                  ("chartType" .=) <$> _bChartType,
-                  ("domains" .=) <$> _bDomains,
-                  ("axis" .=) <$> _bAxis])
-
--- | Adds a new conditional format rule at the given index. All subsequent
--- rules\' indexes are incremented.
---
--- /See:/ 'addConditionalFormatRuleRequest' smart constructor.
-data AddConditionalFormatRuleRequest = AddConditionalFormatRuleRequest'
-    { _acfrrRule  :: !(Maybe ConditionalFormatRule)
-    , _acfrrIndex :: !(Maybe (Textual Int32))
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AddConditionalFormatRuleRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'acfrrRule'
---
--- * 'acfrrIndex'
-addConditionalFormatRuleRequest
-    :: AddConditionalFormatRuleRequest
-addConditionalFormatRuleRequest =
-    AddConditionalFormatRuleRequest'
-    { _acfrrRule = Nothing
-    , _acfrrIndex = Nothing
-    }
-
--- | The rule to add.
-acfrrRule :: Lens' AddConditionalFormatRuleRequest (Maybe ConditionalFormatRule)
-acfrrRule
-  = lens _acfrrRule (\ s a -> s{_acfrrRule = a})
-
--- | The zero-based index where the rule should be inserted.
-acfrrIndex :: Lens' AddConditionalFormatRuleRequest (Maybe Int32)
-acfrrIndex
-  = lens _acfrrIndex (\ s a -> s{_acfrrIndex = a}) .
-      mapping _Coerce
-
-instance FromJSON AddConditionalFormatRuleRequest
-         where
-        parseJSON
-          = withObject "AddConditionalFormatRuleRequest"
-              (\ o ->
-                 AddConditionalFormatRuleRequest' <$>
-                   (o .:? "rule") <*> (o .:? "index"))
-
-instance ToJSON AddConditionalFormatRuleRequest where
-        toJSON AddConditionalFormatRuleRequest'{..}
-          = object
-              (catMaybes
-                 [("rule" .=) <$> _acfrrRule,
-                  ("index" .=) <$> _acfrrIndex])
-
--- | The result of duplicating a sheet.
---
--- /See:/ 'duplicateSheetResponse' smart constructor.
-newtype DuplicateSheetResponse = DuplicateSheetResponse'
-    { _dsrProperties :: Maybe SheetProperties
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DuplicateSheetResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dsrProperties'
-duplicateSheetResponse
-    :: DuplicateSheetResponse
-duplicateSheetResponse =
-    DuplicateSheetResponse'
-    { _dsrProperties = Nothing
-    }
-
--- | The properties of the duplicate sheet.
-dsrProperties :: Lens' DuplicateSheetResponse (Maybe SheetProperties)
-dsrProperties
-  = lens _dsrProperties
-      (\ s a -> s{_dsrProperties = a})
-
-instance FromJSON DuplicateSheetResponse where
-        parseJSON
-          = withObject "DuplicateSheetResponse"
-              (\ o ->
-                 DuplicateSheetResponse' <$> (o .:? "properties"))
-
-instance ToJSON DuplicateSheetResponse where
-        toJSON DuplicateSheetResponse'{..}
-          = object
-              (catMaybes [("properties" .=) <$> _dsrProperties])
-
--- | The format of a run of text in a cell. Absent values indicate that the
--- field isn\'t specified.
---
--- /See:/ 'textFormat' smart constructor.
-data TextFormat = TextFormat'
-    { _tfFontFamily      :: !(Maybe Text)
-    , _tfForegRoundColor :: !(Maybe Color)
-    , _tfFontSize        :: !(Maybe (Textual Int32))
-    , _tfUnderline       :: !(Maybe Bool)
-    , _tfItalic          :: !(Maybe Bool)
-    , _tfBold            :: !(Maybe Bool)
-    , _tfStrikethrough   :: !(Maybe Bool)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'TextFormat' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tfFontFamily'
---
--- * 'tfForegRoundColor'
---
--- * 'tfFontSize'
---
--- * 'tfUnderline'
---
--- * 'tfItalic'
---
--- * 'tfBold'
---
--- * 'tfStrikethrough'
-textFormat
-    :: TextFormat
-textFormat =
-    TextFormat'
-    { _tfFontFamily = Nothing
-    , _tfForegRoundColor = Nothing
-    , _tfFontSize = Nothing
-    , _tfUnderline = Nothing
-    , _tfItalic = Nothing
-    , _tfBold = Nothing
-    , _tfStrikethrough = Nothing
-    }
-
--- | The font family.
-tfFontFamily :: Lens' TextFormat (Maybe Text)
-tfFontFamily
-  = lens _tfFontFamily (\ s a -> s{_tfFontFamily = a})
-
--- | The foreground color of the text.
-tfForegRoundColor :: Lens' TextFormat (Maybe Color)
-tfForegRoundColor
-  = lens _tfForegRoundColor
-      (\ s a -> s{_tfForegRoundColor = a})
-
--- | The size of the font.
-tfFontSize :: Lens' TextFormat (Maybe Int32)
-tfFontSize
-  = lens _tfFontSize (\ s a -> s{_tfFontSize = a}) .
-      mapping _Coerce
-
--- | True if the text is underlined.
-tfUnderline :: Lens' TextFormat (Maybe Bool)
-tfUnderline
-  = lens _tfUnderline (\ s a -> s{_tfUnderline = a})
-
--- | True if the text is italicized.
-tfItalic :: Lens' TextFormat (Maybe Bool)
-tfItalic = lens _tfItalic (\ s a -> s{_tfItalic = a})
-
--- | True if the text is bold.
-tfBold :: Lens' TextFormat (Maybe Bool)
-tfBold = lens _tfBold (\ s a -> s{_tfBold = a})
-
--- | True if the text has a strikethrough.
-tfStrikethrough :: Lens' TextFormat (Maybe Bool)
-tfStrikethrough
-  = lens _tfStrikethrough
-      (\ s a -> s{_tfStrikethrough = a})
-
-instance FromJSON TextFormat where
-        parseJSON
-          = withObject "TextFormat"
-              (\ o ->
-                 TextFormat' <$>
-                   (o .:? "fontFamily") <*> (o .:? "foregroundColor")
-                     <*> (o .:? "fontSize")
-                     <*> (o .:? "underline")
-                     <*> (o .:? "italic")
-                     <*> (o .:? "bold")
-                     <*> (o .:? "strikethrough"))
-
-instance ToJSON TextFormat where
-        toJSON TextFormat'{..}
-          = object
-              (catMaybes
-                 [("fontFamily" .=) <$> _tfFontFamily,
-                  ("foregroundColor" .=) <$> _tfForegRoundColor,
-                  ("fontSize" .=) <$> _tfFontSize,
-                  ("underline" .=) <$> _tfUnderline,
-                  ("italic" .=) <$> _tfItalic, ("bold" .=) <$> _tfBold,
-                  ("strikethrough" .=) <$> _tfStrikethrough])
-
--- | The response when updating a range of values in a spreadsheet.
---
--- /See:/ 'batchClearValuesResponse' smart constructor.
-data BatchClearValuesResponse = BatchClearValuesResponse'
-    { _bcvrClearedRanges :: !(Maybe [Text])
-    , _bcvrSpreadsheetId :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'BatchClearValuesResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'bcvrClearedRanges'
---
--- * 'bcvrSpreadsheetId'
-batchClearValuesResponse
-    :: BatchClearValuesResponse
-batchClearValuesResponse =
-    BatchClearValuesResponse'
-    { _bcvrClearedRanges = Nothing
-    , _bcvrSpreadsheetId = Nothing
-    }
-
--- | The ranges that were cleared, in A1 notation. (If the requests were for
--- an unbounded range or a ranger larger than the bounds of the sheet, this
--- will be the actual ranges that were cleared, bounded to the sheet\'s
--- limits.)
-bcvrClearedRanges :: Lens' BatchClearValuesResponse [Text]
-bcvrClearedRanges
-  = lens _bcvrClearedRanges
-      (\ s a -> s{_bcvrClearedRanges = a})
-      . _Default
-      . _Coerce
-
--- | The spreadsheet the updates were applied to.
-bcvrSpreadsheetId :: Lens' BatchClearValuesResponse (Maybe Text)
-bcvrSpreadsheetId
-  = lens _bcvrSpreadsheetId
-      (\ s a -> s{_bcvrSpreadsheetId = a})
-
-instance FromJSON BatchClearValuesResponse where
-        parseJSON
-          = withObject "BatchClearValuesResponse"
-              (\ o ->
-                 BatchClearValuesResponse' <$>
-                   (o .:? "clearedRanges" .!= mempty) <*>
-                     (o .:? "spreadsheetId"))
-
-instance ToJSON BatchClearValuesResponse where
-        toJSON BatchClearValuesResponse'{..}
-          = object
-              (catMaybes
-                 [("clearedRanges" .=) <$> _bcvrClearedRanges,
-                  ("spreadsheetId" .=) <$> _bcvrSpreadsheetId])
-
--- | The domain of a chart. For example, if charting stock prices over time,
--- this would be the date.
---
--- /See:/ 'basicChartDomain' smart constructor.
-newtype BasicChartDomain = BasicChartDomain'
-    { _bcdDomain :: Maybe ChartData
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'BasicChartDomain' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'bcdDomain'
-basicChartDomain
-    :: BasicChartDomain
-basicChartDomain =
-    BasicChartDomain'
-    { _bcdDomain = Nothing
-    }
-
--- | The data of the domain. For example, if charting stock prices over time,
--- this is the data representing the dates.
-bcdDomain :: Lens' BasicChartDomain (Maybe ChartData)
-bcdDomain
-  = lens _bcdDomain (\ s a -> s{_bcdDomain = a})
-
-instance FromJSON BasicChartDomain where
-        parseJSON
-          = withObject "BasicChartDomain"
-              (\ o -> BasicChartDomain' <$> (o .:? "domain"))
-
-instance ToJSON BasicChartDomain where
-        toJSON BasicChartDomain'{..}
-          = object (catMaybes [("domain" .=) <$> _bcdDomain])
-
--- | Inserts cells into a range, shifting the existing cells over or down.
---
--- /See:/ 'insertRangeRequest' smart constructor.
-data InsertRangeRequest = InsertRangeRequest'
-    { _irrShiftDimension :: !(Maybe InsertRangeRequestShiftDimension)
-    , _irrRange          :: !(Maybe GridRange)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InsertRangeRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'irrShiftDimension'
---
--- * 'irrRange'
-insertRangeRequest
-    :: InsertRangeRequest
-insertRangeRequest =
-    InsertRangeRequest'
-    { _irrShiftDimension = Nothing
-    , _irrRange = Nothing
-    }
-
--- | The dimension which will be shifted when inserting cells. If ROWS,
--- existing cells will be shifted down. If COLUMNS, existing cells will be
--- shifted right.
-irrShiftDimension :: Lens' InsertRangeRequest (Maybe InsertRangeRequestShiftDimension)
-irrShiftDimension
-  = lens _irrShiftDimension
-      (\ s a -> s{_irrShiftDimension = a})
-
--- | The range to insert new cells into.
-irrRange :: Lens' InsertRangeRequest (Maybe GridRange)
-irrRange = lens _irrRange (\ s a -> s{_irrRange = a})
-
-instance FromJSON InsertRangeRequest where
-        parseJSON
-          = withObject "InsertRangeRequest"
-              (\ o ->
-                 InsertRangeRequest' <$>
-                   (o .:? "shiftDimension") <*> (o .:? "range"))
-
-instance ToJSON InsertRangeRequest where
-        toJSON InsertRangeRequest'{..}
-          = object
-              (catMaybes
-                 [("shiftDimension" .=) <$> _irrShiftDimension,
-                  ("range" .=) <$> _irrRange])
-
--- | The amount of padding around the cell, in pixels. When updating padding,
--- every field must be specified.
---
--- /See:/ 'padding' smart constructor.
-data Padding = Padding'
-    { _pBottom :: !(Maybe (Textual Int32))
-    , _pLeft   :: !(Maybe (Textual Int32))
-    , _pRight  :: !(Maybe (Textual Int32))
-    , _pTop    :: !(Maybe (Textual Int32))
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Padding' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'pBottom'
---
--- * 'pLeft'
---
--- * 'pRight'
---
--- * 'pTop'
-padding
-    :: Padding
-padding =
-    Padding'
-    { _pBottom = Nothing
-    , _pLeft = Nothing
-    , _pRight = Nothing
-    , _pTop = Nothing
-    }
-
--- | The bottom padding of the cell.
-pBottom :: Lens' Padding (Maybe Int32)
-pBottom
-  = lens _pBottom (\ s a -> s{_pBottom = a}) .
-      mapping _Coerce
-
--- | The left padding of the cell.
-pLeft :: Lens' Padding (Maybe Int32)
-pLeft
-  = lens _pLeft (\ s a -> s{_pLeft = a}) .
-      mapping _Coerce
-
--- | The right padding of the cell.
-pRight :: Lens' Padding (Maybe Int32)
-pRight
-  = lens _pRight (\ s a -> s{_pRight = a}) .
-      mapping _Coerce
-
--- | The top padding of the cell.
-pTop :: Lens' Padding (Maybe Int32)
-pTop
-  = lens _pTop (\ s a -> s{_pTop = a}) .
-      mapping _Coerce
-
-instance FromJSON Padding where
-        parseJSON
-          = withObject "Padding"
-              (\ o ->
-                 Padding' <$>
-                   (o .:? "bottom") <*> (o .:? "left") <*>
-                     (o .:? "right")
-                     <*> (o .:? "top"))
-
-instance ToJSON Padding where
-        toJSON Padding'{..}
-          = object
-              (catMaybes
-                 [("bottom" .=) <$> _pBottom, ("left" .=) <$> _pLeft,
-                  ("right" .=) <$> _pRight, ("top" .=) <$> _pTop])
-
--- | The specifications of a chart.
---
--- /See:/ 'chartSpec' smart constructor.
-data ChartSpec = ChartSpec'
-    { _csTitle                   :: !(Maybe Text)
-    , _csPieChart                :: !(Maybe PieChartSpec)
-    , _csBasicChart              :: !(Maybe BasicChartSpec)
-    , _csHiddenDimensionStrategy :: !(Maybe ChartSpecHiddenDimensionStrategy)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ChartSpec' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'csTitle'
---
--- * 'csPieChart'
---
--- * 'csBasicChart'
---
--- * 'csHiddenDimensionStrategy'
-chartSpec
-    :: ChartSpec
-chartSpec =
-    ChartSpec'
-    { _csTitle = Nothing
-    , _csPieChart = Nothing
-    , _csBasicChart = Nothing
-    , _csHiddenDimensionStrategy = Nothing
-    }
-
--- | The title of the chart.
-csTitle :: Lens' ChartSpec (Maybe Text)
-csTitle = lens _csTitle (\ s a -> s{_csTitle = a})
-
--- | A pie chart specification.
-csPieChart :: Lens' ChartSpec (Maybe PieChartSpec)
-csPieChart
-  = lens _csPieChart (\ s a -> s{_csPieChart = a})
-
--- | A basic chart specification, can be one of many kinds of charts. See
--- BasicChartType for the list of all charts this supports.
-csBasicChart :: Lens' ChartSpec (Maybe BasicChartSpec)
-csBasicChart
-  = lens _csBasicChart (\ s a -> s{_csBasicChart = a})
-
--- | Determines how the charts will use hidden rows or columns.
-csHiddenDimensionStrategy :: Lens' ChartSpec (Maybe ChartSpecHiddenDimensionStrategy)
-csHiddenDimensionStrategy
-  = lens _csHiddenDimensionStrategy
-      (\ s a -> s{_csHiddenDimensionStrategy = a})
-
-instance FromJSON ChartSpec where
-        parseJSON
-          = withObject "ChartSpec"
-              (\ o ->
-                 ChartSpec' <$>
-                   (o .:? "title") <*> (o .:? "pieChart") <*>
-                     (o .:? "basicChart")
-                     <*> (o .:? "hiddenDimensionStrategy"))
-
-instance ToJSON ChartSpec where
-        toJSON ChartSpec'{..}
-          = object
-              (catMaybes
-                 [("title" .=) <$> _csTitle,
-                  ("pieChart" .=) <$> _csPieChart,
-                  ("basicChart" .=) <$> _csBasicChart,
-                  ("hiddenDimensionStrategy" .=) <$>
-                    _csHiddenDimensionStrategy])
-
--- | Properties about a dimension.
---
--- /See:/ 'dimensionProperties' smart constructor.
-data DimensionProperties = DimensionProperties'
-    { _dpHiddenByFilter :: !(Maybe Bool)
-    , _dpPixelSize      :: !(Maybe (Textual Int32))
-    , _dpHiddenByUser   :: !(Maybe Bool)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DimensionProperties' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dpHiddenByFilter'
---
--- * 'dpPixelSize'
---
--- * 'dpHiddenByUser'
-dimensionProperties
-    :: DimensionProperties
-dimensionProperties =
-    DimensionProperties'
-    { _dpHiddenByFilter = Nothing
-    , _dpPixelSize = Nothing
-    , _dpHiddenByUser = Nothing
-    }
-
--- | True if this dimension is being filtered. This field is read-only.
-dpHiddenByFilter :: Lens' DimensionProperties (Maybe Bool)
-dpHiddenByFilter
-  = lens _dpHiddenByFilter
-      (\ s a -> s{_dpHiddenByFilter = a})
-
--- | The height (if a row) or width (if a column) of the dimension in pixels.
-dpPixelSize :: Lens' DimensionProperties (Maybe Int32)
-dpPixelSize
-  = lens _dpPixelSize (\ s a -> s{_dpPixelSize = a}) .
-      mapping _Coerce
-
--- | True if this dimension is explicitly hidden.
-dpHiddenByUser :: Lens' DimensionProperties (Maybe Bool)
-dpHiddenByUser
-  = lens _dpHiddenByUser
-      (\ s a -> s{_dpHiddenByUser = a})
-
-instance FromJSON DimensionProperties where
-        parseJSON
-          = withObject "DimensionProperties"
-              (\ o ->
-                 DimensionProperties' <$>
-                   (o .:? "hiddenByFilter") <*> (o .:? "pixelSize") <*>
-                     (o .:? "hiddenByUser"))
-
-instance ToJSON DimensionProperties where
-        toJSON DimensionProperties'{..}
-          = object
-              (catMaybes
-                 [("hiddenByFilter" .=) <$> _dpHiddenByFilter,
-                  ("pixelSize" .=) <$> _dpPixelSize,
-                  ("hiddenByUser" .=) <$> _dpHiddenByUser])
-
--- | Updates properties of the supplied banded range.
---
--- /See:/ 'updateBandingRequest' smart constructor.
-data UpdateBandingRequest = UpdateBandingRequest'
-    { _ubrBandedRange :: !(Maybe BandedRange)
-    , _ubrFields      :: !(Maybe FieldMask)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'UpdateBandingRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ubrBandedRange'
---
--- * 'ubrFields'
-updateBandingRequest
-    :: UpdateBandingRequest
-updateBandingRequest =
-    UpdateBandingRequest'
-    { _ubrBandedRange = Nothing
-    , _ubrFields = Nothing
-    }
-
--- | The banded range to update with the new properties.
-ubrBandedRange :: Lens' UpdateBandingRequest (Maybe BandedRange)
-ubrBandedRange
-  = lens _ubrBandedRange
-      (\ s a -> s{_ubrBandedRange = a})
-
--- | The fields that should be updated. At least one field must be specified.
--- The root \`bandedRange\` is implied and should not be specified. A
--- single \`\"*\"\` can be used as short-hand for listing every field.
-ubrFields :: Lens' UpdateBandingRequest (Maybe FieldMask)
-ubrFields
-  = lens _ubrFields (\ s a -> s{_ubrFields = a})
-
-instance FromJSON UpdateBandingRequest where
-        parseJSON
-          = withObject "UpdateBandingRequest"
-              (\ o ->
-                 UpdateBandingRequest' <$>
-                   (o .:? "bandedRange") <*> (o .:? "fields"))
-
-instance ToJSON UpdateBandingRequest where
-        toJSON UpdateBandingRequest'{..}
-          = object
-              (catMaybes
-                 [("bandedRange" .=) <$> _ubrBandedRange,
-                  ("fields" .=) <$> _ubrFields])
-
--- | The response when retrieving more than one range of values in a
--- spreadsheet.
---
--- /See:/ 'batchGetValuesResponse' smart constructor.
-data BatchGetValuesResponse = BatchGetValuesResponse'
-    { _bgvrSpreadsheetId :: !(Maybe Text)
-    , _bgvrValueRanges   :: !(Maybe [ValueRange])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'BatchGetValuesResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'bgvrSpreadsheetId'
---
--- * 'bgvrValueRanges'
-batchGetValuesResponse
-    :: BatchGetValuesResponse
-batchGetValuesResponse =
-    BatchGetValuesResponse'
-    { _bgvrSpreadsheetId = Nothing
-    , _bgvrValueRanges = Nothing
-    }
-
--- | The ID of the spreadsheet the data was retrieved from.
-bgvrSpreadsheetId :: Lens' BatchGetValuesResponse (Maybe Text)
-bgvrSpreadsheetId
-  = lens _bgvrSpreadsheetId
-      (\ s a -> s{_bgvrSpreadsheetId = a})
-
--- | The requested values. The order of the ValueRanges is the same as the
--- order of the requested ranges.
-bgvrValueRanges :: Lens' BatchGetValuesResponse [ValueRange]
-bgvrValueRanges
-  = lens _bgvrValueRanges
-      (\ s a -> s{_bgvrValueRanges = a})
-      . _Default
-      . _Coerce
-
-instance FromJSON BatchGetValuesResponse where
-        parseJSON
-          = withObject "BatchGetValuesResponse"
-              (\ o ->
-                 BatchGetValuesResponse' <$>
-                   (o .:? "spreadsheetId") <*>
-                     (o .:? "valueRanges" .!= mempty))
-
-instance ToJSON BatchGetValuesResponse where
-        toJSON BatchGetValuesResponse'{..}
-          = object
-              (catMaybes
-                 [("spreadsheetId" .=) <$> _bgvrSpreadsheetId,
-                  ("valueRanges" .=) <$> _bgvrValueRanges])
-
--- | Removes the banded range with the given ID from the spreadsheet.
---
--- /See:/ 'deleteBandingRequest' smart constructor.
-newtype DeleteBandingRequest = DeleteBandingRequest'
-    { _dbrBandedRangeId :: Maybe (Textual Int32)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeleteBandingRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dbrBandedRangeId'
-deleteBandingRequest
-    :: DeleteBandingRequest
-deleteBandingRequest =
-    DeleteBandingRequest'
-    { _dbrBandedRangeId = Nothing
-    }
-
--- | The ID of the banded range to delete.
-dbrBandedRangeId :: Lens' DeleteBandingRequest (Maybe Int32)
-dbrBandedRangeId
-  = lens _dbrBandedRangeId
-      (\ s a -> s{_dbrBandedRangeId = a})
-      . mapping _Coerce
-
-instance FromJSON DeleteBandingRequest where
-        parseJSON
-          = withObject "DeleteBandingRequest"
-              (\ o ->
-                 DeleteBandingRequest' <$> (o .:? "bandedRangeId"))
-
-instance ToJSON DeleteBandingRequest where
-        toJSON DeleteBandingRequest'{..}
-          = object
-              (catMaybes
-                 [("bandedRangeId" .=) <$> _dbrBandedRangeId])
-
--- | A single kind of update to apply to a spreadsheet.
---
--- /See:/ 'request'' smart constructor.
-data Request' = Request''
-    { _reqAddFilterView                :: !(Maybe AddFilterViewRequest)
-    , _reqDeleteProtectedRange         :: !(Maybe DeleteProtectedRangeRequest)
-    , _reqUpdateProtectedRange         :: !(Maybe UpdateProtectedRangeRequest)
-    , _reqUpdateCells                  :: !(Maybe UpdateCellsRequest)
-    , _reqDuplicateFilterView          :: !(Maybe DuplicateFilterViewRequest)
-    , _reqAddConditionalFormatRule     :: !(Maybe AddConditionalFormatRuleRequest)
-    , _reqSortRange                    :: !(Maybe SortRangeRequest)
-    , _reqUpdateNamedRange             :: !(Maybe UpdateNamedRangeRequest)
-    , _reqDeleteNamedRange             :: !(Maybe DeleteNamedRangeRequest)
-    , _reqInsertRange                  :: !(Maybe InsertRangeRequest)
-    , _reqDeleteBanding                :: !(Maybe DeleteBandingRequest)
-    , _reqUpdateBanding                :: !(Maybe UpdateBandingRequest)
-    , _reqClearBasicFilter             :: !(Maybe ClearBasicFilterRequest)
-    , _reqAppendCells                  :: !(Maybe AppendCellsRequest)
-    , _reqPasteData                    :: !(Maybe PasteDataRequest)
-    , _reqUpdateEmbeddedObjectPosition :: !(Maybe UpdateEmbeddedObjectPositionRequest)
-    , _reqDeleteRange                  :: !(Maybe DeleteRangeRequest)
-    , _reqCopyPaste                    :: !(Maybe CopyPasteRequest)
-    , _reqAutoResizeDimensions         :: !(Maybe AutoResizeDimensionsRequest)
-    , _reqAddSheet                     :: !(Maybe AddSheetRequest)
-    , _reqFindReplace                  :: !(Maybe FindReplaceRequest)
-    , _reqDeleteDimension              :: !(Maybe DeleteDimensionRequest)
-    , _reqCutPaste                     :: !(Maybe CutPasteRequest)
-    , _reqMoveDimension                :: !(Maybe MoveDimensionRequest)
-    , _reqRepeatCell                   :: !(Maybe RepeatCellRequest)
-    , _reqAddProtectedRange            :: !(Maybe AddProtectedRangeRequest)
-    , _reqUpdateFilterView             :: !(Maybe UpdateFilterViewRequest)
-    , _reqDeleteFilterView             :: !(Maybe DeleteFilterViewRequest)
-    , _reqInsertDimension              :: !(Maybe InsertDimensionRequest)
-    , _reqUpdateSheetProperties        :: !(Maybe UpdateSheetPropertiesRequest)
-    , _reqDeleteConditionalFormatRule  :: !(Maybe DeleteConditionalFormatRuleRequest)
-    , _reqUpdateConditionalFormatRule  :: !(Maybe UpdateConditionalFormatRuleRequest)
-    , _reqDeleteEmbeddedObject         :: !(Maybe DeleteEmbeddedObjectRequest)
-    , _reqMergeCells                   :: !(Maybe MergeCellsRequest)
-    , _reqAddNamedRange                :: !(Maybe AddNamedRangeRequest)
-    , _reqAddChart                     :: !(Maybe AddChartRequest)
-    , _reqAddBanding                   :: !(Maybe AddBandingRequest)
-    , _reqDuplicateSheet               :: !(Maybe DuplicateSheetRequest)
-    , _reqAutoFill                     :: !(Maybe AutoFillRequest)
-    , _reqUpdateDimensionProperties    :: !(Maybe UpdateDimensionPropertiesRequest)
-    , _reqUpdateChartSpec              :: !(Maybe UpdateChartSpecRequest)
-    , _reqSetBasicFilter               :: !(Maybe SetBasicFilterRequest)
-    , _reqTextToColumns                :: !(Maybe TextToColumnsRequest)
-    , _reqUpdateSpreadsheetProperties  :: !(Maybe UpdateSpreadsheetPropertiesRequest)
-    , _reqDeleteSheet                  :: !(Maybe DeleteSheetRequest)
-    , _reqUnmergeCells                 :: !(Maybe UnmergeCellsRequest)
-    , _reqUpdateBOrders                :: !(Maybe UpdateBOrdersRequest)
-    , _reqAppendDimension              :: !(Maybe AppendDimensionRequest)
-    , _reqSetDataValidation            :: !(Maybe SetDataValidationRequest)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Request' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'reqAddFilterView'
---
--- * 'reqDeleteProtectedRange'
---
--- * 'reqUpdateProtectedRange'
---
--- * 'reqUpdateCells'
---
--- * 'reqDuplicateFilterView'
---
--- * 'reqAddConditionalFormatRule'
---
--- * 'reqSortRange'
---
--- * 'reqUpdateNamedRange'
---
--- * 'reqDeleteNamedRange'
---
--- * 'reqInsertRange'
---
--- * 'reqDeleteBanding'
---
--- * 'reqUpdateBanding'
---
--- * 'reqClearBasicFilter'
---
--- * 'reqAppendCells'
---
--- * 'reqPasteData'
---
--- * 'reqUpdateEmbeddedObjectPosition'
---
--- * 'reqDeleteRange'
---
--- * 'reqCopyPaste'
---
--- * 'reqAutoResizeDimensions'
---
--- * 'reqAddSheet'
---
--- * 'reqFindReplace'
---
--- * 'reqDeleteDimension'
---
--- * 'reqCutPaste'
---
--- * 'reqMoveDimension'
---
--- * 'reqRepeatCell'
---
--- * 'reqAddProtectedRange'
---
--- * 'reqUpdateFilterView'
---
--- * 'reqDeleteFilterView'
---
--- * 'reqInsertDimension'
---
--- * 'reqUpdateSheetProperties'
---
--- * 'reqDeleteConditionalFormatRule'
---
--- * 'reqUpdateConditionalFormatRule'
---
--- * 'reqDeleteEmbeddedObject'
---
--- * 'reqMergeCells'
---
--- * 'reqAddNamedRange'
---
--- * 'reqAddChart'
---
--- * 'reqAddBanding'
---
--- * 'reqDuplicateSheet'
---
--- * 'reqAutoFill'
---
--- * 'reqUpdateDimensionProperties'
---
--- * 'reqUpdateChartSpec'
---
--- * 'reqSetBasicFilter'
---
--- * 'reqTextToColumns'
---
--- * 'reqUpdateSpreadsheetProperties'
---
--- * 'reqDeleteSheet'
---
--- * 'reqUnmergeCells'
---
--- * 'reqUpdateBOrders'
---
--- * 'reqAppendDimension'
---
--- * 'reqSetDataValidation'
-request'
-    :: Request'
-request' =
-    Request''
-    { _reqAddFilterView = Nothing
-    , _reqDeleteProtectedRange = Nothing
-    , _reqUpdateProtectedRange = Nothing
-    , _reqUpdateCells = Nothing
-    , _reqDuplicateFilterView = Nothing
-    , _reqAddConditionalFormatRule = Nothing
-    , _reqSortRange = Nothing
-    , _reqUpdateNamedRange = Nothing
-    , _reqDeleteNamedRange = Nothing
-    , _reqInsertRange = Nothing
-    , _reqDeleteBanding = Nothing
-    , _reqUpdateBanding = Nothing
-    , _reqClearBasicFilter = Nothing
-    , _reqAppendCells = Nothing
-    , _reqPasteData = Nothing
-    , _reqUpdateEmbeddedObjectPosition = Nothing
-    , _reqDeleteRange = Nothing
-    , _reqCopyPaste = Nothing
-    , _reqAutoResizeDimensions = Nothing
-    , _reqAddSheet = Nothing
-    , _reqFindReplace = Nothing
-    , _reqDeleteDimension = Nothing
-    , _reqCutPaste = Nothing
-    , _reqMoveDimension = Nothing
-    , _reqRepeatCell = Nothing
-    , _reqAddProtectedRange = Nothing
-    , _reqUpdateFilterView = Nothing
-    , _reqDeleteFilterView = Nothing
-    , _reqInsertDimension = Nothing
-    , _reqUpdateSheetProperties = Nothing
-    , _reqDeleteConditionalFormatRule = Nothing
-    , _reqUpdateConditionalFormatRule = Nothing
-    , _reqDeleteEmbeddedObject = Nothing
-    , _reqMergeCells = Nothing
-    , _reqAddNamedRange = Nothing
-    , _reqAddChart = Nothing
-    , _reqAddBanding = Nothing
-    , _reqDuplicateSheet = Nothing
-    , _reqAutoFill = Nothing
-    , _reqUpdateDimensionProperties = Nothing
-    , _reqUpdateChartSpec = Nothing
-    , _reqSetBasicFilter = Nothing
-    , _reqTextToColumns = Nothing
-    , _reqUpdateSpreadsheetProperties = Nothing
-    , _reqDeleteSheet = Nothing
-    , _reqUnmergeCells = Nothing
-    , _reqUpdateBOrders = Nothing
-    , _reqAppendDimension = Nothing
-    , _reqSetDataValidation = Nothing
-    }
-
--- | Adds a filter view.
-reqAddFilterView :: Lens' Request' (Maybe AddFilterViewRequest)
-reqAddFilterView
-  = lens _reqAddFilterView
-      (\ s a -> s{_reqAddFilterView = a})
-
--- | Deletes a protected range.
-reqDeleteProtectedRange :: Lens' Request' (Maybe DeleteProtectedRangeRequest)
-reqDeleteProtectedRange
-  = lens _reqDeleteProtectedRange
-      (\ s a -> s{_reqDeleteProtectedRange = a})
-
--- | Updates a protected range.
-reqUpdateProtectedRange :: Lens' Request' (Maybe UpdateProtectedRangeRequest)
-reqUpdateProtectedRange
-  = lens _reqUpdateProtectedRange
-      (\ s a -> s{_reqUpdateProtectedRange = a})
-
--- | Updates many cells at once.
-reqUpdateCells :: Lens' Request' (Maybe UpdateCellsRequest)
-reqUpdateCells
-  = lens _reqUpdateCells
-      (\ s a -> s{_reqUpdateCells = a})
-
--- | Duplicates a filter view.
-reqDuplicateFilterView :: Lens' Request' (Maybe DuplicateFilterViewRequest)
-reqDuplicateFilterView
-  = lens _reqDuplicateFilterView
-      (\ s a -> s{_reqDuplicateFilterView = a})
-
--- | Adds a new conditional format rule.
-reqAddConditionalFormatRule :: Lens' Request' (Maybe AddConditionalFormatRuleRequest)
-reqAddConditionalFormatRule
-  = lens _reqAddConditionalFormatRule
-      (\ s a -> s{_reqAddConditionalFormatRule = a})
-
--- | Sorts data in a range.
-reqSortRange :: Lens' Request' (Maybe SortRangeRequest)
-reqSortRange
-  = lens _reqSortRange (\ s a -> s{_reqSortRange = a})
-
--- | Updates a named range.
-reqUpdateNamedRange :: Lens' Request' (Maybe UpdateNamedRangeRequest)
-reqUpdateNamedRange
-  = lens _reqUpdateNamedRange
-      (\ s a -> s{_reqUpdateNamedRange = a})
-
--- | Deletes a named range.
-reqDeleteNamedRange :: Lens' Request' (Maybe DeleteNamedRangeRequest)
-reqDeleteNamedRange
-  = lens _reqDeleteNamedRange
-      (\ s a -> s{_reqDeleteNamedRange = a})
-
--- | Inserts new cells in a sheet, shifting the existing cells.
-reqInsertRange :: Lens' Request' (Maybe InsertRangeRequest)
-reqInsertRange
-  = lens _reqInsertRange
-      (\ s a -> s{_reqInsertRange = a})
-
--- | Removes a banded range
-reqDeleteBanding :: Lens' Request' (Maybe DeleteBandingRequest)
-reqDeleteBanding
-  = lens _reqDeleteBanding
-      (\ s a -> s{_reqDeleteBanding = a})
-
--- | Updates a banded range
-reqUpdateBanding :: Lens' Request' (Maybe UpdateBandingRequest)
-reqUpdateBanding
-  = lens _reqUpdateBanding
-      (\ s a -> s{_reqUpdateBanding = a})
-
--- | Clears the basic filter on a sheet.
-reqClearBasicFilter :: Lens' Request' (Maybe ClearBasicFilterRequest)
-reqClearBasicFilter
-  = lens _reqClearBasicFilter
-      (\ s a -> s{_reqClearBasicFilter = a})
-
--- | Appends cells after the last row with data in a sheet.
-reqAppendCells :: Lens' Request' (Maybe AppendCellsRequest)
-reqAppendCells
-  = lens _reqAppendCells
-      (\ s a -> s{_reqAppendCells = a})
-
--- | Pastes data (HTML or delimited) into a sheet.
-reqPasteData :: Lens' Request' (Maybe PasteDataRequest)
-reqPasteData
-  = lens _reqPasteData (\ s a -> s{_reqPasteData = a})
-
--- | Updates an embedded object\'s (e.g. chart, image) position.
-reqUpdateEmbeddedObjectPosition :: Lens' Request' (Maybe UpdateEmbeddedObjectPositionRequest)
-reqUpdateEmbeddedObjectPosition
-  = lens _reqUpdateEmbeddedObjectPosition
-      (\ s a -> s{_reqUpdateEmbeddedObjectPosition = a})
-
--- | Deletes a range of cells from a sheet, shifting the remaining cells.
-reqDeleteRange :: Lens' Request' (Maybe DeleteRangeRequest)
-reqDeleteRange
-  = lens _reqDeleteRange
-      (\ s a -> s{_reqDeleteRange = a})
-
--- | Copies data from one area and pastes it to another.
-reqCopyPaste :: Lens' Request' (Maybe CopyPasteRequest)
-reqCopyPaste
-  = lens _reqCopyPaste (\ s a -> s{_reqCopyPaste = a})
-
--- | Automatically resizes one or more dimensions based on the contents of
--- the cells in that dimension.
-reqAutoResizeDimensions :: Lens' Request' (Maybe AutoResizeDimensionsRequest)
-reqAutoResizeDimensions
-  = lens _reqAutoResizeDimensions
-      (\ s a -> s{_reqAutoResizeDimensions = a})
-
--- | Adds a sheet.
-reqAddSheet :: Lens' Request' (Maybe AddSheetRequest)
-reqAddSheet
-  = lens _reqAddSheet (\ s a -> s{_reqAddSheet = a})
-
--- | Finds and replaces occurrences of some text with other text.
-reqFindReplace :: Lens' Request' (Maybe FindReplaceRequest)
-reqFindReplace
-  = lens _reqFindReplace
-      (\ s a -> s{_reqFindReplace = a})
-
--- | Deletes rows or columns in a sheet.
-reqDeleteDimension :: Lens' Request' (Maybe DeleteDimensionRequest)
-reqDeleteDimension
-  = lens _reqDeleteDimension
-      (\ s a -> s{_reqDeleteDimension = a})
-
--- | Cuts data from one area and pastes it to another.
-reqCutPaste :: Lens' Request' (Maybe CutPasteRequest)
-reqCutPaste
-  = lens _reqCutPaste (\ s a -> s{_reqCutPaste = a})
-
--- | Moves rows or columns to another location in a sheet.
-reqMoveDimension :: Lens' Request' (Maybe MoveDimensionRequest)
-reqMoveDimension
-  = lens _reqMoveDimension
-      (\ s a -> s{_reqMoveDimension = a})
-
--- | Repeats a single cell across a range.
-reqRepeatCell :: Lens' Request' (Maybe RepeatCellRequest)
-reqRepeatCell
-  = lens _reqRepeatCell
-      (\ s a -> s{_reqRepeatCell = a})
-
--- | Adds a protected range.
-reqAddProtectedRange :: Lens' Request' (Maybe AddProtectedRangeRequest)
-reqAddProtectedRange
-  = lens _reqAddProtectedRange
-      (\ s a -> s{_reqAddProtectedRange = a})
-
--- | Updates the properties of a filter view.
-reqUpdateFilterView :: Lens' Request' (Maybe UpdateFilterViewRequest)
-reqUpdateFilterView
-  = lens _reqUpdateFilterView
-      (\ s a -> s{_reqUpdateFilterView = a})
-
--- | Deletes a filter view from a sheet.
-reqDeleteFilterView :: Lens' Request' (Maybe DeleteFilterViewRequest)
-reqDeleteFilterView
-  = lens _reqDeleteFilterView
-      (\ s a -> s{_reqDeleteFilterView = a})
-
--- | Inserts new rows or columns in a sheet.
-reqInsertDimension :: Lens' Request' (Maybe InsertDimensionRequest)
-reqInsertDimension
-  = lens _reqInsertDimension
-      (\ s a -> s{_reqInsertDimension = a})
-
--- | Updates a sheet\'s properties.
-reqUpdateSheetProperties :: Lens' Request' (Maybe UpdateSheetPropertiesRequest)
-reqUpdateSheetProperties
-  = lens _reqUpdateSheetProperties
-      (\ s a -> s{_reqUpdateSheetProperties = a})
-
--- | Deletes an existing conditional format rule.
-reqDeleteConditionalFormatRule :: Lens' Request' (Maybe DeleteConditionalFormatRuleRequest)
-reqDeleteConditionalFormatRule
-  = lens _reqDeleteConditionalFormatRule
-      (\ s a -> s{_reqDeleteConditionalFormatRule = a})
-
--- | Updates an existing conditional format rule.
-reqUpdateConditionalFormatRule :: Lens' Request' (Maybe UpdateConditionalFormatRuleRequest)
-reqUpdateConditionalFormatRule
-  = lens _reqUpdateConditionalFormatRule
-      (\ s a -> s{_reqUpdateConditionalFormatRule = a})
-
--- | Deletes an embedded object (e.g, chart, image) in a sheet.
-reqDeleteEmbeddedObject :: Lens' Request' (Maybe DeleteEmbeddedObjectRequest)
-reqDeleteEmbeddedObject
-  = lens _reqDeleteEmbeddedObject
-      (\ s a -> s{_reqDeleteEmbeddedObject = a})
-
--- | Merges cells together.
-reqMergeCells :: Lens' Request' (Maybe MergeCellsRequest)
-reqMergeCells
-  = lens _reqMergeCells
-      (\ s a -> s{_reqMergeCells = a})
-
--- | Adds a named range.
-reqAddNamedRange :: Lens' Request' (Maybe AddNamedRangeRequest)
-reqAddNamedRange
-  = lens _reqAddNamedRange
-      (\ s a -> s{_reqAddNamedRange = a})
-
--- | Adds a chart.
-reqAddChart :: Lens' Request' (Maybe AddChartRequest)
-reqAddChart
-  = lens _reqAddChart (\ s a -> s{_reqAddChart = a})
-
--- | Adds a new banded range
-reqAddBanding :: Lens' Request' (Maybe AddBandingRequest)
-reqAddBanding
-  = lens _reqAddBanding
-      (\ s a -> s{_reqAddBanding = a})
-
--- | Duplicates a sheet.
-reqDuplicateSheet :: Lens' Request' (Maybe DuplicateSheetRequest)
-reqDuplicateSheet
-  = lens _reqDuplicateSheet
-      (\ s a -> s{_reqDuplicateSheet = a})
-
--- | Automatically fills in more data based on existing data.
-reqAutoFill :: Lens' Request' (Maybe AutoFillRequest)
-reqAutoFill
-  = lens _reqAutoFill (\ s a -> s{_reqAutoFill = a})
-
--- | Updates dimensions\' properties.
-reqUpdateDimensionProperties :: Lens' Request' (Maybe UpdateDimensionPropertiesRequest)
-reqUpdateDimensionProperties
-  = lens _reqUpdateDimensionProperties
-      (\ s a -> s{_reqUpdateDimensionProperties = a})
-
--- | Updates a chart\'s specifications.
-reqUpdateChartSpec :: Lens' Request' (Maybe UpdateChartSpecRequest)
-reqUpdateChartSpec
-  = lens _reqUpdateChartSpec
-      (\ s a -> s{_reqUpdateChartSpec = a})
-
--- | Sets the basic filter on a sheet.
-reqSetBasicFilter :: Lens' Request' (Maybe SetBasicFilterRequest)
-reqSetBasicFilter
-  = lens _reqSetBasicFilter
-      (\ s a -> s{_reqSetBasicFilter = a})
-
--- | Converts a column of text into many columns of text.
-reqTextToColumns :: Lens' Request' (Maybe TextToColumnsRequest)
-reqTextToColumns
-  = lens _reqTextToColumns
-      (\ s a -> s{_reqTextToColumns = a})
-
--- | Updates the spreadsheet\'s properties.
-reqUpdateSpreadsheetProperties :: Lens' Request' (Maybe UpdateSpreadsheetPropertiesRequest)
-reqUpdateSpreadsheetProperties
-  = lens _reqUpdateSpreadsheetProperties
-      (\ s a -> s{_reqUpdateSpreadsheetProperties = a})
-
--- | Deletes a sheet.
-reqDeleteSheet :: Lens' Request' (Maybe DeleteSheetRequest)
-reqDeleteSheet
-  = lens _reqDeleteSheet
-      (\ s a -> s{_reqDeleteSheet = a})
-
--- | Unmerges merged cells.
-reqUnmergeCells :: Lens' Request' (Maybe UnmergeCellsRequest)
-reqUnmergeCells
-  = lens _reqUnmergeCells
-      (\ s a -> s{_reqUnmergeCells = a})
-
--- | Updates the borders in a range of cells.
-reqUpdateBOrders :: Lens' Request' (Maybe UpdateBOrdersRequest)
-reqUpdateBOrders
-  = lens _reqUpdateBOrders
-      (\ s a -> s{_reqUpdateBOrders = a})
-
--- | Appends dimensions to the end of a sheet.
-reqAppendDimension :: Lens' Request' (Maybe AppendDimensionRequest)
-reqAppendDimension
-  = lens _reqAppendDimension
-      (\ s a -> s{_reqAppendDimension = a})
-
--- | Sets data validation for one or more cells.
-reqSetDataValidation :: Lens' Request' (Maybe SetDataValidationRequest)
-reqSetDataValidation
-  = lens _reqSetDataValidation
-      (\ s a -> s{_reqSetDataValidation = a})
-
-instance FromJSON Request' where
-        parseJSON
-          = withObject "Request"
-              (\ o ->
-                 Request'' <$>
-                   (o .:? "addFilterView") <*>
-                     (o .:? "deleteProtectedRange")
-                     <*> (o .:? "updateProtectedRange")
-                     <*> (o .:? "updateCells")
-                     <*> (o .:? "duplicateFilterView")
-                     <*> (o .:? "addConditionalFormatRule")
-                     <*> (o .:? "sortRange")
-                     <*> (o .:? "updateNamedRange")
-                     <*> (o .:? "deleteNamedRange")
-                     <*> (o .:? "insertRange")
-                     <*> (o .:? "deleteBanding")
-                     <*> (o .:? "updateBanding")
-                     <*> (o .:? "clearBasicFilter")
-                     <*> (o .:? "appendCells")
-                     <*> (o .:? "pasteData")
-                     <*> (o .:? "updateEmbeddedObjectPosition")
-                     <*> (o .:? "deleteRange")
-                     <*> (o .:? "copyPaste")
-                     <*> (o .:? "autoResizeDimensions")
-                     <*> (o .:? "addSheet")
-                     <*> (o .:? "findReplace")
-                     <*> (o .:? "deleteDimension")
-                     <*> (o .:? "cutPaste")
-                     <*> (o .:? "moveDimension")
-                     <*> (o .:? "repeatCell")
-                     <*> (o .:? "addProtectedRange")
-                     <*> (o .:? "updateFilterView")
-                     <*> (o .:? "deleteFilterView")
-                     <*> (o .:? "insertDimension")
-                     <*> (o .:? "updateSheetProperties")
-                     <*> (o .:? "deleteConditionalFormatRule")
-                     <*> (o .:? "updateConditionalFormatRule")
-                     <*> (o .:? "deleteEmbeddedObject")
-                     <*> (o .:? "mergeCells")
-                     <*> (o .:? "addNamedRange")
-                     <*> (o .:? "addChart")
-                     <*> (o .:? "addBanding")
-                     <*> (o .:? "duplicateSheet")
-                     <*> (o .:? "autoFill")
-                     <*> (o .:? "updateDimensionProperties")
-                     <*> (o .:? "updateChartSpec")
-                     <*> (o .:? "setBasicFilter")
-                     <*> (o .:? "textToColumns")
-                     <*> (o .:? "updateSpreadsheetProperties")
-                     <*> (o .:? "deleteSheet")
-                     <*> (o .:? "unmergeCells")
-                     <*> (o .:? "updateBorders")
-                     <*> (o .:? "appendDimension")
-                     <*> (o .:? "setDataValidation"))
-
-instance ToJSON Request' where
-        toJSON Request''{..}
-          = object
-              (catMaybes
-                 [("addFilterView" .=) <$> _reqAddFilterView,
-                  ("deleteProtectedRange" .=) <$>
-                    _reqDeleteProtectedRange,
-                  ("updateProtectedRange" .=) <$>
-                    _reqUpdateProtectedRange,
-                  ("updateCells" .=) <$> _reqUpdateCells,
-                  ("duplicateFilterView" .=) <$>
-                    _reqDuplicateFilterView,
-                  ("addConditionalFormatRule" .=) <$>
-                    _reqAddConditionalFormatRule,
-                  ("sortRange" .=) <$> _reqSortRange,
-                  ("updateNamedRange" .=) <$> _reqUpdateNamedRange,
-                  ("deleteNamedRange" .=) <$> _reqDeleteNamedRange,
-                  ("insertRange" .=) <$> _reqInsertRange,
-                  ("deleteBanding" .=) <$> _reqDeleteBanding,
-                  ("updateBanding" .=) <$> _reqUpdateBanding,
-                  ("clearBasicFilter" .=) <$> _reqClearBasicFilter,
-                  ("appendCells" .=) <$> _reqAppendCells,
-                  ("pasteData" .=) <$> _reqPasteData,
-                  ("updateEmbeddedObjectPosition" .=) <$>
-                    _reqUpdateEmbeddedObjectPosition,
-                  ("deleteRange" .=) <$> _reqDeleteRange,
-                  ("copyPaste" .=) <$> _reqCopyPaste,
-                  ("autoResizeDimensions" .=) <$>
-                    _reqAutoResizeDimensions,
-                  ("addSheet" .=) <$> _reqAddSheet,
-                  ("findReplace" .=) <$> _reqFindReplace,
-                  ("deleteDimension" .=) <$> _reqDeleteDimension,
-                  ("cutPaste" .=) <$> _reqCutPaste,
-                  ("moveDimension" .=) <$> _reqMoveDimension,
-                  ("repeatCell" .=) <$> _reqRepeatCell,
-                  ("addProtectedRange" .=) <$> _reqAddProtectedRange,
-                  ("updateFilterView" .=) <$> _reqUpdateFilterView,
-                  ("deleteFilterView" .=) <$> _reqDeleteFilterView,
-                  ("insertDimension" .=) <$> _reqInsertDimension,
-                  ("updateSheetProperties" .=) <$>
-                    _reqUpdateSheetProperties,
-                  ("deleteConditionalFormatRule" .=) <$>
-                    _reqDeleteConditionalFormatRule,
-                  ("updateConditionalFormatRule" .=) <$>
-                    _reqUpdateConditionalFormatRule,
-                  ("deleteEmbeddedObject" .=) <$>
-                    _reqDeleteEmbeddedObject,
-                  ("mergeCells" .=) <$> _reqMergeCells,
-                  ("addNamedRange" .=) <$> _reqAddNamedRange,
-                  ("addChart" .=) <$> _reqAddChart,
-                  ("addBanding" .=) <$> _reqAddBanding,
-                  ("duplicateSheet" .=) <$> _reqDuplicateSheet,
-                  ("autoFill" .=) <$> _reqAutoFill,
-                  ("updateDimensionProperties" .=) <$>
-                    _reqUpdateDimensionProperties,
-                  ("updateChartSpec" .=) <$> _reqUpdateChartSpec,
-                  ("setBasicFilter" .=) <$> _reqSetBasicFilter,
-                  ("textToColumns" .=) <$> _reqTextToColumns,
-                  ("updateSpreadsheetProperties" .=) <$>
-                    _reqUpdateSpreadsheetProperties,
-                  ("deleteSheet" .=) <$> _reqDeleteSheet,
-                  ("unmergeCells" .=) <$> _reqUnmergeCells,
-                  ("updateBorders" .=) <$> _reqUpdateBOrders,
-                  ("appendDimension" .=) <$> _reqAppendDimension,
-                  ("setDataValidation" .=) <$> _reqSetDataValidation])
+    , _unrrFields     :: !(Maybe GFieldMask)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdateNamedRangeRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'unrrNamedRange'
+--
+-- * 'unrrFields'
+updateNamedRangeRequest
+    :: UpdateNamedRangeRequest
+updateNamedRangeRequest =
+    UpdateNamedRangeRequest'
+    { _unrrNamedRange = Nothing
+    , _unrrFields = Nothing
+    }
+
+-- | The named range to update with the new properties.
+unrrNamedRange :: Lens' UpdateNamedRangeRequest (Maybe NamedRange)
+unrrNamedRange
+  = lens _unrrNamedRange
+      (\ s a -> s{_unrrNamedRange = a})
+
+-- | The fields that should be updated. At least one field must be specified.
+-- The root \`namedRange\` is implied and should not be specified. A single
+-- \`\"*\"\` can be used as short-hand for listing every field.
+unrrFields :: Lens' UpdateNamedRangeRequest (Maybe GFieldMask)
+unrrFields
+  = lens _unrrFields (\ s a -> s{_unrrFields = a})
+
+instance FromJSON UpdateNamedRangeRequest where
+        parseJSON
+          = withObject "UpdateNamedRangeRequest"
+              (\ o ->
+                 UpdateNamedRangeRequest' <$>
+                   (o .:? "namedRange") <*> (o .:? "fields"))
+
+instance ToJSON UpdateNamedRangeRequest where
+        toJSON UpdateNamedRangeRequest'{..}
+          = object
+              (catMaybes
+                 [("namedRange" .=) <$> _unrrNamedRange,
+                  ("fields" .=) <$> _unrrFields])
+
+-- | The data included in a domain or series.
+--
+-- /See:/ 'chartData' smart constructor.
+newtype ChartData = ChartData'
+    { _cdSourceRange :: Maybe ChartSourceRange
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ChartData' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cdSourceRange'
+chartData
+    :: ChartData
+chartData =
+    ChartData'
+    { _cdSourceRange = Nothing
+    }
+
+-- | The source ranges of the data.
+cdSourceRange :: Lens' ChartData (Maybe ChartSourceRange)
+cdSourceRange
+  = lens _cdSourceRange
+      (\ s a -> s{_cdSourceRange = a})
+
+instance FromJSON ChartData where
+        parseJSON
+          = withObject "ChartData"
+              (\ o -> ChartData' <$> (o .:? "sourceRange"))
+
+instance ToJSON ChartData where
+        toJSON ChartData'{..}
+          = object
+              (catMaybes [("sourceRange" .=) <$> _cdSourceRange])
+
+-- | The request for clearing more than one range of values in a spreadsheet.
+--
+-- /See:/ 'batchClearValuesRequest' smart constructor.
+newtype BatchClearValuesRequest = BatchClearValuesRequest'
+    { _bcvrRanges :: Maybe [Text]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BatchClearValuesRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bcvrRanges'
+batchClearValuesRequest
+    :: BatchClearValuesRequest
+batchClearValuesRequest =
+    BatchClearValuesRequest'
+    { _bcvrRanges = Nothing
+    }
+
+-- | The ranges to clear, in A1 notation.
+bcvrRanges :: Lens' BatchClearValuesRequest [Text]
+bcvrRanges
+  = lens _bcvrRanges (\ s a -> s{_bcvrRanges = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON BatchClearValuesRequest where
+        parseJSON
+          = withObject "BatchClearValuesRequest"
+              (\ o ->
+                 BatchClearValuesRequest' <$>
+                   (o .:? "ranges" .!= mempty))
+
+instance ToJSON BatchClearValuesRequest where
+        toJSON BatchClearValuesRequest'{..}
+          = object (catMaybes [("ranges" .=) <$> _bcvrRanges])
+
+-- | The response from creating developer metadata.
+--
+-- /See:/ 'createDeveloperMetadataResponse' smart constructor.
+newtype CreateDeveloperMetadataResponse = CreateDeveloperMetadataResponse'
+    { _cdmrDeveloperMetadata :: Maybe DeveloperMetadata
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreateDeveloperMetadataResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cdmrDeveloperMetadata'
+createDeveloperMetadataResponse
+    :: CreateDeveloperMetadataResponse
+createDeveloperMetadataResponse =
+    CreateDeveloperMetadataResponse'
+    { _cdmrDeveloperMetadata = Nothing
+    }
+
+-- | The developer metadata that was created.
+cdmrDeveloperMetadata :: Lens' CreateDeveloperMetadataResponse (Maybe DeveloperMetadata)
+cdmrDeveloperMetadata
+  = lens _cdmrDeveloperMetadata
+      (\ s a -> s{_cdmrDeveloperMetadata = a})
+
+instance FromJSON CreateDeveloperMetadataResponse
+         where
+        parseJSON
+          = withObject "CreateDeveloperMetadataResponse"
+              (\ o ->
+                 CreateDeveloperMetadataResponse' <$>
+                   (o .:? "developerMetadata"))
+
+instance ToJSON CreateDeveloperMetadataResponse where
+        toJSON CreateDeveloperMetadataResponse'{..}
+          = object
+              (catMaybes
+                 [("developerMetadata" .=) <$>
+                    _cdmrDeveloperMetadata])
+
+-- | Allows you to organize the date-time values in a source data column into
+-- buckets based on selected parts of their date or time values. For
+-- example, consider a pivot table showing sales transactions by date:
+-- +----------+--------------+ | Date | SUM of Sales |
+-- +----------+--------------+ | 1\/1\/2017 | $621.14 | | 2\/3\/2017 |
+-- $708.84 | | 5\/8\/2017 | $326.84 | ... +----------+--------------+
+-- Applying a date-time group rule with a DateTimeRuleType of YEAR_MONTH
+-- results in the following pivot table. +--------------+--------------+ |
+-- Grouped Date | SUM of Sales | +--------------+--------------+ | 2017-Jan
+-- | $53,731.78 | | 2017-Feb | $83,475.32 | | 2017-Mar | $94,385.05 | ...
+-- +--------------+--------------+
+--
+-- /See:/ 'dateTimeRule' smart constructor.
+newtype DateTimeRule = DateTimeRule'
+    { _dtrType :: Maybe DateTimeRuleType
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DateTimeRule' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dtrType'
+dateTimeRule
+    :: DateTimeRule
+dateTimeRule =
+    DateTimeRule'
+    { _dtrType = Nothing
+    }
+
+-- | The type of date-time grouping to apply.
+dtrType :: Lens' DateTimeRule (Maybe DateTimeRuleType)
+dtrType = lens _dtrType (\ s a -> s{_dtrType = a})
+
+instance FromJSON DateTimeRule where
+        parseJSON
+          = withObject "DateTimeRule"
+              (\ o -> DateTimeRule' <$> (o .:? "type"))
+
+instance ToJSON DateTimeRule where
+        toJSON DateTimeRule'{..}
+          = object (catMaybes [("type" .=) <$> _dtrType])
+
+-- | Properties of a spreadsheet.
+--
+-- /See:/ 'spreadsheetProperties' smart constructor.
+data SpreadsheetProperties = SpreadsheetProperties'
+    { _spDefaultFormat                :: !(Maybe CellFormat)
+    , _spLocale                       :: !(Maybe Text)
+    , _spIterativeCalculationSettings :: !(Maybe IterativeCalculationSettings)
+    , _spAutoRecalc                   :: !(Maybe SpreadsheetPropertiesAutoRecalc)
+    , _spTitle                        :: !(Maybe Text)
+    , _spTimeZone                     :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SpreadsheetProperties' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'spDefaultFormat'
+--
+-- * 'spLocale'
+--
+-- * 'spIterativeCalculationSettings'
+--
+-- * 'spAutoRecalc'
+--
+-- * 'spTitle'
+--
+-- * 'spTimeZone'
+spreadsheetProperties
+    :: SpreadsheetProperties
+spreadsheetProperties =
+    SpreadsheetProperties'
+    { _spDefaultFormat = Nothing
+    , _spLocale = Nothing
+    , _spIterativeCalculationSettings = Nothing
+    , _spAutoRecalc = Nothing
+    , _spTitle = Nothing
+    , _spTimeZone = Nothing
+    }
+
+-- | The default format of all cells in the spreadsheet.
+-- CellData.effectiveFormat will not be set if the cell\'s format is equal
+-- to this default format. This field is read-only.
+spDefaultFormat :: Lens' SpreadsheetProperties (Maybe CellFormat)
+spDefaultFormat
+  = lens _spDefaultFormat
+      (\ s a -> s{_spDefaultFormat = a})
+
+-- | The locale of the spreadsheet in one of the following formats: * an ISO
+-- 639-1 language code such as \`en\` * an ISO 639-2 language code such as
+-- \`fil\`, if no 639-1 code exists * a combination of the ISO language
+-- code and country code, such as \`en_US\` Note: when updating this field,
+-- not all locales\/languages are supported.
+spLocale :: Lens' SpreadsheetProperties (Maybe Text)
+spLocale = lens _spLocale (\ s a -> s{_spLocale = a})
+
+-- | Determines whether and how circular references are resolved with
+-- iterative calculation. Absence of this field means that circular
+-- references will result in calculation errors.
+spIterativeCalculationSettings :: Lens' SpreadsheetProperties (Maybe IterativeCalculationSettings)
+spIterativeCalculationSettings
+  = lens _spIterativeCalculationSettings
+      (\ s a -> s{_spIterativeCalculationSettings = a})
+
+-- | The amount of time to wait before volatile functions are recalculated.
+spAutoRecalc :: Lens' SpreadsheetProperties (Maybe SpreadsheetPropertiesAutoRecalc)
+spAutoRecalc
+  = lens _spAutoRecalc (\ s a -> s{_spAutoRecalc = a})
+
+-- | The title of the spreadsheet.
+spTitle :: Lens' SpreadsheetProperties (Maybe Text)
+spTitle = lens _spTitle (\ s a -> s{_spTitle = a})
+
+-- | The time zone of the spreadsheet, in CLDR format such as
+-- \`America\/New_York\`. If the time zone isn\'t recognized, this may be a
+-- custom time zone such as \`GMT-07:00\`.
+spTimeZone :: Lens' SpreadsheetProperties (Maybe Text)
+spTimeZone
+  = lens _spTimeZone (\ s a -> s{_spTimeZone = a})
+
+instance FromJSON SpreadsheetProperties where
+        parseJSON
+          = withObject "SpreadsheetProperties"
+              (\ o ->
+                 SpreadsheetProperties' <$>
+                   (o .:? "defaultFormat") <*> (o .:? "locale") <*>
+                     (o .:? "iterativeCalculationSettings")
+                     <*> (o .:? "autoRecalc")
+                     <*> (o .:? "title")
+                     <*> (o .:? "timeZone"))
+
+instance ToJSON SpreadsheetProperties where
+        toJSON SpreadsheetProperties'{..}
+          = object
+              (catMaybes
+                 [("defaultFormat" .=) <$> _spDefaultFormat,
+                  ("locale" .=) <$> _spLocale,
+                  ("iterativeCalculationSettings" .=) <$>
+                    _spIterativeCalculationSettings,
+                  ("autoRecalc" .=) <$> _spAutoRecalc,
+                  ("title" .=) <$> _spTitle,
+                  ("timeZone" .=) <$> _spTimeZone])
+
+-- | The borders of the cell.
+--
+-- /See:/ 'bOrders' smart constructor.
+data BOrders = BOrders'
+    { _boBottom :: !(Maybe BOrder)
+    , _boLeft   :: !(Maybe BOrder)
+    , _boRight  :: !(Maybe BOrder)
+    , _boTop    :: !(Maybe BOrder)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BOrders' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'boBottom'
+--
+-- * 'boLeft'
+--
+-- * 'boRight'
+--
+-- * 'boTop'
+bOrders
+    :: BOrders
+bOrders =
+    BOrders'
+    { _boBottom = Nothing
+    , _boLeft = Nothing
+    , _boRight = Nothing
+    , _boTop = Nothing
+    }
+
+-- | The bottom border of the cell.
+boBottom :: Lens' BOrders (Maybe BOrder)
+boBottom = lens _boBottom (\ s a -> s{_boBottom = a})
+
+-- | The left border of the cell.
+boLeft :: Lens' BOrders (Maybe BOrder)
+boLeft = lens _boLeft (\ s a -> s{_boLeft = a})
+
+-- | The right border of the cell.
+boRight :: Lens' BOrders (Maybe BOrder)
+boRight = lens _boRight (\ s a -> s{_boRight = a})
+
+-- | The top border of the cell.
+boTop :: Lens' BOrders (Maybe BOrder)
+boTop = lens _boTop (\ s a -> s{_boTop = a})
+
+instance FromJSON BOrders where
+        parseJSON
+          = withObject "BOrders"
+              (\ o ->
+                 BOrders' <$>
+                   (o .:? "bottom") <*> (o .:? "left") <*>
+                     (o .:? "right")
+                     <*> (o .:? "top"))
+
+instance ToJSON BOrders where
+        toJSON BOrders'{..}
+          = object
+              (catMaybes
+                 [("bottom" .=) <$> _boBottom,
+                  ("left" .=) <$> _boLeft, ("right" .=) <$> _boRight,
+                  ("top" .=) <$> _boTop])
+
+-- | The request for clearing more than one range selected by a DataFilter in
+-- a spreadsheet.
+--
+-- /See:/ 'batchClearValuesByDataFilterRequest' smart constructor.
+newtype BatchClearValuesByDataFilterRequest = BatchClearValuesByDataFilterRequest'
+    { _bcvbdfrDataFilters :: Maybe [DataFilter]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BatchClearValuesByDataFilterRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bcvbdfrDataFilters'
+batchClearValuesByDataFilterRequest
+    :: BatchClearValuesByDataFilterRequest
+batchClearValuesByDataFilterRequest =
+    BatchClearValuesByDataFilterRequest'
+    { _bcvbdfrDataFilters = Nothing
+    }
+
+-- | The DataFilters used to determine which ranges to clear.
+bcvbdfrDataFilters :: Lens' BatchClearValuesByDataFilterRequest [DataFilter]
+bcvbdfrDataFilters
+  = lens _bcvbdfrDataFilters
+      (\ s a -> s{_bcvbdfrDataFilters = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON BatchClearValuesByDataFilterRequest
+         where
+        parseJSON
+          = withObject "BatchClearValuesByDataFilterRequest"
+              (\ o ->
+                 BatchClearValuesByDataFilterRequest' <$>
+                   (o .:? "dataFilters" .!= mempty))
+
+instance ToJSON BatchClearValuesByDataFilterRequest
+         where
+        toJSON BatchClearValuesByDataFilterRequest'{..}
+          = object
+              (catMaybes
+                 [("dataFilters" .=) <$> _bcvbdfrDataFilters])
+
+-- | A run of a text format. The format of this run continues until the start
+-- index of the next run. When updating, all fields must be set.
+--
+-- /See:/ 'textFormatRun' smart constructor.
+data TextFormatRun = TextFormatRun'
+    { _tfrFormat     :: !(Maybe TextFormat)
+    , _tfrStartIndex :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TextFormatRun' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tfrFormat'
+--
+-- * 'tfrStartIndex'
+textFormatRun
+    :: TextFormatRun
+textFormatRun =
+    TextFormatRun'
+    { _tfrFormat = Nothing
+    , _tfrStartIndex = Nothing
+    }
+
+-- | The format of this run. Absent values inherit the cell\'s format.
+tfrFormat :: Lens' TextFormatRun (Maybe TextFormat)
+tfrFormat
+  = lens _tfrFormat (\ s a -> s{_tfrFormat = a})
+
+-- | The character index where this run starts.
+tfrStartIndex :: Lens' TextFormatRun (Maybe Int32)
+tfrStartIndex
+  = lens _tfrStartIndex
+      (\ s a -> s{_tfrStartIndex = a})
+      . mapping _Coerce
+
+instance FromJSON TextFormatRun where
+        parseJSON
+          = withObject "TextFormatRun"
+              (\ o ->
+                 TextFormatRun' <$>
+                   (o .:? "format") <*> (o .:? "startIndex"))
+
+instance ToJSON TextFormatRun where
+        toJSON TextFormatRun'{..}
+          = object
+              (catMaybes
+                 [("format" .=) <$> _tfrFormat,
+                  ("startIndex" .=) <$> _tfrStartIndex])
+
+-- | Deletes a group over the specified range by decrementing the depth of
+-- the dimensions in the range. For example, assume the sheet has a depth-1
+-- group over B:E and a depth-2 group over C:D. Deleting a group over D:E
+-- leaves the sheet with a depth-1 group over B:D and a depth-2 group over
+-- C:C.
+--
+-- /See:/ 'deleteDimensionGroupRequest' smart constructor.
+newtype DeleteDimensionGroupRequest = DeleteDimensionGroupRequest'
+    { _ddgrRange :: Maybe DimensionRange
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteDimensionGroupRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ddgrRange'
+deleteDimensionGroupRequest
+    :: DeleteDimensionGroupRequest
+deleteDimensionGroupRequest =
+    DeleteDimensionGroupRequest'
+    { _ddgrRange = Nothing
+    }
+
+-- | The range of the group to be deleted.
+ddgrRange :: Lens' DeleteDimensionGroupRequest (Maybe DimensionRange)
+ddgrRange
+  = lens _ddgrRange (\ s a -> s{_ddgrRange = a})
+
+instance FromJSON DeleteDimensionGroupRequest where
+        parseJSON
+          = withObject "DeleteDimensionGroupRequest"
+              (\ o ->
+                 DeleteDimensionGroupRequest' <$> (o .:? "range"))
+
+instance ToJSON DeleteDimensionGroupRequest where
+        toJSON DeleteDimensionGroupRequest'{..}
+          = object (catMaybes [("range" .=) <$> _ddgrRange])
+
+-- | Updates the state of the specified group.
+--
+-- /See:/ 'updateDimensionGroupRequest' smart constructor.
+data UpdateDimensionGroupRequest = UpdateDimensionGroupRequest'
+    { _udgrDimensionGroup :: !(Maybe DimensionGroup)
+    , _udgrFields         :: !(Maybe GFieldMask)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdateDimensionGroupRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'udgrDimensionGroup'
+--
+-- * 'udgrFields'
+updateDimensionGroupRequest
+    :: UpdateDimensionGroupRequest
+updateDimensionGroupRequest =
+    UpdateDimensionGroupRequest'
+    { _udgrDimensionGroup = Nothing
+    , _udgrFields = Nothing
+    }
+
+-- | The group whose state should be updated. The range and depth of the
+-- group should specify a valid group on the sheet, and all other fields
+-- updated.
+udgrDimensionGroup :: Lens' UpdateDimensionGroupRequest (Maybe DimensionGroup)
+udgrDimensionGroup
+  = lens _udgrDimensionGroup
+      (\ s a -> s{_udgrDimensionGroup = a})
+
+-- | The fields that should be updated. At least one field must be specified.
+-- The root \`dimensionGroup\` is implied and should not be specified. A
+-- single \`\"*\"\` can be used as short-hand for listing every field.
+udgrFields :: Lens' UpdateDimensionGroupRequest (Maybe GFieldMask)
+udgrFields
+  = lens _udgrFields (\ s a -> s{_udgrFields = a})
+
+instance FromJSON UpdateDimensionGroupRequest where
+        parseJSON
+          = withObject "UpdateDimensionGroupRequest"
+              (\ o ->
+                 UpdateDimensionGroupRequest' <$>
+                   (o .:? "dimensionGroup") <*> (o .:? "fields"))
+
+instance ToJSON UpdateDimensionGroupRequest where
+        toJSON UpdateDimensionGroupRequest'{..}
+          = object
+              (catMaybes
+                 [("dimensionGroup" .=) <$> _udgrDimensionGroup,
+                  ("fields" .=) <$> _udgrFields])
+
+-- | Adds a new sheet. When a sheet is added at a given index, all subsequent
+-- sheets\' indexes are incremented. To add an object sheet, use
+-- AddChartRequest instead and specify EmbeddedObjectPosition.sheetId or
+-- EmbeddedObjectPosition.newSheet.
+--
+-- /See:/ 'addSheetRequest' smart constructor.
+newtype AddSheetRequest = AddSheetRequest'
+    { _asrProperties :: Maybe SheetProperties
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AddSheetRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'asrProperties'
+addSheetRequest
+    :: AddSheetRequest
+addSheetRequest =
+    AddSheetRequest'
+    { _asrProperties = Nothing
+    }
+
+-- | The properties the new sheet should have. All properties are optional.
+-- The sheetId field is optional; if one is not set, an id will be randomly
+-- generated. (It is an error to specify the ID of a sheet that already
+-- exists.)
+asrProperties :: Lens' AddSheetRequest (Maybe SheetProperties)
+asrProperties
+  = lens _asrProperties
+      (\ s a -> s{_asrProperties = a})
+
+instance FromJSON AddSheetRequest where
+        parseJSON
+          = withObject "AddSheetRequest"
+              (\ o -> AddSheetRequest' <$> (o .:? "properties"))
+
+instance ToJSON AddSheetRequest where
+        toJSON AddSheetRequest'{..}
+          = object
+              (catMaybes [("properties" .=) <$> _asrProperties])
+
+-- | A sort order associated with a specific column or row.
+--
+-- /See:/ 'sortSpec' smart constructor.
+data SortSpec = SortSpec'
+    { _ssSortOrder      :: !(Maybe SortSpecSortOrder)
+    , _ssDimensionIndex :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SortSpec' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ssSortOrder'
+--
+-- * 'ssDimensionIndex'
+sortSpec
+    :: SortSpec
+sortSpec =
+    SortSpec'
+    { _ssSortOrder = Nothing
+    , _ssDimensionIndex = Nothing
+    }
+
+-- | The order data should be sorted.
+ssSortOrder :: Lens' SortSpec (Maybe SortSpecSortOrder)
+ssSortOrder
+  = lens _ssSortOrder (\ s a -> s{_ssSortOrder = a})
+
+-- | The dimension the sort should be applied to.
+ssDimensionIndex :: Lens' SortSpec (Maybe Int32)
+ssDimensionIndex
+  = lens _ssDimensionIndex
+      (\ s a -> s{_ssDimensionIndex = a})
+      . mapping _Coerce
+
+instance FromJSON SortSpec where
+        parseJSON
+          = withObject "SortSpec"
+              (\ o ->
+                 SortSpec' <$>
+                   (o .:? "sortOrder") <*> (o .:? "dimensionIndex"))
+
+instance ToJSON SortSpec where
+        toJSON SortSpec'{..}
+          = object
+              (catMaybes
+                 [("sortOrder" .=) <$> _ssSortOrder,
+                  ("dimensionIndex" .=) <$> _ssDimensionIndex])
+
+-- | A group over an interval of rows or columns on a sheet, which can
+-- contain or be contained within other groups. A group can be collapsed or
+-- expanded as a unit on the sheet.
+--
+-- /See:/ 'dimensionGroup' smart constructor.
+data DimensionGroup = DimensionGroup'
+    { _dgCollapsed :: !(Maybe Bool)
+    , _dgRange     :: !(Maybe DimensionRange)
+    , _dgDepth     :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DimensionGroup' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dgCollapsed'
+--
+-- * 'dgRange'
+--
+-- * 'dgDepth'
+dimensionGroup
+    :: DimensionGroup
+dimensionGroup =
+    DimensionGroup'
+    { _dgCollapsed = Nothing
+    , _dgRange = Nothing
+    , _dgDepth = Nothing
+    }
+
+-- | This field is true if this group is collapsed. A collapsed group remains
+-- collapsed if an overlapping group at a shallower depth is expanded. A
+-- true value does not imply that all dimensions within the group are
+-- hidden, since a dimension\'s visibility can change independently from
+-- this group property. However, when this property is updated, all
+-- dimensions within it are set to hidden if this field is true, or set to
+-- visible if this field is false.
+dgCollapsed :: Lens' DimensionGroup (Maybe Bool)
+dgCollapsed
+  = lens _dgCollapsed (\ s a -> s{_dgCollapsed = a})
+
+-- | The range over which this group exists.
+dgRange :: Lens' DimensionGroup (Maybe DimensionRange)
+dgRange = lens _dgRange (\ s a -> s{_dgRange = a})
+
+-- | The depth of the group, representing how many groups have a range that
+-- wholly contains the range of this group.
+dgDepth :: Lens' DimensionGroup (Maybe Int32)
+dgDepth
+  = lens _dgDepth (\ s a -> s{_dgDepth = a}) .
+      mapping _Coerce
+
+instance FromJSON DimensionGroup where
+        parseJSON
+          = withObject "DimensionGroup"
+              (\ o ->
+                 DimensionGroup' <$>
+                   (o .:? "collapsed") <*> (o .:? "range") <*>
+                     (o .:? "depth"))
+
+instance ToJSON DimensionGroup where
+        toJSON DimensionGroup'{..}
+          = object
+              (catMaybes
+                 [("collapsed" .=) <$> _dgCollapsed,
+                  ("range" .=) <$> _dgRange,
+                  ("depth" .=) <$> _dgDepth])
+
+-- | Copies data from the source to the destination.
+--
+-- /See:/ 'copyPasteRequest' smart constructor.
+data CopyPasteRequest = CopyPasteRequest'
+    { _cprDestination      :: !(Maybe GridRange)
+    , _cprSource           :: !(Maybe GridRange)
+    , _cprPasteOrientation :: !(Maybe CopyPasteRequestPasteOrientation)
+    , _cprPasteType        :: !(Maybe CopyPasteRequestPasteType)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CopyPasteRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cprDestination'
+--
+-- * 'cprSource'
+--
+-- * 'cprPasteOrientation'
+--
+-- * 'cprPasteType'
+copyPasteRequest
+    :: CopyPasteRequest
+copyPasteRequest =
+    CopyPasteRequest'
+    { _cprDestination = Nothing
+    , _cprSource = Nothing
+    , _cprPasteOrientation = Nothing
+    , _cprPasteType = Nothing
+    }
+
+-- | The location to paste to. If the range covers a span that\'s a multiple
+-- of the source\'s height or width, then the data will be repeated to fill
+-- in the destination range. If the range is smaller than the source range,
+-- the entire source data will still be copied (beyond the end of the
+-- destination range).
+cprDestination :: Lens' CopyPasteRequest (Maybe GridRange)
+cprDestination
+  = lens _cprDestination
+      (\ s a -> s{_cprDestination = a})
+
+-- | The source range to copy.
+cprSource :: Lens' CopyPasteRequest (Maybe GridRange)
+cprSource
+  = lens _cprSource (\ s a -> s{_cprSource = a})
+
+-- | How that data should be oriented when pasting.
+cprPasteOrientation :: Lens' CopyPasteRequest (Maybe CopyPasteRequestPasteOrientation)
+cprPasteOrientation
+  = lens _cprPasteOrientation
+      (\ s a -> s{_cprPasteOrientation = a})
+
+-- | What kind of data to paste.
+cprPasteType :: Lens' CopyPasteRequest (Maybe CopyPasteRequestPasteType)
+cprPasteType
+  = lens _cprPasteType (\ s a -> s{_cprPasteType = a})
+
+instance FromJSON CopyPasteRequest where
+        parseJSON
+          = withObject "CopyPasteRequest"
+              (\ o ->
+                 CopyPasteRequest' <$>
+                   (o .:? "destination") <*> (o .:? "source") <*>
+                     (o .:? "pasteOrientation")
+                     <*> (o .:? "pasteType"))
+
+instance ToJSON CopyPasteRequest where
+        toJSON CopyPasteRequest'{..}
+          = object
+              (catMaybes
+                 [("destination" .=) <$> _cprDestination,
+                  ("source" .=) <$> _cprSource,
+                  ("pasteOrientation" .=) <$> _cprPasteOrientation,
+                  ("pasteType" .=) <$> _cprPasteType])
+
+-- | A range on a sheet. All indexes are zero-based. Indexes are half open,
+-- e.g the start index is inclusive and the end index is exclusive --
+-- [start_index, end_index). Missing indexes indicate the range is
+-- unbounded on that side. For example, if \`\"Sheet1\"\` is sheet ID 0,
+-- then: \`Sheet1!A1:A1 == sheet_id: 0, start_row_index: 0, end_row_index:
+-- 1, start_column_index: 0, end_column_index: 1\` \`Sheet1!A3:B4 ==
+-- sheet_id: 0, start_row_index: 2, end_row_index: 4, start_column_index:
+-- 0, end_column_index: 2\` \`Sheet1!A:B == sheet_id: 0,
+-- start_column_index: 0, end_column_index: 2\` \`Sheet1!A5:B == sheet_id:
+-- 0, start_row_index: 4, start_column_index: 0, end_column_index: 2\`
+-- \`Sheet1 == sheet_id:0\` The start index must always be less than or
+-- equal to the end index. If the start index equals the end index, then
+-- the range is empty. Empty ranges are typically not meaningful and are
+-- usually rendered in the UI as \`#REF!\`.
+--
+-- /See:/ 'gridRange' smart constructor.
+data GridRange = GridRange'
+    { _grEndColumnIndex   :: !(Maybe (Textual Int32))
+    , _grStartColumnIndex :: !(Maybe (Textual Int32))
+    , _grEndRowIndex      :: !(Maybe (Textual Int32))
+    , _grStartRowIndex    :: !(Maybe (Textual Int32))
+    , _grSheetId          :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GridRange' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'grEndColumnIndex'
+--
+-- * 'grStartColumnIndex'
+--
+-- * 'grEndRowIndex'
+--
+-- * 'grStartRowIndex'
+--
+-- * 'grSheetId'
+gridRange
+    :: GridRange
+gridRange =
+    GridRange'
+    { _grEndColumnIndex = Nothing
+    , _grStartColumnIndex = Nothing
+    , _grEndRowIndex = Nothing
+    , _grStartRowIndex = Nothing
+    , _grSheetId = Nothing
+    }
+
+-- | The end column (exclusive) of the range, or not set if unbounded.
+grEndColumnIndex :: Lens' GridRange (Maybe Int32)
+grEndColumnIndex
+  = lens _grEndColumnIndex
+      (\ s a -> s{_grEndColumnIndex = a})
+      . mapping _Coerce
+
+-- | The start column (inclusive) of the range, or not set if unbounded.
+grStartColumnIndex :: Lens' GridRange (Maybe Int32)
+grStartColumnIndex
+  = lens _grStartColumnIndex
+      (\ s a -> s{_grStartColumnIndex = a})
+      . mapping _Coerce
+
+-- | The end row (exclusive) of the range, or not set if unbounded.
+grEndRowIndex :: Lens' GridRange (Maybe Int32)
+grEndRowIndex
+  = lens _grEndRowIndex
+      (\ s a -> s{_grEndRowIndex = a})
+      . mapping _Coerce
+
+-- | The start row (inclusive) of the range, or not set if unbounded.
+grStartRowIndex :: Lens' GridRange (Maybe Int32)
+grStartRowIndex
+  = lens _grStartRowIndex
+      (\ s a -> s{_grStartRowIndex = a})
+      . mapping _Coerce
+
+-- | The sheet this range is on.
+grSheetId :: Lens' GridRange (Maybe Int32)
+grSheetId
+  = lens _grSheetId (\ s a -> s{_grSheetId = a}) .
+      mapping _Coerce
+
+instance FromJSON GridRange where
+        parseJSON
+          = withObject "GridRange"
+              (\ o ->
+                 GridRange' <$>
+                   (o .:? "endColumnIndex") <*>
+                     (o .:? "startColumnIndex")
+                     <*> (o .:? "endRowIndex")
+                     <*> (o .:? "startRowIndex")
+                     <*> (o .:? "sheetId"))
+
+instance ToJSON GridRange where
+        toJSON GridRange'{..}
+          = object
+              (catMaybes
+                 [("endColumnIndex" .=) <$> _grEndColumnIndex,
+                  ("startColumnIndex" .=) <$> _grStartColumnIndex,
+                  ("endRowIndex" .=) <$> _grEndRowIndex,
+                  ("startRowIndex" .=) <$> _grStartRowIndex,
+                  ("sheetId" .=) <$> _grSheetId])
+
+-- | The result of adding a filter view.
+--
+-- /See:/ 'addFilterViewResponse' smart constructor.
+newtype AddFilterViewResponse = AddFilterViewResponse'
+    { _afvrFilter :: Maybe FilterView
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AddFilterViewResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'afvrFilter'
+addFilterViewResponse
+    :: AddFilterViewResponse
+addFilterViewResponse =
+    AddFilterViewResponse'
+    { _afvrFilter = Nothing
+    }
+
+-- | The newly added filter view.
+afvrFilter :: Lens' AddFilterViewResponse (Maybe FilterView)
+afvrFilter
+  = lens _afvrFilter (\ s a -> s{_afvrFilter = a})
+
+instance FromJSON AddFilterViewResponse where
+        parseJSON
+          = withObject "AddFilterViewResponse"
+              (\ o -> AddFilterViewResponse' <$> (o .:? "filter"))
+
+instance ToJSON AddFilterViewResponse where
+        toJSON AddFilterViewResponse'{..}
+          = object (catMaybes [("filter" .=) <$> _afvrFilter])
+
+-- | A condition that can evaluate to true or false. BooleanConditions are
+-- used by conditional formatting, data validation, and the criteria in
+-- filters.
+--
+-- /See:/ 'booleanCondition' smart constructor.
+data BooleanCondition = BooleanCondition'
+    { _bcValues :: !(Maybe [ConditionValue])
+    , _bcType   :: !(Maybe BooleanConditionType)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BooleanCondition' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bcValues'
+--
+-- * 'bcType'
+booleanCondition
+    :: BooleanCondition
+booleanCondition =
+    BooleanCondition'
+    { _bcValues = Nothing
+    , _bcType = Nothing
+    }
+
+-- | The values of the condition. The number of supported values depends on
+-- the condition type. Some support zero values, others one or two values,
+-- and ConditionType.ONE_OF_LIST supports an arbitrary number of values.
+bcValues :: Lens' BooleanCondition [ConditionValue]
+bcValues
+  = lens _bcValues (\ s a -> s{_bcValues = a}) .
+      _Default
+      . _Coerce
+
+-- | The type of condition.
+bcType :: Lens' BooleanCondition (Maybe BooleanConditionType)
+bcType = lens _bcType (\ s a -> s{_bcType = a})
+
+instance FromJSON BooleanCondition where
+        parseJSON
+          = withObject "BooleanCondition"
+              (\ o ->
+                 BooleanCondition' <$>
+                   (o .:? "values" .!= mempty) <*> (o .:? "type"))
+
+instance ToJSON BooleanCondition where
+        toJSON BooleanCondition'{..}
+          = object
+              (catMaybes
+                 [("values" .=) <$> _bcValues,
+                  ("type" .=) <$> _bcType])
+
+-- | Automatically resizes one or more dimensions based on the contents of
+-- the cells in that dimension.
+--
+-- /See:/ 'autoResizeDimensionsRequest' smart constructor.
+newtype AutoResizeDimensionsRequest = AutoResizeDimensionsRequest'
+    { _ardrDimensions :: Maybe DimensionRange
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AutoResizeDimensionsRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ardrDimensions'
+autoResizeDimensionsRequest
+    :: AutoResizeDimensionsRequest
+autoResizeDimensionsRequest =
+    AutoResizeDimensionsRequest'
+    { _ardrDimensions = Nothing
+    }
+
+-- | The dimensions to automatically resize.
+ardrDimensions :: Lens' AutoResizeDimensionsRequest (Maybe DimensionRange)
+ardrDimensions
+  = lens _ardrDimensions
+      (\ s a -> s{_ardrDimensions = a})
+
+instance FromJSON AutoResizeDimensionsRequest where
+        parseJSON
+          = withObject "AutoResizeDimensionsRequest"
+              (\ o ->
+                 AutoResizeDimensionsRequest' <$>
+                   (o .:? "dimensions"))
+
+instance ToJSON AutoResizeDimensionsRequest where
+        toJSON AutoResizeDimensionsRequest'{..}
+          = object
+              (catMaybes [("dimensions" .=) <$> _ardrDimensions])
+
+-- | A </chart/interactive/docs/gallery/bubblechart bubble chart>.
+--
+-- /See:/ 'bubbleChartSpec' smart constructor.
+data BubbleChartSpec = BubbleChartSpec'
+    { _bcsBubbleTextStyle     :: !(Maybe TextFormat)
+    , _bcsBubbleBOrderColor   :: !(Maybe Color)
+    , _bcsLegendPosition      :: !(Maybe BubbleChartSpecLegendPosition)
+    , _bcsDomain              :: !(Maybe ChartData)
+    , _bcsSeries              :: !(Maybe ChartData)
+    , _bcsBubbleLabels        :: !(Maybe ChartData)
+    , _bcsGroupIds            :: !(Maybe ChartData)
+    , _bcsBubbleMinRadiusSize :: !(Maybe (Textual Int32))
+    , _bcsBubbleMaxRadiusSize :: !(Maybe (Textual Int32))
+    , _bcsBubbleOpacity       :: !(Maybe (Textual Double))
+    , _bcsBubbleSizes         :: !(Maybe ChartData)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BubbleChartSpec' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bcsBubbleTextStyle'
+--
+-- * 'bcsBubbleBOrderColor'
+--
+-- * 'bcsLegendPosition'
+--
+-- * 'bcsDomain'
+--
+-- * 'bcsSeries'
+--
+-- * 'bcsBubbleLabels'
+--
+-- * 'bcsGroupIds'
+--
+-- * 'bcsBubbleMinRadiusSize'
+--
+-- * 'bcsBubbleMaxRadiusSize'
+--
+-- * 'bcsBubbleOpacity'
+--
+-- * 'bcsBubbleSizes'
+bubbleChartSpec
+    :: BubbleChartSpec
+bubbleChartSpec =
+    BubbleChartSpec'
+    { _bcsBubbleTextStyle = Nothing
+    , _bcsBubbleBOrderColor = Nothing
+    , _bcsLegendPosition = Nothing
+    , _bcsDomain = Nothing
+    , _bcsSeries = Nothing
+    , _bcsBubbleLabels = Nothing
+    , _bcsGroupIds = Nothing
+    , _bcsBubbleMinRadiusSize = Nothing
+    , _bcsBubbleMaxRadiusSize = Nothing
+    , _bcsBubbleOpacity = Nothing
+    , _bcsBubbleSizes = Nothing
+    }
+
+-- | The format of the text inside the bubbles. Underline and Strikethrough
+-- are not supported.
+bcsBubbleTextStyle :: Lens' BubbleChartSpec (Maybe TextFormat)
+bcsBubbleTextStyle
+  = lens _bcsBubbleTextStyle
+      (\ s a -> s{_bcsBubbleTextStyle = a})
+
+-- | The bubble border color.
+bcsBubbleBOrderColor :: Lens' BubbleChartSpec (Maybe Color)
+bcsBubbleBOrderColor
+  = lens _bcsBubbleBOrderColor
+      (\ s a -> s{_bcsBubbleBOrderColor = a})
+
+-- | Where the legend of the chart should be drawn.
+bcsLegendPosition :: Lens' BubbleChartSpec (Maybe BubbleChartSpecLegendPosition)
+bcsLegendPosition
+  = lens _bcsLegendPosition
+      (\ s a -> s{_bcsLegendPosition = a})
+
+-- | The data containing the bubble x-values. These values locate the bubbles
+-- in the chart horizontally.
+bcsDomain :: Lens' BubbleChartSpec (Maybe ChartData)
+bcsDomain
+  = lens _bcsDomain (\ s a -> s{_bcsDomain = a})
+
+-- | The data contianing the bubble y-values. These values locate the bubbles
+-- in the chart vertically.
+bcsSeries :: Lens' BubbleChartSpec (Maybe ChartData)
+bcsSeries
+  = lens _bcsSeries (\ s a -> s{_bcsSeries = a})
+
+-- | The data containing the bubble labels. These do not need to be unique.
+bcsBubbleLabels :: Lens' BubbleChartSpec (Maybe ChartData)
+bcsBubbleLabels
+  = lens _bcsBubbleLabels
+      (\ s a -> s{_bcsBubbleLabels = a})
+
+-- | The data containing the bubble group IDs. All bubbles with the same
+-- group ID are drawn in the same color. If bubble_sizes is specified then
+-- this field must also be specified but may contain blank values. This
+-- field is optional.
+bcsGroupIds :: Lens' BubbleChartSpec (Maybe ChartData)
+bcsGroupIds
+  = lens _bcsGroupIds (\ s a -> s{_bcsGroupIds = a})
+
+-- | The minimum radius size of the bubbles, in pixels. If specific, the
+-- field must be a positive value.
+bcsBubbleMinRadiusSize :: Lens' BubbleChartSpec (Maybe Int32)
+bcsBubbleMinRadiusSize
+  = lens _bcsBubbleMinRadiusSize
+      (\ s a -> s{_bcsBubbleMinRadiusSize = a})
+      . mapping _Coerce
+
+-- | The max radius size of the bubbles, in pixels. If specified, the field
+-- must be a positive value.
+bcsBubbleMaxRadiusSize :: Lens' BubbleChartSpec (Maybe Int32)
+bcsBubbleMaxRadiusSize
+  = lens _bcsBubbleMaxRadiusSize
+      (\ s a -> s{_bcsBubbleMaxRadiusSize = a})
+      . mapping _Coerce
+
+-- | The opacity of the bubbles between 0 and 1.0. 0 is fully transparent and
+-- 1 is fully opaque.
+bcsBubbleOpacity :: Lens' BubbleChartSpec (Maybe Double)
+bcsBubbleOpacity
+  = lens _bcsBubbleOpacity
+      (\ s a -> s{_bcsBubbleOpacity = a})
+      . mapping _Coerce
+
+-- | The data contianing the bubble sizes. Bubble sizes are used to draw the
+-- bubbles at different sizes relative to each other. If specified,
+-- group_ids must also be specified. This field is optional.
+bcsBubbleSizes :: Lens' BubbleChartSpec (Maybe ChartData)
+bcsBubbleSizes
+  = lens _bcsBubbleSizes
+      (\ s a -> s{_bcsBubbleSizes = a})
+
+instance FromJSON BubbleChartSpec where
+        parseJSON
+          = withObject "BubbleChartSpec"
+              (\ o ->
+                 BubbleChartSpec' <$>
+                   (o .:? "bubbleTextStyle") <*>
+                     (o .:? "bubbleBorderColor")
+                     <*> (o .:? "legendPosition")
+                     <*> (o .:? "domain")
+                     <*> (o .:? "series")
+                     <*> (o .:? "bubbleLabels")
+                     <*> (o .:? "groupIds")
+                     <*> (o .:? "bubbleMinRadiusSize")
+                     <*> (o .:? "bubbleMaxRadiusSize")
+                     <*> (o .:? "bubbleOpacity")
+                     <*> (o .:? "bubbleSizes"))
+
+instance ToJSON BubbleChartSpec where
+        toJSON BubbleChartSpec'{..}
+          = object
+              (catMaybes
+                 [("bubbleTextStyle" .=) <$> _bcsBubbleTextStyle,
+                  ("bubbleBorderColor" .=) <$> _bcsBubbleBOrderColor,
+                  ("legendPosition" .=) <$> _bcsLegendPosition,
+                  ("domain" .=) <$> _bcsDomain,
+                  ("series" .=) <$> _bcsSeries,
+                  ("bubbleLabels" .=) <$> _bcsBubbleLabels,
+                  ("groupIds" .=) <$> _bcsGroupIds,
+                  ("bubbleMinRadiusSize" .=) <$>
+                    _bcsBubbleMinRadiusSize,
+                  ("bubbleMaxRadiusSize" .=) <$>
+                    _bcsBubbleMaxRadiusSize,
+                  ("bubbleOpacity" .=) <$> _bcsBubbleOpacity,
+                  ("bubbleSizes" .=) <$> _bcsBubbleSizes])
+
+-- | Deletes a range of cells, shifting other cells into the deleted area.
+--
+-- /See:/ 'deleteRangeRequest' smart constructor.
+data DeleteRangeRequest = DeleteRangeRequest'
+    { _drrShiftDimension :: !(Maybe DeleteRangeRequestShiftDimension)
+    , _drrRange          :: !(Maybe GridRange)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteRangeRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'drrShiftDimension'
+--
+-- * 'drrRange'
+deleteRangeRequest
+    :: DeleteRangeRequest
+deleteRangeRequest =
+    DeleteRangeRequest'
+    { _drrShiftDimension = Nothing
+    , _drrRange = Nothing
+    }
+
+-- | The dimension from which deleted cells will be replaced with. If ROWS,
+-- existing cells will be shifted upward to replace the deleted cells. If
+-- COLUMNS, existing cells will be shifted left to replace the deleted
+-- cells.
+drrShiftDimension :: Lens' DeleteRangeRequest (Maybe DeleteRangeRequestShiftDimension)
+drrShiftDimension
+  = lens _drrShiftDimension
+      (\ s a -> s{_drrShiftDimension = a})
+
+-- | The range of cells to delete.
+drrRange :: Lens' DeleteRangeRequest (Maybe GridRange)
+drrRange = lens _drrRange (\ s a -> s{_drrRange = a})
+
+instance FromJSON DeleteRangeRequest where
+        parseJSON
+          = withObject "DeleteRangeRequest"
+              (\ o ->
+                 DeleteRangeRequest' <$>
+                   (o .:? "shiftDimension") <*> (o .:? "range"))
+
+instance ToJSON DeleteRangeRequest where
+        toJSON DeleteRangeRequest'{..}
+          = object
+              (catMaybes
+                 [("shiftDimension" .=) <$> _drrShiftDimension,
+                  ("range" .=) <$> _drrRange])
+
+-- | A sheet in a spreadsheet.
+--
+-- /See:/ 'sheet' smart constructor.
+data Sheet = Sheet'
+    { _sColumnGroups       :: !(Maybe [DimensionGroup])
+    , _sData               :: !(Maybe [GridData])
+    , _sMerges             :: !(Maybe [GridRange])
+    , _sRowGroups          :: !(Maybe [DimensionGroup])
+    , _sProtectedRanges    :: !(Maybe [ProtectedRange])
+    , _sBandedRanges       :: !(Maybe [BandedRange])
+    , _sCharts             :: !(Maybe [EmbeddedChart])
+    , _sBasicFilter        :: !(Maybe BasicFilter)
+    , _sDeveloperMetadata  :: !(Maybe [DeveloperMetadata])
+    , _sConditionalFormats :: !(Maybe [ConditionalFormatRule])
+    , _sFilterViews        :: !(Maybe [FilterView])
+    , _sProperties         :: !(Maybe SheetProperties)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Sheet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sColumnGroups'
+--
+-- * 'sData'
+--
+-- * 'sMerges'
+--
+-- * 'sRowGroups'
+--
+-- * 'sProtectedRanges'
+--
+-- * 'sBandedRanges'
+--
+-- * 'sCharts'
+--
+-- * 'sBasicFilter'
+--
+-- * 'sDeveloperMetadata'
+--
+-- * 'sConditionalFormats'
+--
+-- * 'sFilterViews'
+--
+-- * 'sProperties'
+sheet
+    :: Sheet
+sheet =
+    Sheet'
+    { _sColumnGroups = Nothing
+    , _sData = Nothing
+    , _sMerges = Nothing
+    , _sRowGroups = Nothing
+    , _sProtectedRanges = Nothing
+    , _sBandedRanges = Nothing
+    , _sCharts = Nothing
+    , _sBasicFilter = Nothing
+    , _sDeveloperMetadata = Nothing
+    , _sConditionalFormats = Nothing
+    , _sFilterViews = Nothing
+    , _sProperties = Nothing
+    }
+
+-- | All column groups on this sheet, ordered by increasing range start
+-- index, then by group depth.
+sColumnGroups :: Lens' Sheet [DimensionGroup]
+sColumnGroups
+  = lens _sColumnGroups
+      (\ s a -> s{_sColumnGroups = a})
+      . _Default
+      . _Coerce
+
+-- | Data in the grid, if this is a grid sheet. The number of GridData
+-- objects returned is dependent on the number of ranges requested on this
+-- sheet. For example, if this is representing \`Sheet1\`, and the
+-- spreadsheet was requested with ranges \`Sheet1!A1:C10\` and
+-- \`Sheet1!D15:E20\`, then the first GridData will have a
+-- startRow\/startColumn of \`0\`, while the second one will have
+-- \`startRow 14\` (zero-based row 15), and \`startColumn 3\` (zero-based
+-- column D).
+sData :: Lens' Sheet [GridData]
+sData
+  = lens _sData (\ s a -> s{_sData = a}) . _Default .
+      _Coerce
+
+-- | The ranges that are merged together.
+sMerges :: Lens' Sheet [GridRange]
+sMerges
+  = lens _sMerges (\ s a -> s{_sMerges = a}) . _Default
+      . _Coerce
+
+-- | All row groups on this sheet, ordered by increasing range start index,
+-- then by group depth.
+sRowGroups :: Lens' Sheet [DimensionGroup]
+sRowGroups
+  = lens _sRowGroups (\ s a -> s{_sRowGroups = a}) .
+      _Default
+      . _Coerce
+
+-- | The protected ranges in this sheet.
+sProtectedRanges :: Lens' Sheet [ProtectedRange]
+sProtectedRanges
+  = lens _sProtectedRanges
+      (\ s a -> s{_sProtectedRanges = a})
+      . _Default
+      . _Coerce
+
+-- | The banded (alternating colors) ranges on this sheet.
+sBandedRanges :: Lens' Sheet [BandedRange]
+sBandedRanges
+  = lens _sBandedRanges
+      (\ s a -> s{_sBandedRanges = a})
+      . _Default
+      . _Coerce
+
+-- | The specifications of every chart on this sheet.
+sCharts :: Lens' Sheet [EmbeddedChart]
+sCharts
+  = lens _sCharts (\ s a -> s{_sCharts = a}) . _Default
+      . _Coerce
+
+-- | The filter on this sheet, if any.
+sBasicFilter :: Lens' Sheet (Maybe BasicFilter)
+sBasicFilter
+  = lens _sBasicFilter (\ s a -> s{_sBasicFilter = a})
+
+-- | The developer metadata associated with a sheet.
+sDeveloperMetadata :: Lens' Sheet [DeveloperMetadata]
+sDeveloperMetadata
+  = lens _sDeveloperMetadata
+      (\ s a -> s{_sDeveloperMetadata = a})
+      . _Default
+      . _Coerce
+
+-- | The conditional format rules in this sheet.
+sConditionalFormats :: Lens' Sheet [ConditionalFormatRule]
+sConditionalFormats
+  = lens _sConditionalFormats
+      (\ s a -> s{_sConditionalFormats = a})
+      . _Default
+      . _Coerce
+
+-- | The filter views in this sheet.
+sFilterViews :: Lens' Sheet [FilterView]
+sFilterViews
+  = lens _sFilterViews (\ s a -> s{_sFilterViews = a})
+      . _Default
+      . _Coerce
+
+-- | The properties of the sheet.
+sProperties :: Lens' Sheet (Maybe SheetProperties)
+sProperties
+  = lens _sProperties (\ s a -> s{_sProperties = a})
+
+instance FromJSON Sheet where
+        parseJSON
+          = withObject "Sheet"
+              (\ o ->
+                 Sheet' <$>
+                   (o .:? "columnGroups" .!= mempty) <*>
+                     (o .:? "data" .!= mempty)
+                     <*> (o .:? "merges" .!= mempty)
+                     <*> (o .:? "rowGroups" .!= mempty)
+                     <*> (o .:? "protectedRanges" .!= mempty)
+                     <*> (o .:? "bandedRanges" .!= mempty)
+                     <*> (o .:? "charts" .!= mempty)
+                     <*> (o .:? "basicFilter")
+                     <*> (o .:? "developerMetadata" .!= mempty)
+                     <*> (o .:? "conditionalFormats" .!= mempty)
+                     <*> (o .:? "filterViews" .!= mempty)
+                     <*> (o .:? "properties"))
+
+instance ToJSON Sheet where
+        toJSON Sheet'{..}
+          = object
+              (catMaybes
+                 [("columnGroups" .=) <$> _sColumnGroups,
+                  ("data" .=) <$> _sData, ("merges" .=) <$> _sMerges,
+                  ("rowGroups" .=) <$> _sRowGroups,
+                  ("protectedRanges" .=) <$> _sProtectedRanges,
+                  ("bandedRanges" .=) <$> _sBandedRanges,
+                  ("charts" .=) <$> _sCharts,
+                  ("basicFilter" .=) <$> _sBasicFilter,
+                  ("developerMetadata" .=) <$> _sDeveloperMetadata,
+                  ("conditionalFormats" .=) <$> _sConditionalFormats,
+                  ("filterViews" .=) <$> _sFilterViews,
+                  ("properties" .=) <$> _sProperties])
+
+-- | A coordinate in a sheet. All indexes are zero-based.
+--
+-- /See:/ 'gridCoordinate' smart constructor.
+data GridCoordinate = GridCoordinate'
+    { _gcColumnIndex :: !(Maybe (Textual Int32))
+    , _gcRowIndex    :: !(Maybe (Textual Int32))
+    , _gcSheetId     :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GridCoordinate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gcColumnIndex'
+--
+-- * 'gcRowIndex'
+--
+-- * 'gcSheetId'
+gridCoordinate
+    :: GridCoordinate
+gridCoordinate =
+    GridCoordinate'
+    { _gcColumnIndex = Nothing
+    , _gcRowIndex = Nothing
+    , _gcSheetId = Nothing
+    }
+
+-- | The column index of the coordinate.
+gcColumnIndex :: Lens' GridCoordinate (Maybe Int32)
+gcColumnIndex
+  = lens _gcColumnIndex
+      (\ s a -> s{_gcColumnIndex = a})
+      . mapping _Coerce
+
+-- | The row index of the coordinate.
+gcRowIndex :: Lens' GridCoordinate (Maybe Int32)
+gcRowIndex
+  = lens _gcRowIndex (\ s a -> s{_gcRowIndex = a}) .
+      mapping _Coerce
+
+-- | The sheet this coordinate is on.
+gcSheetId :: Lens' GridCoordinate (Maybe Int32)
+gcSheetId
+  = lens _gcSheetId (\ s a -> s{_gcSheetId = a}) .
+      mapping _Coerce
+
+instance FromJSON GridCoordinate where
+        parseJSON
+          = withObject "GridCoordinate"
+              (\ o ->
+                 GridCoordinate' <$>
+                   (o .:? "columnIndex") <*> (o .:? "rowIndex") <*>
+                     (o .:? "sheetId"))
+
+instance ToJSON GridCoordinate where
+        toJSON GridCoordinate'{..}
+          = object
+              (catMaybes
+                 [("columnIndex" .=) <$> _gcColumnIndex,
+                  ("rowIndex" .=) <$> _gcRowIndex,
+                  ("sheetId" .=) <$> _gcSheetId])
+
+-- | The response when clearing a range of values in a spreadsheet.
+--
+-- /See:/ 'clearValuesResponse' smart constructor.
+data ClearValuesResponse = ClearValuesResponse'
+    { _cvrClearedRange  :: !(Maybe Text)
+    , _cvrSpreadsheetId :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ClearValuesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cvrClearedRange'
+--
+-- * 'cvrSpreadsheetId'
+clearValuesResponse
+    :: ClearValuesResponse
+clearValuesResponse =
+    ClearValuesResponse'
+    { _cvrClearedRange = Nothing
+    , _cvrSpreadsheetId = Nothing
+    }
+
+-- | The range (in A1 notation) that was cleared. (If the request was for an
+-- unbounded range or a ranger larger than the bounds of the sheet, this
+-- will be the actual range that was cleared, bounded to the sheet\'s
+-- limits.)
+cvrClearedRange :: Lens' ClearValuesResponse (Maybe Text)
+cvrClearedRange
+  = lens _cvrClearedRange
+      (\ s a -> s{_cvrClearedRange = a})
+
+-- | The spreadsheet the updates were applied to.
+cvrSpreadsheetId :: Lens' ClearValuesResponse (Maybe Text)
+cvrSpreadsheetId
+  = lens _cvrSpreadsheetId
+      (\ s a -> s{_cvrSpreadsheetId = a})
+
+instance FromJSON ClearValuesResponse where
+        parseJSON
+          = withObject "ClearValuesResponse"
+              (\ o ->
+                 ClearValuesResponse' <$>
+                   (o .:? "clearedRange") <*> (o .:? "spreadsheetId"))
+
+instance ToJSON ClearValuesResponse where
+        toJSON ClearValuesResponse'{..}
+          = object
+              (catMaybes
+                 [("clearedRange" .=) <$> _cvrClearedRange,
+                  ("spreadsheetId" .=) <$> _cvrSpreadsheetId])
+
+-- | Clears the basic filter, if any exists on the sheet.
+--
+-- /See:/ 'clearBasicFilterRequest' smart constructor.
+newtype ClearBasicFilterRequest = ClearBasicFilterRequest'
+    { _cbfrSheetId :: Maybe (Textual Int32)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ClearBasicFilterRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cbfrSheetId'
+clearBasicFilterRequest
+    :: ClearBasicFilterRequest
+clearBasicFilterRequest =
+    ClearBasicFilterRequest'
+    { _cbfrSheetId = Nothing
+    }
+
+-- | The sheet ID on which the basic filter should be cleared.
+cbfrSheetId :: Lens' ClearBasicFilterRequest (Maybe Int32)
+cbfrSheetId
+  = lens _cbfrSheetId (\ s a -> s{_cbfrSheetId = a}) .
+      mapping _Coerce
+
+instance FromJSON ClearBasicFilterRequest where
+        parseJSON
+          = withObject "ClearBasicFilterRequest"
+              (\ o ->
+                 ClearBasicFilterRequest' <$> (o .:? "sheetId"))
+
+instance ToJSON ClearBasicFilterRequest where
+        toJSON ClearBasicFilterRequest'{..}
+          = object
+              (catMaybes [("sheetId" .=) <$> _cbfrSheetId])
+
+-- | Update an embedded object\'s position (such as a moving or resizing a
+-- chart or image).
+--
+-- /See:/ 'updateEmbeddedObjectPositionRequest' smart constructor.
+data UpdateEmbeddedObjectPositionRequest = UpdateEmbeddedObjectPositionRequest'
+    { _ueoprNewPosition :: !(Maybe EmbeddedObjectPosition)
+    , _ueoprObjectId    :: !(Maybe (Textual Int32))
+    , _ueoprFields      :: !(Maybe GFieldMask)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdateEmbeddedObjectPositionRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ueoprNewPosition'
+--
+-- * 'ueoprObjectId'
+--
+-- * 'ueoprFields'
+updateEmbeddedObjectPositionRequest
+    :: UpdateEmbeddedObjectPositionRequest
+updateEmbeddedObjectPositionRequest =
+    UpdateEmbeddedObjectPositionRequest'
+    { _ueoprNewPosition = Nothing
+    , _ueoprObjectId = Nothing
+    , _ueoprFields = Nothing
+    }
+
+-- | An explicit position to move the embedded object to. If
+-- newPosition.sheetId is set, a new sheet with that ID will be created. If
+-- newPosition.newSheet is set to true, a new sheet will be created with an
+-- ID that will be chosen for you.
+ueoprNewPosition :: Lens' UpdateEmbeddedObjectPositionRequest (Maybe EmbeddedObjectPosition)
+ueoprNewPosition
+  = lens _ueoprNewPosition
+      (\ s a -> s{_ueoprNewPosition = a})
+
+-- | The ID of the object to moved.
+ueoprObjectId :: Lens' UpdateEmbeddedObjectPositionRequest (Maybe Int32)
+ueoprObjectId
+  = lens _ueoprObjectId
+      (\ s a -> s{_ueoprObjectId = a})
+      . mapping _Coerce
+
+-- | The fields of OverlayPosition that should be updated when setting a new
+-- position. Used only if newPosition.overlayPosition is set, in which case
+-- at least one field must be specified. The root
+-- \`newPosition.overlayPosition\` is implied and should not be specified.
+-- A single \`\"*\"\` can be used as short-hand for listing every field.
+ueoprFields :: Lens' UpdateEmbeddedObjectPositionRequest (Maybe GFieldMask)
+ueoprFields
+  = lens _ueoprFields (\ s a -> s{_ueoprFields = a})
+
+instance FromJSON UpdateEmbeddedObjectPositionRequest
+         where
+        parseJSON
+          = withObject "UpdateEmbeddedObjectPositionRequest"
+              (\ o ->
+                 UpdateEmbeddedObjectPositionRequest' <$>
+                   (o .:? "newPosition") <*> (o .:? "objectId") <*>
+                     (o .:? "fields"))
+
+instance ToJSON UpdateEmbeddedObjectPositionRequest
+         where
+        toJSON UpdateEmbeddedObjectPositionRequest'{..}
+          = object
+              (catMaybes
+                 [("newPosition" .=) <$> _ueoprNewPosition,
+                  ("objectId" .=) <$> _ueoprObjectId,
+                  ("fields" .=) <$> _ueoprFields])
+
+-- | A rule that may or may not match, depending on the condition.
+--
+-- /See:/ 'booleanRule' smart constructor.
+data BooleanRule = BooleanRule'
+    { _brFormat    :: !(Maybe CellFormat)
+    , _brCondition :: !(Maybe BooleanCondition)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BooleanRule' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'brFormat'
+--
+-- * 'brCondition'
+booleanRule
+    :: BooleanRule
+booleanRule =
+    BooleanRule'
+    { _brFormat = Nothing
+    , _brCondition = Nothing
+    }
+
+-- | The format to apply. Conditional formatting can only apply a subset of
+-- formatting: bold, italic, strikethrough, foreground color & background
+-- color.
+brFormat :: Lens' BooleanRule (Maybe CellFormat)
+brFormat = lens _brFormat (\ s a -> s{_brFormat = a})
+
+-- | The condition of the rule. If the condition evaluates to true, the
+-- format is applied.
+brCondition :: Lens' BooleanRule (Maybe BooleanCondition)
+brCondition
+  = lens _brCondition (\ s a -> s{_brCondition = a})
+
+instance FromJSON BooleanRule where
+        parseJSON
+          = withObject "BooleanRule"
+              (\ o ->
+                 BooleanRule' <$>
+                   (o .:? "format") <*> (o .:? "condition"))
+
+instance ToJSON BooleanRule where
+        toJSON BooleanRule'{..}
+          = object
+              (catMaybes
+                 [("format" .=) <$> _brFormat,
+                  ("condition" .=) <$> _brCondition])
+
+-- | The response when retrieving more than one range of values in a
+-- spreadsheet selected by DataFilters.
+--
+-- /See:/ 'batchGetValuesByDataFilterResponse' smart constructor.
+data BatchGetValuesByDataFilterResponse = BatchGetValuesByDataFilterResponse'
+    { _bgvbdfrSpreadsheetId :: !(Maybe Text)
+    , _bgvbdfrValueRanges   :: !(Maybe [MatchedValueRange])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BatchGetValuesByDataFilterResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bgvbdfrSpreadsheetId'
+--
+-- * 'bgvbdfrValueRanges'
+batchGetValuesByDataFilterResponse
+    :: BatchGetValuesByDataFilterResponse
+batchGetValuesByDataFilterResponse =
+    BatchGetValuesByDataFilterResponse'
+    { _bgvbdfrSpreadsheetId = Nothing
+    , _bgvbdfrValueRanges = Nothing
+    }
+
+-- | The ID of the spreadsheet the data was retrieved from.
+bgvbdfrSpreadsheetId :: Lens' BatchGetValuesByDataFilterResponse (Maybe Text)
+bgvbdfrSpreadsheetId
+  = lens _bgvbdfrSpreadsheetId
+      (\ s a -> s{_bgvbdfrSpreadsheetId = a})
+
+-- | The requested values with the list of data filters that matched them.
+bgvbdfrValueRanges :: Lens' BatchGetValuesByDataFilterResponse [MatchedValueRange]
+bgvbdfrValueRanges
+  = lens _bgvbdfrValueRanges
+      (\ s a -> s{_bgvbdfrValueRanges = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON BatchGetValuesByDataFilterResponse
+         where
+        parseJSON
+          = withObject "BatchGetValuesByDataFilterResponse"
+              (\ o ->
+                 BatchGetValuesByDataFilterResponse' <$>
+                   (o .:? "spreadsheetId") <*>
+                     (o .:? "valueRanges" .!= mempty))
+
+instance ToJSON BatchGetValuesByDataFilterResponse
+         where
+        toJSON BatchGetValuesByDataFilterResponse'{..}
+          = object
+              (catMaybes
+                 [("spreadsheetId" .=) <$> _bgvbdfrSpreadsheetId,
+                  ("valueRanges" .=) <$> _bgvbdfrValueRanges])
+
+-- | A combination of a source range and how to extend that source.
+--
+-- /See:/ 'sourceAndDestination' smart constructor.
+data SourceAndDestination = SourceAndDestination'
+    { _sadDimension  :: !(Maybe SourceAndDestinationDimension)
+    , _sadSource     :: !(Maybe GridRange)
+    , _sadFillLength :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SourceAndDestination' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sadDimension'
+--
+-- * 'sadSource'
+--
+-- * 'sadFillLength'
+sourceAndDestination
+    :: SourceAndDestination
+sourceAndDestination =
+    SourceAndDestination'
+    { _sadDimension = Nothing
+    , _sadSource = Nothing
+    , _sadFillLength = Nothing
+    }
+
+-- | The dimension that data should be filled into.
+sadDimension :: Lens' SourceAndDestination (Maybe SourceAndDestinationDimension)
+sadDimension
+  = lens _sadDimension (\ s a -> s{_sadDimension = a})
+
+-- | The location of the data to use as the source of the autofill.
+sadSource :: Lens' SourceAndDestination (Maybe GridRange)
+sadSource
+  = lens _sadSource (\ s a -> s{_sadSource = a})
+
+-- | The number of rows or columns that data should be filled into. Positive
+-- numbers expand beyond the last row or last column of the source.
+-- Negative numbers expand before the first row or first column of the
+-- source.
+sadFillLength :: Lens' SourceAndDestination (Maybe Int32)
+sadFillLength
+  = lens _sadFillLength
+      (\ s a -> s{_sadFillLength = a})
+      . mapping _Coerce
+
+instance FromJSON SourceAndDestination where
+        parseJSON
+          = withObject "SourceAndDestination"
+              (\ o ->
+                 SourceAndDestination' <$>
+                   (o .:? "dimension") <*> (o .:? "source") <*>
+                     (o .:? "fillLength"))
+
+instance ToJSON SourceAndDestination where
+        toJSON SourceAndDestination'{..}
+          = object
+              (catMaybes
+                 [("dimension" .=) <$> _sadDimension,
+                  ("source" .=) <$> _sadSource,
+                  ("fillLength" .=) <$> _sadFillLength])
+
+-- | Inserts data into the spreadsheet starting at the specified coordinate.
+--
+-- /See:/ 'pasteDataRequest' smart constructor.
+data PasteDataRequest = PasteDataRequest'
+    { _pdrData       :: !(Maybe Text)
+    , _pdrCoordinate :: !(Maybe GridCoordinate)
+    , _pdrHTML       :: !(Maybe Bool)
+    , _pdrType       :: !(Maybe PasteDataRequestType)
+    , _pdrDelimiter  :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PasteDataRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pdrData'
+--
+-- * 'pdrCoordinate'
+--
+-- * 'pdrHTML'
+--
+-- * 'pdrType'
+--
+-- * 'pdrDelimiter'
+pasteDataRequest
+    :: PasteDataRequest
+pasteDataRequest =
+    PasteDataRequest'
+    { _pdrData = Nothing
+    , _pdrCoordinate = Nothing
+    , _pdrHTML = Nothing
+    , _pdrType = Nothing
+    , _pdrDelimiter = Nothing
+    }
+
+-- | The data to insert.
+pdrData :: Lens' PasteDataRequest (Maybe Text)
+pdrData = lens _pdrData (\ s a -> s{_pdrData = a})
+
+-- | The coordinate at which the data should start being inserted.
+pdrCoordinate :: Lens' PasteDataRequest (Maybe GridCoordinate)
+pdrCoordinate
+  = lens _pdrCoordinate
+      (\ s a -> s{_pdrCoordinate = a})
+
+-- | True if the data is HTML.
+pdrHTML :: Lens' PasteDataRequest (Maybe Bool)
+pdrHTML = lens _pdrHTML (\ s a -> s{_pdrHTML = a})
+
+-- | How the data should be pasted.
+pdrType :: Lens' PasteDataRequest (Maybe PasteDataRequestType)
+pdrType = lens _pdrType (\ s a -> s{_pdrType = a})
+
+-- | The delimiter in the data.
+pdrDelimiter :: Lens' PasteDataRequest (Maybe Text)
+pdrDelimiter
+  = lens _pdrDelimiter (\ s a -> s{_pdrDelimiter = a})
+
+instance FromJSON PasteDataRequest where
+        parseJSON
+          = withObject "PasteDataRequest"
+              (\ o ->
+                 PasteDataRequest' <$>
+                   (o .:? "data") <*> (o .:? "coordinate") <*>
+                     (o .:? "html")
+                     <*> (o .:? "type")
+                     <*> (o .:? "delimiter"))
+
+instance ToJSON PasteDataRequest where
+        toJSON PasteDataRequest'{..}
+          = object
+              (catMaybes
+                 [("data" .=) <$> _pdrData,
+                  ("coordinate" .=) <$> _pdrCoordinate,
+                  ("html" .=) <$> _pdrHTML, ("type" .=) <$> _pdrType,
+                  ("delimiter" .=) <$> _pdrDelimiter])
+
+-- | Adds new cells after the last row with data in a sheet, inserting new
+-- rows into the sheet if necessary.
+--
+-- /See:/ 'appendCellsRequest' smart constructor.
+data AppendCellsRequest = AppendCellsRequest'
+    { _acrRows    :: !(Maybe [RowData])
+    , _acrSheetId :: !(Maybe (Textual Int32))
+    , _acrFields  :: !(Maybe GFieldMask)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AppendCellsRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'acrRows'
+--
+-- * 'acrSheetId'
+--
+-- * 'acrFields'
+appendCellsRequest
+    :: AppendCellsRequest
+appendCellsRequest =
+    AppendCellsRequest'
+    { _acrRows = Nothing
+    , _acrSheetId = Nothing
+    , _acrFields = Nothing
+    }
+
+-- | The data to append.
+acrRows :: Lens' AppendCellsRequest [RowData]
+acrRows
+  = lens _acrRows (\ s a -> s{_acrRows = a}) . _Default
+      . _Coerce
+
+-- | The sheet ID to append the data to.
+acrSheetId :: Lens' AppendCellsRequest (Maybe Int32)
+acrSheetId
+  = lens _acrSheetId (\ s a -> s{_acrSheetId = a}) .
+      mapping _Coerce
+
+-- | The fields of CellData that should be updated. At least one field must
+-- be specified. The root is the CellData; \'row.values.\' should not be
+-- specified. A single \`\"*\"\` can be used as short-hand for listing
+-- every field.
+acrFields :: Lens' AppendCellsRequest (Maybe GFieldMask)
+acrFields
+  = lens _acrFields (\ s a -> s{_acrFields = a})
+
+instance FromJSON AppendCellsRequest where
+        parseJSON
+          = withObject "AppendCellsRequest"
+              (\ o ->
+                 AppendCellsRequest' <$>
+                   (o .:? "rows" .!= mempty) <*> (o .:? "sheetId") <*>
+                     (o .:? "fields"))
+
+instance ToJSON AppendCellsRequest where
+        toJSON AppendCellsRequest'{..}
+          = object
+              (catMaybes
+                 [("rows" .=) <$> _acrRows,
+                  ("sheetId" .=) <$> _acrSheetId,
+                  ("fields" .=) <$> _acrFields])
+
+-- | The result of the find\/replace.
+--
+-- /See:/ 'findReplaceResponse' smart constructor.
+data FindReplaceResponse = FindReplaceResponse'
+    { _frrValuesChanged      :: !(Maybe (Textual Int32))
+    , _frrFormulasChanged    :: !(Maybe (Textual Int32))
+    , _frrRowsChanged        :: !(Maybe (Textual Int32))
+    , _frrSheetsChanged      :: !(Maybe (Textual Int32))
+    , _frrOccurrencesChanged :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FindReplaceResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'frrValuesChanged'
+--
+-- * 'frrFormulasChanged'
+--
+-- * 'frrRowsChanged'
+--
+-- * 'frrSheetsChanged'
+--
+-- * 'frrOccurrencesChanged'
+findReplaceResponse
+    :: FindReplaceResponse
+findReplaceResponse =
+    FindReplaceResponse'
+    { _frrValuesChanged = Nothing
+    , _frrFormulasChanged = Nothing
+    , _frrRowsChanged = Nothing
+    , _frrSheetsChanged = Nothing
+    , _frrOccurrencesChanged = Nothing
+    }
+
+-- | The number of non-formula cells changed.
+frrValuesChanged :: Lens' FindReplaceResponse (Maybe Int32)
+frrValuesChanged
+  = lens _frrValuesChanged
+      (\ s a -> s{_frrValuesChanged = a})
+      . mapping _Coerce
+
+-- | The number of formula cells changed.
+frrFormulasChanged :: Lens' FindReplaceResponse (Maybe Int32)
+frrFormulasChanged
+  = lens _frrFormulasChanged
+      (\ s a -> s{_frrFormulasChanged = a})
+      . mapping _Coerce
+
+-- | The number of rows changed.
+frrRowsChanged :: Lens' FindReplaceResponse (Maybe Int32)
+frrRowsChanged
+  = lens _frrRowsChanged
+      (\ s a -> s{_frrRowsChanged = a})
+      . mapping _Coerce
+
+-- | The number of sheets changed.
+frrSheetsChanged :: Lens' FindReplaceResponse (Maybe Int32)
+frrSheetsChanged
+  = lens _frrSheetsChanged
+      (\ s a -> s{_frrSheetsChanged = a})
+      . mapping _Coerce
+
+-- | The number of occurrences (possibly multiple within a cell) changed. For
+-- example, if replacing \`\"e\"\` with \`\"o\"\` in \`\"Google Sheets\"\`,
+-- this would be \`\"3\"\` because \`\"Google Sheets\"\` -> \`\"Googlo
+-- Shoots\"\`.
+frrOccurrencesChanged :: Lens' FindReplaceResponse (Maybe Int32)
+frrOccurrencesChanged
+  = lens _frrOccurrencesChanged
+      (\ s a -> s{_frrOccurrencesChanged = a})
+      . mapping _Coerce
+
+instance FromJSON FindReplaceResponse where
+        parseJSON
+          = withObject "FindReplaceResponse"
+              (\ o ->
+                 FindReplaceResponse' <$>
+                   (o .:? "valuesChanged") <*> (o .:? "formulasChanged")
+                     <*> (o .:? "rowsChanged")
+                     <*> (o .:? "sheetsChanged")
+                     <*> (o .:? "occurrencesChanged"))
+
+instance ToJSON FindReplaceResponse where
+        toJSON FindReplaceResponse'{..}
+          = object
+              (catMaybes
+                 [("valuesChanged" .=) <$> _frrValuesChanged,
+                  ("formulasChanged" .=) <$> _frrFormulasChanged,
+                  ("rowsChanged" .=) <$> _frrRowsChanged,
+                  ("sheetsChanged" .=) <$> _frrSheetsChanged,
+                  ("occurrencesChanged" .=) <$>
+                    _frrOccurrencesChanged])
+
+-- | The result of adding a group.
+--
+-- /See:/ 'addDimensionGroupResponse' smart constructor.
+newtype AddDimensionGroupResponse = AddDimensionGroupResponse'
+    { _adgrDimensionGroups :: Maybe [DimensionGroup]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AddDimensionGroupResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'adgrDimensionGroups'
+addDimensionGroupResponse
+    :: AddDimensionGroupResponse
+addDimensionGroupResponse =
+    AddDimensionGroupResponse'
+    { _adgrDimensionGroups = Nothing
+    }
+
+-- | All groups of a dimension after adding a group to that dimension.
+adgrDimensionGroups :: Lens' AddDimensionGroupResponse [DimensionGroup]
+adgrDimensionGroups
+  = lens _adgrDimensionGroups
+      (\ s a -> s{_adgrDimensionGroups = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON AddDimensionGroupResponse where
+        parseJSON
+          = withObject "AddDimensionGroupResponse"
+              (\ o ->
+                 AddDimensionGroupResponse' <$>
+                   (o .:? "dimensionGroups" .!= mempty))
+
+instance ToJSON AddDimensionGroupResponse where
+        toJSON AddDimensionGroupResponse'{..}
+          = object
+              (catMaybes
+                 [("dimensionGroups" .=) <$> _adgrDimensionGroups])
+
+-- | A </chart/interactive/docs/gallery/piechart pie chart>.
+--
+-- /See:/ 'pieChartSpec' smart constructor.
+data PieChartSpec = PieChartSpec'
+    { _pcsPieHole          :: !(Maybe (Textual Double))
+    , _pcsLegendPosition   :: !(Maybe PieChartSpecLegendPosition)
+    , _pcsDomain           :: !(Maybe ChartData)
+    , _pcsSeries           :: !(Maybe ChartData)
+    , _pcsThreeDimensional :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PieChartSpec' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pcsPieHole'
+--
+-- * 'pcsLegendPosition'
+--
+-- * 'pcsDomain'
+--
+-- * 'pcsSeries'
+--
+-- * 'pcsThreeDimensional'
+pieChartSpec
+    :: PieChartSpec
+pieChartSpec =
+    PieChartSpec'
+    { _pcsPieHole = Nothing
+    , _pcsLegendPosition = Nothing
+    , _pcsDomain = Nothing
+    , _pcsSeries = Nothing
+    , _pcsThreeDimensional = Nothing
+    }
+
+-- | The size of the hole in the pie chart.
+pcsPieHole :: Lens' PieChartSpec (Maybe Double)
+pcsPieHole
+  = lens _pcsPieHole (\ s a -> s{_pcsPieHole = a}) .
+      mapping _Coerce
+
+-- | Where the legend of the pie chart should be drawn.
+pcsLegendPosition :: Lens' PieChartSpec (Maybe PieChartSpecLegendPosition)
+pcsLegendPosition
+  = lens _pcsLegendPosition
+      (\ s a -> s{_pcsLegendPosition = a})
+
+-- | The data that covers the domain of the pie chart.
+pcsDomain :: Lens' PieChartSpec (Maybe ChartData)
+pcsDomain
+  = lens _pcsDomain (\ s a -> s{_pcsDomain = a})
+
+-- | The data that covers the one and only series of the pie chart.
+pcsSeries :: Lens' PieChartSpec (Maybe ChartData)
+pcsSeries
+  = lens _pcsSeries (\ s a -> s{_pcsSeries = a})
+
+-- | True if the pie is three dimensional.
+pcsThreeDimensional :: Lens' PieChartSpec (Maybe Bool)
+pcsThreeDimensional
+  = lens _pcsThreeDimensional
+      (\ s a -> s{_pcsThreeDimensional = a})
+
+instance FromJSON PieChartSpec where
+        parseJSON
+          = withObject "PieChartSpec"
+              (\ o ->
+                 PieChartSpec' <$>
+                   (o .:? "pieHole") <*> (o .:? "legendPosition") <*>
+                     (o .:? "domain")
+                     <*> (o .:? "series")
+                     <*> (o .:? "threeDimensional"))
+
+instance ToJSON PieChartSpec where
+        toJSON PieChartSpec'{..}
+          = object
+              (catMaybes
+                 [("pieHole" .=) <$> _pcsPieHole,
+                  ("legendPosition" .=) <$> _pcsLegendPosition,
+                  ("domain" .=) <$> _pcsDomain,
+                  ("series" .=) <$> _pcsSeries,
+                  ("threeDimensional" .=) <$> _pcsThreeDimensional])
+
+-- | The response when updating a range of values in a spreadsheet.
+--
+-- /See:/ 'batchUpdateValuesByDataFilterResponse' smart constructor.
+data BatchUpdateValuesByDataFilterResponse = BatchUpdateValuesByDataFilterResponse'
+    { _buvbdfrTotalUpdatedColumns :: !(Maybe (Textual Int32))
+    , _buvbdfrResponses           :: !(Maybe [UpdateValuesByDataFilterResponse])
+    , _buvbdfrSpreadsheetId       :: !(Maybe Text)
+    , _buvbdfrTotalUpdatedSheets  :: !(Maybe (Textual Int32))
+    , _buvbdfrTotalUpdatedCells   :: !(Maybe (Textual Int32))
+    , _buvbdfrTotalUpdatedRows    :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BatchUpdateValuesByDataFilterResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'buvbdfrTotalUpdatedColumns'
+--
+-- * 'buvbdfrResponses'
+--
+-- * 'buvbdfrSpreadsheetId'
+--
+-- * 'buvbdfrTotalUpdatedSheets'
+--
+-- * 'buvbdfrTotalUpdatedCells'
+--
+-- * 'buvbdfrTotalUpdatedRows'
+batchUpdateValuesByDataFilterResponse
+    :: BatchUpdateValuesByDataFilterResponse
+batchUpdateValuesByDataFilterResponse =
+    BatchUpdateValuesByDataFilterResponse'
+    { _buvbdfrTotalUpdatedColumns = Nothing
+    , _buvbdfrResponses = Nothing
+    , _buvbdfrSpreadsheetId = Nothing
+    , _buvbdfrTotalUpdatedSheets = Nothing
+    , _buvbdfrTotalUpdatedCells = Nothing
+    , _buvbdfrTotalUpdatedRows = Nothing
+    }
+
+-- | The total number of columns where at least one cell in the column was
+-- updated.
+buvbdfrTotalUpdatedColumns :: Lens' BatchUpdateValuesByDataFilterResponse (Maybe Int32)
+buvbdfrTotalUpdatedColumns
+  = lens _buvbdfrTotalUpdatedColumns
+      (\ s a -> s{_buvbdfrTotalUpdatedColumns = a})
+      . mapping _Coerce
+
+-- | The response for each range updated.
+buvbdfrResponses :: Lens' BatchUpdateValuesByDataFilterResponse [UpdateValuesByDataFilterResponse]
+buvbdfrResponses
+  = lens _buvbdfrResponses
+      (\ s a -> s{_buvbdfrResponses = a})
+      . _Default
+      . _Coerce
+
+-- | The spreadsheet the updates were applied to.
+buvbdfrSpreadsheetId :: Lens' BatchUpdateValuesByDataFilterResponse (Maybe Text)
+buvbdfrSpreadsheetId
+  = lens _buvbdfrSpreadsheetId
+      (\ s a -> s{_buvbdfrSpreadsheetId = a})
+
+-- | The total number of sheets where at least one cell in the sheet was
+-- updated.
+buvbdfrTotalUpdatedSheets :: Lens' BatchUpdateValuesByDataFilterResponse (Maybe Int32)
+buvbdfrTotalUpdatedSheets
+  = lens _buvbdfrTotalUpdatedSheets
+      (\ s a -> s{_buvbdfrTotalUpdatedSheets = a})
+      . mapping _Coerce
+
+-- | The total number of cells updated.
+buvbdfrTotalUpdatedCells :: Lens' BatchUpdateValuesByDataFilterResponse (Maybe Int32)
+buvbdfrTotalUpdatedCells
+  = lens _buvbdfrTotalUpdatedCells
+      (\ s a -> s{_buvbdfrTotalUpdatedCells = a})
+      . mapping _Coerce
+
+-- | The total number of rows where at least one cell in the row was updated.
+buvbdfrTotalUpdatedRows :: Lens' BatchUpdateValuesByDataFilterResponse (Maybe Int32)
+buvbdfrTotalUpdatedRows
+  = lens _buvbdfrTotalUpdatedRows
+      (\ s a -> s{_buvbdfrTotalUpdatedRows = a})
+      . mapping _Coerce
+
+instance FromJSON
+         BatchUpdateValuesByDataFilterResponse where
+        parseJSON
+          = withObject "BatchUpdateValuesByDataFilterResponse"
+              (\ o ->
+                 BatchUpdateValuesByDataFilterResponse' <$>
+                   (o .:? "totalUpdatedColumns") <*>
+                     (o .:? "responses" .!= mempty)
+                     <*> (o .:? "spreadsheetId")
+                     <*> (o .:? "totalUpdatedSheets")
+                     <*> (o .:? "totalUpdatedCells")
+                     <*> (o .:? "totalUpdatedRows"))
+
+instance ToJSON BatchUpdateValuesByDataFilterResponse
+         where
+        toJSON BatchUpdateValuesByDataFilterResponse'{..}
+          = object
+              (catMaybes
+                 [("totalUpdatedColumns" .=) <$>
+                    _buvbdfrTotalUpdatedColumns,
+                  ("responses" .=) <$> _buvbdfrResponses,
+                  ("spreadsheetId" .=) <$> _buvbdfrSpreadsheetId,
+                  ("totalUpdatedSheets" .=) <$>
+                    _buvbdfrTotalUpdatedSheets,
+                  ("totalUpdatedCells" .=) <$>
+                    _buvbdfrTotalUpdatedCells,
+                  ("totalUpdatedRows" .=) <$>
+                    _buvbdfrTotalUpdatedRows])
+
+-- | The response when updating a range of values in a spreadsheet.
+--
+-- /See:/ 'appendValuesResponse' smart constructor.
+data AppendValuesResponse = AppendValuesResponse'
+    { _avrSpreadsheetId :: !(Maybe Text)
+    , _avrUpdates       :: !(Maybe UpdateValuesResponse)
+    , _avrTableRange    :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AppendValuesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'avrSpreadsheetId'
+--
+-- * 'avrUpdates'
+--
+-- * 'avrTableRange'
+appendValuesResponse
+    :: AppendValuesResponse
+appendValuesResponse =
+    AppendValuesResponse'
+    { _avrSpreadsheetId = Nothing
+    , _avrUpdates = Nothing
+    , _avrTableRange = Nothing
+    }
+
+-- | The spreadsheet the updates were applied to.
+avrSpreadsheetId :: Lens' AppendValuesResponse (Maybe Text)
+avrSpreadsheetId
+  = lens _avrSpreadsheetId
+      (\ s a -> s{_avrSpreadsheetId = a})
+
+-- | Information about the updates that were applied.
+avrUpdates :: Lens' AppendValuesResponse (Maybe UpdateValuesResponse)
+avrUpdates
+  = lens _avrUpdates (\ s a -> s{_avrUpdates = a})
+
+-- | The range (in A1 notation) of the table that values are being appended
+-- to (before the values were appended). Empty if no table was found.
+avrTableRange :: Lens' AppendValuesResponse (Maybe Text)
+avrTableRange
+  = lens _avrTableRange
+      (\ s a -> s{_avrTableRange = a})
+
+instance FromJSON AppendValuesResponse where
+        parseJSON
+          = withObject "AppendValuesResponse"
+              (\ o ->
+                 AppendValuesResponse' <$>
+                   (o .:? "spreadsheetId") <*> (o .:? "updates") <*>
+                     (o .:? "tableRange"))
+
+instance ToJSON AppendValuesResponse where
+        toJSON AppendValuesResponse'{..}
+          = object
+              (catMaybes
+                 [("spreadsheetId" .=) <$> _avrSpreadsheetId,
+                  ("updates" .=) <$> _avrUpdates,
+                  ("tableRange" .=) <$> _avrTableRange])
+
+-- | A data validation rule.
+--
+-- /See:/ 'dataValidationRule' smart constructor.
+data DataValidationRule = DataValidationRule'
+    { _dvrShowCustomUi :: !(Maybe Bool)
+    , _dvrInputMessage :: !(Maybe Text)
+    , _dvrStrict       :: !(Maybe Bool)
+    , _dvrCondition    :: !(Maybe BooleanCondition)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DataValidationRule' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dvrShowCustomUi'
+--
+-- * 'dvrInputMessage'
+--
+-- * 'dvrStrict'
+--
+-- * 'dvrCondition'
+dataValidationRule
+    :: DataValidationRule
+dataValidationRule =
+    DataValidationRule'
+    { _dvrShowCustomUi = Nothing
+    , _dvrInputMessage = Nothing
+    , _dvrStrict = Nothing
+    , _dvrCondition = Nothing
+    }
+
+-- | True if the UI should be customized based on the kind of condition. If
+-- true, \"List\" conditions will show a dropdown.
+dvrShowCustomUi :: Lens' DataValidationRule (Maybe Bool)
+dvrShowCustomUi
+  = lens _dvrShowCustomUi
+      (\ s a -> s{_dvrShowCustomUi = a})
+
+-- | A message to show the user when adding data to the cell.
+dvrInputMessage :: Lens' DataValidationRule (Maybe Text)
+dvrInputMessage
+  = lens _dvrInputMessage
+      (\ s a -> s{_dvrInputMessage = a})
+
+-- | True if invalid data should be rejected.
+dvrStrict :: Lens' DataValidationRule (Maybe Bool)
+dvrStrict
+  = lens _dvrStrict (\ s a -> s{_dvrStrict = a})
+
+-- | The condition that data in the cell must match.
+dvrCondition :: Lens' DataValidationRule (Maybe BooleanCondition)
+dvrCondition
+  = lens _dvrCondition (\ s a -> s{_dvrCondition = a})
+
+instance FromJSON DataValidationRule where
+        parseJSON
+          = withObject "DataValidationRule"
+              (\ o ->
+                 DataValidationRule' <$>
+                   (o .:? "showCustomUi") <*> (o .:? "inputMessage") <*>
+                     (o .:? "strict")
+                     <*> (o .:? "condition"))
+
+instance ToJSON DataValidationRule where
+        toJSON DataValidationRule'{..}
+          = object
+              (catMaybes
+                 [("showCustomUi" .=) <$> _dvrShowCustomUi,
+                  ("inputMessage" .=) <$> _dvrInputMessage,
+                  ("strict" .=) <$> _dvrStrict,
+                  ("condition" .=) <$> _dvrCondition])
+
+-- | A filter view.
+--
+-- /See:/ 'filterView' smart constructor.
+data FilterView = FilterView'
+    { _fvSortSpecs    :: !(Maybe [SortSpec])
+    , _fvNamedRangeId :: !(Maybe Text)
+    , _fvRange        :: !(Maybe GridRange)
+    , _fvFilterViewId :: !(Maybe (Textual Int32))
+    , _fvTitle        :: !(Maybe Text)
+    , _fvCriteria     :: !(Maybe FilterViewCriteria)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FilterView' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fvSortSpecs'
+--
+-- * 'fvNamedRangeId'
+--
+-- * 'fvRange'
+--
+-- * 'fvFilterViewId'
+--
+-- * 'fvTitle'
+--
+-- * 'fvCriteria'
+filterView
+    :: FilterView
+filterView =
+    FilterView'
+    { _fvSortSpecs = Nothing
+    , _fvNamedRangeId = Nothing
+    , _fvRange = Nothing
+    , _fvFilterViewId = Nothing
+    , _fvTitle = Nothing
+    , _fvCriteria = Nothing
+    }
+
+-- | The sort order per column. Later specifications are used when values are
+-- equal in the earlier specifications.
+fvSortSpecs :: Lens' FilterView [SortSpec]
+fvSortSpecs
+  = lens _fvSortSpecs (\ s a -> s{_fvSortSpecs = a}) .
+      _Default
+      . _Coerce
+
+-- | The named range this filter view is backed by, if any. When writing,
+-- only one of range or named_range_id may be set.
+fvNamedRangeId :: Lens' FilterView (Maybe Text)
+fvNamedRangeId
+  = lens _fvNamedRangeId
+      (\ s a -> s{_fvNamedRangeId = a})
+
+-- | The range this filter view covers. When writing, only one of range or
+-- named_range_id may be set.
+fvRange :: Lens' FilterView (Maybe GridRange)
+fvRange = lens _fvRange (\ s a -> s{_fvRange = a})
+
+-- | The ID of the filter view.
+fvFilterViewId :: Lens' FilterView (Maybe Int32)
+fvFilterViewId
+  = lens _fvFilterViewId
+      (\ s a -> s{_fvFilterViewId = a})
+      . mapping _Coerce
+
+-- | The name of the filter view.
+fvTitle :: Lens' FilterView (Maybe Text)
+fvTitle = lens _fvTitle (\ s a -> s{_fvTitle = a})
+
+-- | The criteria for showing\/hiding values per column. The map\'s key is
+-- the column index, and the value is the criteria for that column.
+fvCriteria :: Lens' FilterView (Maybe FilterViewCriteria)
+fvCriteria
+  = lens _fvCriteria (\ s a -> s{_fvCriteria = a})
+
+instance FromJSON FilterView where
+        parseJSON
+          = withObject "FilterView"
+              (\ o ->
+                 FilterView' <$>
+                   (o .:? "sortSpecs" .!= mempty) <*>
+                     (o .:? "namedRangeId")
+                     <*> (o .:? "range")
+                     <*> (o .:? "filterViewId")
+                     <*> (o .:? "title")
+                     <*> (o .:? "criteria"))
+
+instance ToJSON FilterView where
+        toJSON FilterView'{..}
+          = object
+              (catMaybes
+                 [("sortSpecs" .=) <$> _fvSortSpecs,
+                  ("namedRangeId" .=) <$> _fvNamedRangeId,
+                  ("range" .=) <$> _fvRange,
+                  ("filterViewId" .=) <$> _fvFilterViewId,
+                  ("title" .=) <$> _fvTitle,
+                  ("criteria" .=) <$> _fvCriteria])
+
+-- | Represents a color in the RGBA color space. This representation is
+-- designed for simplicity of conversion to\/from color representations in
+-- various languages over compactness; for example, the fields of this
+-- representation can be trivially provided to the constructor of
+-- \"java.awt.Color\" in Java; it can also be trivially provided to
+-- UIColor\'s \"+colorWithRed:green:blue:alpha\" method in iOS; and, with
+-- just a little work, it can be easily formatted into a CSS \"rgba()\"
+-- string in JavaScript, as well. Here are some examples: Example (Java):
+-- import com.google.type.Color; \/\/ ... public static java.awt.Color
+-- fromProto(Color protocolor) { float alpha = protocolor.hasAlpha() ?
+-- protocolor.getAlpha().getValue() : 1.0; return new java.awt.Color(
+-- protocolor.getRed(), protocolor.getGreen(), protocolor.getBlue(),
+-- alpha); } public static Color toProto(java.awt.Color color) { float red
+-- = (float) color.getRed(); float green = (float) color.getGreen(); float
+-- blue = (float) color.getBlue(); float denominator = 255.0; Color.Builder
+-- resultBuilder = Color .newBuilder() .setRed(red \/ denominator)
+-- .setGreen(green \/ denominator) .setBlue(blue \/ denominator); int alpha
+-- = color.getAlpha(); if (alpha != 255) { result.setAlpha( FloatValue
+-- .newBuilder() .setValue(((float) alpha) \/ denominator) .build()); }
+-- return resultBuilder.build(); } \/\/ ... Example (iOS \/ Obj-C): \/\/
+-- ... static UIColor* fromProto(Color* protocolor) { float red =
+-- [protocolor red]; float green = [protocolor green]; float blue =
+-- [protocolor blue]; FloatValue* alpha_wrapper = [protocolor alpha]; float
+-- alpha = 1.0; if (alpha_wrapper != nil) { alpha = [alpha_wrapper value];
+-- } return [UIColor colorWithRed:red green:green blue:blue alpha:alpha]; }
+-- static Color* toProto(UIColor* color) { CGFloat red, green, blue, alpha;
+-- if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) { return
+-- nil; } Color* result = [[Color alloc] init]; [result setRed:red];
+-- [result setGreen:green]; [result setBlue:blue]; if (alpha \<= 0.9999) {
+-- [result setAlpha:floatWrapperWithValue(alpha)]; } [result autorelease];
+-- return result; } \/\/ ... Example (JavaScript): \/\/ ... var
+-- protoToCssColor = function(rgb_color) { var redFrac = rgb_color.red ||
+-- 0.0; var greenFrac = rgb_color.green || 0.0; var blueFrac =
+-- rgb_color.blue || 0.0; var red = Math.floor(redFrac * 255); var green =
+-- Math.floor(greenFrac * 255); var blue = Math.floor(blueFrac * 255); if
+-- (!(\'alpha\' in rgb_color)) { return rgbToCssColor_(red, green, blue); }
+-- var alphaFrac = rgb_color.alpha.value || 0.0; var rgbParams = [red,
+-- green, blue].join(\',\'); return [\'rgba(\', rgbParams, \',\',
+-- alphaFrac, \')\'].join(\'\'); }; var rgbToCssColor_ = function(red,
+-- green, blue) { var rgbNumber = new Number((red \<\< 16) | (green \<\< 8)
+-- | blue); var hexString = rgbNumber.toString(16); var missingZeros = 6 -
+-- hexString.length; var resultBuilder = [\'#\']; for (var i = 0; i \<
+-- missingZeros; i++) { resultBuilder.push(\'0\'); }
+-- resultBuilder.push(hexString); return resultBuilder.join(\'\'); }; \/\/
+-- ...
+--
+-- /See:/ 'color' smart constructor.
+data Color = Color'
+    { _cRed   :: !(Maybe (Textual Double))
+    , _cAlpha :: !(Maybe (Textual Double))
+    , _cGreen :: !(Maybe (Textual Double))
+    , _cBlue  :: !(Maybe (Textual Double))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Color' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cRed'
+--
+-- * 'cAlpha'
+--
+-- * 'cGreen'
+--
+-- * 'cBlue'
+color
+    :: Color
+color =
+    Color'
+    { _cRed = Nothing
+    , _cAlpha = Nothing
+    , _cGreen = Nothing
+    , _cBlue = Nothing
+    }
+
+-- | The amount of red in the color as a value in the interval [0, 1].
+cRed :: Lens' Color (Maybe Double)
+cRed
+  = lens _cRed (\ s a -> s{_cRed = a}) .
+      mapping _Coerce
+
+-- | The fraction of this color that should be applied to the pixel. That is,
+-- the final pixel color is defined by the equation: pixel color = alpha *
+-- (this color) + (1.0 - alpha) * (background color) This means that a
+-- value of 1.0 corresponds to a solid color, whereas a value of 0.0
+-- corresponds to a completely transparent color. This uses a wrapper
+-- message rather than a simple float scalar so that it is possible to
+-- distinguish between a default value and the value being unset. If
+-- omitted, this color object is to be rendered as a solid color (as if the
+-- alpha value had been explicitly given with a value of 1.0).
+cAlpha :: Lens' Color (Maybe Double)
+cAlpha
+  = lens _cAlpha (\ s a -> s{_cAlpha = a}) .
+      mapping _Coerce
+
+-- | The amount of green in the color as a value in the interval [0, 1].
+cGreen :: Lens' Color (Maybe Double)
+cGreen
+  = lens _cGreen (\ s a -> s{_cGreen = a}) .
+      mapping _Coerce
+
+-- | The amount of blue in the color as a value in the interval [0, 1].
+cBlue :: Lens' Color (Maybe Double)
+cBlue
+  = lens _cBlue (\ s a -> s{_cBlue = a}) .
+      mapping _Coerce
+
+instance FromJSON Color where
+        parseJSON
+          = withObject "Color"
+              (\ o ->
+                 Color' <$>
+                   (o .:? "red") <*> (o .:? "alpha") <*> (o .:? "green")
+                     <*> (o .:? "blue"))
+
+instance ToJSON Color where
+        toJSON Color'{..}
+          = object
+              (catMaybes
+                 [("red" .=) <$> _cRed, ("alpha" .=) <$> _cAlpha,
+                  ("green" .=) <$> _cGreen, ("blue" .=) <$> _cBlue])
+
+-- | Deletes a particular filter view.
+--
+-- /See:/ 'deleteFilterViewRequest' smart constructor.
+newtype DeleteFilterViewRequest = DeleteFilterViewRequest'
+    { _dfvrFilterId :: Maybe (Textual Int32)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteFilterViewRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dfvrFilterId'
+deleteFilterViewRequest
+    :: DeleteFilterViewRequest
+deleteFilterViewRequest =
+    DeleteFilterViewRequest'
+    { _dfvrFilterId = Nothing
+    }
+
+-- | The ID of the filter to delete.
+dfvrFilterId :: Lens' DeleteFilterViewRequest (Maybe Int32)
+dfvrFilterId
+  = lens _dfvrFilterId (\ s a -> s{_dfvrFilterId = a})
+      . mapping _Coerce
+
+instance FromJSON DeleteFilterViewRequest where
+        parseJSON
+          = withObject "DeleteFilterViewRequest"
+              (\ o ->
+                 DeleteFilterViewRequest' <$> (o .:? "filterId"))
+
+instance ToJSON DeleteFilterViewRequest where
+        toJSON DeleteFilterViewRequest'{..}
+          = object
+              (catMaybes [("filterId" .=) <$> _dfvrFilterId])
+
+-- | Updates properties of the filter view.
+--
+-- /See:/ 'updateFilterViewRequest' smart constructor.
+data UpdateFilterViewRequest = UpdateFilterViewRequest'
+    { _ufvrFilter :: !(Maybe FilterView)
+    , _ufvrFields :: !(Maybe GFieldMask)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdateFilterViewRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ufvrFilter'
+--
+-- * 'ufvrFields'
+updateFilterViewRequest
+    :: UpdateFilterViewRequest
+updateFilterViewRequest =
+    UpdateFilterViewRequest'
+    { _ufvrFilter = Nothing
+    , _ufvrFields = Nothing
+    }
+
+-- | The new properties of the filter view.
+ufvrFilter :: Lens' UpdateFilterViewRequest (Maybe FilterView)
+ufvrFilter
+  = lens _ufvrFilter (\ s a -> s{_ufvrFilter = a})
+
+-- | The fields that should be updated. At least one field must be specified.
+-- The root \`filter\` is implied and should not be specified. A single
+-- \`\"*\"\` can be used as short-hand for listing every field.
+ufvrFields :: Lens' UpdateFilterViewRequest (Maybe GFieldMask)
+ufvrFields
+  = lens _ufvrFields (\ s a -> s{_ufvrFields = a})
+
+instance FromJSON UpdateFilterViewRequest where
+        parseJSON
+          = withObject "UpdateFilterViewRequest"
+              (\ o ->
+                 UpdateFilterViewRequest' <$>
+                   (o .:? "filter") <*> (o .:? "fields"))
+
+instance ToJSON UpdateFilterViewRequest where
+        toJSON UpdateFilterViewRequest'{..}
+          = object
+              (catMaybes
+                 [("filter" .=) <$> _ufvrFilter,
+                  ("fields" .=) <$> _ufvrFields])
+
+-- | A single series of data in a chart. For example, if charting stock
+-- prices over time, multiple series may exist, one for the \"Open Price\",
+-- \"High Price\", \"Low Price\" and \"Close Price\".
+--
+-- /See:/ 'basicChartSeries' smart constructor.
+data BasicChartSeries = BasicChartSeries'
+    { _bTargetAxis :: !(Maybe BasicChartSeriesTargetAxis)
+    , _bColor      :: !(Maybe Color)
+    , _bSeries     :: !(Maybe ChartData)
+    , _bType       :: !(Maybe BasicChartSeriesType)
+    , _bLineStyle  :: !(Maybe LineStyle)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BasicChartSeries' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bTargetAxis'
+--
+-- * 'bColor'
+--
+-- * 'bSeries'
+--
+-- * 'bType'
+--
+-- * 'bLineStyle'
+basicChartSeries
+    :: BasicChartSeries
+basicChartSeries =
+    BasicChartSeries'
+    { _bTargetAxis = Nothing
+    , _bColor = Nothing
+    , _bSeries = Nothing
+    , _bType = Nothing
+    , _bLineStyle = Nothing
+    }
+
+-- | The minor axis that will specify the range of values for this series.
+-- For example, if charting stocks over time, the \"Volume\" series may
+-- want to be pinned to the right with the prices pinned to the left,
+-- because the scale of trading volume is different than the scale of
+-- prices. It is an error to specify an axis that isn\'t a valid minor axis
+-- for the chart\'s type.
+bTargetAxis :: Lens' BasicChartSeries (Maybe BasicChartSeriesTargetAxis)
+bTargetAxis
+  = lens _bTargetAxis (\ s a -> s{_bTargetAxis = a})
+
+-- | The color for elements (i.e. bars, lines, points) associated with this
+-- series. If empty, a default color is used.
+bColor :: Lens' BasicChartSeries (Maybe Color)
+bColor = lens _bColor (\ s a -> s{_bColor = a})
+
+-- | The data being visualized in this chart series.
+bSeries :: Lens' BasicChartSeries (Maybe ChartData)
+bSeries = lens _bSeries (\ s a -> s{_bSeries = a})
+
+-- | The type of this series. Valid only if the chartType is COMBO. Different
+-- types will change the way the series is visualized. Only LINE, AREA, and
+-- COLUMN are supported.
+bType :: Lens' BasicChartSeries (Maybe BasicChartSeriesType)
+bType = lens _bType (\ s a -> s{_bType = a})
+
+-- | The line style of this series. Valid only if the chartType is AREA,
+-- LINE, or SCATTER. COMBO charts are also supported if the series chart
+-- type is AREA or LINE.
+bLineStyle :: Lens' BasicChartSeries (Maybe LineStyle)
+bLineStyle
+  = lens _bLineStyle (\ s a -> s{_bLineStyle = a})
+
+instance FromJSON BasicChartSeries where
+        parseJSON
+          = withObject "BasicChartSeries"
+              (\ o ->
+                 BasicChartSeries' <$>
+                   (o .:? "targetAxis") <*> (o .:? "color") <*>
+                     (o .:? "series")
+                     <*> (o .:? "type")
+                     <*> (o .:? "lineStyle"))
+
+instance ToJSON BasicChartSeries where
+        toJSON BasicChartSeries'{..}
+          = object
+              (catMaybes
+                 [("targetAxis" .=) <$> _bTargetAxis,
+                  ("color" .=) <$> _bColor, ("series" .=) <$> _bSeries,
+                  ("type" .=) <$> _bType,
+                  ("lineStyle" .=) <$> _bLineStyle])
+
+-- | An optional setting on a PivotGroup that defines buckets for the values
+-- in the source data column rather than breaking out each individual
+-- value. Only one PivotGroup with a group rule may be added for each
+-- column in the source data, though on any given column you may add both a
+-- PivotGroup that has a rule and a PivotGroup that does not.
+--
+-- /See:/ 'pivotGroupRule' smart constructor.
+data PivotGroupRule = PivotGroupRule'
+    { _pgrDateTimeRule  :: !(Maybe DateTimeRule)
+    , _pgrManualRule    :: !(Maybe ManualRule)
+    , _pgrHistogramRule :: !(Maybe HistogramRule)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PivotGroupRule' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pgrDateTimeRule'
+--
+-- * 'pgrManualRule'
+--
+-- * 'pgrHistogramRule'
+pivotGroupRule
+    :: PivotGroupRule
+pivotGroupRule =
+    PivotGroupRule'
+    { _pgrDateTimeRule = Nothing
+    , _pgrManualRule = Nothing
+    , _pgrHistogramRule = Nothing
+    }
+
+-- | A DateTimeRule.
+pgrDateTimeRule :: Lens' PivotGroupRule (Maybe DateTimeRule)
+pgrDateTimeRule
+  = lens _pgrDateTimeRule
+      (\ s a -> s{_pgrDateTimeRule = a})
+
+-- | A ManualRule.
+pgrManualRule :: Lens' PivotGroupRule (Maybe ManualRule)
+pgrManualRule
+  = lens _pgrManualRule
+      (\ s a -> s{_pgrManualRule = a})
+
+-- | A HistogramRule.
+pgrHistogramRule :: Lens' PivotGroupRule (Maybe HistogramRule)
+pgrHistogramRule
+  = lens _pgrHistogramRule
+      (\ s a -> s{_pgrHistogramRule = a})
+
+instance FromJSON PivotGroupRule where
+        parseJSON
+          = withObject "PivotGroupRule"
+              (\ o ->
+                 PivotGroupRule' <$>
+                   (o .:? "dateTimeRule") <*> (o .:? "manualRule") <*>
+                     (o .:? "histogramRule"))
+
+instance ToJSON PivotGroupRule where
+        toJSON PivotGroupRule'{..}
+          = object
+              (catMaybes
+                 [("dateTimeRule" .=) <$> _pgrDateTimeRule,
+                  ("manualRule" .=) <$> _pgrManualRule,
+                  ("histogramRule" .=) <$> _pgrHistogramRule])
+
+-- | Adds a new protected range.
+--
+-- /See:/ 'addProtectedRangeRequest' smart constructor.
+newtype AddProtectedRangeRequest = AddProtectedRangeRequest'
+    { _aprrProtectedRange :: Maybe ProtectedRange
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AddProtectedRangeRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aprrProtectedRange'
+addProtectedRangeRequest
+    :: AddProtectedRangeRequest
+addProtectedRangeRequest =
+    AddProtectedRangeRequest'
+    { _aprrProtectedRange = Nothing
+    }
+
+-- | The protected range to be added. The protectedRangeId field is optional;
+-- if one is not set, an id will be randomly generated. (It is an error to
+-- specify the ID of a range that already exists.)
+aprrProtectedRange :: Lens' AddProtectedRangeRequest (Maybe ProtectedRange)
+aprrProtectedRange
+  = lens _aprrProtectedRange
+      (\ s a -> s{_aprrProtectedRange = a})
+
+instance FromJSON AddProtectedRangeRequest where
+        parseJSON
+          = withObject "AddProtectedRangeRequest"
+              (\ o ->
+                 AddProtectedRangeRequest' <$>
+                   (o .:? "protectedRange"))
+
+instance ToJSON AddProtectedRangeRequest where
+        toJSON AddProtectedRangeRequest'{..}
+          = object
+              (catMaybes
+                 [("protectedRange" .=) <$> _aprrProtectedRange])
+
+-- | Updates all cells in the range to the values in the given Cell object.
+-- Only the fields listed in the fields field are updated; others are
+-- unchanged. If writing a cell with a formula, the formula\'s ranges will
+-- automatically increment for each field in the range. For example, if
+-- writing a cell with formula \`=A1\` into range B2:C4, B2 would be
+-- \`=A1\`, B3 would be \`=A2\`, B4 would be \`=A3\`, C2 would be \`=B1\`,
+-- C3 would be \`=B2\`, C4 would be \`=B3\`. To keep the formula\'s ranges
+-- static, use the \`$\` indicator. For example, use the formula \`=$A$1\`
+-- to prevent both the row and the column from incrementing.
+--
+-- /See:/ 'repeatCellRequest' smart constructor.
+data RepeatCellRequest = RepeatCellRequest'
+    { _rcrCell   :: !(Maybe CellData)
+    , _rcrRange  :: !(Maybe GridRange)
+    , _rcrFields :: !(Maybe GFieldMask)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RepeatCellRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rcrCell'
+--
+-- * 'rcrRange'
+--
+-- * 'rcrFields'
+repeatCellRequest
+    :: RepeatCellRequest
+repeatCellRequest =
+    RepeatCellRequest'
+    { _rcrCell = Nothing
+    , _rcrRange = Nothing
+    , _rcrFields = Nothing
+    }
+
+-- | The data to write.
+rcrCell :: Lens' RepeatCellRequest (Maybe CellData)
+rcrCell = lens _rcrCell (\ s a -> s{_rcrCell = a})
+
+-- | The range to repeat the cell in.
+rcrRange :: Lens' RepeatCellRequest (Maybe GridRange)
+rcrRange = lens _rcrRange (\ s a -> s{_rcrRange = a})
+
+-- | The fields that should be updated. At least one field must be specified.
+-- The root \`cell\` is implied and should not be specified. A single
+-- \`\"*\"\` can be used as short-hand for listing every field.
+rcrFields :: Lens' RepeatCellRequest (Maybe GFieldMask)
+rcrFields
+  = lens _rcrFields (\ s a -> s{_rcrFields = a})
+
+instance FromJSON RepeatCellRequest where
+        parseJSON
+          = withObject "RepeatCellRequest"
+              (\ o ->
+                 RepeatCellRequest' <$>
+                   (o .:? "cell") <*> (o .:? "range") <*>
+                     (o .:? "fields"))
+
+instance ToJSON RepeatCellRequest where
+        toJSON RepeatCellRequest'{..}
+          = object
+              (catMaybes
+                 [("cell" .=) <$> _rcrCell,
+                  ("range" .=) <$> _rcrRange,
+                  ("fields" .=) <$> _rcrFields])
+
+-- | The value of the condition.
+--
+-- /See:/ 'conditionValue' smart constructor.
+data ConditionValue = ConditionValue'
+    { _cvRelativeDate     :: !(Maybe ConditionValueRelativeDate)
+    , _cvUserEnteredValue :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ConditionValue' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cvRelativeDate'
+--
+-- * 'cvUserEnteredValue'
+conditionValue
+    :: ConditionValue
+conditionValue =
+    ConditionValue'
+    { _cvRelativeDate = Nothing
+    , _cvUserEnteredValue = Nothing
+    }
+
+-- | A relative date (based on the current date). Valid only if the type is
+-- DATE_BEFORE, DATE_AFTER, DATE_ON_OR_BEFORE or DATE_ON_OR_AFTER. Relative
+-- dates are not supported in data validation. They are supported only in
+-- conditional formatting and conditional filters.
+cvRelativeDate :: Lens' ConditionValue (Maybe ConditionValueRelativeDate)
+cvRelativeDate
+  = lens _cvRelativeDate
+      (\ s a -> s{_cvRelativeDate = a})
+
+-- | A value the condition is based on. The value is parsed as if the user
+-- typed into a cell. Formulas are supported (and must begin with an \`=\`
+-- or a \'+\').
+cvUserEnteredValue :: Lens' ConditionValue (Maybe Text)
+cvUserEnteredValue
+  = lens _cvUserEnteredValue
+      (\ s a -> s{_cvUserEnteredValue = a})
+
+instance FromJSON ConditionValue where
+        parseJSON
+          = withObject "ConditionValue"
+              (\ o ->
+                 ConditionValue' <$>
+                   (o .:? "relativeDate") <*>
+                     (o .:? "userEnteredValue"))
+
+instance ToJSON ConditionValue where
+        toJSON ConditionValue'{..}
+          = object
+              (catMaybes
+                 [("relativeDate" .=) <$> _cvRelativeDate,
+                  ("userEnteredValue" .=) <$> _cvUserEnteredValue])
+
+-- | Deletes the dimensions from the sheet.
+--
+-- /See:/ 'deleteDimensionRequest' smart constructor.
+newtype DeleteDimensionRequest = DeleteDimensionRequest'
+    { _ddrRange :: Maybe DimensionRange
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteDimensionRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ddrRange'
+deleteDimensionRequest
+    :: DeleteDimensionRequest
+deleteDimensionRequest =
+    DeleteDimensionRequest'
+    { _ddrRange = Nothing
+    }
+
+-- | The dimensions to delete from the sheet.
+ddrRange :: Lens' DeleteDimensionRequest (Maybe DimensionRange)
+ddrRange = lens _ddrRange (\ s a -> s{_ddrRange = a})
+
+instance FromJSON DeleteDimensionRequest where
+        parseJSON
+          = withObject "DeleteDimensionRequest"
+              (\ o -> DeleteDimensionRequest' <$> (o .:? "range"))
+
+instance ToJSON DeleteDimensionRequest where
+        toJSON DeleteDimensionRequest'{..}
+          = object (catMaybes [("range" .=) <$> _ddrRange])
+
+-- | The request for clearing a range of values in a spreadsheet.
+--
+-- /See:/ 'clearValuesRequest' smart constructor.
+data ClearValuesRequest =
+    ClearValuesRequest'
+    deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ClearValuesRequest' with the minimum fields required to make a request.
+--
+clearValuesRequest
+    :: ClearValuesRequest
+clearValuesRequest = ClearValuesRequest'
+
+instance FromJSON ClearValuesRequest where
+        parseJSON
+          = withObject "ClearValuesRequest"
+              (\ o -> pure ClearValuesRequest')
+
+instance ToJSON ClearValuesRequest where
+        toJSON = const emptyObject
+
+-- | Finds and replaces data in cells over a range, sheet, or all sheets.
+--
+-- /See:/ 'findReplaceRequest' smart constructor.
+data FindReplaceRequest = FindReplaceRequest'
+    { _frrMatchCase       :: !(Maybe Bool)
+    , _frrAllSheets       :: !(Maybe Bool)
+    , _frrIncludeFormulas :: !(Maybe Bool)
+    , _frrMatchEntireCell :: !(Maybe Bool)
+    , _frrRange           :: !(Maybe GridRange)
+    , _frrSheetId         :: !(Maybe (Textual Int32))
+    , _frrFind            :: !(Maybe Text)
+    , _frrSearchByRegex   :: !(Maybe Bool)
+    , _frrReplacement     :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FindReplaceRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'frrMatchCase'
+--
+-- * 'frrAllSheets'
+--
+-- * 'frrIncludeFormulas'
+--
+-- * 'frrMatchEntireCell'
+--
+-- * 'frrRange'
+--
+-- * 'frrSheetId'
+--
+-- * 'frrFind'
+--
+-- * 'frrSearchByRegex'
+--
+-- * 'frrReplacement'
+findReplaceRequest
+    :: FindReplaceRequest
+findReplaceRequest =
+    FindReplaceRequest'
+    { _frrMatchCase = Nothing
+    , _frrAllSheets = Nothing
+    , _frrIncludeFormulas = Nothing
+    , _frrMatchEntireCell = Nothing
+    , _frrRange = Nothing
+    , _frrSheetId = Nothing
+    , _frrFind = Nothing
+    , _frrSearchByRegex = Nothing
+    , _frrReplacement = Nothing
+    }
+
+-- | True if the search is case sensitive.
+frrMatchCase :: Lens' FindReplaceRequest (Maybe Bool)
+frrMatchCase
+  = lens _frrMatchCase (\ s a -> s{_frrMatchCase = a})
+
+-- | True to find\/replace over all sheets.
+frrAllSheets :: Lens' FindReplaceRequest (Maybe Bool)
+frrAllSheets
+  = lens _frrAllSheets (\ s a -> s{_frrAllSheets = a})
+
+-- | True if the search should include cells with formulas. False to skip
+-- cells with formulas.
+frrIncludeFormulas :: Lens' FindReplaceRequest (Maybe Bool)
+frrIncludeFormulas
+  = lens _frrIncludeFormulas
+      (\ s a -> s{_frrIncludeFormulas = a})
+
+-- | True if the find value should match the entire cell.
+frrMatchEntireCell :: Lens' FindReplaceRequest (Maybe Bool)
+frrMatchEntireCell
+  = lens _frrMatchEntireCell
+      (\ s a -> s{_frrMatchEntireCell = a})
+
+-- | The range to find\/replace over.
+frrRange :: Lens' FindReplaceRequest (Maybe GridRange)
+frrRange = lens _frrRange (\ s a -> s{_frrRange = a})
+
+-- | The sheet to find\/replace over.
+frrSheetId :: Lens' FindReplaceRequest (Maybe Int32)
+frrSheetId
+  = lens _frrSheetId (\ s a -> s{_frrSheetId = a}) .
+      mapping _Coerce
+
+-- | The value to search.
+frrFind :: Lens' FindReplaceRequest (Maybe Text)
+frrFind = lens _frrFind (\ s a -> s{_frrFind = a})
+
+-- | True if the find value is a regex. The regular expression and
+-- replacement should follow Java regex rules at
+-- https:\/\/docs.oracle.com\/javase\/8\/docs\/api\/java\/util\/regex\/Pattern.html.
+-- The replacement string is allowed to refer to capturing groups. For
+-- example, if one cell has the contents \`\"Google Sheets\"\` and another
+-- has \`\"Google Docs\"\`, then searching for \`\"o.* (.*)\"\` with a
+-- replacement of \`\"$1 Rocks\"\` would change the contents of the cells
+-- to \`\"GSheets Rocks\"\` and \`\"GDocs Rocks\"\` respectively.
+frrSearchByRegex :: Lens' FindReplaceRequest (Maybe Bool)
+frrSearchByRegex
+  = lens _frrSearchByRegex
+      (\ s a -> s{_frrSearchByRegex = a})
+
+-- | The value to use as the replacement.
+frrReplacement :: Lens' FindReplaceRequest (Maybe Text)
+frrReplacement
+  = lens _frrReplacement
+      (\ s a -> s{_frrReplacement = a})
+
+instance FromJSON FindReplaceRequest where
+        parseJSON
+          = withObject "FindReplaceRequest"
+              (\ o ->
+                 FindReplaceRequest' <$>
+                   (o .:? "matchCase") <*> (o .:? "allSheets") <*>
+                     (o .:? "includeFormulas")
+                     <*> (o .:? "matchEntireCell")
+                     <*> (o .:? "range")
+                     <*> (o .:? "sheetId")
+                     <*> (o .:? "find")
+                     <*> (o .:? "searchByRegex")
+                     <*> (o .:? "replacement"))
+
+instance ToJSON FindReplaceRequest where
+        toJSON FindReplaceRequest'{..}
+          = object
+              (catMaybes
+                 [("matchCase" .=) <$> _frrMatchCase,
+                  ("allSheets" .=) <$> _frrAllSheets,
+                  ("includeFormulas" .=) <$> _frrIncludeFormulas,
+                  ("matchEntireCell" .=) <$> _frrMatchEntireCell,
+                  ("range" .=) <$> _frrRange,
+                  ("sheetId" .=) <$> _frrSheetId,
+                  ("find" .=) <$> _frrFind,
+                  ("searchByRegex" .=) <$> _frrSearchByRegex,
+                  ("replacement" .=) <$> _frrReplacement])
+
+-- | Moves one or more rows or columns.
+--
+-- /See:/ 'moveDimensionRequest' smart constructor.
+data MoveDimensionRequest = MoveDimensionRequest'
+    { _mdrDestinationIndex :: !(Maybe (Textual Int32))
+    , _mdrSource           :: !(Maybe DimensionRange)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MoveDimensionRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mdrDestinationIndex'
+--
+-- * 'mdrSource'
+moveDimensionRequest
+    :: MoveDimensionRequest
+moveDimensionRequest =
+    MoveDimensionRequest'
+    { _mdrDestinationIndex = Nothing
+    , _mdrSource = Nothing
+    }
+
+-- | The zero-based start index of where to move the source data to, based on
+-- the coordinates *before* the source data is removed from the grid.
+-- Existing data will be shifted down or right (depending on the dimension)
+-- to make room for the moved dimensions. The source dimensions are removed
+-- from the grid, so the the data may end up in a different index than
+-- specified. For example, given \`A1..A5\` of \`0, 1, 2, 3, 4\` and
+-- wanting to move \`\"1\"\` and \`\"2\"\` to between \`\"3\"\` and
+-- \`\"4\"\`, the source would be \`ROWS [1..3)\`,and the destination index
+-- would be \`\"4\"\` (the zero-based index of row 5). The end result would
+-- be \`A1..A5\` of \`0, 3, 1, 2, 4\`.
+mdrDestinationIndex :: Lens' MoveDimensionRequest (Maybe Int32)
+mdrDestinationIndex
+  = lens _mdrDestinationIndex
+      (\ s a -> s{_mdrDestinationIndex = a})
+      . mapping _Coerce
+
+-- | The source dimensions to move.
+mdrSource :: Lens' MoveDimensionRequest (Maybe DimensionRange)
+mdrSource
+  = lens _mdrSource (\ s a -> s{_mdrSource = a})
+
+instance FromJSON MoveDimensionRequest where
+        parseJSON
+          = withObject "MoveDimensionRequest"
+              (\ o ->
+                 MoveDimensionRequest' <$>
+                   (o .:? "destinationIndex") <*> (o .:? "source"))
+
+instance ToJSON MoveDimensionRequest where
+        toJSON MoveDimensionRequest'{..}
+          = object
+              (catMaybes
+                 [("destinationIndex" .=) <$> _mdrDestinationIndex,
+                  ("source" .=) <$> _mdrSource])
+
+-- | The request for retrieving a range of values in a spreadsheet selected
+-- by a set of DataFilters.
+--
+-- /See:/ 'batchGetValuesByDataFilterRequest' smart constructor.
+data BatchGetValuesByDataFilterRequest = BatchGetValuesByDataFilterRequest'
+    { _bgvbdfrValueRenderOption    :: !(Maybe BatchGetValuesByDataFilterRequestValueRenderOption)
+    , _bgvbdfrDataFilters          :: !(Maybe [DataFilter])
+    , _bgvbdfrDateTimeRenderOption :: !(Maybe BatchGetValuesByDataFilterRequestDateTimeRenderOption)
+    , _bgvbdfrMajorDimension       :: !(Maybe BatchGetValuesByDataFilterRequestMajorDimension)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BatchGetValuesByDataFilterRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bgvbdfrValueRenderOption'
+--
+-- * 'bgvbdfrDataFilters'
+--
+-- * 'bgvbdfrDateTimeRenderOption'
+--
+-- * 'bgvbdfrMajorDimension'
+batchGetValuesByDataFilterRequest
+    :: BatchGetValuesByDataFilterRequest
+batchGetValuesByDataFilterRequest =
+    BatchGetValuesByDataFilterRequest'
+    { _bgvbdfrValueRenderOption = Nothing
+    , _bgvbdfrDataFilters = Nothing
+    , _bgvbdfrDateTimeRenderOption = Nothing
+    , _bgvbdfrMajorDimension = Nothing
+    }
+
+-- | How values should be represented in the output. The default render
+-- option is ValueRenderOption.FORMATTED_VALUE.
+bgvbdfrValueRenderOption :: Lens' BatchGetValuesByDataFilterRequest (Maybe BatchGetValuesByDataFilterRequestValueRenderOption)
+bgvbdfrValueRenderOption
+  = lens _bgvbdfrValueRenderOption
+      (\ s a -> s{_bgvbdfrValueRenderOption = a})
+
+-- | The data filters used to match the ranges of values to retrieve. Ranges
+-- that match any of the specified data filters will be included in the
+-- response.
+bgvbdfrDataFilters :: Lens' BatchGetValuesByDataFilterRequest [DataFilter]
+bgvbdfrDataFilters
+  = lens _bgvbdfrDataFilters
+      (\ s a -> s{_bgvbdfrDataFilters = a})
+      . _Default
+      . _Coerce
+
+-- | How dates, times, and durations should be represented in the output.
+-- This is ignored if value_render_option is FORMATTED_VALUE. The default
+-- dateTime render option is [DateTimeRenderOption.SERIAL_NUMBER].
+bgvbdfrDateTimeRenderOption :: Lens' BatchGetValuesByDataFilterRequest (Maybe BatchGetValuesByDataFilterRequestDateTimeRenderOption)
+bgvbdfrDateTimeRenderOption
+  = lens _bgvbdfrDateTimeRenderOption
+      (\ s a -> s{_bgvbdfrDateTimeRenderOption = a})
+
+-- | The major dimension that results should use. For example, if the
+-- spreadsheet data is: \`A1=1,B1=2,A2=3,B2=4\`, then a request that
+-- selects that range and sets \`majorDimension=ROWS\` will return
+-- \`[[1,2],[3,4]]\`, whereas a request that sets
+-- \`majorDimension=COLUMNS\` will return \`[[1,3],[2,4]]\`.
+bgvbdfrMajorDimension :: Lens' BatchGetValuesByDataFilterRequest (Maybe BatchGetValuesByDataFilterRequestMajorDimension)
+bgvbdfrMajorDimension
+  = lens _bgvbdfrMajorDimension
+      (\ s a -> s{_bgvbdfrMajorDimension = a})
+
+instance FromJSON BatchGetValuesByDataFilterRequest
+         where
+        parseJSON
+          = withObject "BatchGetValuesByDataFilterRequest"
+              (\ o ->
+                 BatchGetValuesByDataFilterRequest' <$>
+                   (o .:? "valueRenderOption") <*>
+                     (o .:? "dataFilters" .!= mempty)
+                     <*> (o .:? "dateTimeRenderOption")
+                     <*> (o .:? "majorDimension"))
+
+instance ToJSON BatchGetValuesByDataFilterRequest
+         where
+        toJSON BatchGetValuesByDataFilterRequest'{..}
+          = object
+              (catMaybes
+                 [("valueRenderOption" .=) <$>
+                    _bgvbdfrValueRenderOption,
+                  ("dataFilters" .=) <$> _bgvbdfrDataFilters,
+                  ("dateTimeRenderOption" .=) <$>
+                    _bgvbdfrDateTimeRenderOption,
+                  ("majorDimension" .=) <$> _bgvbdfrMajorDimension])
+
+-- | A rule that applies a gradient color scale format, based on the
+-- interpolation points listed. The format of a cell will vary based on its
+-- contents as compared to the values of the interpolation points.
+--
+-- /See:/ 'gradientRule' smart constructor.
+data GradientRule = GradientRule'
+    { _grMidpoint :: !(Maybe InterpolationPoint)
+    , _grMaxpoint :: !(Maybe InterpolationPoint)
+    , _grMinpoint :: !(Maybe InterpolationPoint)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GradientRule' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'grMidpoint'
+--
+-- * 'grMaxpoint'
+--
+-- * 'grMinpoint'
+gradientRule
+    :: GradientRule
+gradientRule =
+    GradientRule'
+    { _grMidpoint = Nothing
+    , _grMaxpoint = Nothing
+    , _grMinpoint = Nothing
+    }
+
+-- | An optional midway interpolation point.
+grMidpoint :: Lens' GradientRule (Maybe InterpolationPoint)
+grMidpoint
+  = lens _grMidpoint (\ s a -> s{_grMidpoint = a})
+
+-- | The final interpolation point.
+grMaxpoint :: Lens' GradientRule (Maybe InterpolationPoint)
+grMaxpoint
+  = lens _grMaxpoint (\ s a -> s{_grMaxpoint = a})
+
+-- | The starting interpolation point.
+grMinpoint :: Lens' GradientRule (Maybe InterpolationPoint)
+grMinpoint
+  = lens _grMinpoint (\ s a -> s{_grMinpoint = a})
+
+instance FromJSON GradientRule where
+        parseJSON
+          = withObject "GradientRule"
+              (\ o ->
+                 GradientRule' <$>
+                   (o .:? "midpoint") <*> (o .:? "maxpoint") <*>
+                     (o .:? "minpoint"))
+
+instance ToJSON GradientRule where
+        toJSON GradientRule'{..}
+          = object
+              (catMaybes
+                 [("midpoint" .=) <$> _grMidpoint,
+                  ("maxpoint" .=) <$> _grMaxpoint,
+                  ("minpoint" .=) <$> _grMinpoint])
+
+-- | Moves data from the source to the destination.
+--
+-- /See:/ 'cutPasteRequest' smart constructor.
+data CutPasteRequest = CutPasteRequest'
+    { _cDestination :: !(Maybe GridCoordinate)
+    , _cSource      :: !(Maybe GridRange)
+    , _cPasteType   :: !(Maybe CutPasteRequestPasteType)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CutPasteRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cDestination'
+--
+-- * 'cSource'
+--
+-- * 'cPasteType'
+cutPasteRequest
+    :: CutPasteRequest
+cutPasteRequest =
+    CutPasteRequest'
+    { _cDestination = Nothing
+    , _cSource = Nothing
+    , _cPasteType = Nothing
+    }
+
+-- | The top-left coordinate where the data should be pasted.
+cDestination :: Lens' CutPasteRequest (Maybe GridCoordinate)
+cDestination
+  = lens _cDestination (\ s a -> s{_cDestination = a})
+
+-- | The source data to cut.
+cSource :: Lens' CutPasteRequest (Maybe GridRange)
+cSource = lens _cSource (\ s a -> s{_cSource = a})
+
+-- | What kind of data to paste. All the source data will be cut, regardless
+-- of what is pasted.
+cPasteType :: Lens' CutPasteRequest (Maybe CutPasteRequestPasteType)
+cPasteType
+  = lens _cPasteType (\ s a -> s{_cPasteType = a})
+
+instance FromJSON CutPasteRequest where
+        parseJSON
+          = withObject "CutPasteRequest"
+              (\ o ->
+                 CutPasteRequest' <$>
+                   (o .:? "destination") <*> (o .:? "source") <*>
+                     (o .:? "pasteType"))
+
+instance ToJSON CutPasteRequest where
+        toJSON CutPasteRequest'{..}
+          = object
+              (catMaybes
+                 [("destination" .=) <$> _cDestination,
+                  ("source" .=) <$> _cSource,
+                  ("pasteType" .=) <$> _cPasteType])
+
+-- | The result of updating an embedded object\'s position.
+--
+-- /See:/ 'updateEmbeddedObjectPositionResponse' smart constructor.
+newtype UpdateEmbeddedObjectPositionResponse = UpdateEmbeddedObjectPositionResponse'
+    { _ueoprPosition :: Maybe EmbeddedObjectPosition
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdateEmbeddedObjectPositionResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ueoprPosition'
+updateEmbeddedObjectPositionResponse
+    :: UpdateEmbeddedObjectPositionResponse
+updateEmbeddedObjectPositionResponse =
+    UpdateEmbeddedObjectPositionResponse'
+    { _ueoprPosition = Nothing
+    }
+
+-- | The new position of the embedded object.
+ueoprPosition :: Lens' UpdateEmbeddedObjectPositionResponse (Maybe EmbeddedObjectPosition)
+ueoprPosition
+  = lens _ueoprPosition
+      (\ s a -> s{_ueoprPosition = a})
+
+instance FromJSON
+         UpdateEmbeddedObjectPositionResponse where
+        parseJSON
+          = withObject "UpdateEmbeddedObjectPositionResponse"
+              (\ o ->
+                 UpdateEmbeddedObjectPositionResponse' <$>
+                   (o .:? "position"))
+
+instance ToJSON UpdateEmbeddedObjectPositionResponse
+         where
+        toJSON UpdateEmbeddedObjectPositionResponse'{..}
+          = object
+              (catMaybes [("position" .=) <$> _ueoprPosition])
+
+-- | A custom subtotal column for a waterfall chart series.
+--
+-- /See:/ 'waterfallChartCustomSubtotal' smart constructor.
+data WaterfallChartCustomSubtotal = WaterfallChartCustomSubtotal'
+    { _wccsDataIsSubtotal :: !(Maybe Bool)
+    , _wccsSubtotalIndex  :: !(Maybe (Textual Int32))
+    , _wccsLabel          :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'WaterfallChartCustomSubtotal' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'wccsDataIsSubtotal'
+--
+-- * 'wccsSubtotalIndex'
+--
+-- * 'wccsLabel'
+waterfallChartCustomSubtotal
+    :: WaterfallChartCustomSubtotal
+waterfallChartCustomSubtotal =
+    WaterfallChartCustomSubtotal'
+    { _wccsDataIsSubtotal = Nothing
+    , _wccsSubtotalIndex = Nothing
+    , _wccsLabel = Nothing
+    }
+
+-- | True if the data point at subtotal_index is the subtotal. If false, the
+-- subtotal will be computed and appear after the data point.
+wccsDataIsSubtotal :: Lens' WaterfallChartCustomSubtotal (Maybe Bool)
+wccsDataIsSubtotal
+  = lens _wccsDataIsSubtotal
+      (\ s a -> s{_wccsDataIsSubtotal = a})
+
+-- | The 0-based index of a data point within the series. If data_is_subtotal
+-- is true, the data point at this index is the subtotal. Otherwise, the
+-- subtotal appears after the data point with this index. A series can have
+-- multiple subtotals at arbitrary indices, but subtotals do not affect the
+-- indices of the data points. For example, if a series has three data
+-- points, their indices will always be 0, 1, and 2, regardless of how many
+-- subtotals exist on the series or what data points they are associated
+-- with.
+wccsSubtotalIndex :: Lens' WaterfallChartCustomSubtotal (Maybe Int32)
+wccsSubtotalIndex
+  = lens _wccsSubtotalIndex
+      (\ s a -> s{_wccsSubtotalIndex = a})
+      . mapping _Coerce
+
+-- | A label for the subtotal column.
+wccsLabel :: Lens' WaterfallChartCustomSubtotal (Maybe Text)
+wccsLabel
+  = lens _wccsLabel (\ s a -> s{_wccsLabel = a})
+
+instance FromJSON WaterfallChartCustomSubtotal where
+        parseJSON
+          = withObject "WaterfallChartCustomSubtotal"
+              (\ o ->
+                 WaterfallChartCustomSubtotal' <$>
+                   (o .:? "dataIsSubtotal") <*> (o .:? "subtotalIndex")
+                     <*> (o .:? "label"))
+
+instance ToJSON WaterfallChartCustomSubtotal where
+        toJSON WaterfallChartCustomSubtotal'{..}
+          = object
+              (catMaybes
+                 [("dataIsSubtotal" .=) <$> _wccsDataIsSubtotal,
+                  ("subtotalIndex" .=) <$> _wccsSubtotalIndex,
+                  ("label" .=) <$> _wccsLabel])
+
+-- | A single response from an update.
+--
+-- /See:/ 'response' smart constructor.
+data Response = Response'
+    { _rAddFilterView                :: !(Maybe AddFilterViewResponse)
+    , _rCreateDeveloperMetadata      :: !(Maybe CreateDeveloperMetadataResponse)
+    , _rDuplicateFilterView          :: !(Maybe DuplicateFilterViewResponse)
+    , _rUpdateEmbeddedObjectPosition :: !(Maybe UpdateEmbeddedObjectPositionResponse)
+    , _rDeleteDimensionGroup         :: !(Maybe DeleteDimensionGroupResponse)
+    , _rAddSheet                     :: !(Maybe AddSheetResponse)
+    , _rFindReplace                  :: !(Maybe FindReplaceResponse)
+    , _rAddProtectedRange            :: !(Maybe AddProtectedRangeResponse)
+    , _rDeleteConditionalFormatRule  :: !(Maybe DeleteConditionalFormatRuleResponse)
+    , _rUpdateConditionalFormatRule  :: !(Maybe UpdateConditionalFormatRuleResponse)
+    , _rDeleteDeveloperMetadata      :: !(Maybe DeleteDeveloperMetadataResponse)
+    , _rUpdateDeveloperMetadata      :: !(Maybe UpdateDeveloperMetadataResponse)
+    , _rAddNamedRange                :: !(Maybe AddNamedRangeResponse)
+    , _rAddChart                     :: !(Maybe AddChartResponse)
+    , _rAddBanding                   :: !(Maybe AddBandingResponse)
+    , _rDuplicateSheet               :: !(Maybe DuplicateSheetResponse)
+    , _rAddDimensionGroup            :: !(Maybe AddDimensionGroupResponse)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Response' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rAddFilterView'
+--
+-- * 'rCreateDeveloperMetadata'
+--
+-- * 'rDuplicateFilterView'
+--
+-- * 'rUpdateEmbeddedObjectPosition'
+--
+-- * 'rDeleteDimensionGroup'
+--
+-- * 'rAddSheet'
+--
+-- * 'rFindReplace'
+--
+-- * 'rAddProtectedRange'
+--
+-- * 'rDeleteConditionalFormatRule'
+--
+-- * 'rUpdateConditionalFormatRule'
+--
+-- * 'rDeleteDeveloperMetadata'
+--
+-- * 'rUpdateDeveloperMetadata'
+--
+-- * 'rAddNamedRange'
+--
+-- * 'rAddChart'
+--
+-- * 'rAddBanding'
+--
+-- * 'rDuplicateSheet'
+--
+-- * 'rAddDimensionGroup'
+response
+    :: Response
+response =
+    Response'
+    { _rAddFilterView = Nothing
+    , _rCreateDeveloperMetadata = Nothing
+    , _rDuplicateFilterView = Nothing
+    , _rUpdateEmbeddedObjectPosition = Nothing
+    , _rDeleteDimensionGroup = Nothing
+    , _rAddSheet = Nothing
+    , _rFindReplace = Nothing
+    , _rAddProtectedRange = Nothing
+    , _rDeleteConditionalFormatRule = Nothing
+    , _rUpdateConditionalFormatRule = Nothing
+    , _rDeleteDeveloperMetadata = Nothing
+    , _rUpdateDeveloperMetadata = Nothing
+    , _rAddNamedRange = Nothing
+    , _rAddChart = Nothing
+    , _rAddBanding = Nothing
+    , _rDuplicateSheet = Nothing
+    , _rAddDimensionGroup = Nothing
+    }
+
+-- | A reply from adding a filter view.
+rAddFilterView :: Lens' Response (Maybe AddFilterViewResponse)
+rAddFilterView
+  = lens _rAddFilterView
+      (\ s a -> s{_rAddFilterView = a})
+
+-- | A reply from creating a developer metadata entry.
+rCreateDeveloperMetadata :: Lens' Response (Maybe CreateDeveloperMetadataResponse)
+rCreateDeveloperMetadata
+  = lens _rCreateDeveloperMetadata
+      (\ s a -> s{_rCreateDeveloperMetadata = a})
+
+-- | A reply from duplicating a filter view.
+rDuplicateFilterView :: Lens' Response (Maybe DuplicateFilterViewResponse)
+rDuplicateFilterView
+  = lens _rDuplicateFilterView
+      (\ s a -> s{_rDuplicateFilterView = a})
+
+-- | A reply from updating an embedded object\'s position.
+rUpdateEmbeddedObjectPosition :: Lens' Response (Maybe UpdateEmbeddedObjectPositionResponse)
+rUpdateEmbeddedObjectPosition
+  = lens _rUpdateEmbeddedObjectPosition
+      (\ s a -> s{_rUpdateEmbeddedObjectPosition = a})
+
+-- | A reply from deleting a dimension group.
+rDeleteDimensionGroup :: Lens' Response (Maybe DeleteDimensionGroupResponse)
+rDeleteDimensionGroup
+  = lens _rDeleteDimensionGroup
+      (\ s a -> s{_rDeleteDimensionGroup = a})
+
+-- | A reply from adding a sheet.
+rAddSheet :: Lens' Response (Maybe AddSheetResponse)
+rAddSheet
+  = lens _rAddSheet (\ s a -> s{_rAddSheet = a})
+
+-- | A reply from doing a find\/replace.
+rFindReplace :: Lens' Response (Maybe FindReplaceResponse)
+rFindReplace
+  = lens _rFindReplace (\ s a -> s{_rFindReplace = a})
+
+-- | A reply from adding a protected range.
+rAddProtectedRange :: Lens' Response (Maybe AddProtectedRangeResponse)
+rAddProtectedRange
+  = lens _rAddProtectedRange
+      (\ s a -> s{_rAddProtectedRange = a})
+
+-- | A reply from deleting a conditional format rule.
+rDeleteConditionalFormatRule :: Lens' Response (Maybe DeleteConditionalFormatRuleResponse)
+rDeleteConditionalFormatRule
+  = lens _rDeleteConditionalFormatRule
+      (\ s a -> s{_rDeleteConditionalFormatRule = a})
+
+-- | A reply from updating a conditional format rule.
+rUpdateConditionalFormatRule :: Lens' Response (Maybe UpdateConditionalFormatRuleResponse)
+rUpdateConditionalFormatRule
+  = lens _rUpdateConditionalFormatRule
+      (\ s a -> s{_rUpdateConditionalFormatRule = a})
+
+-- | A reply from deleting a developer metadata entry.
+rDeleteDeveloperMetadata :: Lens' Response (Maybe DeleteDeveloperMetadataResponse)
+rDeleteDeveloperMetadata
+  = lens _rDeleteDeveloperMetadata
+      (\ s a -> s{_rDeleteDeveloperMetadata = a})
+
+-- | A reply from updating a developer metadata entry.
+rUpdateDeveloperMetadata :: Lens' Response (Maybe UpdateDeveloperMetadataResponse)
+rUpdateDeveloperMetadata
+  = lens _rUpdateDeveloperMetadata
+      (\ s a -> s{_rUpdateDeveloperMetadata = a})
+
+-- | A reply from adding a named range.
+rAddNamedRange :: Lens' Response (Maybe AddNamedRangeResponse)
+rAddNamedRange
+  = lens _rAddNamedRange
+      (\ s a -> s{_rAddNamedRange = a})
+
+-- | A reply from adding a chart.
+rAddChart :: Lens' Response (Maybe AddChartResponse)
+rAddChart
+  = lens _rAddChart (\ s a -> s{_rAddChart = a})
+
+-- | A reply from adding a banded range.
+rAddBanding :: Lens' Response (Maybe AddBandingResponse)
+rAddBanding
+  = lens _rAddBanding (\ s a -> s{_rAddBanding = a})
+
+-- | A reply from duplicating a sheet.
+rDuplicateSheet :: Lens' Response (Maybe DuplicateSheetResponse)
+rDuplicateSheet
+  = lens _rDuplicateSheet
+      (\ s a -> s{_rDuplicateSheet = a})
+
+-- | A reply from adding a dimension group.
+rAddDimensionGroup :: Lens' Response (Maybe AddDimensionGroupResponse)
+rAddDimensionGroup
+  = lens _rAddDimensionGroup
+      (\ s a -> s{_rAddDimensionGroup = a})
+
+instance FromJSON Response where
+        parseJSON
+          = withObject "Response"
+              (\ o ->
+                 Response' <$>
+                   (o .:? "addFilterView") <*>
+                     (o .:? "createDeveloperMetadata")
+                     <*> (o .:? "duplicateFilterView")
+                     <*> (o .:? "updateEmbeddedObjectPosition")
+                     <*> (o .:? "deleteDimensionGroup")
+                     <*> (o .:? "addSheet")
+                     <*> (o .:? "findReplace")
+                     <*> (o .:? "addProtectedRange")
+                     <*> (o .:? "deleteConditionalFormatRule")
+                     <*> (o .:? "updateConditionalFormatRule")
+                     <*> (o .:? "deleteDeveloperMetadata")
+                     <*> (o .:? "updateDeveloperMetadata")
+                     <*> (o .:? "addNamedRange")
+                     <*> (o .:? "addChart")
+                     <*> (o .:? "addBanding")
+                     <*> (o .:? "duplicateSheet")
+                     <*> (o .:? "addDimensionGroup"))
+
+instance ToJSON Response where
+        toJSON Response'{..}
+          = object
+              (catMaybes
+                 [("addFilterView" .=) <$> _rAddFilterView,
+                  ("createDeveloperMetadata" .=) <$>
+                    _rCreateDeveloperMetadata,
+                  ("duplicateFilterView" .=) <$> _rDuplicateFilterView,
+                  ("updateEmbeddedObjectPosition" .=) <$>
+                    _rUpdateEmbeddedObjectPosition,
+                  ("deleteDimensionGroup" .=) <$>
+                    _rDeleteDimensionGroup,
+                  ("addSheet" .=) <$> _rAddSheet,
+                  ("findReplace" .=) <$> _rFindReplace,
+                  ("addProtectedRange" .=) <$> _rAddProtectedRange,
+                  ("deleteConditionalFormatRule" .=) <$>
+                    _rDeleteConditionalFormatRule,
+                  ("updateConditionalFormatRule" .=) <$>
+                    _rUpdateConditionalFormatRule,
+                  ("deleteDeveloperMetadata" .=) <$>
+                    _rDeleteDeveloperMetadata,
+                  ("updateDeveloperMetadata" .=) <$>
+                    _rUpdateDeveloperMetadata,
+                  ("addNamedRange" .=) <$> _rAddNamedRange,
+                  ("addChart" .=) <$> _rAddChart,
+                  ("addBanding" .=) <$> _rAddBanding,
+                  ("duplicateSheet" .=) <$> _rDuplicateSheet,
+                  ("addDimensionGroup" .=) <$> _rAddDimensionGroup])
+
+-- | Criteria for showing\/hiding rows in a filter or filter view.
+--
+-- /See:/ 'filterCriteria' smart constructor.
+data FilterCriteria = FilterCriteria'
+    { _fcHiddenValues :: !(Maybe [Text])
+    , _fcCondition    :: !(Maybe BooleanCondition)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FilterCriteria' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fcHiddenValues'
+--
+-- * 'fcCondition'
+filterCriteria
+    :: FilterCriteria
+filterCriteria =
+    FilterCriteria'
+    { _fcHiddenValues = Nothing
+    , _fcCondition = Nothing
+    }
+
+-- | Values that should be hidden.
+fcHiddenValues :: Lens' FilterCriteria [Text]
+fcHiddenValues
+  = lens _fcHiddenValues
+      (\ s a -> s{_fcHiddenValues = a})
+      . _Default
+      . _Coerce
+
+-- | A condition that must be true for values to be shown. (This does not
+-- override hiddenValues -- if a value is listed there, it will still be
+-- hidden.)
+fcCondition :: Lens' FilterCriteria (Maybe BooleanCondition)
+fcCondition
+  = lens _fcCondition (\ s a -> s{_fcCondition = a})
+
+instance FromJSON FilterCriteria where
+        parseJSON
+          = withObject "FilterCriteria"
+              (\ o ->
+                 FilterCriteria' <$>
+                   (o .:? "hiddenValues" .!= mempty) <*>
+                     (o .:? "condition"))
+
+instance ToJSON FilterCriteria where
+        toJSON FilterCriteria'{..}
+          = object
+              (catMaybes
+                 [("hiddenValues" .=) <$> _fcHiddenValues,
+                  ("condition" .=) <$> _fcCondition])
+
+-- | An error in a cell.
+--
+-- /See:/ 'errorValue' smart constructor.
+data ErrorValue = ErrorValue'
+    { _evType    :: !(Maybe ErrorValueType)
+    , _evMessage :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ErrorValue' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'evType'
+--
+-- * 'evMessage'
+errorValue
+    :: ErrorValue
+errorValue =
+    ErrorValue'
+    { _evType = Nothing
+    , _evMessage = Nothing
+    }
+
+-- | The type of error.
+evType :: Lens' ErrorValue (Maybe ErrorValueType)
+evType = lens _evType (\ s a -> s{_evType = a})
+
+-- | A message with more information about the error (in the spreadsheet\'s
+-- locale).
+evMessage :: Lens' ErrorValue (Maybe Text)
+evMessage
+  = lens _evMessage (\ s a -> s{_evMessage = a})
+
+instance FromJSON ErrorValue where
+        parseJSON
+          = withObject "ErrorValue"
+              (\ o ->
+                 ErrorValue' <$> (o .:? "type") <*> (o .:? "message"))
+
+instance ToJSON ErrorValue where
+        toJSON ErrorValue'{..}
+          = object
+              (catMaybes
+                 [("type" .=) <$> _evType,
+                  ("message" .=) <$> _evMessage])
+
+-- | Updates a conditional format rule at the given index, or moves a
+-- conditional format rule to another index.
+--
+-- /See:/ 'updateConditionalFormatRuleRequest' smart constructor.
+data UpdateConditionalFormatRuleRequest = UpdateConditionalFormatRuleRequest'
+    { _ucfrrRule     :: !(Maybe ConditionalFormatRule)
+    , _ucfrrNewIndex :: !(Maybe (Textual Int32))
+    , _ucfrrSheetId  :: !(Maybe (Textual Int32))
+    , _ucfrrIndex    :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdateConditionalFormatRuleRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ucfrrRule'
+--
+-- * 'ucfrrNewIndex'
+--
+-- * 'ucfrrSheetId'
+--
+-- * 'ucfrrIndex'
+updateConditionalFormatRuleRequest
+    :: UpdateConditionalFormatRuleRequest
+updateConditionalFormatRuleRequest =
+    UpdateConditionalFormatRuleRequest'
+    { _ucfrrRule = Nothing
+    , _ucfrrNewIndex = Nothing
+    , _ucfrrSheetId = Nothing
+    , _ucfrrIndex = Nothing
+    }
+
+-- | The rule that should replace the rule at the given index.
+ucfrrRule :: Lens' UpdateConditionalFormatRuleRequest (Maybe ConditionalFormatRule)
+ucfrrRule
+  = lens _ucfrrRule (\ s a -> s{_ucfrrRule = a})
+
+-- | The zero-based new index the rule should end up at.
+ucfrrNewIndex :: Lens' UpdateConditionalFormatRuleRequest (Maybe Int32)
+ucfrrNewIndex
+  = lens _ucfrrNewIndex
+      (\ s a -> s{_ucfrrNewIndex = a})
+      . mapping _Coerce
+
+-- | The sheet of the rule to move. Required if new_index is set, unused
+-- otherwise.
+ucfrrSheetId :: Lens' UpdateConditionalFormatRuleRequest (Maybe Int32)
+ucfrrSheetId
+  = lens _ucfrrSheetId (\ s a -> s{_ucfrrSheetId = a})
+      . mapping _Coerce
+
+-- | The zero-based index of the rule that should be replaced or moved.
+ucfrrIndex :: Lens' UpdateConditionalFormatRuleRequest (Maybe Int32)
+ucfrrIndex
+  = lens _ucfrrIndex (\ s a -> s{_ucfrrIndex = a}) .
+      mapping _Coerce
+
+instance FromJSON UpdateConditionalFormatRuleRequest
+         where
+        parseJSON
+          = withObject "UpdateConditionalFormatRuleRequest"
+              (\ o ->
+                 UpdateConditionalFormatRuleRequest' <$>
+                   (o .:? "rule") <*> (o .:? "newIndex") <*>
+                     (o .:? "sheetId")
+                     <*> (o .:? "index"))
+
+instance ToJSON UpdateConditionalFormatRuleRequest
+         where
+        toJSON UpdateConditionalFormatRuleRequest'{..}
+          = object
+              (catMaybes
+                 [("rule" .=) <$> _ucfrrRule,
+                  ("newIndex" .=) <$> _ucfrrNewIndex,
+                  ("sheetId" .=) <$> _ucfrrSheetId,
+                  ("index" .=) <$> _ucfrrIndex])
+
+-- | Deletes a conditional format rule at the given index. All subsequent
+-- rules\' indexes are decremented.
+--
+-- /See:/ 'deleteConditionalFormatRuleRequest' smart constructor.
+data DeleteConditionalFormatRuleRequest = DeleteConditionalFormatRuleRequest'
+    { _dcfrrSheetId :: !(Maybe (Textual Int32))
+    , _dcfrrIndex   :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteConditionalFormatRuleRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dcfrrSheetId'
+--
+-- * 'dcfrrIndex'
+deleteConditionalFormatRuleRequest
+    :: DeleteConditionalFormatRuleRequest
+deleteConditionalFormatRuleRequest =
+    DeleteConditionalFormatRuleRequest'
+    { _dcfrrSheetId = Nothing
+    , _dcfrrIndex = Nothing
+    }
+
+-- | The sheet the rule is being deleted from.
+dcfrrSheetId :: Lens' DeleteConditionalFormatRuleRequest (Maybe Int32)
+dcfrrSheetId
+  = lens _dcfrrSheetId (\ s a -> s{_dcfrrSheetId = a})
+      . mapping _Coerce
+
+-- | The zero-based index of the rule to be deleted.
+dcfrrIndex :: Lens' DeleteConditionalFormatRuleRequest (Maybe Int32)
+dcfrrIndex
+  = lens _dcfrrIndex (\ s a -> s{_dcfrrIndex = a}) .
+      mapping _Coerce
+
+instance FromJSON DeleteConditionalFormatRuleRequest
+         where
+        parseJSON
+          = withObject "DeleteConditionalFormatRuleRequest"
+              (\ o ->
+                 DeleteConditionalFormatRuleRequest' <$>
+                   (o .:? "sheetId") <*> (o .:? "index"))
+
+instance ToJSON DeleteConditionalFormatRuleRequest
+         where
+        toJSON DeleteConditionalFormatRuleRequest'{..}
+          = object
+              (catMaybes
+                 [("sheetId" .=) <$> _dcfrrSheetId,
+                  ("index" .=) <$> _dcfrrIndex])
+
+-- | A request to update properties of developer metadata. Updates the
+-- properties of the developer metadata selected by the filters to the
+-- values provided in the DeveloperMetadata resource. Callers must specify
+-- the properties they wish to update in the fields parameter, as well as
+-- specify at least one DataFilter matching the metadata they wish to
+-- update.
+--
+-- /See:/ 'updateDeveloperMetadataRequest' smart constructor.
+data UpdateDeveloperMetadataRequest = UpdateDeveloperMetadataRequest'
+    { _udmrDataFilters       :: !(Maybe [DataFilter])
+    , _udmrDeveloperMetadata :: !(Maybe DeveloperMetadata)
+    , _udmrFields            :: !(Maybe GFieldMask)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdateDeveloperMetadataRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'udmrDataFilters'
+--
+-- * 'udmrDeveloperMetadata'
+--
+-- * 'udmrFields'
+updateDeveloperMetadataRequest
+    :: UpdateDeveloperMetadataRequest
+updateDeveloperMetadataRequest =
+    UpdateDeveloperMetadataRequest'
+    { _udmrDataFilters = Nothing
+    , _udmrDeveloperMetadata = Nothing
+    , _udmrFields = Nothing
+    }
+
+-- | The filters matching the developer metadata entries to update.
+udmrDataFilters :: Lens' UpdateDeveloperMetadataRequest [DataFilter]
+udmrDataFilters
+  = lens _udmrDataFilters
+      (\ s a -> s{_udmrDataFilters = a})
+      . _Default
+      . _Coerce
+
+-- | The value that all metadata matched by the data filters will be updated
+-- to.
+udmrDeveloperMetadata :: Lens' UpdateDeveloperMetadataRequest (Maybe DeveloperMetadata)
+udmrDeveloperMetadata
+  = lens _udmrDeveloperMetadata
+      (\ s a -> s{_udmrDeveloperMetadata = a})
+
+-- | The fields that should be updated. At least one field must be specified.
+-- The root \`developerMetadata\` is implied and should not be specified. A
+-- single \`\"*\"\` can be used as short-hand for listing every field.
+udmrFields :: Lens' UpdateDeveloperMetadataRequest (Maybe GFieldMask)
+udmrFields
+  = lens _udmrFields (\ s a -> s{_udmrFields = a})
+
+instance FromJSON UpdateDeveloperMetadataRequest
+         where
+        parseJSON
+          = withObject "UpdateDeveloperMetadataRequest"
+              (\ o ->
+                 UpdateDeveloperMetadataRequest' <$>
+                   (o .:? "dataFilters" .!= mempty) <*>
+                     (o .:? "developerMetadata")
+                     <*> (o .:? "fields"))
+
+instance ToJSON UpdateDeveloperMetadataRequest where
+        toJSON UpdateDeveloperMetadataRequest'{..}
+          = object
+              (catMaybes
+                 [("dataFilters" .=) <$> _udmrDataFilters,
+                  ("developerMetadata" .=) <$> _udmrDeveloperMetadata,
+                  ("fields" .=) <$> _udmrFields])
+
+-- | A request to delete developer metadata.
+--
+-- /See:/ 'deleteDeveloperMetadataRequest' smart constructor.
+newtype DeleteDeveloperMetadataRequest = DeleteDeveloperMetadataRequest'
+    { _ddmrDataFilter :: Maybe DataFilter
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteDeveloperMetadataRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ddmrDataFilter'
+deleteDeveloperMetadataRequest
+    :: DeleteDeveloperMetadataRequest
+deleteDeveloperMetadataRequest =
+    DeleteDeveloperMetadataRequest'
+    { _ddmrDataFilter = Nothing
+    }
+
+-- | The data filter describing the criteria used to select which developer
+-- metadata entry to delete.
+ddmrDataFilter :: Lens' DeleteDeveloperMetadataRequest (Maybe DataFilter)
+ddmrDataFilter
+  = lens _ddmrDataFilter
+      (\ s a -> s{_ddmrDataFilter = a})
+
+instance FromJSON DeleteDeveloperMetadataRequest
+         where
+        parseJSON
+          = withObject "DeleteDeveloperMetadataRequest"
+              (\ o ->
+                 DeleteDeveloperMetadataRequest' <$>
+                   (o .:? "dataFilter"))
+
+instance ToJSON DeleteDeveloperMetadataRequest where
+        toJSON DeleteDeveloperMetadataRequest'{..}
+          = object
+              (catMaybes [("dataFilter" .=) <$> _ddmrDataFilter])
+
+-- | A waterfall chart.
+--
+-- /See:/ 'waterfallChartSpec' smart constructor.
+data WaterfallChartSpec = WaterfallChartSpec'
+    { _wcsStackedType        :: !(Maybe WaterfallChartSpecStackedType)
+    , _wcsConnectorLineStyle :: !(Maybe LineStyle)
+    , _wcsDomain             :: !(Maybe WaterfallChartDomain)
+    , _wcsSeries             :: !(Maybe [WaterfallChartSeries])
+    , _wcsHideConnectorLines :: !(Maybe Bool)
+    , _wcsFirstValueIsTotal  :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'WaterfallChartSpec' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'wcsStackedType'
+--
+-- * 'wcsConnectorLineStyle'
+--
+-- * 'wcsDomain'
+--
+-- * 'wcsSeries'
+--
+-- * 'wcsHideConnectorLines'
+--
+-- * 'wcsFirstValueIsTotal'
+waterfallChartSpec
+    :: WaterfallChartSpec
+waterfallChartSpec =
+    WaterfallChartSpec'
+    { _wcsStackedType = Nothing
+    , _wcsConnectorLineStyle = Nothing
+    , _wcsDomain = Nothing
+    , _wcsSeries = Nothing
+    , _wcsHideConnectorLines = Nothing
+    , _wcsFirstValueIsTotal = Nothing
+    }
+
+-- | The stacked type.
+wcsStackedType :: Lens' WaterfallChartSpec (Maybe WaterfallChartSpecStackedType)
+wcsStackedType
+  = lens _wcsStackedType
+      (\ s a -> s{_wcsStackedType = a})
+
+-- | The line style for the connector lines.
+wcsConnectorLineStyle :: Lens' WaterfallChartSpec (Maybe LineStyle)
+wcsConnectorLineStyle
+  = lens _wcsConnectorLineStyle
+      (\ s a -> s{_wcsConnectorLineStyle = a})
+
+-- | The domain data (horizontal axis) for the waterfall chart.
+wcsDomain :: Lens' WaterfallChartSpec (Maybe WaterfallChartDomain)
+wcsDomain
+  = lens _wcsDomain (\ s a -> s{_wcsDomain = a})
+
+-- | The data this waterfall chart is visualizing.
+wcsSeries :: Lens' WaterfallChartSpec [WaterfallChartSeries]
+wcsSeries
+  = lens _wcsSeries (\ s a -> s{_wcsSeries = a}) .
+      _Default
+      . _Coerce
+
+-- | True to hide connector lines between columns.
+wcsHideConnectorLines :: Lens' WaterfallChartSpec (Maybe Bool)
+wcsHideConnectorLines
+  = lens _wcsHideConnectorLines
+      (\ s a -> s{_wcsHideConnectorLines = a})
+
+-- | True to interpret the first value as a total.
+wcsFirstValueIsTotal :: Lens' WaterfallChartSpec (Maybe Bool)
+wcsFirstValueIsTotal
+  = lens _wcsFirstValueIsTotal
+      (\ s a -> s{_wcsFirstValueIsTotal = a})
+
+instance FromJSON WaterfallChartSpec where
+        parseJSON
+          = withObject "WaterfallChartSpec"
+              (\ o ->
+                 WaterfallChartSpec' <$>
+                   (o .:? "stackedType") <*>
+                     (o .:? "connectorLineStyle")
+                     <*> (o .:? "domain")
+                     <*> (o .:? "series" .!= mempty)
+                     <*> (o .:? "hideConnectorLines")
+                     <*> (o .:? "firstValueIsTotal"))
+
+instance ToJSON WaterfallChartSpec where
+        toJSON WaterfallChartSpec'{..}
+          = object
+              (catMaybes
+                 [("stackedType" .=) <$> _wcsStackedType,
+                  ("connectorLineStyle" .=) <$> _wcsConnectorLineStyle,
+                  ("domain" .=) <$> _wcsDomain,
+                  ("series" .=) <$> _wcsSeries,
+                  ("hideConnectorLines" .=) <$> _wcsHideConnectorLines,
+                  ("firstValueIsTotal" .=) <$> _wcsFirstValueIsTotal])
+
+-- | The location an object is overlaid on top of a grid.
+--
+-- /See:/ 'overlayPosition' smart constructor.
+data OverlayPosition = OverlayPosition'
+    { _opHeightPixels  :: !(Maybe (Textual Int32))
+    , _opOffSetYPixels :: !(Maybe (Textual Int32))
+    , _opAnchorCell    :: !(Maybe GridCoordinate)
+    , _opWidthPixels   :: !(Maybe (Textual Int32))
+    , _opOffSetXPixels :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'OverlayPosition' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'opHeightPixels'
+--
+-- * 'opOffSetYPixels'
+--
+-- * 'opAnchorCell'
+--
+-- * 'opWidthPixels'
+--
+-- * 'opOffSetXPixels'
+overlayPosition
+    :: OverlayPosition
+overlayPosition =
+    OverlayPosition'
+    { _opHeightPixels = Nothing
+    , _opOffSetYPixels = Nothing
+    , _opAnchorCell = Nothing
+    , _opWidthPixels = Nothing
+    , _opOffSetXPixels = Nothing
+    }
+
+-- | The height of the object, in pixels. Defaults to 371.
+opHeightPixels :: Lens' OverlayPosition (Maybe Int32)
+opHeightPixels
+  = lens _opHeightPixels
+      (\ s a -> s{_opHeightPixels = a})
+      . mapping _Coerce
+
+-- | The vertical offset, in pixels, that the object is offset from the
+-- anchor cell.
+opOffSetYPixels :: Lens' OverlayPosition (Maybe Int32)
+opOffSetYPixels
+  = lens _opOffSetYPixels
+      (\ s a -> s{_opOffSetYPixels = a})
+      . mapping _Coerce
+
+-- | The cell the object is anchored to.
+opAnchorCell :: Lens' OverlayPosition (Maybe GridCoordinate)
+opAnchorCell
+  = lens _opAnchorCell (\ s a -> s{_opAnchorCell = a})
+
+-- | The width of the object, in pixels. Defaults to 600.
+opWidthPixels :: Lens' OverlayPosition (Maybe Int32)
+opWidthPixels
+  = lens _opWidthPixels
+      (\ s a -> s{_opWidthPixels = a})
+      . mapping _Coerce
+
+-- | The horizontal offset, in pixels, that the object is offset from the
+-- anchor cell.
+opOffSetXPixels :: Lens' OverlayPosition (Maybe Int32)
+opOffSetXPixels
+  = lens _opOffSetXPixels
+      (\ s a -> s{_opOffSetXPixels = a})
+      . mapping _Coerce
+
+instance FromJSON OverlayPosition where
+        parseJSON
+          = withObject "OverlayPosition"
+              (\ o ->
+                 OverlayPosition' <$>
+                   (o .:? "heightPixels") <*> (o .:? "offsetYPixels")
+                     <*> (o .:? "anchorCell")
+                     <*> (o .:? "widthPixels")
+                     <*> (o .:? "offsetXPixels"))
+
+instance ToJSON OverlayPosition where
+        toJSON OverlayPosition'{..}
+          = object
+              (catMaybes
+                 [("heightPixels" .=) <$> _opHeightPixels,
+                  ("offsetYPixels" .=) <$> _opOffSetYPixels,
+                  ("anchorCell" .=) <$> _opAnchorCell,
+                  ("widthPixels" .=) <$> _opWidthPixels,
+                  ("offsetXPixels" .=) <$> _opOffSetXPixels])
+
+-- | Deletes the embedded object with the given ID.
+--
+-- /See:/ 'deleteEmbeddedObjectRequest' smart constructor.
+newtype DeleteEmbeddedObjectRequest = DeleteEmbeddedObjectRequest'
+    { _deorObjectId :: Maybe (Textual Int32)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteEmbeddedObjectRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'deorObjectId'
+deleteEmbeddedObjectRequest
+    :: DeleteEmbeddedObjectRequest
+deleteEmbeddedObjectRequest =
+    DeleteEmbeddedObjectRequest'
+    { _deorObjectId = Nothing
+    }
+
+-- | The ID of the embedded object to delete.
+deorObjectId :: Lens' DeleteEmbeddedObjectRequest (Maybe Int32)
+deorObjectId
+  = lens _deorObjectId (\ s a -> s{_deorObjectId = a})
+      . mapping _Coerce
+
+instance FromJSON DeleteEmbeddedObjectRequest where
+        parseJSON
+          = withObject "DeleteEmbeddedObjectRequest"
+              (\ o ->
+                 DeleteEmbeddedObjectRequest' <$> (o .:? "objectId"))
+
+instance ToJSON DeleteEmbeddedObjectRequest where
+        toJSON DeleteEmbeddedObjectRequest'{..}
+          = object
+              (catMaybes [("objectId" .=) <$> _deorObjectId])
+
+-- | A location where metadata may be associated in a spreadsheet.
+--
+-- /See:/ 'developerMetadataLocation' smart constructor.
+data DeveloperMetadataLocation = DeveloperMetadataLocation'
+    { _dmlSpreadsheet    :: !(Maybe Bool)
+    , _dmlDimensionRange :: !(Maybe DimensionRange)
+    , _dmlSheetId        :: !(Maybe (Textual Int32))
+    , _dmlLocationType   :: !(Maybe DeveloperMetadataLocationLocationType)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeveloperMetadataLocation' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dmlSpreadsheet'
+--
+-- * 'dmlDimensionRange'
+--
+-- * 'dmlSheetId'
+--
+-- * 'dmlLocationType'
+developerMetadataLocation
+    :: DeveloperMetadataLocation
+developerMetadataLocation =
+    DeveloperMetadataLocation'
+    { _dmlSpreadsheet = Nothing
+    , _dmlDimensionRange = Nothing
+    , _dmlSheetId = Nothing
+    , _dmlLocationType = Nothing
+    }
+
+-- | True when metadata is associated with an entire spreadsheet.
+dmlSpreadsheet :: Lens' DeveloperMetadataLocation (Maybe Bool)
+dmlSpreadsheet
+  = lens _dmlSpreadsheet
+      (\ s a -> s{_dmlSpreadsheet = a})
+
+-- | Represents the row or column when metadata is associated with a
+-- dimension. The specified DimensionRange must represent a single row or
+-- column; it cannot be unbounded or span multiple rows or columns.
+dmlDimensionRange :: Lens' DeveloperMetadataLocation (Maybe DimensionRange)
+dmlDimensionRange
+  = lens _dmlDimensionRange
+      (\ s a -> s{_dmlDimensionRange = a})
+
+-- | The ID of the sheet when metadata is associated with an entire sheet.
+dmlSheetId :: Lens' DeveloperMetadataLocation (Maybe Int32)
+dmlSheetId
+  = lens _dmlSheetId (\ s a -> s{_dmlSheetId = a}) .
+      mapping _Coerce
+
+-- | The type of location this object represents. This field is read-only.
+dmlLocationType :: Lens' DeveloperMetadataLocation (Maybe DeveloperMetadataLocationLocationType)
+dmlLocationType
+  = lens _dmlLocationType
+      (\ s a -> s{_dmlLocationType = a})
+
+instance FromJSON DeveloperMetadataLocation where
+        parseJSON
+          = withObject "DeveloperMetadataLocation"
+              (\ o ->
+                 DeveloperMetadataLocation' <$>
+                   (o .:? "spreadsheet") <*> (o .:? "dimensionRange")
+                     <*> (o .:? "sheetId")
+                     <*> (o .:? "locationType"))
+
+instance ToJSON DeveloperMetadataLocation where
+        toJSON DeveloperMetadataLocation'{..}
+          = object
+              (catMaybes
+                 [("spreadsheet" .=) <$> _dmlSpreadsheet,
+                  ("dimensionRange" .=) <$> _dmlDimensionRange,
+                  ("sheetId" .=) <$> _dmlSheetId,
+                  ("locationType" .=) <$> _dmlLocationType])
+
+-- | Properties of a sheet.
+--
+-- /See:/ 'sheetProperties' smart constructor.
+data SheetProperties = SheetProperties'
+    { _sTabColor       :: !(Maybe Color)
+    , _sGridProperties :: !(Maybe GridProperties)
+    , _sSheetType      :: !(Maybe SheetPropertiesSheetType)
+    , _sHidden         :: !(Maybe Bool)
+    , _sSheetId        :: !(Maybe (Textual Int32))
+    , _sTitle          :: !(Maybe Text)
+    , _sRightToLeft    :: !(Maybe Bool)
+    , _sIndex          :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SheetProperties' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sTabColor'
+--
+-- * 'sGridProperties'
+--
+-- * 'sSheetType'
+--
+-- * 'sHidden'
+--
+-- * 'sSheetId'
+--
+-- * 'sTitle'
+--
+-- * 'sRightToLeft'
+--
+-- * 'sIndex'
+sheetProperties
+    :: SheetProperties
+sheetProperties =
+    SheetProperties'
+    { _sTabColor = Nothing
+    , _sGridProperties = Nothing
+    , _sSheetType = Nothing
+    , _sHidden = Nothing
+    , _sSheetId = Nothing
+    , _sTitle = Nothing
+    , _sRightToLeft = Nothing
+    , _sIndex = Nothing
+    }
+
+-- | The color of the tab in the UI.
+sTabColor :: Lens' SheetProperties (Maybe Color)
+sTabColor
+  = lens _sTabColor (\ s a -> s{_sTabColor = a})
+
+-- | Additional properties of the sheet if this sheet is a grid. (If the
+-- sheet is an object sheet, containing a chart or image, then this field
+-- will be absent.) When writing it is an error to set any grid properties
+-- on non-grid sheets.
+sGridProperties :: Lens' SheetProperties (Maybe GridProperties)
+sGridProperties
+  = lens _sGridProperties
+      (\ s a -> s{_sGridProperties = a})
+
+-- | The type of sheet. Defaults to GRID. This field cannot be changed once
+-- set.
+sSheetType :: Lens' SheetProperties (Maybe SheetPropertiesSheetType)
+sSheetType
+  = lens _sSheetType (\ s a -> s{_sSheetType = a})
+
+-- | True if the sheet is hidden in the UI, false if it\'s visible.
+sHidden :: Lens' SheetProperties (Maybe Bool)
+sHidden = lens _sHidden (\ s a -> s{_sHidden = a})
+
+-- | The ID of the sheet. Must be non-negative. This field cannot be changed
+-- once set.
+sSheetId :: Lens' SheetProperties (Maybe Int32)
+sSheetId
+  = lens _sSheetId (\ s a -> s{_sSheetId = a}) .
+      mapping _Coerce
+
+-- | The name of the sheet.
+sTitle :: Lens' SheetProperties (Maybe Text)
+sTitle = lens _sTitle (\ s a -> s{_sTitle = a})
+
+-- | True if the sheet is an RTL sheet instead of an LTR sheet.
+sRightToLeft :: Lens' SheetProperties (Maybe Bool)
+sRightToLeft
+  = lens _sRightToLeft (\ s a -> s{_sRightToLeft = a})
+
+-- | The index of the sheet within the spreadsheet. When adding or updating
+-- sheet properties, if this field is excluded then the sheet is added or
+-- moved to the end of the sheet list. When updating sheet indices or
+-- inserting sheets, movement is considered in \"before the move\" indexes.
+-- For example, if there were 3 sheets (S1, S2, S3) in order to move S1
+-- ahead of S2 the index would have to be set to 2. A sheet index update
+-- request is ignored if the requested index is identical to the sheets
+-- current index or if the requested new index is equal to the current
+-- sheet index + 1.
+sIndex :: Lens' SheetProperties (Maybe Int32)
+sIndex
+  = lens _sIndex (\ s a -> s{_sIndex = a}) .
+      mapping _Coerce
+
+instance FromJSON SheetProperties where
+        parseJSON
+          = withObject "SheetProperties"
+              (\ o ->
+                 SheetProperties' <$>
+                   (o .:? "tabColor") <*> (o .:? "gridProperties") <*>
+                     (o .:? "sheetType")
+                     <*> (o .:? "hidden")
+                     <*> (o .:? "sheetId")
+                     <*> (o .:? "title")
+                     <*> (o .:? "rightToLeft")
+                     <*> (o .:? "index"))
+
+instance ToJSON SheetProperties where
+        toJSON SheetProperties'{..}
+          = object
+              (catMaybes
+                 [("tabColor" .=) <$> _sTabColor,
+                  ("gridProperties" .=) <$> _sGridProperties,
+                  ("sheetType" .=) <$> _sSheetType,
+                  ("hidden" .=) <$> _sHidden,
+                  ("sheetId" .=) <$> _sSheetId,
+                  ("title" .=) <$> _sTitle,
+                  ("rightToLeft" .=) <$> _sRightToLeft,
+                  ("index" .=) <$> _sIndex])
+
+-- | The criteria for showing\/hiding values per column. The map\'s key is
+-- the column index, and the value is the criteria for that column.
+--
+-- /See:/ 'filterViewCriteria' smart constructor.
+newtype FilterViewCriteria = FilterViewCriteria'
+    { _fvcAddtional :: HashMap Text FilterCriteria
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FilterViewCriteria' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fvcAddtional'
+filterViewCriteria
+    :: HashMap Text FilterCriteria -- ^ 'fvcAddtional'
+    -> FilterViewCriteria
+filterViewCriteria pFvcAddtional_ =
+    FilterViewCriteria'
+    { _fvcAddtional = _Coerce # pFvcAddtional_
+    }
+
+fvcAddtional :: Lens' FilterViewCriteria (HashMap Text FilterCriteria)
+fvcAddtional
+  = lens _fvcAddtional (\ s a -> s{_fvcAddtional = a})
+      . _Coerce
+
+instance FromJSON FilterViewCriteria where
+        parseJSON
+          = withObject "FilterViewCriteria"
+              (\ o -> FilterViewCriteria' <$> (parseJSONObject o))
+
+instance ToJSON FilterViewCriteria where
+        toJSON = toJSON . _fvcAddtional
+
+-- | The response when updating a range of values in a spreadsheet.
+--
+-- /See:/ 'batchUpdateValuesResponse' smart constructor.
+data BatchUpdateValuesResponse = BatchUpdateValuesResponse'
+    { _buvrTotalUpdatedColumns :: !(Maybe (Textual Int32))
+    , _buvrResponses           :: !(Maybe [UpdateValuesResponse])
+    , _buvrSpreadsheetId       :: !(Maybe Text)
+    , _buvrTotalUpdatedSheets  :: !(Maybe (Textual Int32))
+    , _buvrTotalUpdatedCells   :: !(Maybe (Textual Int32))
+    , _buvrTotalUpdatedRows    :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BatchUpdateValuesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'buvrTotalUpdatedColumns'
+--
+-- * 'buvrResponses'
+--
+-- * 'buvrSpreadsheetId'
+--
+-- * 'buvrTotalUpdatedSheets'
+--
+-- * 'buvrTotalUpdatedCells'
+--
+-- * 'buvrTotalUpdatedRows'
+batchUpdateValuesResponse
+    :: BatchUpdateValuesResponse
+batchUpdateValuesResponse =
+    BatchUpdateValuesResponse'
+    { _buvrTotalUpdatedColumns = Nothing
+    , _buvrResponses = Nothing
+    , _buvrSpreadsheetId = Nothing
+    , _buvrTotalUpdatedSheets = Nothing
+    , _buvrTotalUpdatedCells = Nothing
+    , _buvrTotalUpdatedRows = Nothing
+    }
+
+-- | The total number of columns where at least one cell in the column was
+-- updated.
+buvrTotalUpdatedColumns :: Lens' BatchUpdateValuesResponse (Maybe Int32)
+buvrTotalUpdatedColumns
+  = lens _buvrTotalUpdatedColumns
+      (\ s a -> s{_buvrTotalUpdatedColumns = a})
+      . mapping _Coerce
+
+-- | One UpdateValuesResponse per requested range, in the same order as the
+-- requests appeared.
+buvrResponses :: Lens' BatchUpdateValuesResponse [UpdateValuesResponse]
+buvrResponses
+  = lens _buvrResponses
+      (\ s a -> s{_buvrResponses = a})
+      . _Default
+      . _Coerce
+
+-- | The spreadsheet the updates were applied to.
+buvrSpreadsheetId :: Lens' BatchUpdateValuesResponse (Maybe Text)
+buvrSpreadsheetId
+  = lens _buvrSpreadsheetId
+      (\ s a -> s{_buvrSpreadsheetId = a})
+
+-- | The total number of sheets where at least one cell in the sheet was
+-- updated.
+buvrTotalUpdatedSheets :: Lens' BatchUpdateValuesResponse (Maybe Int32)
+buvrTotalUpdatedSheets
+  = lens _buvrTotalUpdatedSheets
+      (\ s a -> s{_buvrTotalUpdatedSheets = a})
+      . mapping _Coerce
+
+-- | The total number of cells updated.
+buvrTotalUpdatedCells :: Lens' BatchUpdateValuesResponse (Maybe Int32)
+buvrTotalUpdatedCells
+  = lens _buvrTotalUpdatedCells
+      (\ s a -> s{_buvrTotalUpdatedCells = a})
+      . mapping _Coerce
+
+-- | The total number of rows where at least one cell in the row was updated.
+buvrTotalUpdatedRows :: Lens' BatchUpdateValuesResponse (Maybe Int32)
+buvrTotalUpdatedRows
+  = lens _buvrTotalUpdatedRows
+      (\ s a -> s{_buvrTotalUpdatedRows = a})
+      . mapping _Coerce
+
+instance FromJSON BatchUpdateValuesResponse where
+        parseJSON
+          = withObject "BatchUpdateValuesResponse"
+              (\ o ->
+                 BatchUpdateValuesResponse' <$>
+                   (o .:? "totalUpdatedColumns") <*>
+                     (o .:? "responses" .!= mempty)
+                     <*> (o .:? "spreadsheetId")
+                     <*> (o .:? "totalUpdatedSheets")
+                     <*> (o .:? "totalUpdatedCells")
+                     <*> (o .:? "totalUpdatedRows"))
+
+instance ToJSON BatchUpdateValuesResponse where
+        toJSON BatchUpdateValuesResponse'{..}
+          = object
+              (catMaybes
+                 [("totalUpdatedColumns" .=) <$>
+                    _buvrTotalUpdatedColumns,
+                  ("responses" .=) <$> _buvrResponses,
+                  ("spreadsheetId" .=) <$> _buvrSpreadsheetId,
+                  ("totalUpdatedSheets" .=) <$>
+                    _buvrTotalUpdatedSheets,
+                  ("totalUpdatedCells" .=) <$> _buvrTotalUpdatedCells,
+                  ("totalUpdatedRows" .=) <$> _buvrTotalUpdatedRows])
+
+-- | Updates properties of the sheet with the specified sheetId.
+--
+-- /See:/ 'updateSheetPropertiesRequest' smart constructor.
+data UpdateSheetPropertiesRequest = UpdateSheetPropertiesRequest'
+    { _usprFields     :: !(Maybe GFieldMask)
+    , _usprProperties :: !(Maybe SheetProperties)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdateSheetPropertiesRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'usprFields'
+--
+-- * 'usprProperties'
+updateSheetPropertiesRequest
+    :: UpdateSheetPropertiesRequest
+updateSheetPropertiesRequest =
+    UpdateSheetPropertiesRequest'
+    { _usprFields = Nothing
+    , _usprProperties = Nothing
+    }
+
+-- | The fields that should be updated. At least one field must be specified.
+-- The root \`properties\` is implied and should not be specified. A single
+-- \`\"*\"\` can be used as short-hand for listing every field.
+usprFields :: Lens' UpdateSheetPropertiesRequest (Maybe GFieldMask)
+usprFields
+  = lens _usprFields (\ s a -> s{_usprFields = a})
+
+-- | The properties to update.
+usprProperties :: Lens' UpdateSheetPropertiesRequest (Maybe SheetProperties)
+usprProperties
+  = lens _usprProperties
+      (\ s a -> s{_usprProperties = a})
+
+instance FromJSON UpdateSheetPropertiesRequest where
+        parseJSON
+          = withObject "UpdateSheetPropertiesRequest"
+              (\ o ->
+                 UpdateSheetPropertiesRequest' <$>
+                   (o .:? "fields") <*> (o .:? "properties"))
+
+instance ToJSON UpdateSheetPropertiesRequest where
+        toJSON UpdateSheetPropertiesRequest'{..}
+          = object
+              (catMaybes
+                 [("fields" .=) <$> _usprFields,
+                  ("properties" .=) <$> _usprProperties])
+
+-- | Resource that represents a spreadsheet.
+--
+-- /See:/ 'spreadsheet' smart constructor.
+data Spreadsheet = Spreadsheet'
+    { _sprSheets            :: !(Maybe [Sheet])
+    , _sprNamedRanges       :: !(Maybe [NamedRange])
+    , _sprSpreadsheetId     :: !(Maybe Text)
+    , _sprSpreadsheetURL    :: !(Maybe Text)
+    , _sprDeveloperMetadata :: !(Maybe [DeveloperMetadata])
+    , _sprProperties        :: !(Maybe SpreadsheetProperties)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Spreadsheet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sprSheets'
+--
+-- * 'sprNamedRanges'
+--
+-- * 'sprSpreadsheetId'
+--
+-- * 'sprSpreadsheetURL'
+--
+-- * 'sprDeveloperMetadata'
+--
+-- * 'sprProperties'
+spreadsheet
+    :: Spreadsheet
+spreadsheet =
+    Spreadsheet'
+    { _sprSheets = Nothing
+    , _sprNamedRanges = Nothing
+    , _sprSpreadsheetId = Nothing
+    , _sprSpreadsheetURL = Nothing
+    , _sprDeveloperMetadata = Nothing
+    , _sprProperties = Nothing
+    }
+
+-- | The sheets that are part of a spreadsheet.
+sprSheets :: Lens' Spreadsheet [Sheet]
+sprSheets
+  = lens _sprSheets (\ s a -> s{_sprSheets = a}) .
+      _Default
+      . _Coerce
+
+-- | The named ranges defined in a spreadsheet.
+sprNamedRanges :: Lens' Spreadsheet [NamedRange]
+sprNamedRanges
+  = lens _sprNamedRanges
+      (\ s a -> s{_sprNamedRanges = a})
+      . _Default
+      . _Coerce
+
+-- | The ID of the spreadsheet. This field is read-only.
+sprSpreadsheetId :: Lens' Spreadsheet (Maybe Text)
+sprSpreadsheetId
+  = lens _sprSpreadsheetId
+      (\ s a -> s{_sprSpreadsheetId = a})
+
+-- | The url of the spreadsheet. This field is read-only.
+sprSpreadsheetURL :: Lens' Spreadsheet (Maybe Text)
+sprSpreadsheetURL
+  = lens _sprSpreadsheetURL
+      (\ s a -> s{_sprSpreadsheetURL = a})
+
+-- | The developer metadata associated with a spreadsheet.
+sprDeveloperMetadata :: Lens' Spreadsheet [DeveloperMetadata]
+sprDeveloperMetadata
+  = lens _sprDeveloperMetadata
+      (\ s a -> s{_sprDeveloperMetadata = a})
+      . _Default
+      . _Coerce
+
+-- | Overall properties of a spreadsheet.
+sprProperties :: Lens' Spreadsheet (Maybe SpreadsheetProperties)
+sprProperties
+  = lens _sprProperties
+      (\ s a -> s{_sprProperties = a})
+
+instance FromJSON Spreadsheet where
+        parseJSON
+          = withObject "Spreadsheet"
+              (\ o ->
+                 Spreadsheet' <$>
+                   (o .:? "sheets" .!= mempty) <*>
+                     (o .:? "namedRanges" .!= mempty)
+                     <*> (o .:? "spreadsheetId")
+                     <*> (o .:? "spreadsheetUrl")
+                     <*> (o .:? "developerMetadata" .!= mempty)
+                     <*> (o .:? "properties"))
+
+instance ToJSON Spreadsheet where
+        toJSON Spreadsheet'{..}
+          = object
+              (catMaybes
+                 [("sheets" .=) <$> _sprSheets,
+                  ("namedRanges" .=) <$> _sprNamedRanges,
+                  ("spreadsheetId" .=) <$> _sprSpreadsheetId,
+                  ("spreadsheetUrl" .=) <$> _sprSpreadsheetURL,
+                  ("developerMetadata" .=) <$> _sprDeveloperMetadata,
+                  ("properties" .=) <$> _sprProperties])
+
+-- | A </chart/interactive/docs/gallery/candlestickchart candlestick chart>.
+--
+-- /See:/ 'candlestickChartSpec' smart constructor.
+data CandlestickChartSpec = CandlestickChartSpec'
+    { _ccsData   :: !(Maybe [CandlestickData])
+    , _ccsDomain :: !(Maybe CandlestickDomain)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CandlestickChartSpec' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ccsData'
+--
+-- * 'ccsDomain'
+candlestickChartSpec
+    :: CandlestickChartSpec
+candlestickChartSpec =
+    CandlestickChartSpec'
+    { _ccsData = Nothing
+    , _ccsDomain = Nothing
+    }
+
+-- | The Candlestick chart data. Only one CandlestickData is supported.
+ccsData :: Lens' CandlestickChartSpec [CandlestickData]
+ccsData
+  = lens _ccsData (\ s a -> s{_ccsData = a}) . _Default
+      . _Coerce
+
+-- | The domain data (horizontal axis) for the candlestick chart. String data
+-- will be treated as discrete labels, other data will be treated as
+-- continuous values.
+ccsDomain :: Lens' CandlestickChartSpec (Maybe CandlestickDomain)
+ccsDomain
+  = lens _ccsDomain (\ s a -> s{_ccsDomain = a})
+
+instance FromJSON CandlestickChartSpec where
+        parseJSON
+          = withObject "CandlestickChartSpec"
+              (\ o ->
+                 CandlestickChartSpec' <$>
+                   (o .:? "data" .!= mempty) <*> (o .:? "domain"))
+
+instance ToJSON CandlestickChartSpec where
+        toJSON CandlestickChartSpec'{..}
+          = object
+              (catMaybes
+                 [("data" .=) <$> _ccsData,
+                  ("domain" .=) <$> _ccsDomain])
+
+-- | Inserts rows or columns in a sheet at a particular index.
+--
+-- /See:/ 'insertDimensionRequest' smart constructor.
+data InsertDimensionRequest = InsertDimensionRequest'
+    { _idrRange             :: !(Maybe DimensionRange)
+    , _idrInheritFromBefore :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InsertDimensionRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'idrRange'
+--
+-- * 'idrInheritFromBefore'
+insertDimensionRequest
+    :: InsertDimensionRequest
+insertDimensionRequest =
+    InsertDimensionRequest'
+    { _idrRange = Nothing
+    , _idrInheritFromBefore = Nothing
+    }
+
+-- | The dimensions to insert. Both the start and end indexes must be
+-- bounded.
+idrRange :: Lens' InsertDimensionRequest (Maybe DimensionRange)
+idrRange = lens _idrRange (\ s a -> s{_idrRange = a})
+
+-- | Whether dimension properties should be extended from the dimensions
+-- before or after the newly inserted dimensions. True to inherit from the
+-- dimensions before (in which case the start index must be greater than
+-- 0), and false to inherit from the dimensions after. For example, if row
+-- index 0 has red background and row index 1 has a green background, then
+-- inserting 2 rows at index 1 can inherit either the green or red
+-- background. If \`inheritFromBefore\` is true, the two new rows will be
+-- red (because the row before the insertion point was red), whereas if
+-- \`inheritFromBefore\` is false, the two new rows will be green (because
+-- the row after the insertion point was green).
+idrInheritFromBefore :: Lens' InsertDimensionRequest (Maybe Bool)
+idrInheritFromBefore
+  = lens _idrInheritFromBefore
+      (\ s a -> s{_idrInheritFromBefore = a})
+
+instance FromJSON InsertDimensionRequest where
+        parseJSON
+          = withObject "InsertDimensionRequest"
+              (\ o ->
+                 InsertDimensionRequest' <$>
+                   (o .:? "range") <*> (o .:? "inheritFromBefore"))
+
+instance ToJSON InsertDimensionRequest where
+        toJSON InsertDimensionRequest'{..}
+          = object
+              (catMaybes
+                 [("range" .=) <$> _idrRange,
+                  ("inheritFromBefore" .=) <$> _idrInheritFromBefore])
+
+-- | A reply to a developer metadata search request.
+--
+-- /See:/ 'searchDeveloperMetadataResponse' smart constructor.
+newtype SearchDeveloperMetadataResponse = SearchDeveloperMetadataResponse'
+    { _sdmrMatchedDeveloperMetadata :: Maybe [MatchedDeveloperMetadata]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SearchDeveloperMetadataResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sdmrMatchedDeveloperMetadata'
+searchDeveloperMetadataResponse
+    :: SearchDeveloperMetadataResponse
+searchDeveloperMetadataResponse =
+    SearchDeveloperMetadataResponse'
+    { _sdmrMatchedDeveloperMetadata = Nothing
+    }
+
+-- | The metadata matching the criteria of the search request.
+sdmrMatchedDeveloperMetadata :: Lens' SearchDeveloperMetadataResponse [MatchedDeveloperMetadata]
+sdmrMatchedDeveloperMetadata
+  = lens _sdmrMatchedDeveloperMetadata
+      (\ s a -> s{_sdmrMatchedDeveloperMetadata = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON SearchDeveloperMetadataResponse
+         where
+        parseJSON
+          = withObject "SearchDeveloperMetadataResponse"
+              (\ o ->
+                 SearchDeveloperMetadataResponse' <$>
+                   (o .:? "matchedDeveloperMetadata" .!= mempty))
+
+instance ToJSON SearchDeveloperMetadataResponse where
+        toJSON SearchDeveloperMetadataResponse'{..}
+          = object
+              (catMaybes
+                 [("matchedDeveloperMetadata" .=) <$>
+                    _sdmrMatchedDeveloperMetadata])
+
+-- | A single interpolation point on a gradient conditional format. These pin
+-- the gradient color scale according to the color, type and value chosen.
+--
+-- /See:/ 'interpolationPoint' smart constructor.
+data InterpolationPoint = InterpolationPoint'
+    { _ipColor :: !(Maybe Color)
+    , _ipValue :: !(Maybe Text)
+    , _ipType  :: !(Maybe InterpolationPointType)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InterpolationPoint' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ipColor'
+--
+-- * 'ipValue'
+--
+-- * 'ipType'
+interpolationPoint
+    :: InterpolationPoint
+interpolationPoint =
+    InterpolationPoint'
+    { _ipColor = Nothing
+    , _ipValue = Nothing
+    , _ipType = Nothing
+    }
+
+-- | The color this interpolation point should use.
+ipColor :: Lens' InterpolationPoint (Maybe Color)
+ipColor = lens _ipColor (\ s a -> s{_ipColor = a})
+
+-- | The value this interpolation point uses. May be a formula. Unused if
+-- type is MIN or MAX.
+ipValue :: Lens' InterpolationPoint (Maybe Text)
+ipValue = lens _ipValue (\ s a -> s{_ipValue = a})
+
+-- | How the value should be interpreted.
+ipType :: Lens' InterpolationPoint (Maybe InterpolationPointType)
+ipType = lens _ipType (\ s a -> s{_ipType = a})
+
+instance FromJSON InterpolationPoint where
+        parseJSON
+          = withObject "InterpolationPoint"
+              (\ o ->
+                 InterpolationPoint' <$>
+                   (o .:? "color") <*> (o .:? "value") <*>
+                     (o .:? "type"))
+
+instance ToJSON InterpolationPoint where
+        toJSON InterpolationPoint'{..}
+          = object
+              (catMaybes
+                 [("color" .=) <$> _ipColor,
+                  ("value" .=) <$> _ipValue, ("type" .=) <$> _ipType])
+
+-- | Data about a specific cell.
+--
+-- /See:/ 'cellData' smart constructor.
+data CellData = CellData'
+    { _cdTextFormatRuns    :: !(Maybe [TextFormatRun])
+    , _cdNote              :: !(Maybe Text)
+    , _cdUserEnteredValue  :: !(Maybe ExtendedValue)
+    , _cdUserEnteredFormat :: !(Maybe CellFormat)
+    , _cdEffectiveFormat   :: !(Maybe CellFormat)
+    , _cdPivotTable        :: !(Maybe PivotTable)
+    , _cdFormattedValue    :: !(Maybe Text)
+    , _cdDataValidation    :: !(Maybe DataValidationRule)
+    , _cdHyperlink         :: !(Maybe Text)
+    , _cdEffectiveValue    :: !(Maybe ExtendedValue)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CellData' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cdTextFormatRuns'
+--
+-- * 'cdNote'
+--
+-- * 'cdUserEnteredValue'
+--
+-- * 'cdUserEnteredFormat'
+--
+-- * 'cdEffectiveFormat'
+--
+-- * 'cdPivotTable'
+--
+-- * 'cdFormattedValue'
+--
+-- * 'cdDataValidation'
+--
+-- * 'cdHyperlink'
+--
+-- * 'cdEffectiveValue'
+cellData
+    :: CellData
+cellData =
+    CellData'
+    { _cdTextFormatRuns = Nothing
+    , _cdNote = Nothing
+    , _cdUserEnteredValue = Nothing
+    , _cdUserEnteredFormat = Nothing
+    , _cdEffectiveFormat = Nothing
+    , _cdPivotTable = Nothing
+    , _cdFormattedValue = Nothing
+    , _cdDataValidation = Nothing
+    , _cdHyperlink = Nothing
+    , _cdEffectiveValue = Nothing
+    }
+
+-- | Runs of rich text applied to subsections of the cell. Runs are only
+-- valid on user entered strings, not formulas, bools, or numbers. Runs
+-- start at specific indexes in the text and continue until the next run.
+-- Properties of a run will continue unless explicitly changed in a
+-- subsequent run (and properties of the first run will continue the
+-- properties of the cell unless explicitly changed). When writing, the new
+-- runs will overwrite any prior runs. When writing a new
+-- user_entered_value, previous runs are erased.
+cdTextFormatRuns :: Lens' CellData [TextFormatRun]
+cdTextFormatRuns
+  = lens _cdTextFormatRuns
+      (\ s a -> s{_cdTextFormatRuns = a})
+      . _Default
+      . _Coerce
+
+-- | Any note on the cell.
+cdNote :: Lens' CellData (Maybe Text)
+cdNote = lens _cdNote (\ s a -> s{_cdNote = a})
+
+-- | The value the user entered in the cell. e.g, \`1234\`, \`\'Hello\'\`, or
+-- \`=NOW()\` Note: Dates, Times and DateTimes are represented as doubles
+-- in serial number format.
+cdUserEnteredValue :: Lens' CellData (Maybe ExtendedValue)
+cdUserEnteredValue
+  = lens _cdUserEnteredValue
+      (\ s a -> s{_cdUserEnteredValue = a})
+
+-- | The format the user entered for the cell. When writing, the new format
+-- will be merged with the existing format.
+cdUserEnteredFormat :: Lens' CellData (Maybe CellFormat)
+cdUserEnteredFormat
+  = lens _cdUserEnteredFormat
+      (\ s a -> s{_cdUserEnteredFormat = a})
+
+-- | The effective format being used by the cell. This includes the results
+-- of applying any conditional formatting and, if the cell contains a
+-- formula, the computed number format. If the effective format is the
+-- default format, effective format will not be written. This field is
+-- read-only.
+cdEffectiveFormat :: Lens' CellData (Maybe CellFormat)
+cdEffectiveFormat
+  = lens _cdEffectiveFormat
+      (\ s a -> s{_cdEffectiveFormat = a})
+
+-- | A pivot table anchored at this cell. The size of pivot table itself is
+-- computed dynamically based on its data, grouping, filters, values, etc.
+-- Only the top-left cell of the pivot table contains the pivot table
+-- definition. The other cells will contain the calculated values of the
+-- results of the pivot in their effective_value fields.
+cdPivotTable :: Lens' CellData (Maybe PivotTable)
+cdPivotTable
+  = lens _cdPivotTable (\ s a -> s{_cdPivotTable = a})
+
+-- | The formatted value of the cell. This is the value as it\'s shown to the
+-- user. This field is read-only.
+cdFormattedValue :: Lens' CellData (Maybe Text)
+cdFormattedValue
+  = lens _cdFormattedValue
+      (\ s a -> s{_cdFormattedValue = a})
+
+-- | A data validation rule on the cell, if any. When writing, the new data
+-- validation rule will overwrite any prior rule.
+cdDataValidation :: Lens' CellData (Maybe DataValidationRule)
+cdDataValidation
+  = lens _cdDataValidation
+      (\ s a -> s{_cdDataValidation = a})
+
+-- | A hyperlink this cell points to, if any. This field is read-only. (To
+-- set it, use a \`=HYPERLINK\` formula in the
+-- userEnteredValue.formulaValue field.)
+cdHyperlink :: Lens' CellData (Maybe Text)
+cdHyperlink
+  = lens _cdHyperlink (\ s a -> s{_cdHyperlink = a})
+
+-- | The effective value of the cell. For cells with formulas, this is the
+-- calculated value. For cells with literals, this is the same as the
+-- user_entered_value. This field is read-only.
+cdEffectiveValue :: Lens' CellData (Maybe ExtendedValue)
+cdEffectiveValue
+  = lens _cdEffectiveValue
+      (\ s a -> s{_cdEffectiveValue = a})
+
+instance FromJSON CellData where
+        parseJSON
+          = withObject "CellData"
+              (\ o ->
+                 CellData' <$>
+                   (o .:? "textFormatRuns" .!= mempty) <*>
+                     (o .:? "note")
+                     <*> (o .:? "userEnteredValue")
+                     <*> (o .:? "userEnteredFormat")
+                     <*> (o .:? "effectiveFormat")
+                     <*> (o .:? "pivotTable")
+                     <*> (o .:? "formattedValue")
+                     <*> (o .:? "dataValidation")
+                     <*> (o .:? "hyperlink")
+                     <*> (o .:? "effectiveValue"))
+
+instance ToJSON CellData where
+        toJSON CellData'{..}
+          = object
+              (catMaybes
+                 [("textFormatRuns" .=) <$> _cdTextFormatRuns,
+                  ("note" .=) <$> _cdNote,
+                  ("userEnteredValue" .=) <$> _cdUserEnteredValue,
+                  ("userEnteredFormat" .=) <$> _cdUserEnteredFormat,
+                  ("effectiveFormat" .=) <$> _cdEffectiveFormat,
+                  ("pivotTable" .=) <$> _cdPivotTable,
+                  ("formattedValue" .=) <$> _cdFormattedValue,
+                  ("dataValidation" .=) <$> _cdDataValidation,
+                  ("hyperlink" .=) <$> _cdHyperlink,
+                  ("effectiveValue" .=) <$> _cdEffectiveValue])
+
+-- | Source ranges for a chart.
+--
+-- /See:/ 'chartSourceRange' smart constructor.
+newtype ChartSourceRange = ChartSourceRange'
+    { _csrSources :: Maybe [GridRange]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ChartSourceRange' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'csrSources'
+chartSourceRange
+    :: ChartSourceRange
+chartSourceRange =
+    ChartSourceRange'
+    { _csrSources = Nothing
+    }
+
+-- | The ranges of data for a series or domain. Exactly one dimension must
+-- have a length of 1, and all sources in the list must have the same
+-- dimension with length 1. The domain (if it exists) & all series must
+-- have the same number of source ranges. If using more than one source
+-- range, then the source range at a given offset must be in order and
+-- contiguous across the domain and series. For example, these are valid
+-- configurations: domain sources: A1:A5 series1 sources: B1:B5 series2
+-- sources: D6:D10 domain sources: A1:A5, C10:C12 series1 sources: B1:B5,
+-- D10:D12 series2 sources: C1:C5, E10:E12
+csrSources :: Lens' ChartSourceRange [GridRange]
+csrSources
+  = lens _csrSources (\ s a -> s{_csrSources = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON ChartSourceRange where
+        parseJSON
+          = withObject "ChartSourceRange"
+              (\ o ->
+                 ChartSourceRange' <$> (o .:? "sources" .!= mempty))
+
+instance ToJSON ChartSourceRange where
+        toJSON ChartSourceRange'{..}
+          = object (catMaybes [("sources" .=) <$> _csrSources])
+
+-- | The result of adding a named range.
+--
+-- /See:/ 'addNamedRangeResponse' smart constructor.
+newtype AddNamedRangeResponse = AddNamedRangeResponse'
+    { _anrrNamedRange :: Maybe NamedRange
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AddNamedRangeResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'anrrNamedRange'
+addNamedRangeResponse
+    :: AddNamedRangeResponse
+addNamedRangeResponse =
+    AddNamedRangeResponse'
+    { _anrrNamedRange = Nothing
+    }
+
+-- | The named range to add.
+anrrNamedRange :: Lens' AddNamedRangeResponse (Maybe NamedRange)
+anrrNamedRange
+  = lens _anrrNamedRange
+      (\ s a -> s{_anrrNamedRange = a})
+
+instance FromJSON AddNamedRangeResponse where
+        parseJSON
+          = withObject "AddNamedRangeResponse"
+              (\ o ->
+                 AddNamedRangeResponse' <$> (o .:? "namedRange"))
+
+instance ToJSON AddNamedRangeResponse where
+        toJSON AddNamedRangeResponse'{..}
+          = object
+              (catMaybes [("namedRange" .=) <$> _anrrNamedRange])
+
+-- | The domain of a waterfall chart.
+--
+-- /See:/ 'waterfallChartDomain' smart constructor.
+data WaterfallChartDomain = WaterfallChartDomain'
+    { _wcdReversed :: !(Maybe Bool)
+    , _wcdData     :: !(Maybe ChartData)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'WaterfallChartDomain' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'wcdReversed'
+--
+-- * 'wcdData'
+waterfallChartDomain
+    :: WaterfallChartDomain
+waterfallChartDomain =
+    WaterfallChartDomain'
+    { _wcdReversed = Nothing
+    , _wcdData = Nothing
+    }
+
+-- | True to reverse the order of the domain values (horizontal axis).
+wcdReversed :: Lens' WaterfallChartDomain (Maybe Bool)
+wcdReversed
+  = lens _wcdReversed (\ s a -> s{_wcdReversed = a})
+
+-- | The data of the WaterfallChartDomain.
+wcdData :: Lens' WaterfallChartDomain (Maybe ChartData)
+wcdData = lens _wcdData (\ s a -> s{_wcdData = a})
+
+instance FromJSON WaterfallChartDomain where
+        parseJSON
+          = withObject "WaterfallChartDomain"
+              (\ o ->
+                 WaterfallChartDomain' <$>
+                   (o .:? "reversed") <*> (o .:? "data"))
+
+instance ToJSON WaterfallChartDomain where
+        toJSON WaterfallChartDomain'{..}
+          = object
+              (catMaybes
+                 [("reversed" .=) <$> _wcdReversed,
+                  ("data" .=) <$> _wcdData])
+
+-- | The result of adding a chart to a spreadsheet.
+--
+-- /See:/ 'addChartResponse' smart constructor.
+newtype AddChartResponse = AddChartResponse'
+    { _acrChart :: Maybe EmbeddedChart
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AddChartResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'acrChart'
+addChartResponse
+    :: AddChartResponse
+addChartResponse =
+    AddChartResponse'
+    { _acrChart = Nothing
+    }
+
+-- | The newly added chart.
+acrChart :: Lens' AddChartResponse (Maybe EmbeddedChart)
+acrChart = lens _acrChart (\ s a -> s{_acrChart = a})
+
+instance FromJSON AddChartResponse where
+        parseJSON
+          = withObject "AddChartResponse"
+              (\ o -> AddChartResponse' <$> (o .:? "chart"))
+
+instance ToJSON AddChartResponse where
+        toJSON AddChartResponse'{..}
+          = object (catMaybes [("chart" .=) <$> _acrChart])
+
+-- | Updates a chart\'s specifications. (This does not move or resize a
+-- chart. To move or resize a chart, use
+-- UpdateEmbeddedObjectPositionRequest.)
+--
+-- /See:/ 'updateChartSpecRequest' smart constructor.
+data UpdateChartSpecRequest = UpdateChartSpecRequest'
+    { _ucsrSpec    :: !(Maybe ChartSpec)
+    , _ucsrChartId :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdateChartSpecRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ucsrSpec'
+--
+-- * 'ucsrChartId'
+updateChartSpecRequest
+    :: UpdateChartSpecRequest
+updateChartSpecRequest =
+    UpdateChartSpecRequest'
+    { _ucsrSpec = Nothing
+    , _ucsrChartId = Nothing
+    }
+
+-- | The specification to apply to the chart.
+ucsrSpec :: Lens' UpdateChartSpecRequest (Maybe ChartSpec)
+ucsrSpec = lens _ucsrSpec (\ s a -> s{_ucsrSpec = a})
+
+-- | The ID of the chart to update.
+ucsrChartId :: Lens' UpdateChartSpecRequest (Maybe Int32)
+ucsrChartId
+  = lens _ucsrChartId (\ s a -> s{_ucsrChartId = a}) .
+      mapping _Coerce
+
+instance FromJSON UpdateChartSpecRequest where
+        parseJSON
+          = withObject "UpdateChartSpecRequest"
+              (\ o ->
+                 UpdateChartSpecRequest' <$>
+                   (o .:? "spec") <*> (o .:? "chartId"))
+
+instance ToJSON UpdateChartSpecRequest where
+        toJSON UpdateChartSpecRequest'{..}
+          = object
+              (catMaybes
+                 [("spec" .=) <$> _ucsrSpec,
+                  ("chartId" .=) <$> _ucsrChartId])
+
+-- | Sets the basic filter associated with a sheet.
+--
+-- /See:/ 'setBasicFilterRequest' smart constructor.
+newtype SetBasicFilterRequest = SetBasicFilterRequest'
+    { _sbfrFilter :: Maybe BasicFilter
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SetBasicFilterRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sbfrFilter'
+setBasicFilterRequest
+    :: SetBasicFilterRequest
+setBasicFilterRequest =
+    SetBasicFilterRequest'
+    { _sbfrFilter = Nothing
+    }
+
+-- | The filter to set.
+sbfrFilter :: Lens' SetBasicFilterRequest (Maybe BasicFilter)
+sbfrFilter
+  = lens _sbfrFilter (\ s a -> s{_sbfrFilter = a})
+
+instance FromJSON SetBasicFilterRequest where
+        parseJSON
+          = withObject "SetBasicFilterRequest"
+              (\ o -> SetBasicFilterRequest' <$> (o .:? "filter"))
+
+instance ToJSON SetBasicFilterRequest where
+        toJSON SetBasicFilterRequest'{..}
+          = object (catMaybes [("filter" .=) <$> _sbfrFilter])
+
+-- | Settings to control how circular dependencies are resolved with
+-- iterative calculation.
+--
+-- /See:/ 'iterativeCalculationSettings' smart constructor.
+data IterativeCalculationSettings = IterativeCalculationSettings'
+    { _icsMaxIterations        :: !(Maybe (Textual Int32))
+    , _icsConvergenceThreshold :: !(Maybe (Textual Double))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'IterativeCalculationSettings' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'icsMaxIterations'
+--
+-- * 'icsConvergenceThreshold'
+iterativeCalculationSettings
+    :: IterativeCalculationSettings
+iterativeCalculationSettings =
+    IterativeCalculationSettings'
+    { _icsMaxIterations = Nothing
+    , _icsConvergenceThreshold = Nothing
+    }
+
+-- | When iterative calculation is enabled, the maximum number of calculation
+-- rounds to perform.
+icsMaxIterations :: Lens' IterativeCalculationSettings (Maybe Int32)
+icsMaxIterations
+  = lens _icsMaxIterations
+      (\ s a -> s{_icsMaxIterations = a})
+      . mapping _Coerce
+
+-- | When iterative calculation is enabled and successive results differ by
+-- less than this threshold value, the calculation rounds stop.
+icsConvergenceThreshold :: Lens' IterativeCalculationSettings (Maybe Double)
+icsConvergenceThreshold
+  = lens _icsConvergenceThreshold
+      (\ s a -> s{_icsConvergenceThreshold = a})
+      . mapping _Coerce
+
+instance FromJSON IterativeCalculationSettings where
+        parseJSON
+          = withObject "IterativeCalculationSettings"
+              (\ o ->
+                 IterativeCalculationSettings' <$>
+                   (o .:? "maxIterations") <*>
+                     (o .:? "convergenceThreshold"))
+
+instance ToJSON IterativeCalculationSettings where
+        toJSON IterativeCalculationSettings'{..}
+          = object
+              (catMaybes
+                 [("maxIterations" .=) <$> _icsMaxIterations,
+                  ("convergenceThreshold" .=) <$>
+                    _icsConvergenceThreshold])
+
+-- | The response when updating a range of values by a data filter in a
+-- spreadsheet.
+--
+-- /See:/ 'updateValuesByDataFilterResponse' smart constructor.
+data UpdateValuesByDataFilterResponse = UpdateValuesByDataFilterResponse'
+    { _uvbdfrUpdatedCells   :: !(Maybe (Textual Int32))
+    , _uvbdfrUpdatedRows    :: !(Maybe (Textual Int32))
+    , _uvbdfrUpdatedRange   :: !(Maybe Text)
+    , _uvbdfrUpdatedData    :: !(Maybe ValueRange)
+    , _uvbdfrUpdatedColumns :: !(Maybe (Textual Int32))
+    , _uvbdfrDataFilter     :: !(Maybe DataFilter)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdateValuesByDataFilterResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uvbdfrUpdatedCells'
+--
+-- * 'uvbdfrUpdatedRows'
+--
+-- * 'uvbdfrUpdatedRange'
+--
+-- * 'uvbdfrUpdatedData'
+--
+-- * 'uvbdfrUpdatedColumns'
+--
+-- * 'uvbdfrDataFilter'
+updateValuesByDataFilterResponse
+    :: UpdateValuesByDataFilterResponse
+updateValuesByDataFilterResponse =
+    UpdateValuesByDataFilterResponse'
+    { _uvbdfrUpdatedCells = Nothing
+    , _uvbdfrUpdatedRows = Nothing
+    , _uvbdfrUpdatedRange = Nothing
+    , _uvbdfrUpdatedData = Nothing
+    , _uvbdfrUpdatedColumns = Nothing
+    , _uvbdfrDataFilter = Nothing
+    }
+
+-- | The number of cells updated.
+uvbdfrUpdatedCells :: Lens' UpdateValuesByDataFilterResponse (Maybe Int32)
+uvbdfrUpdatedCells
+  = lens _uvbdfrUpdatedCells
+      (\ s a -> s{_uvbdfrUpdatedCells = a})
+      . mapping _Coerce
+
+-- | The number of rows where at least one cell in the row was updated.
+uvbdfrUpdatedRows :: Lens' UpdateValuesByDataFilterResponse (Maybe Int32)
+uvbdfrUpdatedRows
+  = lens _uvbdfrUpdatedRows
+      (\ s a -> s{_uvbdfrUpdatedRows = a})
+      . mapping _Coerce
+
+-- | The range (in A1 notation) that updates were applied to.
+uvbdfrUpdatedRange :: Lens' UpdateValuesByDataFilterResponse (Maybe Text)
+uvbdfrUpdatedRange
+  = lens _uvbdfrUpdatedRange
+      (\ s a -> s{_uvbdfrUpdatedRange = a})
+
+-- | The values of the cells in the range matched by the dataFilter after all
+-- updates were applied. This is only included if the request\'s
+-- \`includeValuesInResponse\` field was \`true\`.
+uvbdfrUpdatedData :: Lens' UpdateValuesByDataFilterResponse (Maybe ValueRange)
+uvbdfrUpdatedData
+  = lens _uvbdfrUpdatedData
+      (\ s a -> s{_uvbdfrUpdatedData = a})
+
+-- | The number of columns where at least one cell in the column was updated.
+uvbdfrUpdatedColumns :: Lens' UpdateValuesByDataFilterResponse (Maybe Int32)
+uvbdfrUpdatedColumns
+  = lens _uvbdfrUpdatedColumns
+      (\ s a -> s{_uvbdfrUpdatedColumns = a})
+      . mapping _Coerce
+
+-- | The data filter that selected the range that was updated.
+uvbdfrDataFilter :: Lens' UpdateValuesByDataFilterResponse (Maybe DataFilter)
+uvbdfrDataFilter
+  = lens _uvbdfrDataFilter
+      (\ s a -> s{_uvbdfrDataFilter = a})
+
+instance FromJSON UpdateValuesByDataFilterResponse
+         where
+        parseJSON
+          = withObject "UpdateValuesByDataFilterResponse"
+              (\ o ->
+                 UpdateValuesByDataFilterResponse' <$>
+                   (o .:? "updatedCells") <*> (o .:? "updatedRows") <*>
+                     (o .:? "updatedRange")
+                     <*> (o .:? "updatedData")
+                     <*> (o .:? "updatedColumns")
+                     <*> (o .:? "dataFilter"))
+
+instance ToJSON UpdateValuesByDataFilterResponse
+         where
+        toJSON UpdateValuesByDataFilterResponse'{..}
+          = object
+              (catMaybes
+                 [("updatedCells" .=) <$> _uvbdfrUpdatedCells,
+                  ("updatedRows" .=) <$> _uvbdfrUpdatedRows,
+                  ("updatedRange" .=) <$> _uvbdfrUpdatedRange,
+                  ("updatedData" .=) <$> _uvbdfrUpdatedData,
+                  ("updatedColumns" .=) <$> _uvbdfrUpdatedColumns,
+                  ("dataFilter" .=) <$> _uvbdfrDataFilter])
+
+-- | Properties of a grid.
+--
+-- /See:/ 'gridProperties' smart constructor.
+data GridProperties = GridProperties'
+    { _gpFrozenColumnCount       :: !(Maybe (Textual Int32))
+    , _gpColumnCount             :: !(Maybe (Textual Int32))
+    , _gpColumnGroupControlAfter :: !(Maybe Bool)
+    , _gpHideGridlines           :: !(Maybe Bool)
+    , _gpFrozenRowCount          :: !(Maybe (Textual Int32))
+    , _gpRowGroupControlAfter    :: !(Maybe Bool)
+    , _gpRowCount                :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GridProperties' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gpFrozenColumnCount'
+--
+-- * 'gpColumnCount'
+--
+-- * 'gpColumnGroupControlAfter'
+--
+-- * 'gpHideGridlines'
+--
+-- * 'gpFrozenRowCount'
+--
+-- * 'gpRowGroupControlAfter'
+--
+-- * 'gpRowCount'
+gridProperties
+    :: GridProperties
+gridProperties =
+    GridProperties'
+    { _gpFrozenColumnCount = Nothing
+    , _gpColumnCount = Nothing
+    , _gpColumnGroupControlAfter = Nothing
+    , _gpHideGridlines = Nothing
+    , _gpFrozenRowCount = Nothing
+    , _gpRowGroupControlAfter = Nothing
+    , _gpRowCount = Nothing
+    }
+
+-- | The number of columns that are frozen in the grid.
+gpFrozenColumnCount :: Lens' GridProperties (Maybe Int32)
+gpFrozenColumnCount
+  = lens _gpFrozenColumnCount
+      (\ s a -> s{_gpFrozenColumnCount = a})
+      . mapping _Coerce
+
+-- | The number of columns in the grid.
+gpColumnCount :: Lens' GridProperties (Maybe Int32)
+gpColumnCount
+  = lens _gpColumnCount
+      (\ s a -> s{_gpColumnCount = a})
+      . mapping _Coerce
+
+-- | True if the column grouping control toggle is shown after the group.
+gpColumnGroupControlAfter :: Lens' GridProperties (Maybe Bool)
+gpColumnGroupControlAfter
+  = lens _gpColumnGroupControlAfter
+      (\ s a -> s{_gpColumnGroupControlAfter = a})
+
+-- | True if the grid isn\'t showing gridlines in the UI.
+gpHideGridlines :: Lens' GridProperties (Maybe Bool)
+gpHideGridlines
+  = lens _gpHideGridlines
+      (\ s a -> s{_gpHideGridlines = a})
+
+-- | The number of rows that are frozen in the grid.
+gpFrozenRowCount :: Lens' GridProperties (Maybe Int32)
+gpFrozenRowCount
+  = lens _gpFrozenRowCount
+      (\ s a -> s{_gpFrozenRowCount = a})
+      . mapping _Coerce
+
+-- | True if the row grouping control toggle is shown after the group.
+gpRowGroupControlAfter :: Lens' GridProperties (Maybe Bool)
+gpRowGroupControlAfter
+  = lens _gpRowGroupControlAfter
+      (\ s a -> s{_gpRowGroupControlAfter = a})
+
+-- | The number of rows in the grid.
+gpRowCount :: Lens' GridProperties (Maybe Int32)
+gpRowCount
+  = lens _gpRowCount (\ s a -> s{_gpRowCount = a}) .
+      mapping _Coerce
+
+instance FromJSON GridProperties where
+        parseJSON
+          = withObject "GridProperties"
+              (\ o ->
+                 GridProperties' <$>
+                   (o .:? "frozenColumnCount") <*> (o .:? "columnCount")
+                     <*> (o .:? "columnGroupControlAfter")
+                     <*> (o .:? "hideGridlines")
+                     <*> (o .:? "frozenRowCount")
+                     <*> (o .:? "rowGroupControlAfter")
+                     <*> (o .:? "rowCount"))
+
+instance ToJSON GridProperties where
+        toJSON GridProperties'{..}
+          = object
+              (catMaybes
+                 [("frozenColumnCount" .=) <$> _gpFrozenColumnCount,
+                  ("columnCount" .=) <$> _gpColumnCount,
+                  ("columnGroupControlAfter" .=) <$>
+                    _gpColumnGroupControlAfter,
+                  ("hideGridlines" .=) <$> _gpHideGridlines,
+                  ("frozenRowCount" .=) <$> _gpFrozenRowCount,
+                  ("rowGroupControlAfter" .=) <$>
+                    _gpRowGroupControlAfter,
+                  ("rowCount" .=) <$> _gpRowCount])
+
+-- | A </chart/interactive/docs/gallery/histogram histogram chart>. A
+-- histogram chart groups data items into bins, displaying each bin as a
+-- column of stacked items. Histograms are used to display the distribution
+-- of a dataset. Each column of items represents a range into which those
+-- items fall. The number of bins can be chosen automatically or specified
+-- explicitly.
+--
+-- /See:/ 'histogramChartSpec' smart constructor.
+data HistogramChartSpec = HistogramChartSpec'
+    { _hcsLegendPosition    :: !(Maybe HistogramChartSpecLegendPosition)
+    , _hcsSeries            :: !(Maybe [HistogramSeries])
+    , _hcsShowItemDividers  :: !(Maybe Bool)
+    , _hcsOutlierPercentile :: !(Maybe (Textual Double))
+    , _hcsBucketSize        :: !(Maybe (Textual Double))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'HistogramChartSpec' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'hcsLegendPosition'
+--
+-- * 'hcsSeries'
+--
+-- * 'hcsShowItemDividers'
+--
+-- * 'hcsOutlierPercentile'
+--
+-- * 'hcsBucketSize'
+histogramChartSpec
+    :: HistogramChartSpec
+histogramChartSpec =
+    HistogramChartSpec'
+    { _hcsLegendPosition = Nothing
+    , _hcsSeries = Nothing
+    , _hcsShowItemDividers = Nothing
+    , _hcsOutlierPercentile = Nothing
+    , _hcsBucketSize = Nothing
+    }
+
+-- | The position of the chart legend.
+hcsLegendPosition :: Lens' HistogramChartSpec (Maybe HistogramChartSpecLegendPosition)
+hcsLegendPosition
+  = lens _hcsLegendPosition
+      (\ s a -> s{_hcsLegendPosition = a})
+
+-- | The series for a histogram may be either a single series of values to be
+-- bucketed or multiple series, each of the same length, containing the
+-- name of the series followed by the values to be bucketed for that
+-- series.
+hcsSeries :: Lens' HistogramChartSpec [HistogramSeries]
+hcsSeries
+  = lens _hcsSeries (\ s a -> s{_hcsSeries = a}) .
+      _Default
+      . _Coerce
+
+-- | Whether horizontal divider lines should be displayed between items in
+-- each column.
+hcsShowItemDividers :: Lens' HistogramChartSpec (Maybe Bool)
+hcsShowItemDividers
+  = lens _hcsShowItemDividers
+      (\ s a -> s{_hcsShowItemDividers = a})
+
+-- | The outlier percentile is used to ensure that outliers do not adversely
+-- affect the calculation of bucket sizes. For example, setting an outlier
+-- percentile of 0.05 indicates that the top and bottom 5% of values when
+-- calculating buckets. The values are still included in the chart, they
+-- will be added to the first or last buckets instead of their own buckets.
+-- Must be between 0.0 and 0.5.
+hcsOutlierPercentile :: Lens' HistogramChartSpec (Maybe Double)
+hcsOutlierPercentile
+  = lens _hcsOutlierPercentile
+      (\ s a -> s{_hcsOutlierPercentile = a})
+      . mapping _Coerce
+
+-- | By default the bucket size (the range of values stacked in a single
+-- column) is chosen automatically, but it may be overridden here. E.g., A
+-- bucket size of 1.5 results in buckets from 0 - 1.5, 1.5 - 3.0, etc.
+-- Cannot be negative. This field is optional.
+hcsBucketSize :: Lens' HistogramChartSpec (Maybe Double)
+hcsBucketSize
+  = lens _hcsBucketSize
+      (\ s a -> s{_hcsBucketSize = a})
+      . mapping _Coerce
+
+instance FromJSON HistogramChartSpec where
+        parseJSON
+          = withObject "HistogramChartSpec"
+              (\ o ->
+                 HistogramChartSpec' <$>
+                   (o .:? "legendPosition") <*>
+                     (o .:? "series" .!= mempty)
+                     <*> (o .:? "showItemDividers")
+                     <*> (o .:? "outlierPercentile")
+                     <*> (o .:? "bucketSize"))
+
+instance ToJSON HistogramChartSpec where
+        toJSON HistogramChartSpec'{..}
+          = object
+              (catMaybes
+                 [("legendPosition" .=) <$> _hcsLegendPosition,
+                  ("series" .=) <$> _hcsSeries,
+                  ("showItemDividers" .=) <$> _hcsShowItemDividers,
+                  ("outlierPercentile" .=) <$> _hcsOutlierPercentile,
+                  ("bucketSize" .=) <$> _hcsBucketSize])
+
+-- | The criteria for showing\/hiding values per column. The map\'s key is
+-- the column index, and the value is the criteria for that column.
+--
+-- /See:/ 'basicFilterCriteria' smart constructor.
+newtype BasicFilterCriteria = BasicFilterCriteria'
+    { _bfcAddtional :: HashMap Text FilterCriteria
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BasicFilterCriteria' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bfcAddtional'
+basicFilterCriteria
+    :: HashMap Text FilterCriteria -- ^ 'bfcAddtional'
+    -> BasicFilterCriteria
+basicFilterCriteria pBfcAddtional_ =
+    BasicFilterCriteria'
+    { _bfcAddtional = _Coerce # pBfcAddtional_
+    }
+
+bfcAddtional :: Lens' BasicFilterCriteria (HashMap Text FilterCriteria)
+bfcAddtional
+  = lens _bfcAddtional (\ s a -> s{_bfcAddtional = a})
+      . _Coerce
+
+instance FromJSON BasicFilterCriteria where
+        parseJSON
+          = withObject "BasicFilterCriteria"
+              (\ o -> BasicFilterCriteria' <$> (parseJSONObject o))
+
+instance ToJSON BasicFilterCriteria where
+        toJSON = toJSON . _bfcAddtional
+
+-- | Adds a new banded range to the spreadsheet.
+--
+-- /See:/ 'addBandingRequest' smart constructor.
+newtype AddBandingRequest = AddBandingRequest'
+    { _abrBandedRange :: Maybe BandedRange
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AddBandingRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'abrBandedRange'
+addBandingRequest
+    :: AddBandingRequest
+addBandingRequest =
+    AddBandingRequest'
+    { _abrBandedRange = Nothing
+    }
+
+-- | The banded range to add. The bandedRangeId field is optional; if one is
+-- not set, an id will be randomly generated. (It is an error to specify
+-- the ID of a range that already exists.)
+abrBandedRange :: Lens' AddBandingRequest (Maybe BandedRange)
+abrBandedRange
+  = lens _abrBandedRange
+      (\ s a -> s{_abrBandedRange = a})
+
+instance FromJSON AddBandingRequest where
+        parseJSON
+          = withObject "AddBandingRequest"
+              (\ o -> AddBandingRequest' <$> (o .:? "bandedRange"))
+
+instance ToJSON AddBandingRequest where
+        toJSON AddBandingRequest'{..}
+          = object
+              (catMaybes [("bandedRange" .=) <$> _abrBandedRange])
+
+-- | Updates properties of dimensions within the specified range.
+--
+-- /See:/ 'updateDimensionPropertiesRequest' smart constructor.
+data UpdateDimensionPropertiesRequest = UpdateDimensionPropertiesRequest'
+    { _udprRange      :: !(Maybe DimensionRange)
+    , _udprFields     :: !(Maybe GFieldMask)
+    , _udprProperties :: !(Maybe DimensionProperties)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdateDimensionPropertiesRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'udprRange'
+--
+-- * 'udprFields'
+--
+-- * 'udprProperties'
+updateDimensionPropertiesRequest
+    :: UpdateDimensionPropertiesRequest
+updateDimensionPropertiesRequest =
+    UpdateDimensionPropertiesRequest'
+    { _udprRange = Nothing
+    , _udprFields = Nothing
+    , _udprProperties = Nothing
+    }
+
+-- | The rows or columns to update.
+udprRange :: Lens' UpdateDimensionPropertiesRequest (Maybe DimensionRange)
+udprRange
+  = lens _udprRange (\ s a -> s{_udprRange = a})
+
+-- | The fields that should be updated. At least one field must be specified.
+-- The root \`properties\` is implied and should not be specified. A single
+-- \`\"*\"\` can be used as short-hand for listing every field.
+udprFields :: Lens' UpdateDimensionPropertiesRequest (Maybe GFieldMask)
+udprFields
+  = lens _udprFields (\ s a -> s{_udprFields = a})
+
+-- | Properties to update.
+udprProperties :: Lens' UpdateDimensionPropertiesRequest (Maybe DimensionProperties)
+udprProperties
+  = lens _udprProperties
+      (\ s a -> s{_udprProperties = a})
+
+instance FromJSON UpdateDimensionPropertiesRequest
+         where
+        parseJSON
+          = withObject "UpdateDimensionPropertiesRequest"
+              (\ o ->
+                 UpdateDimensionPropertiesRequest' <$>
+                   (o .:? "range") <*> (o .:? "fields") <*>
+                     (o .:? "properties"))
+
+instance ToJSON UpdateDimensionPropertiesRequest
+         where
+        toJSON UpdateDimensionPropertiesRequest'{..}
+          = object
+              (catMaybes
+                 [("range" .=) <$> _udprRange,
+                  ("fields" .=) <$> _udprFields,
+                  ("properties" .=) <$> _udprProperties])
+
+-- | An optional mapping of filters per source column offset. The filters are
+-- applied before aggregating data into the pivot table. The map\'s key is
+-- the column offset of the source range that you want to filter, and the
+-- value is the criteria for that column. For example, if the source was
+-- \`C10:E15\`, a key of \`0\` will have the filter for column \`C\`,
+-- whereas the key \`1\` is for column \`D\`.
+--
+-- /See:/ 'pivotTableCriteria' smart constructor.
+newtype PivotTableCriteria = PivotTableCriteria'
+    { _ptcAddtional :: HashMap Text PivotFilterCriteria
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PivotTableCriteria' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ptcAddtional'
+pivotTableCriteria
+    :: HashMap Text PivotFilterCriteria -- ^ 'ptcAddtional'
+    -> PivotTableCriteria
+pivotTableCriteria pPtcAddtional_ =
+    PivotTableCriteria'
+    { _ptcAddtional = _Coerce # pPtcAddtional_
+    }
+
+ptcAddtional :: Lens' PivotTableCriteria (HashMap Text PivotFilterCriteria)
+ptcAddtional
+  = lens _ptcAddtional (\ s a -> s{_ptcAddtional = a})
+      . _Coerce
+
+instance FromJSON PivotTableCriteria where
+        parseJSON
+          = withObject "PivotTableCriteria"
+              (\ o -> PivotTableCriteria' <$> (parseJSONObject o))
+
+instance ToJSON PivotTableCriteria where
+        toJSON = toJSON . _ptcAddtional
+
+-- | Fills in more data based on existing data.
+--
+-- /See:/ 'autoFillRequest' smart constructor.
+data AutoFillRequest = AutoFillRequest'
+    { _afrSourceAndDestination :: !(Maybe SourceAndDestination)
+    , _afrUseAlternateSeries   :: !(Maybe Bool)
+    , _afrRange                :: !(Maybe GridRange)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AutoFillRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'afrSourceAndDestination'
+--
+-- * 'afrUseAlternateSeries'
+--
+-- * 'afrRange'
+autoFillRequest
+    :: AutoFillRequest
+autoFillRequest =
+    AutoFillRequest'
+    { _afrSourceAndDestination = Nothing
+    , _afrUseAlternateSeries = Nothing
+    , _afrRange = Nothing
+    }
+
+-- | The source and destination areas to autofill. This explicitly lists the
+-- source of the autofill and where to extend that data.
+afrSourceAndDestination :: Lens' AutoFillRequest (Maybe SourceAndDestination)
+afrSourceAndDestination
+  = lens _afrSourceAndDestination
+      (\ s a -> s{_afrSourceAndDestination = a})
+
+-- | True if we should generate data with the \"alternate\" series. This
+-- differs based on the type and amount of source data.
+afrUseAlternateSeries :: Lens' AutoFillRequest (Maybe Bool)
+afrUseAlternateSeries
+  = lens _afrUseAlternateSeries
+      (\ s a -> s{_afrUseAlternateSeries = a})
+
+-- | The range to autofill. This will examine the range and detect the
+-- location that has data and automatically fill that data in to the rest
+-- of the range.
+afrRange :: Lens' AutoFillRequest (Maybe GridRange)
+afrRange = lens _afrRange (\ s a -> s{_afrRange = a})
+
+instance FromJSON AutoFillRequest where
+        parseJSON
+          = withObject "AutoFillRequest"
+              (\ o ->
+                 AutoFillRequest' <$>
+                   (o .:? "sourceAndDestination") <*>
+                     (o .:? "useAlternateSeries")
+                     <*> (o .:? "range"))
+
+instance ToJSON AutoFillRequest where
+        toJSON AutoFillRequest'{..}
+          = object
+              (catMaybes
+                 [("sourceAndDestination" .=) <$>
+                    _afrSourceAndDestination,
+                  ("useAlternateSeries" .=) <$> _afrUseAlternateSeries,
+                  ("range" .=) <$> _afrRange])
+
+-- | Selects DeveloperMetadata that matches all of the specified fields. For
+-- example, if only a metadata ID is specified this considers the
+-- DeveloperMetadata with that particular unique ID. If a metadata key is
+-- specified, this considers all developer metadata with that key. If a
+-- key, visibility, and location type are all specified, this considers all
+-- developer metadata with that key and visibility that are associated with
+-- a location of that type. In general, this selects all DeveloperMetadata
+-- that matches the intersection of all the specified fields; any field or
+-- combination of fields may be specified.
+--
+-- /See:/ 'developerMetadataLookup' smart constructor.
+data DeveloperMetadataLookup = DeveloperMetadataLookup'
+    { _dLocationMatchingStrategy :: !(Maybe DeveloperMetadataLookupLocationMatchingStrategy)
+    , _dMetadataId               :: !(Maybe (Textual Int32))
+    , _dVisibility               :: !(Maybe DeveloperMetadataLookupVisibility)
+    , _dMetadataKey              :: !(Maybe Text)
+    , _dLocationType             :: !(Maybe DeveloperMetadataLookupLocationType)
+    , _dMetadataLocation         :: !(Maybe DeveloperMetadataLocation)
+    , _dMetadataValue            :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeveloperMetadataLookup' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dLocationMatchingStrategy'
+--
+-- * 'dMetadataId'
+--
+-- * 'dVisibility'
+--
+-- * 'dMetadataKey'
+--
+-- * 'dLocationType'
+--
+-- * 'dMetadataLocation'
+--
+-- * 'dMetadataValue'
+developerMetadataLookup
+    :: DeveloperMetadataLookup
+developerMetadataLookup =
+    DeveloperMetadataLookup'
+    { _dLocationMatchingStrategy = Nothing
+    , _dMetadataId = Nothing
+    , _dVisibility = Nothing
+    , _dMetadataKey = Nothing
+    , _dLocationType = Nothing
+    , _dMetadataLocation = Nothing
+    , _dMetadataValue = Nothing
+    }
+
+-- | Determines how this lookup matches the location. If this field is
+-- specified as EXACT, only developer metadata associated on the exact
+-- location specified is matched. If this field is specified to
+-- INTERSECTING, developer metadata associated on intersecting locations is
+-- also matched. If left unspecified, this field assumes a default value of
+-- INTERSECTING. If this field is specified, a metadataLocation must also
+-- be specified.
+dLocationMatchingStrategy :: Lens' DeveloperMetadataLookup (Maybe DeveloperMetadataLookupLocationMatchingStrategy)
+dLocationMatchingStrategy
+  = lens _dLocationMatchingStrategy
+      (\ s a -> s{_dLocationMatchingStrategy = a})
+
+-- | Limits the selected developer metadata to that which has a matching
+-- DeveloperMetadata.metadata_id.
+dMetadataId :: Lens' DeveloperMetadataLookup (Maybe Int32)
+dMetadataId
+  = lens _dMetadataId (\ s a -> s{_dMetadataId = a}) .
+      mapping _Coerce
+
+-- | Limits the selected developer metadata to that which has a matching
+-- DeveloperMetadata.visibility. If left unspecified, all developer
+-- metadata visibile to the requesting project is considered.
+dVisibility :: Lens' DeveloperMetadataLookup (Maybe DeveloperMetadataLookupVisibility)
+dVisibility
+  = lens _dVisibility (\ s a -> s{_dVisibility = a})
+
+-- | Limits the selected developer metadata to that which has a matching
+-- DeveloperMetadata.metadata_key.
+dMetadataKey :: Lens' DeveloperMetadataLookup (Maybe Text)
+dMetadataKey
+  = lens _dMetadataKey (\ s a -> s{_dMetadataKey = a})
+
+-- | Limits the selected developer metadata to those entries which are
+-- associated with locations of the specified type. For example, when this
+-- field is specified as ROW this lookup only considers developer metadata
+-- associated on rows. If the field is left unspecified, all location types
+-- are considered. This field cannot be specified as SPREADSHEET when the
+-- locationMatchingStrategy is specified as INTERSECTING or when the
+-- metadataLocation is specified as a non-spreadsheet location: spreadsheet
+-- metadata cannot intersect any other developer metadata location. This
+-- field also must be left unspecified when the locationMatchingStrategy is
+-- specified as EXACT.
+dLocationType :: Lens' DeveloperMetadataLookup (Maybe DeveloperMetadataLookupLocationType)
+dLocationType
+  = lens _dLocationType
+      (\ s a -> s{_dLocationType = a})
+
+-- | Limits the selected developer metadata to those entries associated with
+-- the specified location. This field either matches exact locations or all
+-- intersecting locations according the specified locationMatchingStrategy.
+dMetadataLocation :: Lens' DeveloperMetadataLookup (Maybe DeveloperMetadataLocation)
+dMetadataLocation
+  = lens _dMetadataLocation
+      (\ s a -> s{_dMetadataLocation = a})
+
+-- | Limits the selected developer metadata to that which has a matching
+-- DeveloperMetadata.metadata_value.
+dMetadataValue :: Lens' DeveloperMetadataLookup (Maybe Text)
+dMetadataValue
+  = lens _dMetadataValue
+      (\ s a -> s{_dMetadataValue = a})
+
+instance FromJSON DeveloperMetadataLookup where
+        parseJSON
+          = withObject "DeveloperMetadataLookup"
+              (\ o ->
+                 DeveloperMetadataLookup' <$>
+                   (o .:? "locationMatchingStrategy") <*>
+                     (o .:? "metadataId")
+                     <*> (o .:? "visibility")
+                     <*> (o .:? "metadataKey")
+                     <*> (o .:? "locationType")
+                     <*> (o .:? "metadataLocation")
+                     <*> (o .:? "metadataValue"))
+
+instance ToJSON DeveloperMetadataLookup where
+        toJSON DeveloperMetadataLookup'{..}
+          = object
+              (catMaybes
+                 [("locationMatchingStrategy" .=) <$>
+                    _dLocationMatchingStrategy,
+                  ("metadataId" .=) <$> _dMetadataId,
+                  ("visibility" .=) <$> _dVisibility,
+                  ("metadataKey" .=) <$> _dMetadataKey,
+                  ("locationType" .=) <$> _dLocationType,
+                  ("metadataLocation" .=) <$> _dMetadataLocation,
+                  ("metadataValue" .=) <$> _dMetadataValue])
+
+-- | Duplicates the contents of a sheet.
+--
+-- /See:/ 'duplicateSheetRequest' smart constructor.
+data DuplicateSheetRequest = DuplicateSheetRequest'
+    { _dsrNewSheetName     :: !(Maybe Text)
+    , _dsrInsertSheetIndex :: !(Maybe (Textual Int32))
+    , _dsrSourceSheetId    :: !(Maybe (Textual Int32))
+    , _dsrNewSheetId       :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DuplicateSheetRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dsrNewSheetName'
+--
+-- * 'dsrInsertSheetIndex'
+--
+-- * 'dsrSourceSheetId'
+--
+-- * 'dsrNewSheetId'
+duplicateSheetRequest
+    :: DuplicateSheetRequest
+duplicateSheetRequest =
+    DuplicateSheetRequest'
+    { _dsrNewSheetName = Nothing
+    , _dsrInsertSheetIndex = Nothing
+    , _dsrSourceSheetId = Nothing
+    , _dsrNewSheetId = Nothing
+    }
+
+-- | The name of the new sheet. If empty, a new name is chosen for you.
+dsrNewSheetName :: Lens' DuplicateSheetRequest (Maybe Text)
+dsrNewSheetName
+  = lens _dsrNewSheetName
+      (\ s a -> s{_dsrNewSheetName = a})
+
+-- | The zero-based index where the new sheet should be inserted. The index
+-- of all sheets after this are incremented.
+dsrInsertSheetIndex :: Lens' DuplicateSheetRequest (Maybe Int32)
+dsrInsertSheetIndex
+  = lens _dsrInsertSheetIndex
+      (\ s a -> s{_dsrInsertSheetIndex = a})
+      . mapping _Coerce
+
+-- | The sheet to duplicate.
+dsrSourceSheetId :: Lens' DuplicateSheetRequest (Maybe Int32)
+dsrSourceSheetId
+  = lens _dsrSourceSheetId
+      (\ s a -> s{_dsrSourceSheetId = a})
+      . mapping _Coerce
+
+-- | If set, the ID of the new sheet. If not set, an ID is chosen. If set,
+-- the ID must not conflict with any existing sheet ID. If set, it must be
+-- non-negative.
+dsrNewSheetId :: Lens' DuplicateSheetRequest (Maybe Int32)
+dsrNewSheetId
+  = lens _dsrNewSheetId
+      (\ s a -> s{_dsrNewSheetId = a})
+      . mapping _Coerce
+
+instance FromJSON DuplicateSheetRequest where
+        parseJSON
+          = withObject "DuplicateSheetRequest"
+              (\ o ->
+                 DuplicateSheetRequest' <$>
+                   (o .:? "newSheetName") <*> (o .:? "insertSheetIndex")
+                     <*> (o .:? "sourceSheetId")
+                     <*> (o .:? "newSheetId"))
+
+instance ToJSON DuplicateSheetRequest where
+        toJSON DuplicateSheetRequest'{..}
+          = object
+              (catMaybes
+                 [("newSheetName" .=) <$> _dsrNewSheetName,
+                  ("insertSheetIndex" .=) <$> _dsrInsertSheetIndex,
+                  ("sourceSheetId" .=) <$> _dsrSourceSheetId,
+                  ("newSheetId" .=) <$> _dsrNewSheetId])
+
+-- | The rotation applied to text in a cell.
+--
+-- /See:/ 'textRotation' smart constructor.
+data TextRotation = TextRotation'
+    { _trAngle    :: !(Maybe (Textual Int32))
+    , _trVertical :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TextRotation' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'trAngle'
+--
+-- * 'trVertical'
+textRotation
+    :: TextRotation
+textRotation =
+    TextRotation'
+    { _trAngle = Nothing
+    , _trVertical = Nothing
+    }
+
+-- | The angle between the standard orientation and the desired orientation.
+-- Measured in degrees. Valid values are between -90 and 90. Positive
+-- angles are angled upwards, negative are angled downwards. Note: For LTR
+-- text direction positive angles are in the counterclockwise direction,
+-- whereas for RTL they are in the clockwise direction
+trAngle :: Lens' TextRotation (Maybe Int32)
+trAngle
+  = lens _trAngle (\ s a -> s{_trAngle = a}) .
+      mapping _Coerce
+
+-- | If true, text reads top to bottom, but the orientation of individual
+-- characters is unchanged. For example: | V | | e | | r | | t | | i | | c
+-- | | a | | l |
+trVertical :: Lens' TextRotation (Maybe Bool)
+trVertical
+  = lens _trVertical (\ s a -> s{_trVertical = a})
+
+instance FromJSON TextRotation where
+        parseJSON
+          = withObject "TextRotation"
+              (\ o ->
+                 TextRotation' <$>
+                   (o .:? "angle") <*> (o .:? "vertical"))
+
+instance ToJSON TextRotation where
+        toJSON TextRotation'{..}
+          = object
+              (catMaybes
+                 [("angle" .=) <$> _trAngle,
+                  ("vertical" .=) <$> _trVertical])
+
+-- | The result of a filter view being duplicated.
+--
+-- /See:/ 'duplicateFilterViewResponse' smart constructor.
+newtype DuplicateFilterViewResponse = DuplicateFilterViewResponse'
+    { _dfvrFilter :: Maybe FilterView
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DuplicateFilterViewResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dfvrFilter'
+duplicateFilterViewResponse
+    :: DuplicateFilterViewResponse
+duplicateFilterViewResponse =
+    DuplicateFilterViewResponse'
+    { _dfvrFilter = Nothing
+    }
+
+-- | The newly created filter.
+dfvrFilter :: Lens' DuplicateFilterViewResponse (Maybe FilterView)
+dfvrFilter
+  = lens _dfvrFilter (\ s a -> s{_dfvrFilter = a})
+
+instance FromJSON DuplicateFilterViewResponse where
+        parseJSON
+          = withObject "DuplicateFilterViewResponse"
+              (\ o ->
+                 DuplicateFilterViewResponse' <$> (o .:? "filter"))
+
+instance ToJSON DuplicateFilterViewResponse where
+        toJSON DuplicateFilterViewResponse'{..}
+          = object (catMaybes [("filter" .=) <$> _dfvrFilter])
+
+-- | The request for updating more than one range of values in a spreadsheet.
+--
+-- /See:/ 'batchUpdateValuesRequest' smart constructor.
+data BatchUpdateValuesRequest = BatchUpdateValuesRequest'
+    { _buvrData                         :: !(Maybe [ValueRange])
+    , _buvrValueInputOption             :: !(Maybe BatchUpdateValuesRequestValueInputOption)
+    , _buvrIncludeValuesInResponse      :: !(Maybe Bool)
+    , _buvrResponseDateTimeRenderOption :: !(Maybe BatchUpdateValuesRequestResponseDateTimeRenderOption)
+    , _buvrResponseValueRenderOption    :: !(Maybe BatchUpdateValuesRequestResponseValueRenderOption)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BatchUpdateValuesRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'buvrData'
+--
+-- * 'buvrValueInputOption'
+--
+-- * 'buvrIncludeValuesInResponse'
+--
+-- * 'buvrResponseDateTimeRenderOption'
+--
+-- * 'buvrResponseValueRenderOption'
+batchUpdateValuesRequest
+    :: BatchUpdateValuesRequest
+batchUpdateValuesRequest =
+    BatchUpdateValuesRequest'
+    { _buvrData = Nothing
+    , _buvrValueInputOption = Nothing
+    , _buvrIncludeValuesInResponse = Nothing
+    , _buvrResponseDateTimeRenderOption = Nothing
+    , _buvrResponseValueRenderOption = Nothing
+    }
+
+-- | The new values to apply to the spreadsheet.
+buvrData :: Lens' BatchUpdateValuesRequest [ValueRange]
+buvrData
+  = lens _buvrData (\ s a -> s{_buvrData = a}) .
+      _Default
+      . _Coerce
+
+-- | How the input data should be interpreted.
+buvrValueInputOption :: Lens' BatchUpdateValuesRequest (Maybe BatchUpdateValuesRequestValueInputOption)
+buvrValueInputOption
+  = lens _buvrValueInputOption
+      (\ s a -> s{_buvrValueInputOption = a})
+
+-- | Determines if the update response should include the values of the cells
+-- that were updated. By default, responses do not include the updated
+-- values. The \`updatedData\` field within each of the
+-- BatchUpdateValuesResponse.responses will contain the updated values. If
+-- the range to write was larger than than the range actually written, the
+-- response will include all values in the requested range (excluding
+-- trailing empty rows and columns).
+buvrIncludeValuesInResponse :: Lens' BatchUpdateValuesRequest (Maybe Bool)
+buvrIncludeValuesInResponse
+  = lens _buvrIncludeValuesInResponse
+      (\ s a -> s{_buvrIncludeValuesInResponse = a})
+
+-- | Determines how dates, times, and durations in the response should be
+-- rendered. This is ignored if response_value_render_option is
+-- FORMATTED_VALUE. The default dateTime render option is
+-- DateTimeRenderOption.SERIAL_NUMBER.
+buvrResponseDateTimeRenderOption :: Lens' BatchUpdateValuesRequest (Maybe BatchUpdateValuesRequestResponseDateTimeRenderOption)
+buvrResponseDateTimeRenderOption
+  = lens _buvrResponseDateTimeRenderOption
+      (\ s a -> s{_buvrResponseDateTimeRenderOption = a})
+
+-- | Determines how values in the response should be rendered. The default
+-- render option is ValueRenderOption.FORMATTED_VALUE.
+buvrResponseValueRenderOption :: Lens' BatchUpdateValuesRequest (Maybe BatchUpdateValuesRequestResponseValueRenderOption)
+buvrResponseValueRenderOption
+  = lens _buvrResponseValueRenderOption
+      (\ s a -> s{_buvrResponseValueRenderOption = a})
+
+instance FromJSON BatchUpdateValuesRequest where
+        parseJSON
+          = withObject "BatchUpdateValuesRequest"
+              (\ o ->
+                 BatchUpdateValuesRequest' <$>
+                   (o .:? "data" .!= mempty) <*>
+                     (o .:? "valueInputOption")
+                     <*> (o .:? "includeValuesInResponse")
+                     <*> (o .:? "responseDateTimeRenderOption")
+                     <*> (o .:? "responseValueRenderOption"))
+
+instance ToJSON BatchUpdateValuesRequest where
+        toJSON BatchUpdateValuesRequest'{..}
+          = object
+              (catMaybes
+                 [("data" .=) <$> _buvrData,
+                  ("valueInputOption" .=) <$> _buvrValueInputOption,
+                  ("includeValuesInResponse" .=) <$>
+                    _buvrIncludeValuesInResponse,
+                  ("responseDateTimeRenderOption" .=) <$>
+                    _buvrResponseDateTimeRenderOption,
+                  ("responseValueRenderOption" .=) <$>
+                    _buvrResponseValueRenderOption])
+
+-- | A range of values whose location is specified by a DataFilter.
+--
+-- /See:/ 'dataFilterValueRange' smart constructor.
+data DataFilterValueRange = DataFilterValueRange'
+    { _dfvrValues         :: !(Maybe [[JSONValue]])
+    , _dfvrDataFilter     :: !(Maybe DataFilter)
+    , _dfvrMajorDimension :: !(Maybe DataFilterValueRangeMajorDimension)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DataFilterValueRange' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dfvrValues'
+--
+-- * 'dfvrDataFilter'
+--
+-- * 'dfvrMajorDimension'
+dataFilterValueRange
+    :: DataFilterValueRange
+dataFilterValueRange =
+    DataFilterValueRange'
+    { _dfvrValues = Nothing
+    , _dfvrDataFilter = Nothing
+    , _dfvrMajorDimension = Nothing
+    }
+
+-- | The data to be written. If the provided values exceed any of the ranges
+-- matched by the data filter then the request will fail. If the provided
+-- values are less than the matched ranges only the specified values will
+-- be written, existing values in the matched ranges will remain
+-- unaffected.
+dfvrValues :: Lens' DataFilterValueRange [[JSONValue]]
+dfvrValues
+  = lens _dfvrValues (\ s a -> s{_dfvrValues = a}) .
+      _Default
+      . _Coerce
+
+-- | The data filter describing the location of the values in the
+-- spreadsheet.
+dfvrDataFilter :: Lens' DataFilterValueRange (Maybe DataFilter)
+dfvrDataFilter
+  = lens _dfvrDataFilter
+      (\ s a -> s{_dfvrDataFilter = a})
+
+-- | The major dimension of the values.
+dfvrMajorDimension :: Lens' DataFilterValueRange (Maybe DataFilterValueRangeMajorDimension)
+dfvrMajorDimension
+  = lens _dfvrMajorDimension
+      (\ s a -> s{_dfvrMajorDimension = a})
+
+instance FromJSON DataFilterValueRange where
+        parseJSON
+          = withObject "DataFilterValueRange"
+              (\ o ->
+                 DataFilterValueRange' <$>
+                   (o .:? "values" .!= mempty) <*> (o .:? "dataFilter")
+                     <*> (o .:? "majorDimension"))
+
+instance ToJSON DataFilterValueRange where
+        toJSON DataFilterValueRange'{..}
+          = object
+              (catMaybes
+                 [("values" .=) <$> _dfvrValues,
+                  ("dataFilter" .=) <$> _dfvrDataFilter,
+                  ("majorDimension" .=) <$> _dfvrMajorDimension])
+
+-- | Adds a chart to a sheet in the spreadsheet.
+--
+-- /See:/ 'addChartRequest' smart constructor.
+newtype AddChartRequest = AddChartRequest'
+    { _aChart :: Maybe EmbeddedChart
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AddChartRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aChart'
+addChartRequest
+    :: AddChartRequest
+addChartRequest =
+    AddChartRequest'
+    { _aChart = Nothing
+    }
+
+-- | The chart that should be added to the spreadsheet, including the
+-- position where it should be placed. The chartId field is optional; if
+-- one is not set, an id will be randomly generated. (It is an error to
+-- specify the ID of a chart that already exists.)
+aChart :: Lens' AddChartRequest (Maybe EmbeddedChart)
+aChart = lens _aChart (\ s a -> s{_aChart = a})
+
+instance FromJSON AddChartRequest where
+        parseJSON
+          = withObject "AddChartRequest"
+              (\ o -> AddChartRequest' <$> (o .:? "chart"))
+
+instance ToJSON AddChartRequest where
+        toJSON AddChartRequest'{..}
+          = object (catMaybes [("chart" .=) <$> _aChart])
+
+-- | A named range.
+--
+-- /See:/ 'namedRange' smart constructor.
+data NamedRange = NamedRange'
+    { _nrNamedRangeId :: !(Maybe Text)
+    , _nrName         :: !(Maybe Text)
+    , _nrRange        :: !(Maybe GridRange)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'NamedRange' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'nrNamedRangeId'
+--
+-- * 'nrName'
+--
+-- * 'nrRange'
+namedRange
+    :: NamedRange
+namedRange =
+    NamedRange'
+    { _nrNamedRangeId = Nothing
+    , _nrName = Nothing
+    , _nrRange = Nothing
+    }
+
+-- | The ID of the named range.
+nrNamedRangeId :: Lens' NamedRange (Maybe Text)
+nrNamedRangeId
+  = lens _nrNamedRangeId
+      (\ s a -> s{_nrNamedRangeId = a})
+
+-- | The name of the named range.
+nrName :: Lens' NamedRange (Maybe Text)
+nrName = lens _nrName (\ s a -> s{_nrName = a})
+
+-- | The range this represents.
+nrRange :: Lens' NamedRange (Maybe GridRange)
+nrRange = lens _nrRange (\ s a -> s{_nrRange = a})
+
+instance FromJSON NamedRange where
+        parseJSON
+          = withObject "NamedRange"
+              (\ o ->
+                 NamedRange' <$>
+                   (o .:? "namedRangeId") <*> (o .:? "name") <*>
+                     (o .:? "range"))
+
+instance ToJSON NamedRange where
+        toJSON NamedRange'{..}
+          = object
+              (catMaybes
+                 [("namedRangeId" .=) <$> _nrNamedRangeId,
+                  ("name" .=) <$> _nrName, ("range" .=) <$> _nrRange])
+
+-- | Merges all cells in the range.
+--
+-- /See:/ 'mergeCellsRequest' smart constructor.
+data MergeCellsRequest = MergeCellsRequest'
+    { _mcrMergeType :: !(Maybe MergeCellsRequestMergeType)
+    , _mcrRange     :: !(Maybe GridRange)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MergeCellsRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mcrMergeType'
+--
+-- * 'mcrRange'
+mergeCellsRequest
+    :: MergeCellsRequest
+mergeCellsRequest =
+    MergeCellsRequest'
+    { _mcrMergeType = Nothing
+    , _mcrRange = Nothing
+    }
+
+-- | How the cells should be merged.
+mcrMergeType :: Lens' MergeCellsRequest (Maybe MergeCellsRequestMergeType)
+mcrMergeType
+  = lens _mcrMergeType (\ s a -> s{_mcrMergeType = a})
+
+-- | The range of cells to merge.
+mcrRange :: Lens' MergeCellsRequest (Maybe GridRange)
+mcrRange = lens _mcrRange (\ s a -> s{_mcrRange = a})
+
+instance FromJSON MergeCellsRequest where
+        parseJSON
+          = withObject "MergeCellsRequest"
+              (\ o ->
+                 MergeCellsRequest' <$>
+                   (o .:? "mergeType") <*> (o .:? "range"))
+
+instance ToJSON MergeCellsRequest where
+        toJSON MergeCellsRequest'{..}
+          = object
+              (catMaybes
+                 [("mergeType" .=) <$> _mcrMergeType,
+                  ("range" .=) <$> _mcrRange])
+
+-- | Allows you to manually organize the values in a source data column into
+-- buckets with names of your choosing. For example, a pivot table that
+-- aggregates population by state: +-------+-------------------+ | State |
+-- SUM of Population | +-------+-------------------+ | AK | 0.7 | | AL |
+-- 4.8 | | AR | 2.9 | ... +-------+-------------------+ could be turned
+-- into a pivot table that aggregates population by time zone by providing
+-- a list of groups (for example, groupName = \'Central\', items = [\'AL\',
+-- \'AR\', \'IA\', ...]) to a manual group rule. Note that a similar effect
+-- could be achieved by adding a time zone column to the source data and
+-- adjusting the pivot table. +-----------+-------------------+ | Time Zone
+-- | SUM of Population | +-----------+-------------------+ | Central |
+-- 106.3 | | Eastern | 151.9 | | Mountain | 17.4 | ...
+-- +-----------+-------------------+
+--
+-- /See:/ 'manualRule' smart constructor.
+newtype ManualRule = ManualRule'
+    { _mrGroups :: Maybe [ManualRuleGroup]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ManualRule' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mrGroups'
+manualRule
+    :: ManualRule
+manualRule =
+    ManualRule'
+    { _mrGroups = Nothing
+    }
+
+-- | The list of group names and the corresponding items from the source data
+-- that map to each group name.
+mrGroups :: Lens' ManualRule [ManualRuleGroup]
+mrGroups
+  = lens _mrGroups (\ s a -> s{_mrGroups = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON ManualRule where
+        parseJSON
+          = withObject "ManualRule"
+              (\ o -> ManualRule' <$> (o .:? "groups" .!= mempty))
+
+instance ToJSON ManualRule where
+        toJSON ManualRule'{..}
+          = object (catMaybes [("groups" .=) <$> _mrGroups])
+
+-- | Position settings for text.
+--
+-- /See:/ 'textPosition' smart constructor.
+newtype TextPosition = TextPosition'
+    { _tpHorizontalAlignment :: Maybe TextPositionHorizontalAlignment
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TextPosition' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tpHorizontalAlignment'
+textPosition
+    :: TextPosition
+textPosition =
+    TextPosition'
+    { _tpHorizontalAlignment = Nothing
+    }
+
+-- | Horizontal alignment setting for the piece of text.
+tpHorizontalAlignment :: Lens' TextPosition (Maybe TextPositionHorizontalAlignment)
+tpHorizontalAlignment
+  = lens _tpHorizontalAlignment
+      (\ s a -> s{_tpHorizontalAlignment = a})
+
+instance FromJSON TextPosition where
+        parseJSON
+          = withObject "TextPosition"
+              (\ o ->
+                 TextPosition' <$> (o .:? "horizontalAlignment"))
+
+instance ToJSON TextPosition where
+        toJSON TextPosition'{..}
+          = object
+              (catMaybes
+                 [("horizontalAlignment" .=) <$>
+                    _tpHorizontalAlignment])
+
+-- | A border along a cell.
+--
+-- /See:/ 'bOrder' smart constructor.
+data BOrder = BOrder'
+    { _boStyle :: !(Maybe BOrderStyle)
+    , _boColor :: !(Maybe Color)
+    , _boWidth :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BOrder' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'boStyle'
+--
+-- * 'boColor'
+--
+-- * 'boWidth'
+bOrder
+    :: BOrder
+bOrder =
+    BOrder'
+    { _boStyle = Nothing
+    , _boColor = Nothing
+    , _boWidth = Nothing
+    }
+
+-- | The style of the border.
+boStyle :: Lens' BOrder (Maybe BOrderStyle)
+boStyle = lens _boStyle (\ s a -> s{_boStyle = a})
+
+-- | The color of the border.
+boColor :: Lens' BOrder (Maybe Color)
+boColor = lens _boColor (\ s a -> s{_boColor = a})
+
+-- | The width of the border, in pixels. Deprecated; the width is determined
+-- by the \"style\" field.
+boWidth :: Lens' BOrder (Maybe Int32)
+boWidth
+  = lens _boWidth (\ s a -> s{_boWidth = a}) .
+      mapping _Coerce
+
+instance FromJSON BOrder where
+        parseJSON
+          = withObject "BOrder"
+              (\ o ->
+                 BOrder' <$>
+                   (o .:? "style") <*> (o .:? "color") <*>
+                     (o .:? "width"))
+
+instance ToJSON BOrder where
+        toJSON BOrder'{..}
+          = object
+              (catMaybes
+                 [("style" .=) <$> _boStyle,
+                  ("color" .=) <$> _boColor,
+                  ("width" .=) <$> _boWidth])
+
+-- | A request to retrieve all developer metadata matching the set of
+-- specified criteria.
+--
+-- /See:/ 'searchDeveloperMetadataRequest' smart constructor.
+newtype SearchDeveloperMetadataRequest = SearchDeveloperMetadataRequest'
+    { _sdmrDataFilters :: Maybe [DataFilter]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SearchDeveloperMetadataRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sdmrDataFilters'
+searchDeveloperMetadataRequest
+    :: SearchDeveloperMetadataRequest
+searchDeveloperMetadataRequest =
+    SearchDeveloperMetadataRequest'
+    { _sdmrDataFilters = Nothing
+    }
+
+-- | The data filters describing the criteria used to determine which
+-- DeveloperMetadata entries to return. DeveloperMetadata matching any of
+-- the specified filters will be included in the response.
+sdmrDataFilters :: Lens' SearchDeveloperMetadataRequest [DataFilter]
+sdmrDataFilters
+  = lens _sdmrDataFilters
+      (\ s a -> s{_sdmrDataFilters = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON SearchDeveloperMetadataRequest
+         where
+        parseJSON
+          = withObject "SearchDeveloperMetadataRequest"
+              (\ o ->
+                 SearchDeveloperMetadataRequest' <$>
+                   (o .:? "dataFilters" .!= mempty))
+
+instance ToJSON SearchDeveloperMetadataRequest where
+        toJSON SearchDeveloperMetadataRequest'{..}
+          = object
+              (catMaybes [("dataFilters" .=) <$> _sdmrDataFilters])
+
+-- | The series of a CandlestickData.
+--
+-- /See:/ 'candlestickSeries' smart constructor.
+newtype CandlestickSeries = CandlestickSeries'
+    { _csData :: Maybe ChartData
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CandlestickSeries' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'csData'
+candlestickSeries
+    :: CandlestickSeries
+candlestickSeries =
+    CandlestickSeries'
+    { _csData = Nothing
+    }
+
+-- | The data of the CandlestickSeries.
+csData :: Lens' CandlestickSeries (Maybe ChartData)
+csData = lens _csData (\ s a -> s{_csData = a})
+
+instance FromJSON CandlestickSeries where
+        parseJSON
+          = withObject "CandlestickSeries"
+              (\ o -> CandlestickSeries' <$> (o .:? "data"))
+
+instance ToJSON CandlestickSeries where
+        toJSON CandlestickSeries'{..}
+          = object (catMaybes [("data" .=) <$> _csData])
+
+-- | The kinds of value that a cell in a spreadsheet can have.
+--
+-- /See:/ 'extendedValue' smart constructor.
+data ExtendedValue = ExtendedValue'
+    { _evBoolValue    :: !(Maybe Bool)
+    , _evNumberValue  :: !(Maybe (Textual Double))
+    , _evErrorValue   :: !(Maybe ErrorValue)
+    , _evStringValue  :: !(Maybe Text)
+    , _evFormulaValue :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ExtendedValue' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'evBoolValue'
+--
+-- * 'evNumberValue'
+--
+-- * 'evErrorValue'
+--
+-- * 'evStringValue'
+--
+-- * 'evFormulaValue'
+extendedValue
+    :: ExtendedValue
+extendedValue =
+    ExtendedValue'
+    { _evBoolValue = Nothing
+    , _evNumberValue = Nothing
+    , _evErrorValue = Nothing
+    , _evStringValue = Nothing
+    , _evFormulaValue = Nothing
+    }
+
+-- | Represents a boolean value.
+evBoolValue :: Lens' ExtendedValue (Maybe Bool)
+evBoolValue
+  = lens _evBoolValue (\ s a -> s{_evBoolValue = a})
+
+-- | Represents a double value. Note: Dates, Times and DateTimes are
+-- represented as doubles in \"serial number\" format.
+evNumberValue :: Lens' ExtendedValue (Maybe Double)
+evNumberValue
+  = lens _evNumberValue
+      (\ s a -> s{_evNumberValue = a})
+      . mapping _Coerce
+
+-- | Represents an error. This field is read-only.
+evErrorValue :: Lens' ExtendedValue (Maybe ErrorValue)
+evErrorValue
+  = lens _evErrorValue (\ s a -> s{_evErrorValue = a})
+
+-- | Represents a string value. Leading single quotes are not included. For
+-- example, if the user typed \`\'123\` into the UI, this would be
+-- represented as a \`stringValue\` of \`\"123\"\`.
+evStringValue :: Lens' ExtendedValue (Maybe Text)
+evStringValue
+  = lens _evStringValue
+      (\ s a -> s{_evStringValue = a})
+
+-- | Represents a formula.
+evFormulaValue :: Lens' ExtendedValue (Maybe Text)
+evFormulaValue
+  = lens _evFormulaValue
+      (\ s a -> s{_evFormulaValue = a})
+
+instance FromJSON ExtendedValue where
+        parseJSON
+          = withObject "ExtendedValue"
+              (\ o ->
+                 ExtendedValue' <$>
+                   (o .:? "boolValue") <*> (o .:? "numberValue") <*>
+                     (o .:? "errorValue")
+                     <*> (o .:? "stringValue")
+                     <*> (o .:? "formulaValue"))
+
+instance ToJSON ExtendedValue where
+        toJSON ExtendedValue'{..}
+          = object
+              (catMaybes
+                 [("boolValue" .=) <$> _evBoolValue,
+                  ("numberValue" .=) <$> _evNumberValue,
+                  ("errorValue" .=) <$> _evErrorValue,
+                  ("stringValue" .=) <$> _evStringValue,
+                  ("formulaValue" .=) <$> _evFormulaValue])
+
+-- | Adds a named range to the spreadsheet.
+--
+-- /See:/ 'addNamedRangeRequest' smart constructor.
+newtype AddNamedRangeRequest = AddNamedRangeRequest'
+    { _aNamedRange :: Maybe NamedRange
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AddNamedRangeRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aNamedRange'
+addNamedRangeRequest
+    :: AddNamedRangeRequest
+addNamedRangeRequest =
+    AddNamedRangeRequest'
+    { _aNamedRange = Nothing
+    }
+
+-- | The named range to add. The namedRangeId field is optional; if one is
+-- not set, an id will be randomly generated. (It is an error to specify
+-- the ID of a range that already exists.)
+aNamedRange :: Lens' AddNamedRangeRequest (Maybe NamedRange)
+aNamedRange
+  = lens _aNamedRange (\ s a -> s{_aNamedRange = a})
+
+instance FromJSON AddNamedRangeRequest where
+        parseJSON
+          = withObject "AddNamedRangeRequest"
+              (\ o ->
+                 AddNamedRangeRequest' <$> (o .:? "namedRange"))
+
+instance ToJSON AddNamedRangeRequest where
+        toJSON AddNamedRangeRequest'{..}
+          = object
+              (catMaybes [("namedRange" .=) <$> _aNamedRange])
+
+-- | Criteria for showing\/hiding rows in a pivot table.
+--
+-- /See:/ 'pivotFilterCriteria' smart constructor.
+newtype PivotFilterCriteria = PivotFilterCriteria'
+    { _pfcVisibleValues :: Maybe [Text]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PivotFilterCriteria' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pfcVisibleValues'
+pivotFilterCriteria
+    :: PivotFilterCriteria
+pivotFilterCriteria =
+    PivotFilterCriteria'
+    { _pfcVisibleValues = Nothing
+    }
+
+-- | Values that should be included. Values not listed here are excluded.
+pfcVisibleValues :: Lens' PivotFilterCriteria [Text]
+pfcVisibleValues
+  = lens _pfcVisibleValues
+      (\ s a -> s{_pfcVisibleValues = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON PivotFilterCriteria where
+        parseJSON
+          = withObject "PivotFilterCriteria"
+              (\ o ->
+                 PivotFilterCriteria' <$>
+                   (o .:? "visibleValues" .!= mempty))
+
+instance ToJSON PivotFilterCriteria where
+        toJSON PivotFilterCriteria'{..}
+          = object
+              (catMaybes
+                 [("visibleValues" .=) <$> _pfcVisibleValues])
+
+-- | A range along a single dimension on a sheet. All indexes are zero-based.
+-- Indexes are half open: the start index is inclusive and the end index is
+-- exclusive. Missing indexes indicate the range is unbounded on that side.
+--
+-- /See:/ 'dimensionRange' smart constructor.
+data DimensionRange = DimensionRange'
+    { _drDimension  :: !(Maybe DimensionRangeDimension)
+    , _drEndIndex   :: !(Maybe (Textual Int32))
+    , _drSheetId    :: !(Maybe (Textual Int32))
+    , _drStartIndex :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DimensionRange' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'drDimension'
+--
+-- * 'drEndIndex'
+--
+-- * 'drSheetId'
+--
+-- * 'drStartIndex'
+dimensionRange
+    :: DimensionRange
+dimensionRange =
+    DimensionRange'
+    { _drDimension = Nothing
+    , _drEndIndex = Nothing
+    , _drSheetId = Nothing
+    , _drStartIndex = Nothing
+    }
+
+-- | The dimension of the span.
+drDimension :: Lens' DimensionRange (Maybe DimensionRangeDimension)
+drDimension
+  = lens _drDimension (\ s a -> s{_drDimension = a})
+
+-- | The end (exclusive) of the span, or not set if unbounded.
+drEndIndex :: Lens' DimensionRange (Maybe Int32)
+drEndIndex
+  = lens _drEndIndex (\ s a -> s{_drEndIndex = a}) .
+      mapping _Coerce
+
+-- | The sheet this span is on.
+drSheetId :: Lens' DimensionRange (Maybe Int32)
+drSheetId
+  = lens _drSheetId (\ s a -> s{_drSheetId = a}) .
+      mapping _Coerce
+
+-- | The start (inclusive) of the span, or not set if unbounded.
+drStartIndex :: Lens' DimensionRange (Maybe Int32)
+drStartIndex
+  = lens _drStartIndex (\ s a -> s{_drStartIndex = a})
+      . mapping _Coerce
+
+instance FromJSON DimensionRange where
+        parseJSON
+          = withObject "DimensionRange"
+              (\ o ->
+                 DimensionRange' <$>
+                   (o .:? "dimension") <*> (o .:? "endIndex") <*>
+                     (o .:? "sheetId")
+                     <*> (o .:? "startIndex"))
+
+instance ToJSON DimensionRange where
+        toJSON DimensionRange'{..}
+          = object
+              (catMaybes
+                 [("dimension" .=) <$> _drDimension,
+                  ("endIndex" .=) <$> _drEndIndex,
+                  ("sheetId" .=) <$> _drSheetId,
+                  ("startIndex" .=) <$> _drStartIndex])
+
+-- | Updates properties of a spreadsheet.
+--
+-- /See:/ 'updateSpreadsheetPropertiesRequest' smart constructor.
+data UpdateSpreadsheetPropertiesRequest = UpdateSpreadsheetPropertiesRequest'
+    { _uFields     :: !(Maybe GFieldMask)
+    , _uProperties :: !(Maybe SpreadsheetProperties)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdateSpreadsheetPropertiesRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uFields'
+--
+-- * 'uProperties'
+updateSpreadsheetPropertiesRequest
+    :: UpdateSpreadsheetPropertiesRequest
+updateSpreadsheetPropertiesRequest =
+    UpdateSpreadsheetPropertiesRequest'
+    { _uFields = Nothing
+    , _uProperties = Nothing
+    }
+
+-- | The fields that should be updated. At least one field must be specified.
+-- The root \'properties\' is implied and should not be specified. A single
+-- \`\"*\"\` can be used as short-hand for listing every field.
+uFields :: Lens' UpdateSpreadsheetPropertiesRequest (Maybe GFieldMask)
+uFields = lens _uFields (\ s a -> s{_uFields = a})
+
+-- | The properties to update.
+uProperties :: Lens' UpdateSpreadsheetPropertiesRequest (Maybe SpreadsheetProperties)
+uProperties
+  = lens _uProperties (\ s a -> s{_uProperties = a})
+
+instance FromJSON UpdateSpreadsheetPropertiesRequest
+         where
+        parseJSON
+          = withObject "UpdateSpreadsheetPropertiesRequest"
+              (\ o ->
+                 UpdateSpreadsheetPropertiesRequest' <$>
+                   (o .:? "fields") <*> (o .:? "properties"))
+
+instance ToJSON UpdateSpreadsheetPropertiesRequest
+         where
+        toJSON UpdateSpreadsheetPropertiesRequest'{..}
+          = object
+              (catMaybes
+                 [("fields" .=) <$> _uFields,
+                  ("properties" .=) <$> _uProperties])
+
+-- | The domain of a CandlestickChart.
+--
+-- /See:/ 'candlestickDomain' smart constructor.
+data CandlestickDomain = CandlestickDomain'
+    { _cdReversed :: !(Maybe Bool)
+    , _cdData     :: !(Maybe ChartData)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CandlestickDomain' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cdReversed'
+--
+-- * 'cdData'
+candlestickDomain
+    :: CandlestickDomain
+candlestickDomain =
+    CandlestickDomain'
+    { _cdReversed = Nothing
+    , _cdData = Nothing
+    }
+
+-- | True to reverse the order of the domain values (horizontal axis).
+cdReversed :: Lens' CandlestickDomain (Maybe Bool)
+cdReversed
+  = lens _cdReversed (\ s a -> s{_cdReversed = a})
+
+-- | The data of the CandlestickDomain.
+cdData :: Lens' CandlestickDomain (Maybe ChartData)
+cdData = lens _cdData (\ s a -> s{_cdData = a})
+
+instance FromJSON CandlestickDomain where
+        parseJSON
+          = withObject "CandlestickDomain"
+              (\ o ->
+                 CandlestickDomain' <$>
+                   (o .:? "reversed") <*> (o .:? "data"))
+
+instance ToJSON CandlestickDomain where
+        toJSON CandlestickDomain'{..}
+          = object
+              (catMaybes
+                 [("reversed" .=) <$> _cdReversed,
+                  ("data" .=) <$> _cdData])
+
+-- | The result of adding a new protected range.
+--
+-- /See:/ 'addProtectedRangeResponse' smart constructor.
+newtype AddProtectedRangeResponse = AddProtectedRangeResponse'
+    { _aProtectedRange :: Maybe ProtectedRange
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AddProtectedRangeResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aProtectedRange'
+addProtectedRangeResponse
+    :: AddProtectedRangeResponse
+addProtectedRangeResponse =
+    AddProtectedRangeResponse'
+    { _aProtectedRange = Nothing
+    }
+
+-- | The newly added protected range.
+aProtectedRange :: Lens' AddProtectedRangeResponse (Maybe ProtectedRange)
+aProtectedRange
+  = lens _aProtectedRange
+      (\ s a -> s{_aProtectedRange = a})
+
+instance FromJSON AddProtectedRangeResponse where
+        parseJSON
+          = withObject "AddProtectedRangeResponse"
+              (\ o ->
+                 AddProtectedRangeResponse' <$>
+                   (o .:? "protectedRange"))
+
+instance ToJSON AddProtectedRangeResponse where
+        toJSON AddProtectedRangeResponse'{..}
+          = object
+              (catMaybes
+                 [("protectedRange" .=) <$> _aProtectedRange])
+
+-- | Appends rows or columns to the end of a sheet.
+--
+-- /See:/ 'appendDimensionRequest' smart constructor.
+data AppendDimensionRequest = AppendDimensionRequest'
+    { _adrLength    :: !(Maybe (Textual Int32))
+    , _adrDimension :: !(Maybe AppendDimensionRequestDimension)
+    , _adrSheetId   :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AppendDimensionRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'adrLength'
+--
+-- * 'adrDimension'
+--
+-- * 'adrSheetId'
+appendDimensionRequest
+    :: AppendDimensionRequest
+appendDimensionRequest =
+    AppendDimensionRequest'
+    { _adrLength = Nothing
+    , _adrDimension = Nothing
+    , _adrSheetId = Nothing
+    }
+
+-- | The number of rows or columns to append.
+adrLength :: Lens' AppendDimensionRequest (Maybe Int32)
+adrLength
+  = lens _adrLength (\ s a -> s{_adrLength = a}) .
+      mapping _Coerce
+
+-- | Whether rows or columns should be appended.
+adrDimension :: Lens' AppendDimensionRequest (Maybe AppendDimensionRequestDimension)
+adrDimension
+  = lens _adrDimension (\ s a -> s{_adrDimension = a})
+
+-- | The sheet to append rows or columns to.
+adrSheetId :: Lens' AppendDimensionRequest (Maybe Int32)
+adrSheetId
+  = lens _adrSheetId (\ s a -> s{_adrSheetId = a}) .
+      mapping _Coerce
+
+instance FromJSON AppendDimensionRequest where
+        parseJSON
+          = withObject "AppendDimensionRequest"
+              (\ o ->
+                 AppendDimensionRequest' <$>
+                   (o .:? "length") <*> (o .:? "dimension") <*>
+                     (o .:? "sheetId"))
+
+instance ToJSON AppendDimensionRequest where
+        toJSON AppendDimensionRequest'{..}
+          = object
+              (catMaybes
+                 [("length" .=) <$> _adrLength,
+                  ("dimension" .=) <$> _adrDimension,
+                  ("sheetId" .=) <$> _adrSheetId])
+
+-- | The definition of how a value in a pivot table should be calculated.
+--
+-- /See:/ 'pivotValue' smart constructor.
+data PivotValue = PivotValue'
+    { _pvSourceColumnOffSet    :: !(Maybe (Textual Int32))
+    , _pvFormula               :: !(Maybe Text)
+    , _pvName                  :: !(Maybe Text)
+    , _pvCalculatedDisplayType :: !(Maybe PivotValueCalculatedDisplayType)
+    , _pvSummarizeFunction     :: !(Maybe PivotValueSummarizeFunction)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PivotValue' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pvSourceColumnOffSet'
+--
+-- * 'pvFormula'
+--
+-- * 'pvName'
+--
+-- * 'pvCalculatedDisplayType'
+--
+-- * 'pvSummarizeFunction'
+pivotValue
+    :: PivotValue
+pivotValue =
+    PivotValue'
+    { _pvSourceColumnOffSet = Nothing
+    , _pvFormula = Nothing
+    , _pvName = Nothing
+    , _pvCalculatedDisplayType = Nothing
+    , _pvSummarizeFunction = Nothing
+    }
+
+-- | The column offset of the source range that this value reads from. For
+-- example, if the source was \`C10:E15\`, a \`sourceColumnOffset\` of
+-- \`0\` means this value refers to column \`C\`, whereas the offset \`1\`
+-- would refer to column \`D\`.
+pvSourceColumnOffSet :: Lens' PivotValue (Maybe Int32)
+pvSourceColumnOffSet
+  = lens _pvSourceColumnOffSet
+      (\ s a -> s{_pvSourceColumnOffSet = a})
+      . mapping _Coerce
+
+-- | A custom formula to calculate the value. The formula must start with an
+-- \`=\` character.
+pvFormula :: Lens' PivotValue (Maybe Text)
+pvFormula
+  = lens _pvFormula (\ s a -> s{_pvFormula = a})
+
+-- | A name to use for the value.
+pvName :: Lens' PivotValue (Maybe Text)
+pvName = lens _pvName (\ s a -> s{_pvName = a})
+
+-- | If specified, indicates that pivot values should be displayed as the
+-- result of a calculation with another pivot value. For example, if
+-- calculated_display_type is specified as PERCENT_OF_GRAND_TOTAL, all the
+-- pivot values are displayed as the percentage of the grand total. In the
+-- Sheets UI, this is referred to as \"Show As\" in the value section of a
+-- pivot table.
+pvCalculatedDisplayType :: Lens' PivotValue (Maybe PivotValueCalculatedDisplayType)
+pvCalculatedDisplayType
+  = lens _pvCalculatedDisplayType
+      (\ s a -> s{_pvCalculatedDisplayType = a})
+
+-- | A function to summarize the value. If formula is set, the only supported
+-- values are SUM and CUSTOM. If sourceColumnOffset is set, then \`CUSTOM\`
+-- is not supported.
+pvSummarizeFunction :: Lens' PivotValue (Maybe PivotValueSummarizeFunction)
+pvSummarizeFunction
+  = lens _pvSummarizeFunction
+      (\ s a -> s{_pvSummarizeFunction = a})
+
+instance FromJSON PivotValue where
+        parseJSON
+          = withObject "PivotValue"
+              (\ o ->
+                 PivotValue' <$>
+                   (o .:? "sourceColumnOffset") <*> (o .:? "formula")
+                     <*> (o .:? "name")
+                     <*> (o .:? "calculatedDisplayType")
+                     <*> (o .:? "summarizeFunction"))
+
+instance ToJSON PivotValue where
+        toJSON PivotValue'{..}
+          = object
+              (catMaybes
+                 [("sourceColumnOffset" .=) <$> _pvSourceColumnOffSet,
+                  ("formula" .=) <$> _pvFormula,
+                  ("name" .=) <$> _pvName,
+                  ("calculatedDisplayType" .=) <$>
+                    _pvCalculatedDisplayType,
+                  ("summarizeFunction" .=) <$> _pvSummarizeFunction])
+
+-- | Unmerges cells in the given range.
+--
+-- /See:/ 'unmergeCellsRequest' smart constructor.
+newtype UnmergeCellsRequest = UnmergeCellsRequest'
+    { _ucrRange :: Maybe GridRange
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UnmergeCellsRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ucrRange'
+unmergeCellsRequest
+    :: UnmergeCellsRequest
+unmergeCellsRequest =
+    UnmergeCellsRequest'
+    { _ucrRange = Nothing
+    }
+
+-- | The range within which all cells should be unmerged. If the range spans
+-- multiple merges, all will be unmerged. The range must not partially span
+-- any merge.
+ucrRange :: Lens' UnmergeCellsRequest (Maybe GridRange)
+ucrRange = lens _ucrRange (\ s a -> s{_ucrRange = a})
+
+instance FromJSON UnmergeCellsRequest where
+        parseJSON
+          = withObject "UnmergeCellsRequest"
+              (\ o -> UnmergeCellsRequest' <$> (o .:? "range"))
+
+instance ToJSON UnmergeCellsRequest where
+        toJSON UnmergeCellsRequest'{..}
+          = object (catMaybes [("range" .=) <$> _ucrRange])
+
+-- | Deletes the requested sheet.
+--
+-- /See:/ 'deleteSheetRequest' smart constructor.
+newtype DeleteSheetRequest = DeleteSheetRequest'
+    { _dsrSheetId :: Maybe (Textual Int32)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteSheetRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dsrSheetId'
+deleteSheetRequest
+    :: DeleteSheetRequest
+deleteSheetRequest =
+    DeleteSheetRequest'
+    { _dsrSheetId = Nothing
+    }
+
+-- | The ID of the sheet to delete.
+dsrSheetId :: Lens' DeleteSheetRequest (Maybe Int32)
+dsrSheetId
+  = lens _dsrSheetId (\ s a -> s{_dsrSheetId = a}) .
+      mapping _Coerce
+
+instance FromJSON DeleteSheetRequest where
+        parseJSON
+          = withObject "DeleteSheetRequest"
+              (\ o -> DeleteSheetRequest' <$> (o .:? "sheetId"))
+
+instance ToJSON DeleteSheetRequest where
+        toJSON DeleteSheetRequest'{..}
+          = object (catMaybes [("sheetId" .=) <$> _dsrSheetId])
+
+-- | Creates a group over the specified range. If the requested range is a
+-- superset of the range of an existing group G, then the depth of G is
+-- incremented and this new group G\' has the depth of that group. For
+-- example, a group [C:D, depth 1] + [B:E] results in groups [B:E, depth 1]
+-- and [C:D, depth 2]. If the requested range is a subset of the range of
+-- an existing group G, then the depth of the new group G\' becomes one
+-- greater than the depth of G. For example, a group [B:E, depth 1] + [C:D]
+-- results in groups [B:E, depth 1] and [C:D, depth 2]. If the requested
+-- range starts before and ends within, or starts within and ends after,
+-- the range of an existing group G, then the range of the existing group G
+-- becomes the union of the ranges, and the new group G\' has depth one
+-- greater than the depth of G and range as the intersection of the ranges.
+-- For example, a group [B:D, depth 1] + [C:E] results in groups [B:E,
+-- depth 1] and [C:D, depth 2].
+--
+-- /See:/ 'addDimensionGroupRequest' smart constructor.
+newtype AddDimensionGroupRequest = AddDimensionGroupRequest'
+    { _adgrRange :: Maybe DimensionRange
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AddDimensionGroupRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'adgrRange'
+addDimensionGroupRequest
+    :: AddDimensionGroupRequest
+addDimensionGroupRequest =
+    AddDimensionGroupRequest'
+    { _adgrRange = Nothing
+    }
+
+-- | The range over which to create a group.
+adgrRange :: Lens' AddDimensionGroupRequest (Maybe DimensionRange)
+adgrRange
+  = lens _adgrRange (\ s a -> s{_adgrRange = a})
+
+instance FromJSON AddDimensionGroupRequest where
+        parseJSON
+          = withObject "AddDimensionGroupRequest"
+              (\ o ->
+                 AddDimensionGroupRequest' <$> (o .:? "range"))
+
+instance ToJSON AddDimensionGroupRequest where
+        toJSON AddDimensionGroupRequest'{..}
+          = object (catMaybes [("range" .=) <$> _adgrRange])
+
+-- | Styles for a waterfall chart column.
+--
+-- /See:/ 'waterfallChartColumnStyle' smart constructor.
+data WaterfallChartColumnStyle = WaterfallChartColumnStyle'
+    { _wColor :: !(Maybe Color)
+    , _wLabel :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'WaterfallChartColumnStyle' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'wColor'
+--
+-- * 'wLabel'
+waterfallChartColumnStyle
+    :: WaterfallChartColumnStyle
+waterfallChartColumnStyle =
+    WaterfallChartColumnStyle'
+    { _wColor = Nothing
+    , _wLabel = Nothing
+    }
+
+-- | The color of the column.
+wColor :: Lens' WaterfallChartColumnStyle (Maybe Color)
+wColor = lens _wColor (\ s a -> s{_wColor = a})
+
+-- | The label of the column\'s legend.
+wLabel :: Lens' WaterfallChartColumnStyle (Maybe Text)
+wLabel = lens _wLabel (\ s a -> s{_wLabel = a})
+
+instance FromJSON WaterfallChartColumnStyle where
+        parseJSON
+          = withObject "WaterfallChartColumnStyle"
+              (\ o ->
+                 WaterfallChartColumnStyle' <$>
+                   (o .:? "color") <*> (o .:? "label"))
+
+instance ToJSON WaterfallChartColumnStyle where
+        toJSON WaterfallChartColumnStyle'{..}
+          = object
+              (catMaybes
+                 [("color" .=) <$> _wColor, ("label" .=) <$> _wLabel])
+
+-- | The Candlestick chart data, each containing the low, open, close, and
+-- high values for a series.
+--
+-- /See:/ 'candlestickData' smart constructor.
+data CandlestickData = CandlestickData'
+    { _cdLowSeries   :: !(Maybe CandlestickSeries)
+    , _cdHighSeries  :: !(Maybe CandlestickSeries)
+    , _cdOpenSeries  :: !(Maybe CandlestickSeries)
+    , _cdCloseSeries :: !(Maybe CandlestickSeries)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CandlestickData' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cdLowSeries'
+--
+-- * 'cdHighSeries'
+--
+-- * 'cdOpenSeries'
+--
+-- * 'cdCloseSeries'
+candlestickData
+    :: CandlestickData
+candlestickData =
+    CandlestickData'
+    { _cdLowSeries = Nothing
+    , _cdHighSeries = Nothing
+    , _cdOpenSeries = Nothing
+    , _cdCloseSeries = Nothing
+    }
+
+-- | The range data (vertical axis) for the low\/minimum value for each
+-- candle. This is the bottom of the candle\'s center line.
+cdLowSeries :: Lens' CandlestickData (Maybe CandlestickSeries)
+cdLowSeries
+  = lens _cdLowSeries (\ s a -> s{_cdLowSeries = a})
+
+-- | The range data (vertical axis) for the high\/maximum value for each
+-- candle. This is the top of the candle\'s center line.
+cdHighSeries :: Lens' CandlestickData (Maybe CandlestickSeries)
+cdHighSeries
+  = lens _cdHighSeries (\ s a -> s{_cdHighSeries = a})
+
+-- | The range data (vertical axis) for the open\/initial value for each
+-- candle. This is the bottom of the candle body. If less than the close
+-- value the candle will be filled. Otherwise the candle will be hollow.
+cdOpenSeries :: Lens' CandlestickData (Maybe CandlestickSeries)
+cdOpenSeries
+  = lens _cdOpenSeries (\ s a -> s{_cdOpenSeries = a})
+
+-- | The range data (vertical axis) for the close\/final value for each
+-- candle. This is the top of the candle body. If greater than the open
+-- value the candle will be filled. Otherwise the candle will be hollow.
+cdCloseSeries :: Lens' CandlestickData (Maybe CandlestickSeries)
+cdCloseSeries
+  = lens _cdCloseSeries
+      (\ s a -> s{_cdCloseSeries = a})
+
+instance FromJSON CandlestickData where
+        parseJSON
+          = withObject "CandlestickData"
+              (\ o ->
+                 CandlestickData' <$>
+                   (o .:? "lowSeries") <*> (o .:? "highSeries") <*>
+                     (o .:? "openSeries")
+                     <*> (o .:? "closeSeries"))
+
+instance ToJSON CandlestickData where
+        toJSON CandlestickData'{..}
+          = object
+              (catMaybes
+                 [("lowSeries" .=) <$> _cdLowSeries,
+                  ("highSeries" .=) <$> _cdHighSeries,
+                  ("openSeries" .=) <$> _cdOpenSeries,
+                  ("closeSeries" .=) <$> _cdCloseSeries])
+
+-- | A banded (alternating colors) range in a sheet.
+--
+-- /See:/ 'bandedRange' smart constructor.
+data BandedRange = BandedRange'
+    { _brBandedRangeId    :: !(Maybe (Textual Int32))
+    , _brRowProperties    :: !(Maybe BandingProperties)
+    , _brRange            :: !(Maybe GridRange)
+    , _brColumnProperties :: !(Maybe BandingProperties)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BandedRange' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'brBandedRangeId'
+--
+-- * 'brRowProperties'
+--
+-- * 'brRange'
+--
+-- * 'brColumnProperties'
+bandedRange
+    :: BandedRange
+bandedRange =
+    BandedRange'
+    { _brBandedRangeId = Nothing
+    , _brRowProperties = Nothing
+    , _brRange = Nothing
+    , _brColumnProperties = Nothing
+    }
+
+-- | The id of the banded range.
+brBandedRangeId :: Lens' BandedRange (Maybe Int32)
+brBandedRangeId
+  = lens _brBandedRangeId
+      (\ s a -> s{_brBandedRangeId = a})
+      . mapping _Coerce
+
+-- | Properties for row bands. These properties are applied on a row-by-row
+-- basis throughout all the rows in the range. At least one of
+-- row_properties or column_properties must be specified.
+brRowProperties :: Lens' BandedRange (Maybe BandingProperties)
+brRowProperties
+  = lens _brRowProperties
+      (\ s a -> s{_brRowProperties = a})
+
+-- | The range over which these properties are applied.
+brRange :: Lens' BandedRange (Maybe GridRange)
+brRange = lens _brRange (\ s a -> s{_brRange = a})
+
+-- | Properties for column bands. These properties are applied on a column-
+-- by-column basis throughout all the columns in the range. At least one of
+-- row_properties or column_properties must be specified.
+brColumnProperties :: Lens' BandedRange (Maybe BandingProperties)
+brColumnProperties
+  = lens _brColumnProperties
+      (\ s a -> s{_brColumnProperties = a})
+
+instance FromJSON BandedRange where
+        parseJSON
+          = withObject "BandedRange"
+              (\ o ->
+                 BandedRange' <$>
+                   (o .:? "bandedRangeId") <*> (o .:? "rowProperties")
+                     <*> (o .:? "range")
+                     <*> (o .:? "columnProperties"))
+
+instance ToJSON BandedRange where
+        toJSON BandedRange'{..}
+          = object
+              (catMaybes
+                 [("bandedRangeId" .=) <$> _brBandedRangeId,
+                  ("rowProperties" .=) <$> _brRowProperties,
+                  ("range" .=) <$> _brRange,
+                  ("columnProperties" .=) <$> _brColumnProperties])
+
+-- | Updates the borders of a range. If a field is not set in the request,
+-- that means the border remains as-is. For example, with two subsequent
+-- UpdateBordersRequest: 1. range: A1:A5 \`{ top: RED, bottom: WHITE }\` 2.
+-- range: A1:A5 \`{ left: BLUE }\` That would result in A1:A5 having a
+-- borders of \`{ top: RED, bottom: WHITE, left: BLUE }\`. If you want to
+-- clear a border, explicitly set the style to NONE.
+--
+-- /See:/ 'updateBOrdersRequest' smart constructor.
+data UpdateBOrdersRequest = UpdateBOrdersRequest'
+    { _uborBottom          :: !(Maybe BOrder)
+    , _uborInnerHorizontal :: !(Maybe BOrder)
+    , _uborLeft            :: !(Maybe BOrder)
+    , _uborInnerVertical   :: !(Maybe BOrder)
+    , _uborRange           :: !(Maybe GridRange)
+    , _uborRight           :: !(Maybe BOrder)
+    , _uborTop             :: !(Maybe BOrder)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdateBOrdersRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uborBottom'
+--
+-- * 'uborInnerHorizontal'
+--
+-- * 'uborLeft'
+--
+-- * 'uborInnerVertical'
+--
+-- * 'uborRange'
+--
+-- * 'uborRight'
+--
+-- * 'uborTop'
+updateBOrdersRequest
+    :: UpdateBOrdersRequest
+updateBOrdersRequest =
+    UpdateBOrdersRequest'
+    { _uborBottom = Nothing
+    , _uborInnerHorizontal = Nothing
+    , _uborLeft = Nothing
+    , _uborInnerVertical = Nothing
+    , _uborRange = Nothing
+    , _uborRight = Nothing
+    , _uborTop = Nothing
+    }
+
+-- | The border to put at the bottom of the range.
+uborBottom :: Lens' UpdateBOrdersRequest (Maybe BOrder)
+uborBottom
+  = lens _uborBottom (\ s a -> s{_uborBottom = a})
+
+-- | The horizontal border to put within the range.
+uborInnerHorizontal :: Lens' UpdateBOrdersRequest (Maybe BOrder)
+uborInnerHorizontal
+  = lens _uborInnerHorizontal
+      (\ s a -> s{_uborInnerHorizontal = a})
+
+-- | The border to put at the left of the range.
+uborLeft :: Lens' UpdateBOrdersRequest (Maybe BOrder)
+uborLeft = lens _uborLeft (\ s a -> s{_uborLeft = a})
+
+-- | The vertical border to put within the range.
+uborInnerVertical :: Lens' UpdateBOrdersRequest (Maybe BOrder)
+uborInnerVertical
+  = lens _uborInnerVertical
+      (\ s a -> s{_uborInnerVertical = a})
+
+-- | The range whose borders should be updated.
+uborRange :: Lens' UpdateBOrdersRequest (Maybe GridRange)
+uborRange
+  = lens _uborRange (\ s a -> s{_uborRange = a})
+
+-- | The border to put at the right of the range.
+uborRight :: Lens' UpdateBOrdersRequest (Maybe BOrder)
+uborRight
+  = lens _uborRight (\ s a -> s{_uborRight = a})
+
+-- | The border to put at the top of the range.
+uborTop :: Lens' UpdateBOrdersRequest (Maybe BOrder)
+uborTop = lens _uborTop (\ s a -> s{_uborTop = a})
+
+instance FromJSON UpdateBOrdersRequest where
+        parseJSON
+          = withObject "UpdateBOrdersRequest"
+              (\ o ->
+                 UpdateBOrdersRequest' <$>
+                   (o .:? "bottom") <*> (o .:? "innerHorizontal") <*>
+                     (o .:? "left")
+                     <*> (o .:? "innerVertical")
+                     <*> (o .:? "range")
+                     <*> (o .:? "right")
+                     <*> (o .:? "top"))
+
+instance ToJSON UpdateBOrdersRequest where
+        toJSON UpdateBOrdersRequest'{..}
+          = object
+              (catMaybes
+                 [("bottom" .=) <$> _uborBottom,
+                  ("innerHorizontal" .=) <$> _uborInnerHorizontal,
+                  ("left" .=) <$> _uborLeft,
+                  ("innerVertical" .=) <$> _uborInnerVertical,
+                  ("range" .=) <$> _uborRange,
+                  ("right" .=) <$> _uborRight,
+                  ("top" .=) <$> _uborTop])
+
+-- | The request for updating more than one range of values in a spreadsheet.
+--
+-- /See:/ 'batchUpdateValuesByDataFilterRequest' smart constructor.
+data BatchUpdateValuesByDataFilterRequest = BatchUpdateValuesByDataFilterRequest'
+    { _buvbdfrData                         :: !(Maybe [DataFilterValueRange])
+    , _buvbdfrValueInputOption             :: !(Maybe BatchUpdateValuesByDataFilterRequestValueInputOption)
+    , _buvbdfrIncludeValuesInResponse      :: !(Maybe Bool)
+    , _buvbdfrResponseDateTimeRenderOption :: !(Maybe BatchUpdateValuesByDataFilterRequestResponseDateTimeRenderOption)
+    , _buvbdfrResponseValueRenderOption    :: !(Maybe BatchUpdateValuesByDataFilterRequestResponseValueRenderOption)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BatchUpdateValuesByDataFilterRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'buvbdfrData'
+--
+-- * 'buvbdfrValueInputOption'
+--
+-- * 'buvbdfrIncludeValuesInResponse'
+--
+-- * 'buvbdfrResponseDateTimeRenderOption'
+--
+-- * 'buvbdfrResponseValueRenderOption'
+batchUpdateValuesByDataFilterRequest
+    :: BatchUpdateValuesByDataFilterRequest
+batchUpdateValuesByDataFilterRequest =
+    BatchUpdateValuesByDataFilterRequest'
+    { _buvbdfrData = Nothing
+    , _buvbdfrValueInputOption = Nothing
+    , _buvbdfrIncludeValuesInResponse = Nothing
+    , _buvbdfrResponseDateTimeRenderOption = Nothing
+    , _buvbdfrResponseValueRenderOption = Nothing
+    }
+
+-- | The new values to apply to the spreadsheet. If more than one range is
+-- matched by the specified DataFilter the specified values will be applied
+-- to all of those ranges.
+buvbdfrData :: Lens' BatchUpdateValuesByDataFilterRequest [DataFilterValueRange]
+buvbdfrData
+  = lens _buvbdfrData (\ s a -> s{_buvbdfrData = a}) .
+      _Default
+      . _Coerce
+
+-- | How the input data should be interpreted.
+buvbdfrValueInputOption :: Lens' BatchUpdateValuesByDataFilterRequest (Maybe BatchUpdateValuesByDataFilterRequestValueInputOption)
+buvbdfrValueInputOption
+  = lens _buvbdfrValueInputOption
+      (\ s a -> s{_buvbdfrValueInputOption = a})
+
+-- | Determines if the update response should include the values of the cells
+-- that were updated. By default, responses do not include the updated
+-- values. The \`updatedData\` field within each of the
+-- BatchUpdateValuesResponse.responses will contain the updated values. If
+-- the range to write was larger than than the range actually written, the
+-- response will include all values in the requested range (excluding
+-- trailing empty rows and columns).
+buvbdfrIncludeValuesInResponse :: Lens' BatchUpdateValuesByDataFilterRequest (Maybe Bool)
+buvbdfrIncludeValuesInResponse
+  = lens _buvbdfrIncludeValuesInResponse
+      (\ s a -> s{_buvbdfrIncludeValuesInResponse = a})
+
+-- | Determines how dates, times, and durations in the response should be
+-- rendered. This is ignored if response_value_render_option is
+-- FORMATTED_VALUE. The default dateTime render option is
+-- DateTimeRenderOption.SERIAL_NUMBER.
+buvbdfrResponseDateTimeRenderOption :: Lens' BatchUpdateValuesByDataFilterRequest (Maybe BatchUpdateValuesByDataFilterRequestResponseDateTimeRenderOption)
+buvbdfrResponseDateTimeRenderOption
+  = lens _buvbdfrResponseDateTimeRenderOption
+      (\ s a ->
+         s{_buvbdfrResponseDateTimeRenderOption = a})
+
+-- | Determines how values in the response should be rendered. The default
+-- render option is ValueRenderOption.FORMATTED_VALUE.
+buvbdfrResponseValueRenderOption :: Lens' BatchUpdateValuesByDataFilterRequest (Maybe BatchUpdateValuesByDataFilterRequestResponseValueRenderOption)
+buvbdfrResponseValueRenderOption
+  = lens _buvbdfrResponseValueRenderOption
+      (\ s a -> s{_buvbdfrResponseValueRenderOption = a})
+
+instance FromJSON
+         BatchUpdateValuesByDataFilterRequest where
+        parseJSON
+          = withObject "BatchUpdateValuesByDataFilterRequest"
+              (\ o ->
+                 BatchUpdateValuesByDataFilterRequest' <$>
+                   (o .:? "data" .!= mempty) <*>
+                     (o .:? "valueInputOption")
+                     <*> (o .:? "includeValuesInResponse")
+                     <*> (o .:? "responseDateTimeRenderOption")
+                     <*> (o .:? "responseValueRenderOption"))
+
+instance ToJSON BatchUpdateValuesByDataFilterRequest
+         where
+        toJSON BatchUpdateValuesByDataFilterRequest'{..}
+          = object
+              (catMaybes
+                 [("data" .=) <$> _buvbdfrData,
+                  ("valueInputOption" .=) <$> _buvbdfrValueInputOption,
+                  ("includeValuesInResponse" .=) <$>
+                    _buvbdfrIncludeValuesInResponse,
+                  ("responseDateTimeRenderOption" .=) <$>
+                    _buvbdfrResponseDateTimeRenderOption,
+                  ("responseValueRenderOption" .=) <$>
+                    _buvbdfrResponseValueRenderOption])
+
+-- | A chart embedded in a sheet.
+--
+-- /See:/ 'embeddedChart' smart constructor.
+data EmbeddedChart = EmbeddedChart'
+    { _ecSpec     :: !(Maybe ChartSpec)
+    , _ecPosition :: !(Maybe EmbeddedObjectPosition)
+    , _ecChartId  :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EmbeddedChart' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ecSpec'
+--
+-- * 'ecPosition'
+--
+-- * 'ecChartId'
+embeddedChart
+    :: EmbeddedChart
+embeddedChart =
+    EmbeddedChart'
+    { _ecSpec = Nothing
+    , _ecPosition = Nothing
+    , _ecChartId = Nothing
+    }
+
+-- | The specification of the chart.
+ecSpec :: Lens' EmbeddedChart (Maybe ChartSpec)
+ecSpec = lens _ecSpec (\ s a -> s{_ecSpec = a})
+
+-- | The position of the chart.
+ecPosition :: Lens' EmbeddedChart (Maybe EmbeddedObjectPosition)
+ecPosition
+  = lens _ecPosition (\ s a -> s{_ecPosition = a})
+
+-- | The ID of the chart.
+ecChartId :: Lens' EmbeddedChart (Maybe Int32)
+ecChartId
+  = lens _ecChartId (\ s a -> s{_ecChartId = a}) .
+      mapping _Coerce
+
+instance FromJSON EmbeddedChart where
+        parseJSON
+          = withObject "EmbeddedChart"
+              (\ o ->
+                 EmbeddedChart' <$>
+                   (o .:? "spec") <*> (o .:? "position") <*>
+                     (o .:? "chartId"))
+
+instance ToJSON EmbeddedChart where
+        toJSON EmbeddedChart'{..}
+          = object
+              (catMaybes
+                 [("spec" .=) <$> _ecSpec,
+                  ("position" .=) <$> _ecPosition,
+                  ("chartId" .=) <$> _ecChartId])
+
+-- | Data about each cell in a row.
+--
+-- /See:/ 'rowData' smart constructor.
+newtype RowData = RowData'
+    { _rdValues :: Maybe [CellData]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RowData' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rdValues'
+rowData
+    :: RowData
+rowData =
+    RowData'
+    { _rdValues = Nothing
+    }
+
+-- | The values in the row, one per column.
+rdValues :: Lens' RowData [CellData]
+rdValues
+  = lens _rdValues (\ s a -> s{_rdValues = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON RowData where
+        parseJSON
+          = withObject "RowData"
+              (\ o -> RowData' <$> (o .:? "values" .!= mempty))
+
+instance ToJSON RowData where
+        toJSON RowData'{..}
+          = object (catMaybes [("values" .=) <$> _rdValues])
+
+-- | The editors of a protected range.
+--
+-- /See:/ 'editors' smart constructor.
+data Editors = Editors'
+    { _eGroups             :: !(Maybe [Text])
+    , _eUsers              :: !(Maybe [Text])
+    , _eDomainUsersCanEdit :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Editors' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'eGroups'
+--
+-- * 'eUsers'
+--
+-- * 'eDomainUsersCanEdit'
+editors
+    :: Editors
+editors =
+    Editors'
+    { _eGroups = Nothing
+    , _eUsers = Nothing
+    , _eDomainUsersCanEdit = Nothing
+    }
+
+-- | The email addresses of groups with edit access to the protected range.
+eGroups :: Lens' Editors [Text]
+eGroups
+  = lens _eGroups (\ s a -> s{_eGroups = a}) . _Default
+      . _Coerce
+
+-- | The email addresses of users with edit access to the protected range.
+eUsers :: Lens' Editors [Text]
+eUsers
+  = lens _eUsers (\ s a -> s{_eUsers = a}) . _Default .
+      _Coerce
+
+-- | True if anyone in the document\'s domain has edit access to the
+-- protected range. Domain protection is only supported on documents within
+-- a domain.
+eDomainUsersCanEdit :: Lens' Editors (Maybe Bool)
+eDomainUsersCanEdit
+  = lens _eDomainUsersCanEdit
+      (\ s a -> s{_eDomainUsersCanEdit = a})
+
+instance FromJSON Editors where
+        parseJSON
+          = withObject "Editors"
+              (\ o ->
+                 Editors' <$>
+                   (o .:? "groups" .!= mempty) <*>
+                     (o .:? "users" .!= mempty)
+                     <*> (o .:? "domainUsersCanEdit"))
+
+instance ToJSON Editors where
+        toJSON Editors'{..}
+          = object
+              (catMaybes
+                 [("groups" .=) <$> _eGroups,
+                  ("users" .=) <$> _eUsers,
+                  ("domainUsersCanEdit" .=) <$> _eDomainUsersCanEdit])
+
+-- | A pivot table.
+--
+-- /See:/ 'pivotTable' smart constructor.
+data PivotTable = PivotTable'
+    { _ptValues      :: !(Maybe [PivotValue])
+    , _ptValueLayout :: !(Maybe PivotTableValueLayout)
+    , _ptRows        :: !(Maybe [PivotGroup])
+    , _ptSource      :: !(Maybe GridRange)
+    , _ptColumns     :: !(Maybe [PivotGroup])
+    , _ptCriteria    :: !(Maybe PivotTableCriteria)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PivotTable' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ptValues'
+--
+-- * 'ptValueLayout'
+--
+-- * 'ptRows'
+--
+-- * 'ptSource'
+--
+-- * 'ptColumns'
+--
+-- * 'ptCriteria'
+pivotTable
+    :: PivotTable
+pivotTable =
+    PivotTable'
+    { _ptValues = Nothing
+    , _ptValueLayout = Nothing
+    , _ptRows = Nothing
+    , _ptSource = Nothing
+    , _ptColumns = Nothing
+    , _ptCriteria = Nothing
+    }
+
+-- | A list of values to include in the pivot table.
+ptValues :: Lens' PivotTable [PivotValue]
+ptValues
+  = lens _ptValues (\ s a -> s{_ptValues = a}) .
+      _Default
+      . _Coerce
+
+-- | Whether values should be listed horizontally (as columns) or vertically
+-- (as rows).
+ptValueLayout :: Lens' PivotTable (Maybe PivotTableValueLayout)
+ptValueLayout
+  = lens _ptValueLayout
+      (\ s a -> s{_ptValueLayout = a})
+
+-- | Each row grouping in the pivot table.
+ptRows :: Lens' PivotTable [PivotGroup]
+ptRows
+  = lens _ptRows (\ s a -> s{_ptRows = a}) . _Default .
+      _Coerce
+
+-- | The range the pivot table is reading data from.
+ptSource :: Lens' PivotTable (Maybe GridRange)
+ptSource = lens _ptSource (\ s a -> s{_ptSource = a})
+
+-- | Each column grouping in the pivot table.
+ptColumns :: Lens' PivotTable [PivotGroup]
+ptColumns
+  = lens _ptColumns (\ s a -> s{_ptColumns = a}) .
+      _Default
+      . _Coerce
+
+-- | An optional mapping of filters per source column offset. The filters are
+-- applied before aggregating data into the pivot table. The map\'s key is
+-- the column offset of the source range that you want to filter, and the
+-- value is the criteria for that column. For example, if the source was
+-- \`C10:E15\`, a key of \`0\` will have the filter for column \`C\`,
+-- whereas the key \`1\` is for column \`D\`.
+ptCriteria :: Lens' PivotTable (Maybe PivotTableCriteria)
+ptCriteria
+  = lens _ptCriteria (\ s a -> s{_ptCriteria = a})
+
+instance FromJSON PivotTable where
+        parseJSON
+          = withObject "PivotTable"
+              (\ o ->
+                 PivotTable' <$>
+                   (o .:? "values" .!= mempty) <*> (o .:? "valueLayout")
+                     <*> (o .:? "rows" .!= mempty)
+                     <*> (o .:? "source")
+                     <*> (o .:? "columns" .!= mempty)
+                     <*> (o .:? "criteria"))
+
+instance ToJSON PivotTable where
+        toJSON PivotTable'{..}
+          = object
+              (catMaybes
+                 [("values" .=) <$> _ptValues,
+                  ("valueLayout" .=) <$> _ptValueLayout,
+                  ("rows" .=) <$> _ptRows, ("source" .=) <$> _ptSource,
+                  ("columns" .=) <$> _ptColumns,
+                  ("criteria" .=) <$> _ptCriteria])
+
+-- | The position of an embedded object such as a chart.
+--
+-- /See:/ 'embeddedObjectPosition' smart constructor.
+data EmbeddedObjectPosition = EmbeddedObjectPosition'
+    { _eopOverlayPosition :: !(Maybe OverlayPosition)
+    , _eopSheetId         :: !(Maybe (Textual Int32))
+    , _eopNewSheet        :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EmbeddedObjectPosition' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'eopOverlayPosition'
+--
+-- * 'eopSheetId'
+--
+-- * 'eopNewSheet'
+embeddedObjectPosition
+    :: EmbeddedObjectPosition
+embeddedObjectPosition =
+    EmbeddedObjectPosition'
+    { _eopOverlayPosition = Nothing
+    , _eopSheetId = Nothing
+    , _eopNewSheet = Nothing
+    }
+
+-- | The position at which the object is overlaid on top of a grid.
+eopOverlayPosition :: Lens' EmbeddedObjectPosition (Maybe OverlayPosition)
+eopOverlayPosition
+  = lens _eopOverlayPosition
+      (\ s a -> s{_eopOverlayPosition = a})
+
+-- | The sheet this is on. Set only if the embedded object is on its own
+-- sheet. Must be non-negative.
+eopSheetId :: Lens' EmbeddedObjectPosition (Maybe Int32)
+eopSheetId
+  = lens _eopSheetId (\ s a -> s{_eopSheetId = a}) .
+      mapping _Coerce
+
+-- | If true, the embedded object is put on a new sheet whose ID is chosen
+-- for you. Used only when writing.
+eopNewSheet :: Lens' EmbeddedObjectPosition (Maybe Bool)
+eopNewSheet
+  = lens _eopNewSheet (\ s a -> s{_eopNewSheet = a})
+
+instance FromJSON EmbeddedObjectPosition where
+        parseJSON
+          = withObject "EmbeddedObjectPosition"
+              (\ o ->
+                 EmbeddedObjectPosition' <$>
+                   (o .:? "overlayPosition") <*> (o .:? "sheetId") <*>
+                     (o .:? "newSheet"))
+
+instance ToJSON EmbeddedObjectPosition where
+        toJSON EmbeddedObjectPosition'{..}
+          = object
+              (catMaybes
+                 [("overlayPosition" .=) <$> _eopOverlayPosition,
+                  ("sheetId" .=) <$> _eopSheetId,
+                  ("newSheet" .=) <$> _eopNewSheet])
+
+-- | The default filter associated with a sheet.
+--
+-- /See:/ 'basicFilter' smart constructor.
+data BasicFilter = BasicFilter'
+    { _bfSortSpecs :: !(Maybe [SortSpec])
+    , _bfRange     :: !(Maybe GridRange)
+    , _bfCriteria  :: !(Maybe BasicFilterCriteria)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BasicFilter' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bfSortSpecs'
+--
+-- * 'bfRange'
+--
+-- * 'bfCriteria'
+basicFilter
+    :: BasicFilter
+basicFilter =
+    BasicFilter'
+    { _bfSortSpecs = Nothing
+    , _bfRange = Nothing
+    , _bfCriteria = Nothing
+    }
+
+-- | The sort order per column. Later specifications are used when values are
+-- equal in the earlier specifications.
+bfSortSpecs :: Lens' BasicFilter [SortSpec]
+bfSortSpecs
+  = lens _bfSortSpecs (\ s a -> s{_bfSortSpecs = a}) .
+      _Default
+      . _Coerce
+
+-- | The range the filter covers.
+bfRange :: Lens' BasicFilter (Maybe GridRange)
+bfRange = lens _bfRange (\ s a -> s{_bfRange = a})
+
+-- | The criteria for showing\/hiding values per column. The map\'s key is
+-- the column index, and the value is the criteria for that column.
+bfCriteria :: Lens' BasicFilter (Maybe BasicFilterCriteria)
+bfCriteria
+  = lens _bfCriteria (\ s a -> s{_bfCriteria = a})
+
+instance FromJSON BasicFilter where
+        parseJSON
+          = withObject "BasicFilter"
+              (\ o ->
+                 BasicFilter' <$>
+                   (o .:? "sortSpecs" .!= mempty) <*> (o .:? "range")
+                     <*> (o .:? "criteria"))
+
+instance ToJSON BasicFilter where
+        toJSON BasicFilter'{..}
+          = object
+              (catMaybes
+                 [("sortSpecs" .=) <$> _bfSortSpecs,
+                  ("range" .=) <$> _bfRange,
+                  ("criteria" .=) <$> _bfCriteria])
+
+-- | Splits a column of text into multiple columns, based on a delimiter in
+-- each cell.
+--
+-- /See:/ 'textToColumnsRequest' smart constructor.
+data TextToColumnsRequest = TextToColumnsRequest'
+    { _ttcrDelimiterType :: !(Maybe TextToColumnsRequestDelimiterType)
+    , _ttcrSource        :: !(Maybe GridRange)
+    , _ttcrDelimiter     :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TextToColumnsRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ttcrDelimiterType'
+--
+-- * 'ttcrSource'
+--
+-- * 'ttcrDelimiter'
+textToColumnsRequest
+    :: TextToColumnsRequest
+textToColumnsRequest =
+    TextToColumnsRequest'
+    { _ttcrDelimiterType = Nothing
+    , _ttcrSource = Nothing
+    , _ttcrDelimiter = Nothing
+    }
+
+-- | The delimiter type to use.
+ttcrDelimiterType :: Lens' TextToColumnsRequest (Maybe TextToColumnsRequestDelimiterType)
+ttcrDelimiterType
+  = lens _ttcrDelimiterType
+      (\ s a -> s{_ttcrDelimiterType = a})
+
+-- | The source data range. This must span exactly one column.
+ttcrSource :: Lens' TextToColumnsRequest (Maybe GridRange)
+ttcrSource
+  = lens _ttcrSource (\ s a -> s{_ttcrSource = a})
+
+-- | The delimiter to use. Used only if delimiterType is CUSTOM.
+ttcrDelimiter :: Lens' TextToColumnsRequest (Maybe Text)
+ttcrDelimiter
+  = lens _ttcrDelimiter
+      (\ s a -> s{_ttcrDelimiter = a})
+
+instance FromJSON TextToColumnsRequest where
+        parseJSON
+          = withObject "TextToColumnsRequest"
+              (\ o ->
+                 TextToColumnsRequest' <$>
+                   (o .:? "delimiterType") <*> (o .:? "source") <*>
+                     (o .:? "delimiter"))
+
+instance ToJSON TextToColumnsRequest where
+        toJSON TextToColumnsRequest'{..}
+          = object
+              (catMaybes
+                 [("delimiterType" .=) <$> _ttcrDelimiterType,
+                  ("source" .=) <$> _ttcrSource,
+                  ("delimiter" .=) <$> _ttcrDelimiter])
+
+-- | The request for retrieving a Spreadsheet.
+--
+-- /See:/ 'getSpreadsheetByDataFilterRequest' smart constructor.
+data GetSpreadsheetByDataFilterRequest = GetSpreadsheetByDataFilterRequest'
+    { _gsbdfrDataFilters     :: !(Maybe [DataFilter])
+    , _gsbdfrIncludeGridData :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetSpreadsheetByDataFilterRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gsbdfrDataFilters'
+--
+-- * 'gsbdfrIncludeGridData'
+getSpreadsheetByDataFilterRequest
+    :: GetSpreadsheetByDataFilterRequest
+getSpreadsheetByDataFilterRequest =
+    GetSpreadsheetByDataFilterRequest'
+    { _gsbdfrDataFilters = Nothing
+    , _gsbdfrIncludeGridData = Nothing
+    }
+
+-- | The DataFilters used to select which ranges to retrieve from the
+-- spreadsheet.
+gsbdfrDataFilters :: Lens' GetSpreadsheetByDataFilterRequest [DataFilter]
+gsbdfrDataFilters
+  = lens _gsbdfrDataFilters
+      (\ s a -> s{_gsbdfrDataFilters = a})
+      . _Default
+      . _Coerce
+
+-- | True if grid data should be returned. This parameter is ignored if a
+-- field mask was set in the request.
+gsbdfrIncludeGridData :: Lens' GetSpreadsheetByDataFilterRequest (Maybe Bool)
+gsbdfrIncludeGridData
+  = lens _gsbdfrIncludeGridData
+      (\ s a -> s{_gsbdfrIncludeGridData = a})
+
+instance FromJSON GetSpreadsheetByDataFilterRequest
+         where
+        parseJSON
+          = withObject "GetSpreadsheetByDataFilterRequest"
+              (\ o ->
+                 GetSpreadsheetByDataFilterRequest' <$>
+                   (o .:? "dataFilters" .!= mempty) <*>
+                     (o .:? "includeGridData"))
+
+instance ToJSON GetSpreadsheetByDataFilterRequest
+         where
+        toJSON GetSpreadsheetByDataFilterRequest'{..}
+          = object
+              (catMaybes
+                 [("dataFilters" .=) <$> _gsbdfrDataFilters,
+                  ("includeGridData" .=) <$> _gsbdfrIncludeGridData])
+
+-- | The request for updating any aspect of a spreadsheet.
+--
+-- /See:/ 'batchUpdateSpreadsheetRequest' smart constructor.
+data BatchUpdateSpreadsheetRequest = BatchUpdateSpreadsheetRequest'
+    { _busrResponseIncludeGridData      :: !(Maybe Bool)
+    , _busrResponseRanges               :: !(Maybe [Text])
+    , _busrRequests                     :: !(Maybe [Request'])
+    , _busrIncludeSpreadsheetInResponse :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BatchUpdateSpreadsheetRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'busrResponseIncludeGridData'
+--
+-- * 'busrResponseRanges'
+--
+-- * 'busrRequests'
+--
+-- * 'busrIncludeSpreadsheetInResponse'
+batchUpdateSpreadsheetRequest
+    :: BatchUpdateSpreadsheetRequest
+batchUpdateSpreadsheetRequest =
+    BatchUpdateSpreadsheetRequest'
+    { _busrResponseIncludeGridData = Nothing
+    , _busrResponseRanges = Nothing
+    , _busrRequests = Nothing
+    , _busrIncludeSpreadsheetInResponse = Nothing
+    }
+
+-- | True if grid data should be returned. Meaningful only if if
+-- include_spreadsheet_in_response is \'true\'. This parameter is ignored
+-- if a field mask was set in the request.
+busrResponseIncludeGridData :: Lens' BatchUpdateSpreadsheetRequest (Maybe Bool)
+busrResponseIncludeGridData
+  = lens _busrResponseIncludeGridData
+      (\ s a -> s{_busrResponseIncludeGridData = a})
+
+-- | Limits the ranges included in the response spreadsheet. Meaningful only
+-- if include_spreadsheet_response is \'true\'.
+busrResponseRanges :: Lens' BatchUpdateSpreadsheetRequest [Text]
+busrResponseRanges
+  = lens _busrResponseRanges
+      (\ s a -> s{_busrResponseRanges = a})
+      . _Default
+      . _Coerce
+
+-- | A list of updates to apply to the spreadsheet. Requests will be applied
+-- in the order they are specified. If any request is not valid, no
+-- requests will be applied.
+busrRequests :: Lens' BatchUpdateSpreadsheetRequest [Request']
+busrRequests
+  = lens _busrRequests (\ s a -> s{_busrRequests = a})
+      . _Default
+      . _Coerce
+
+-- | Determines if the update response should include the spreadsheet
+-- resource.
+busrIncludeSpreadsheetInResponse :: Lens' BatchUpdateSpreadsheetRequest (Maybe Bool)
+busrIncludeSpreadsheetInResponse
+  = lens _busrIncludeSpreadsheetInResponse
+      (\ s a -> s{_busrIncludeSpreadsheetInResponse = a})
+
+instance FromJSON BatchUpdateSpreadsheetRequest where
+        parseJSON
+          = withObject "BatchUpdateSpreadsheetRequest"
+              (\ o ->
+                 BatchUpdateSpreadsheetRequest' <$>
+                   (o .:? "responseIncludeGridData") <*>
+                     (o .:? "responseRanges" .!= mempty)
+                     <*> (o .:? "requests" .!= mempty)
+                     <*> (o .:? "includeSpreadsheetInResponse"))
+
+instance ToJSON BatchUpdateSpreadsheetRequest where
+        toJSON BatchUpdateSpreadsheetRequest'{..}
+          = object
+              (catMaybes
+                 [("responseIncludeGridData" .=) <$>
+                    _busrResponseIncludeGridData,
+                  ("responseRanges" .=) <$> _busrResponseRanges,
+                  ("requests" .=) <$> _busrRequests,
+                  ("includeSpreadsheetInResponse" .=) <$>
+                    _busrIncludeSpreadsheetInResponse])
+
+-- | The response when updating a range of values in a spreadsheet.
+--
+-- /See:/ 'updateValuesResponse' smart constructor.
+data UpdateValuesResponse = UpdateValuesResponse'
+    { _uvrUpdatedCells   :: !(Maybe (Textual Int32))
+    , _uvrSpreadsheetId  :: !(Maybe Text)
+    , _uvrUpdatedRows    :: !(Maybe (Textual Int32))
+    , _uvrUpdatedRange   :: !(Maybe Text)
+    , _uvrUpdatedData    :: !(Maybe ValueRange)
+    , _uvrUpdatedColumns :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdateValuesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uvrUpdatedCells'
+--
+-- * 'uvrSpreadsheetId'
+--
+-- * 'uvrUpdatedRows'
+--
+-- * 'uvrUpdatedRange'
+--
+-- * 'uvrUpdatedData'
+--
+-- * 'uvrUpdatedColumns'
+updateValuesResponse
+    :: UpdateValuesResponse
+updateValuesResponse =
+    UpdateValuesResponse'
+    { _uvrUpdatedCells = Nothing
+    , _uvrSpreadsheetId = Nothing
+    , _uvrUpdatedRows = Nothing
+    , _uvrUpdatedRange = Nothing
+    , _uvrUpdatedData = Nothing
+    , _uvrUpdatedColumns = Nothing
+    }
+
+-- | The number of cells updated.
+uvrUpdatedCells :: Lens' UpdateValuesResponse (Maybe Int32)
+uvrUpdatedCells
+  = lens _uvrUpdatedCells
+      (\ s a -> s{_uvrUpdatedCells = a})
+      . mapping _Coerce
+
+-- | The spreadsheet the updates were applied to.
+uvrSpreadsheetId :: Lens' UpdateValuesResponse (Maybe Text)
+uvrSpreadsheetId
+  = lens _uvrSpreadsheetId
+      (\ s a -> s{_uvrSpreadsheetId = a})
+
+-- | The number of rows where at least one cell in the row was updated.
+uvrUpdatedRows :: Lens' UpdateValuesResponse (Maybe Int32)
+uvrUpdatedRows
+  = lens _uvrUpdatedRows
+      (\ s a -> s{_uvrUpdatedRows = a})
+      . mapping _Coerce
+
+-- | The range (in A1 notation) that updates were applied to.
+uvrUpdatedRange :: Lens' UpdateValuesResponse (Maybe Text)
+uvrUpdatedRange
+  = lens _uvrUpdatedRange
+      (\ s a -> s{_uvrUpdatedRange = a})
+
+-- | The values of the cells after updates were applied. This is only
+-- included if the request\'s \`includeValuesInResponse\` field was
+-- \`true\`.
+uvrUpdatedData :: Lens' UpdateValuesResponse (Maybe ValueRange)
+uvrUpdatedData
+  = lens _uvrUpdatedData
+      (\ s a -> s{_uvrUpdatedData = a})
+
+-- | The number of columns where at least one cell in the column was updated.
+uvrUpdatedColumns :: Lens' UpdateValuesResponse (Maybe Int32)
+uvrUpdatedColumns
+  = lens _uvrUpdatedColumns
+      (\ s a -> s{_uvrUpdatedColumns = a})
+      . mapping _Coerce
+
+instance FromJSON UpdateValuesResponse where
+        parseJSON
+          = withObject "UpdateValuesResponse"
+              (\ o ->
+                 UpdateValuesResponse' <$>
+                   (o .:? "updatedCells") <*> (o .:? "spreadsheetId")
+                     <*> (o .:? "updatedRows")
+                     <*> (o .:? "updatedRange")
+                     <*> (o .:? "updatedData")
+                     <*> (o .:? "updatedColumns"))
+
+instance ToJSON UpdateValuesResponse where
+        toJSON UpdateValuesResponse'{..}
+          = object
+              (catMaybes
+                 [("updatedCells" .=) <$> _uvrUpdatedCells,
+                  ("spreadsheetId" .=) <$> _uvrSpreadsheetId,
+                  ("updatedRows" .=) <$> _uvrUpdatedRows,
+                  ("updatedRange" .=) <$> _uvrUpdatedRange,
+                  ("updatedData" .=) <$> _uvrUpdatedData,
+                  ("updatedColumns" .=) <$> _uvrUpdatedColumns])
+
+-- | The result of deleting a group.
+--
+-- /See:/ 'deleteDimensionGroupResponse' smart constructor.
+newtype DeleteDimensionGroupResponse = DeleteDimensionGroupResponse'
+    { _ddgrDimensionGroups :: Maybe [DimensionGroup]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteDimensionGroupResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ddgrDimensionGroups'
+deleteDimensionGroupResponse
+    :: DeleteDimensionGroupResponse
+deleteDimensionGroupResponse =
+    DeleteDimensionGroupResponse'
+    { _ddgrDimensionGroups = Nothing
+    }
+
+-- | All groups of a dimension after deleting a group from that dimension.
+ddgrDimensionGroups :: Lens' DeleteDimensionGroupResponse [DimensionGroup]
+ddgrDimensionGroups
+  = lens _ddgrDimensionGroups
+      (\ s a -> s{_ddgrDimensionGroups = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON DeleteDimensionGroupResponse where
+        parseJSON
+          = withObject "DeleteDimensionGroupResponse"
+              (\ o ->
+                 DeleteDimensionGroupResponse' <$>
+                   (o .:? "dimensionGroups" .!= mempty))
+
+instance ToJSON DeleteDimensionGroupResponse where
+        toJSON DeleteDimensionGroupResponse'{..}
+          = object
+              (catMaybes
+                 [("dimensionGroups" .=) <$> _ddgrDimensionGroups])
+
+-- | The request to copy a sheet across spreadsheets.
+--
+-- /See:/ 'copySheetToAnotherSpreadsheetRequest' smart constructor.
+newtype CopySheetToAnotherSpreadsheetRequest = CopySheetToAnotherSpreadsheetRequest'
+    { _cstasrDestinationSpreadsheetId :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CopySheetToAnotherSpreadsheetRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cstasrDestinationSpreadsheetId'
+copySheetToAnotherSpreadsheetRequest
+    :: CopySheetToAnotherSpreadsheetRequest
+copySheetToAnotherSpreadsheetRequest =
+    CopySheetToAnotherSpreadsheetRequest'
+    { _cstasrDestinationSpreadsheetId = Nothing
+    }
+
+-- | The ID of the spreadsheet to copy the sheet to.
+cstasrDestinationSpreadsheetId :: Lens' CopySheetToAnotherSpreadsheetRequest (Maybe Text)
+cstasrDestinationSpreadsheetId
+  = lens _cstasrDestinationSpreadsheetId
+      (\ s a -> s{_cstasrDestinationSpreadsheetId = a})
+
+instance FromJSON
+         CopySheetToAnotherSpreadsheetRequest where
+        parseJSON
+          = withObject "CopySheetToAnotherSpreadsheetRequest"
+              (\ o ->
+                 CopySheetToAnotherSpreadsheetRequest' <$>
+                   (o .:? "destinationSpreadsheetId"))
+
+instance ToJSON CopySheetToAnotherSpreadsheetRequest
+         where
+        toJSON CopySheetToAnotherSpreadsheetRequest'{..}
+          = object
+              (catMaybes
+                 [("destinationSpreadsheetId" .=) <$>
+                    _cstasrDestinationSpreadsheetId])
+
+-- | Adds a filter view.
+--
+-- /See:/ 'addFilterViewRequest' smart constructor.
+newtype AddFilterViewRequest = AddFilterViewRequest'
+    { _aFilter :: Maybe FilterView
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AddFilterViewRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aFilter'
+addFilterViewRequest
+    :: AddFilterViewRequest
+addFilterViewRequest =
+    AddFilterViewRequest'
+    { _aFilter = Nothing
+    }
+
+-- | The filter to add. The filterViewId field is optional; if one is not
+-- set, an id will be randomly generated. (It is an error to specify the ID
+-- of a filter that already exists.)
+aFilter :: Lens' AddFilterViewRequest (Maybe FilterView)
+aFilter = lens _aFilter (\ s a -> s{_aFilter = a})
+
+instance FromJSON AddFilterViewRequest where
+        parseJSON
+          = withObject "AddFilterViewRequest"
+              (\ o -> AddFilterViewRequest' <$> (o .:? "filter"))
+
+instance ToJSON AddFilterViewRequest where
+        toJSON AddFilterViewRequest'{..}
+          = object (catMaybes [("filter" .=) <$> _aFilter])
+
+-- | Metadata about a value in a pivot grouping.
+--
+-- /See:/ 'pivotGroupValueMetadata' smart constructor.
+data PivotGroupValueMetadata = PivotGroupValueMetadata'
+    { _pgvmValue     :: !(Maybe ExtendedValue)
+    , _pgvmCollapsed :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PivotGroupValueMetadata' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pgvmValue'
+--
+-- * 'pgvmCollapsed'
+pivotGroupValueMetadata
+    :: PivotGroupValueMetadata
+pivotGroupValueMetadata =
+    PivotGroupValueMetadata'
+    { _pgvmValue = Nothing
+    , _pgvmCollapsed = Nothing
+    }
+
+-- | The calculated value the metadata corresponds to. (Note that
+-- formulaValue is not valid, because the values will be calculated.)
+pgvmValue :: Lens' PivotGroupValueMetadata (Maybe ExtendedValue)
+pgvmValue
+  = lens _pgvmValue (\ s a -> s{_pgvmValue = a})
+
+-- | True if the data corresponding to the value is collapsed.
+pgvmCollapsed :: Lens' PivotGroupValueMetadata (Maybe Bool)
+pgvmCollapsed
+  = lens _pgvmCollapsed
+      (\ s a -> s{_pgvmCollapsed = a})
+
+instance FromJSON PivotGroupValueMetadata where
+        parseJSON
+          = withObject "PivotGroupValueMetadata"
+              (\ o ->
+                 PivotGroupValueMetadata' <$>
+                   (o .:? "value") <*> (o .:? "collapsed"))
+
+instance ToJSON PivotGroupValueMetadata where
+        toJSON PivotGroupValueMetadata'{..}
+          = object
+              (catMaybes
+                 [("value" .=) <$> _pgvmValue,
+                  ("collapsed" .=) <$> _pgvmCollapsed])
+
+-- | The response when clearing a range of values selected with DataFilters
+-- in a spreadsheet.
+--
+-- /See:/ 'batchClearValuesByDataFilterResponse' smart constructor.
+data BatchClearValuesByDataFilterResponse = BatchClearValuesByDataFilterResponse'
+    { _bcvbdfrClearedRanges :: !(Maybe [Text])
+    , _bcvbdfrSpreadsheetId :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BatchClearValuesByDataFilterResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bcvbdfrClearedRanges'
+--
+-- * 'bcvbdfrSpreadsheetId'
+batchClearValuesByDataFilterResponse
+    :: BatchClearValuesByDataFilterResponse
+batchClearValuesByDataFilterResponse =
+    BatchClearValuesByDataFilterResponse'
+    { _bcvbdfrClearedRanges = Nothing
+    , _bcvbdfrSpreadsheetId = Nothing
+    }
+
+-- | The ranges that were cleared, in A1 notation. (If the requests were for
+-- an unbounded range or a ranger larger than the bounds of the sheet, this
+-- will be the actual ranges that were cleared, bounded to the sheet\'s
+-- limits.)
+bcvbdfrClearedRanges :: Lens' BatchClearValuesByDataFilterResponse [Text]
+bcvbdfrClearedRanges
+  = lens _bcvbdfrClearedRanges
+      (\ s a -> s{_bcvbdfrClearedRanges = a})
+      . _Default
+      . _Coerce
+
+-- | The spreadsheet the updates were applied to.
+bcvbdfrSpreadsheetId :: Lens' BatchClearValuesByDataFilterResponse (Maybe Text)
+bcvbdfrSpreadsheetId
+  = lens _bcvbdfrSpreadsheetId
+      (\ s a -> s{_bcvbdfrSpreadsheetId = a})
+
+instance FromJSON
+         BatchClearValuesByDataFilterResponse where
+        parseJSON
+          = withObject "BatchClearValuesByDataFilterResponse"
+              (\ o ->
+                 BatchClearValuesByDataFilterResponse' <$>
+                   (o .:? "clearedRanges" .!= mempty) <*>
+                     (o .:? "spreadsheetId"))
+
+instance ToJSON BatchClearValuesByDataFilterResponse
+         where
+        toJSON BatchClearValuesByDataFilterResponse'{..}
+          = object
+              (catMaybes
+                 [("clearedRanges" .=) <$> _bcvbdfrClearedRanges,
+                  ("spreadsheetId" .=) <$> _bcvbdfrSpreadsheetId])
+
+-- | A single series of data for a waterfall chart.
+--
+-- /See:/ 'waterfallChartSeries' smart constructor.
+data WaterfallChartSeries = WaterfallChartSeries'
+    { _wcsData                 :: !(Maybe ChartData)
+    , _wcsCustomSubtotals      :: !(Maybe [WaterfallChartCustomSubtotal])
+    , _wcsNegativeColumnsStyle :: !(Maybe WaterfallChartColumnStyle)
+    , _wcsHideTrailingSubtotal :: !(Maybe Bool)
+    , _wcsSubtotalColumnsStyle :: !(Maybe WaterfallChartColumnStyle)
+    , _wcsPositiveColumnsStyle :: !(Maybe WaterfallChartColumnStyle)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'WaterfallChartSeries' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'wcsData'
+--
+-- * 'wcsCustomSubtotals'
+--
+-- * 'wcsNegativeColumnsStyle'
+--
+-- * 'wcsHideTrailingSubtotal'
+--
+-- * 'wcsSubtotalColumnsStyle'
+--
+-- * 'wcsPositiveColumnsStyle'
+waterfallChartSeries
+    :: WaterfallChartSeries
+waterfallChartSeries =
+    WaterfallChartSeries'
+    { _wcsData = Nothing
+    , _wcsCustomSubtotals = Nothing
+    , _wcsNegativeColumnsStyle = Nothing
+    , _wcsHideTrailingSubtotal = Nothing
+    , _wcsSubtotalColumnsStyle = Nothing
+    , _wcsPositiveColumnsStyle = Nothing
+    }
+
+-- | The data being visualized in this series.
+wcsData :: Lens' WaterfallChartSeries (Maybe ChartData)
+wcsData = lens _wcsData (\ s a -> s{_wcsData = a})
+
+-- | Custom subtotal columns appearing in this series. The order in which
+-- subtotals are defined is not significant. Only one subtotal may be
+-- defined for each data point.
+wcsCustomSubtotals :: Lens' WaterfallChartSeries [WaterfallChartCustomSubtotal]
+wcsCustomSubtotals
+  = lens _wcsCustomSubtotals
+      (\ s a -> s{_wcsCustomSubtotals = a})
+      . _Default
+      . _Coerce
+
+-- | Styles for all columns in this series with negative values.
+wcsNegativeColumnsStyle :: Lens' WaterfallChartSeries (Maybe WaterfallChartColumnStyle)
+wcsNegativeColumnsStyle
+  = lens _wcsNegativeColumnsStyle
+      (\ s a -> s{_wcsNegativeColumnsStyle = a})
+
+-- | True to hide the subtotal column from the end of the series. By default,
+-- a subtotal column will appear at the end of each series. Setting this
+-- field to true will hide that subtotal column for this series.
+wcsHideTrailingSubtotal :: Lens' WaterfallChartSeries (Maybe Bool)
+wcsHideTrailingSubtotal
+  = lens _wcsHideTrailingSubtotal
+      (\ s a -> s{_wcsHideTrailingSubtotal = a})
+
+-- | Styles for all subtotal columns in this series.
+wcsSubtotalColumnsStyle :: Lens' WaterfallChartSeries (Maybe WaterfallChartColumnStyle)
+wcsSubtotalColumnsStyle
+  = lens _wcsSubtotalColumnsStyle
+      (\ s a -> s{_wcsSubtotalColumnsStyle = a})
+
+-- | Styles for all columns in this series with positive values.
+wcsPositiveColumnsStyle :: Lens' WaterfallChartSeries (Maybe WaterfallChartColumnStyle)
+wcsPositiveColumnsStyle
+  = lens _wcsPositiveColumnsStyle
+      (\ s a -> s{_wcsPositiveColumnsStyle = a})
+
+instance FromJSON WaterfallChartSeries where
+        parseJSON
+          = withObject "WaterfallChartSeries"
+              (\ o ->
+                 WaterfallChartSeries' <$>
+                   (o .:? "data") <*>
+                     (o .:? "customSubtotals" .!= mempty)
+                     <*> (o .:? "negativeColumnsStyle")
+                     <*> (o .:? "hideTrailingSubtotal")
+                     <*> (o .:? "subtotalColumnsStyle")
+                     <*> (o .:? "positiveColumnsStyle"))
+
+instance ToJSON WaterfallChartSeries where
+        toJSON WaterfallChartSeries'{..}
+          = object
+              (catMaybes
+                 [("data" .=) <$> _wcsData,
+                  ("customSubtotals" .=) <$> _wcsCustomSubtotals,
+                  ("negativeColumnsStyle" .=) <$>
+                    _wcsNegativeColumnsStyle,
+                  ("hideTrailingSubtotal" .=) <$>
+                    _wcsHideTrailingSubtotal,
+                  ("subtotalColumnsStyle" .=) <$>
+                    _wcsSubtotalColumnsStyle,
+                  ("positiveColumnsStyle" .=) <$>
+                    _wcsPositiveColumnsStyle])
+
+-- | Updates all cells in a range with new data.
+--
+-- /See:/ 'updateCellsRequest' smart constructor.
+data UpdateCellsRequest = UpdateCellsRequest'
+    { _updStart  :: !(Maybe GridCoordinate)
+    , _updRows   :: !(Maybe [RowData])
+    , _updRange  :: !(Maybe GridRange)
+    , _updFields :: !(Maybe GFieldMask)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdateCellsRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'updStart'
+--
+-- * 'updRows'
+--
+-- * 'updRange'
+--
+-- * 'updFields'
+updateCellsRequest
+    :: UpdateCellsRequest
+updateCellsRequest =
+    UpdateCellsRequest'
+    { _updStart = Nothing
+    , _updRows = Nothing
+    , _updRange = Nothing
+    , _updFields = Nothing
+    }
+
+-- | The coordinate to start writing data at. Any number of rows and columns
+-- (including a different number of columns per row) may be written.
+updStart :: Lens' UpdateCellsRequest (Maybe GridCoordinate)
+updStart = lens _updStart (\ s a -> s{_updStart = a})
+
+-- | The data to write.
+updRows :: Lens' UpdateCellsRequest [RowData]
+updRows
+  = lens _updRows (\ s a -> s{_updRows = a}) . _Default
+      . _Coerce
+
+-- | The range to write data to. If the data in rows does not cover the
+-- entire requested range, the fields matching those set in fields will be
+-- cleared.
+updRange :: Lens' UpdateCellsRequest (Maybe GridRange)
+updRange = lens _updRange (\ s a -> s{_updRange = a})
+
+-- | The fields of CellData that should be updated. At least one field must
+-- be specified. The root is the CellData; \'row.values.\' should not be
+-- specified. A single \`\"*\"\` can be used as short-hand for listing
+-- every field.
+updFields :: Lens' UpdateCellsRequest (Maybe GFieldMask)
+updFields
+  = lens _updFields (\ s a -> s{_updFields = a})
+
+instance FromJSON UpdateCellsRequest where
+        parseJSON
+          = withObject "UpdateCellsRequest"
+              (\ o ->
+                 UpdateCellsRequest' <$>
+                   (o .:? "start") <*> (o .:? "rows" .!= mempty) <*>
+                     (o .:? "range")
+                     <*> (o .:? "fields"))
+
+instance ToJSON UpdateCellsRequest where
+        toJSON UpdateCellsRequest'{..}
+          = object
+              (catMaybes
+                 [("start" .=) <$> _updStart,
+                  ("rows" .=) <$> _updRows, ("range" .=) <$> _updRange,
+                  ("fields" .=) <$> _updFields])
+
+-- | The format of a cell.
+--
+-- /See:/ 'cellFormat' smart constructor.
+data CellFormat = CellFormat'
+    { _cfBOrders              :: !(Maybe BOrders)
+    , _cfVerticalAlignment    :: !(Maybe CellFormatVerticalAlignment)
+    , _cfBackgRoundColor      :: !(Maybe Color)
+    , _cfTextRotation         :: !(Maybe TextRotation)
+    , _cfHyperlinkDisplayType :: !(Maybe CellFormatHyperlinkDisplayType)
+    , _cfWrapStrategy         :: !(Maybe CellFormatWrapStrategy)
+    , _cfNumberFormat         :: !(Maybe NumberFormat)
+    , _cfTextDirection        :: !(Maybe CellFormatTextDirection)
+    , _cfTextFormat           :: !(Maybe TextFormat)
+    , _cfHorizontalAlignment  :: !(Maybe CellFormatHorizontalAlignment)
+    , _cfPadding              :: !(Maybe Padding)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CellFormat' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cfBOrders'
+--
+-- * 'cfVerticalAlignment'
+--
+-- * 'cfBackgRoundColor'
+--
+-- * 'cfTextRotation'
+--
+-- * 'cfHyperlinkDisplayType'
+--
+-- * 'cfWrapStrategy'
+--
+-- * 'cfNumberFormat'
+--
+-- * 'cfTextDirection'
+--
+-- * 'cfTextFormat'
+--
+-- * 'cfHorizontalAlignment'
+--
+-- * 'cfPadding'
+cellFormat
+    :: CellFormat
+cellFormat =
+    CellFormat'
+    { _cfBOrders = Nothing
+    , _cfVerticalAlignment = Nothing
+    , _cfBackgRoundColor = Nothing
+    , _cfTextRotation = Nothing
+    , _cfHyperlinkDisplayType = Nothing
+    , _cfWrapStrategy = Nothing
+    , _cfNumberFormat = Nothing
+    , _cfTextDirection = Nothing
+    , _cfTextFormat = Nothing
+    , _cfHorizontalAlignment = Nothing
+    , _cfPadding = Nothing
+    }
+
+-- | The borders of the cell.
+cfBOrders :: Lens' CellFormat (Maybe BOrders)
+cfBOrders
+  = lens _cfBOrders (\ s a -> s{_cfBOrders = a})
+
+-- | The vertical alignment of the value in the cell.
+cfVerticalAlignment :: Lens' CellFormat (Maybe CellFormatVerticalAlignment)
+cfVerticalAlignment
+  = lens _cfVerticalAlignment
+      (\ s a -> s{_cfVerticalAlignment = a})
+
+-- | The background color of the cell.
+cfBackgRoundColor :: Lens' CellFormat (Maybe Color)
+cfBackgRoundColor
+  = lens _cfBackgRoundColor
+      (\ s a -> s{_cfBackgRoundColor = a})
+
+-- | The rotation applied to text in a cell
+cfTextRotation :: Lens' CellFormat (Maybe TextRotation)
+cfTextRotation
+  = lens _cfTextRotation
+      (\ s a -> s{_cfTextRotation = a})
+
+-- | How a hyperlink, if it exists, should be displayed in the cell.
+cfHyperlinkDisplayType :: Lens' CellFormat (Maybe CellFormatHyperlinkDisplayType)
+cfHyperlinkDisplayType
+  = lens _cfHyperlinkDisplayType
+      (\ s a -> s{_cfHyperlinkDisplayType = a})
+
+-- | The wrap strategy for the value in the cell.
+cfWrapStrategy :: Lens' CellFormat (Maybe CellFormatWrapStrategy)
+cfWrapStrategy
+  = lens _cfWrapStrategy
+      (\ s a -> s{_cfWrapStrategy = a})
+
+-- | A format describing how number values should be represented to the user.
+cfNumberFormat :: Lens' CellFormat (Maybe NumberFormat)
+cfNumberFormat
+  = lens _cfNumberFormat
+      (\ s a -> s{_cfNumberFormat = a})
+
+-- | The direction of the text in the cell.
+cfTextDirection :: Lens' CellFormat (Maybe CellFormatTextDirection)
+cfTextDirection
+  = lens _cfTextDirection
+      (\ s a -> s{_cfTextDirection = a})
+
+-- | The format of the text in the cell (unless overridden by a format run).
+cfTextFormat :: Lens' CellFormat (Maybe TextFormat)
+cfTextFormat
+  = lens _cfTextFormat (\ s a -> s{_cfTextFormat = a})
+
+-- | The horizontal alignment of the value in the cell.
+cfHorizontalAlignment :: Lens' CellFormat (Maybe CellFormatHorizontalAlignment)
+cfHorizontalAlignment
+  = lens _cfHorizontalAlignment
+      (\ s a -> s{_cfHorizontalAlignment = a})
+
+-- | The padding of the cell.
+cfPadding :: Lens' CellFormat (Maybe Padding)
+cfPadding
+  = lens _cfPadding (\ s a -> s{_cfPadding = a})
+
+instance FromJSON CellFormat where
+        parseJSON
+          = withObject "CellFormat"
+              (\ o ->
+                 CellFormat' <$>
+                   (o .:? "borders") <*> (o .:? "verticalAlignment") <*>
+                     (o .:? "backgroundColor")
+                     <*> (o .:? "textRotation")
+                     <*> (o .:? "hyperlinkDisplayType")
+                     <*> (o .:? "wrapStrategy")
+                     <*> (o .:? "numberFormat")
+                     <*> (o .:? "textDirection")
+                     <*> (o .:? "textFormat")
+                     <*> (o .:? "horizontalAlignment")
+                     <*> (o .:? "padding"))
+
+instance ToJSON CellFormat where
+        toJSON CellFormat'{..}
+          = object
+              (catMaybes
+                 [("borders" .=) <$> _cfBOrders,
+                  ("verticalAlignment" .=) <$> _cfVerticalAlignment,
+                  ("backgroundColor" .=) <$> _cfBackgRoundColor,
+                  ("textRotation" .=) <$> _cfTextRotation,
+                  ("hyperlinkDisplayType" .=) <$>
+                    _cfHyperlinkDisplayType,
+                  ("wrapStrategy" .=) <$> _cfWrapStrategy,
+                  ("numberFormat" .=) <$> _cfNumberFormat,
+                  ("textDirection" .=) <$> _cfTextDirection,
+                  ("textFormat" .=) <$> _cfTextFormat,
+                  ("horizontalAlignment" .=) <$>
+                    _cfHorizontalAlignment,
+                  ("padding" .=) <$> _cfPadding])
+
+-- | Deletes the protected range with the given ID.
+--
+-- /See:/ 'deleteProtectedRangeRequest' smart constructor.
+newtype DeleteProtectedRangeRequest = DeleteProtectedRangeRequest'
+    { _dprrProtectedRangeId :: Maybe (Textual Int32)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteProtectedRangeRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dprrProtectedRangeId'
+deleteProtectedRangeRequest
+    :: DeleteProtectedRangeRequest
+deleteProtectedRangeRequest =
+    DeleteProtectedRangeRequest'
+    { _dprrProtectedRangeId = Nothing
+    }
+
+-- | The ID of the protected range to delete.
+dprrProtectedRangeId :: Lens' DeleteProtectedRangeRequest (Maybe Int32)
+dprrProtectedRangeId
+  = lens _dprrProtectedRangeId
+      (\ s a -> s{_dprrProtectedRangeId = a})
+      . mapping _Coerce
+
+instance FromJSON DeleteProtectedRangeRequest where
+        parseJSON
+          = withObject "DeleteProtectedRangeRequest"
+              (\ o ->
+                 DeleteProtectedRangeRequest' <$>
+                   (o .:? "protectedRangeId"))
+
+instance ToJSON DeleteProtectedRangeRequest where
+        toJSON DeleteProtectedRangeRequest'{..}
+          = object
+              (catMaybes
+                 [("protectedRangeId" .=) <$> _dprrProtectedRangeId])
+
+-- | Updates an existing protected range with the specified protectedRangeId.
+--
+-- /See:/ 'updateProtectedRangeRequest' smart constructor.
+data UpdateProtectedRangeRequest = UpdateProtectedRangeRequest'
+    { _uprrProtectedRange :: !(Maybe ProtectedRange)
+    , _uprrFields         :: !(Maybe GFieldMask)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdateProtectedRangeRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uprrProtectedRange'
+--
+-- * 'uprrFields'
+updateProtectedRangeRequest
+    :: UpdateProtectedRangeRequest
+updateProtectedRangeRequest =
+    UpdateProtectedRangeRequest'
+    { _uprrProtectedRange = Nothing
+    , _uprrFields = Nothing
+    }
+
+-- | The protected range to update with the new properties.
+uprrProtectedRange :: Lens' UpdateProtectedRangeRequest (Maybe ProtectedRange)
+uprrProtectedRange
+  = lens _uprrProtectedRange
+      (\ s a -> s{_uprrProtectedRange = a})
+
+-- | The fields that should be updated. At least one field must be specified.
+-- The root \`protectedRange\` is implied and should not be specified. A
+-- single \`\"*\"\` can be used as short-hand for listing every field.
+uprrFields :: Lens' UpdateProtectedRangeRequest (Maybe GFieldMask)
+uprrFields
+  = lens _uprrFields (\ s a -> s{_uprrFields = a})
+
+instance FromJSON UpdateProtectedRangeRequest where
+        parseJSON
+          = withObject "UpdateProtectedRangeRequest"
+              (\ o ->
+                 UpdateProtectedRangeRequest' <$>
+                   (o .:? "protectedRange") <*> (o .:? "fields"))
+
+instance ToJSON UpdateProtectedRangeRequest where
+        toJSON UpdateProtectedRangeRequest'{..}
+          = object
+              (catMaybes
+                 [("protectedRange" .=) <$> _uprrProtectedRange,
+                  ("fields" .=) <$> _uprrFields])
+
+-- | The result of adding a sheet.
+--
+-- /See:/ 'addSheetResponse' smart constructor.
+newtype AddSheetResponse = AddSheetResponse'
+    { _aProperties :: Maybe SheetProperties
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AddSheetResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aProperties'
+addSheetResponse
+    :: AddSheetResponse
+addSheetResponse =
+    AddSheetResponse'
+    { _aProperties = Nothing
+    }
+
+-- | The properties of the newly added sheet.
+aProperties :: Lens' AddSheetResponse (Maybe SheetProperties)
+aProperties
+  = lens _aProperties (\ s a -> s{_aProperties = a})
+
+instance FromJSON AddSheetResponse where
+        parseJSON
+          = withObject "AddSheetResponse"
+              (\ o -> AddSheetResponse' <$> (o .:? "properties"))
+
+instance ToJSON AddSheetResponse where
+        toJSON AddSheetResponse'{..}
+          = object
+              (catMaybes [("properties" .=) <$> _aProperties])
+
+-- | A protected range.
+--
+-- /See:/ 'protectedRange' smart constructor.
+data ProtectedRange = ProtectedRange'
+    { _prProtectedRangeId      :: !(Maybe (Textual Int32))
+    , _prWarningOnly           :: !(Maybe Bool)
+    , _prNamedRangeId          :: !(Maybe Text)
+    , _prRange                 :: !(Maybe GridRange)
+    , _prEditors               :: !(Maybe Editors)
+    , _prUnprotectedRanges     :: !(Maybe [GridRange])
+    , _prRequestingUserCanEdit :: !(Maybe Bool)
+    , _prDescription           :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProtectedRange' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'prProtectedRangeId'
+--
+-- * 'prWarningOnly'
+--
+-- * 'prNamedRangeId'
+--
+-- * 'prRange'
+--
+-- * 'prEditors'
+--
+-- * 'prUnprotectedRanges'
+--
+-- * 'prRequestingUserCanEdit'
+--
+-- * 'prDescription'
+protectedRange
+    :: ProtectedRange
+protectedRange =
+    ProtectedRange'
+    { _prProtectedRangeId = Nothing
+    , _prWarningOnly = Nothing
+    , _prNamedRangeId = Nothing
+    , _prRange = Nothing
+    , _prEditors = Nothing
+    , _prUnprotectedRanges = Nothing
+    , _prRequestingUserCanEdit = Nothing
+    , _prDescription = Nothing
+    }
+
+-- | The ID of the protected range. This field is read-only.
+prProtectedRangeId :: Lens' ProtectedRange (Maybe Int32)
+prProtectedRangeId
+  = lens _prProtectedRangeId
+      (\ s a -> s{_prProtectedRangeId = a})
+      . mapping _Coerce
+
+-- | True if this protected range will show a warning when editing.
+-- Warning-based protection means that every user can edit data in the
+-- protected range, except editing will prompt a warning asking the user to
+-- confirm the edit. When writing: if this field is true, then editors is
+-- ignored. Additionally, if this field is changed from true to false and
+-- the \`editors\` field is not set (nor included in the field mask), then
+-- the editors will be set to all the editors in the document.
+prWarningOnly :: Lens' ProtectedRange (Maybe Bool)
+prWarningOnly
+  = lens _prWarningOnly
+      (\ s a -> s{_prWarningOnly = a})
+
+-- | The named range this protected range is backed by, if any. When writing,
+-- only one of range or named_range_id may be set.
+prNamedRangeId :: Lens' ProtectedRange (Maybe Text)
+prNamedRangeId
+  = lens _prNamedRangeId
+      (\ s a -> s{_prNamedRangeId = a})
+
+-- | The range that is being protected. The range may be fully unbounded, in
+-- which case this is considered a protected sheet. When writing, only one
+-- of range or named_range_id may be set.
+prRange :: Lens' ProtectedRange (Maybe GridRange)
+prRange = lens _prRange (\ s a -> s{_prRange = a})
+
+-- | The users and groups with edit access to the protected range. This field
+-- is only visible to users with edit access to the protected range and the
+-- document. Editors are not supported with warning_only protection.
+prEditors :: Lens' ProtectedRange (Maybe Editors)
+prEditors
+  = lens _prEditors (\ s a -> s{_prEditors = a})
+
+-- | The list of unprotected ranges within a protected sheet. Unprotected
+-- ranges are only supported on protected sheets.
+prUnprotectedRanges :: Lens' ProtectedRange [GridRange]
+prUnprotectedRanges
+  = lens _prUnprotectedRanges
+      (\ s a -> s{_prUnprotectedRanges = a})
+      . _Default
+      . _Coerce
+
+-- | True if the user who requested this protected range can edit the
+-- protected area. This field is read-only.
+prRequestingUserCanEdit :: Lens' ProtectedRange (Maybe Bool)
+prRequestingUserCanEdit
+  = lens _prRequestingUserCanEdit
+      (\ s a -> s{_prRequestingUserCanEdit = a})
+
+-- | The description of this protected range.
+prDescription :: Lens' ProtectedRange (Maybe Text)
+prDescription
+  = lens _prDescription
+      (\ s a -> s{_prDescription = a})
+
+instance FromJSON ProtectedRange where
+        parseJSON
+          = withObject "ProtectedRange"
+              (\ o ->
+                 ProtectedRange' <$>
+                   (o .:? "protectedRangeId") <*> (o .:? "warningOnly")
+                     <*> (o .:? "namedRangeId")
+                     <*> (o .:? "range")
+                     <*> (o .:? "editors")
+                     <*> (o .:? "unprotectedRanges" .!= mempty)
+                     <*> (o .:? "requestingUserCanEdit")
+                     <*> (o .:? "description"))
+
+instance ToJSON ProtectedRange where
+        toJSON ProtectedRange'{..}
+          = object
+              (catMaybes
+                 [("protectedRangeId" .=) <$> _prProtectedRangeId,
+                  ("warningOnly" .=) <$> _prWarningOnly,
+                  ("namedRangeId" .=) <$> _prNamedRangeId,
+                  ("range" .=) <$> _prRange,
+                  ("editors" .=) <$> _prEditors,
+                  ("unprotectedRanges" .=) <$> _prUnprotectedRanges,
+                  ("requestingUserCanEdit" .=) <$>
+                    _prRequestingUserCanEdit,
+                  ("description" .=) <$> _prDescription])
+
+-- | An axis of the chart. A chart may not have more than one axis per axis
+-- position.
+--
+-- /See:/ 'basicChartAxis' smart constructor.
+data BasicChartAxis = BasicChartAxis'
+    { _bcaTitleTextPosition :: !(Maybe TextPosition)
+    , _bcaFormat            :: !(Maybe TextFormat)
+    , _bcaTitle             :: !(Maybe Text)
+    , _bcaPosition          :: !(Maybe BasicChartAxisPosition)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BasicChartAxis' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bcaTitleTextPosition'
+--
+-- * 'bcaFormat'
+--
+-- * 'bcaTitle'
+--
+-- * 'bcaPosition'
+basicChartAxis
+    :: BasicChartAxis
+basicChartAxis =
+    BasicChartAxis'
+    { _bcaTitleTextPosition = Nothing
+    , _bcaFormat = Nothing
+    , _bcaTitle = Nothing
+    , _bcaPosition = Nothing
+    }
+
+-- | The axis title text position.
+bcaTitleTextPosition :: Lens' BasicChartAxis (Maybe TextPosition)
+bcaTitleTextPosition
+  = lens _bcaTitleTextPosition
+      (\ s a -> s{_bcaTitleTextPosition = a})
+
+-- | The format of the title. Only valid if the axis is not associated with
+-- the domain.
+bcaFormat :: Lens' BasicChartAxis (Maybe TextFormat)
+bcaFormat
+  = lens _bcaFormat (\ s a -> s{_bcaFormat = a})
+
+-- | The title of this axis. If set, this overrides any title inferred from
+-- headers of the data.
+bcaTitle :: Lens' BasicChartAxis (Maybe Text)
+bcaTitle = lens _bcaTitle (\ s a -> s{_bcaTitle = a})
+
+-- | The position of this axis.
+bcaPosition :: Lens' BasicChartAxis (Maybe BasicChartAxisPosition)
+bcaPosition
+  = lens _bcaPosition (\ s a -> s{_bcaPosition = a})
+
+instance FromJSON BasicChartAxis where
+        parseJSON
+          = withObject "BasicChartAxis"
+              (\ o ->
+                 BasicChartAxis' <$>
+                   (o .:? "titleTextPosition") <*> (o .:? "format") <*>
+                     (o .:? "title")
+                     <*> (o .:? "position"))
+
+instance ToJSON BasicChartAxis where
+        toJSON BasicChartAxis'{..}
+          = object
+              (catMaybes
+                 [("titleTextPosition" .=) <$> _bcaTitleTextPosition,
+                  ("format" .=) <$> _bcaFormat,
+                  ("title" .=) <$> _bcaTitle,
+                  ("position" .=) <$> _bcaPosition])
+
+-- | Data in the grid, as well as metadata about the dimensions.
+--
+-- /See:/ 'gridData' smart constructor.
+data GridData = GridData'
+    { _gdRowMetadata    :: !(Maybe [DimensionProperties])
+    , _gdStartRow       :: !(Maybe (Textual Int32))
+    , _gdRowData        :: !(Maybe [RowData])
+    , _gdColumnMetadata :: !(Maybe [DimensionProperties])
+    , _gdStartColumn    :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GridData' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gdRowMetadata'
+--
+-- * 'gdStartRow'
+--
+-- * 'gdRowData'
+--
+-- * 'gdColumnMetadata'
+--
+-- * 'gdStartColumn'
+gridData
+    :: GridData
+gridData =
+    GridData'
+    { _gdRowMetadata = Nothing
+    , _gdStartRow = Nothing
+    , _gdRowData = Nothing
+    , _gdColumnMetadata = Nothing
+    , _gdStartColumn = Nothing
+    }
+
+-- | Metadata about the requested rows in the grid, starting with the row in
+-- start_row.
+gdRowMetadata :: Lens' GridData [DimensionProperties]
+gdRowMetadata
+  = lens _gdRowMetadata
+      (\ s a -> s{_gdRowMetadata = a})
+      . _Default
+      . _Coerce
+
+-- | The first row this GridData refers to, zero-based.
+gdStartRow :: Lens' GridData (Maybe Int32)
+gdStartRow
+  = lens _gdStartRow (\ s a -> s{_gdStartRow = a}) .
+      mapping _Coerce
+
+-- | The data in the grid, one entry per row, starting with the row in
+-- startRow. The values in RowData will correspond to columns starting at
+-- start_column.
+gdRowData :: Lens' GridData [RowData]
+gdRowData
+  = lens _gdRowData (\ s a -> s{_gdRowData = a}) .
+      _Default
+      . _Coerce
+
+-- | Metadata about the requested columns in the grid, starting with the
+-- column in start_column.
+gdColumnMetadata :: Lens' GridData [DimensionProperties]
+gdColumnMetadata
+  = lens _gdColumnMetadata
+      (\ s a -> s{_gdColumnMetadata = a})
+      . _Default
+      . _Coerce
+
+-- | The first column this GridData refers to, zero-based.
+gdStartColumn :: Lens' GridData (Maybe Int32)
+gdStartColumn
+  = lens _gdStartColumn
+      (\ s a -> s{_gdStartColumn = a})
+      . mapping _Coerce
+
+instance FromJSON GridData where
+        parseJSON
+          = withObject "GridData"
+              (\ o ->
+                 GridData' <$>
+                   (o .:? "rowMetadata" .!= mempty) <*>
+                     (o .:? "startRow")
+                     <*> (o .:? "rowData" .!= mempty)
+                     <*> (o .:? "columnMetadata" .!= mempty)
+                     <*> (o .:? "startColumn"))
+
+instance ToJSON GridData where
+        toJSON GridData'{..}
+          = object
+              (catMaybes
+                 [("rowMetadata" .=) <$> _gdRowMetadata,
+                  ("startRow" .=) <$> _gdStartRow,
+                  ("rowData" .=) <$> _gdRowData,
+                  ("columnMetadata" .=) <$> _gdColumnMetadata,
+                  ("startColumn" .=) <$> _gdStartColumn])
+
+-- | The number format of a cell.
+--
+-- /See:/ 'numberFormat' smart constructor.
+data NumberFormat = NumberFormat'
+    { _nfPattern :: !(Maybe Text)
+    , _nfType    :: !(Maybe NumberFormatType)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'NumberFormat' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'nfPattern'
+--
+-- * 'nfType'
+numberFormat
+    :: NumberFormat
+numberFormat =
+    NumberFormat'
+    { _nfPattern = Nothing
+    , _nfType = Nothing
+    }
+
+-- | Pattern string used for formatting. If not set, a default pattern based
+-- on the user\'s locale will be used if necessary for the given type. See
+-- the [Date and Number Formats guide](\/sheets\/api\/guides\/formats) for
+-- more information about the supported patterns.
+nfPattern :: Lens' NumberFormat (Maybe Text)
+nfPattern
+  = lens _nfPattern (\ s a -> s{_nfPattern = a})
+
+-- | The type of the number format. When writing, this field must be set.
+nfType :: Lens' NumberFormat (Maybe NumberFormatType)
+nfType = lens _nfType (\ s a -> s{_nfType = a})
+
+instance FromJSON NumberFormat where
+        parseJSON
+          = withObject "NumberFormat"
+              (\ o ->
+                 NumberFormat' <$>
+                   (o .:? "pattern") <*> (o .:? "type"))
+
+instance ToJSON NumberFormat where
+        toJSON NumberFormat'{..}
+          = object
+              (catMaybes
+                 [("pattern" .=) <$> _nfPattern,
+                  ("type" .=) <$> _nfType])
+
+-- | The reply for batch updating a spreadsheet.
+--
+-- /See:/ 'batchUpdateSpreadsheetResponse' smart constructor.
+data BatchUpdateSpreadsheetResponse = BatchUpdateSpreadsheetResponse'
+    { _busrSpreadsheetId      :: !(Maybe Text)
+    , _busrReplies            :: !(Maybe [Response])
+    , _busrUpdatedSpreadsheet :: !(Maybe Spreadsheet)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BatchUpdateSpreadsheetResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'busrSpreadsheetId'
+--
+-- * 'busrReplies'
+--
+-- * 'busrUpdatedSpreadsheet'
+batchUpdateSpreadsheetResponse
+    :: BatchUpdateSpreadsheetResponse
+batchUpdateSpreadsheetResponse =
+    BatchUpdateSpreadsheetResponse'
+    { _busrSpreadsheetId = Nothing
+    , _busrReplies = Nothing
+    , _busrUpdatedSpreadsheet = Nothing
+    }
+
+-- | The spreadsheet the updates were applied to.
+busrSpreadsheetId :: Lens' BatchUpdateSpreadsheetResponse (Maybe Text)
+busrSpreadsheetId
+  = lens _busrSpreadsheetId
+      (\ s a -> s{_busrSpreadsheetId = a})
+
+-- | The reply of the updates. This maps 1:1 with the updates, although
+-- replies to some requests may be empty.
+busrReplies :: Lens' BatchUpdateSpreadsheetResponse [Response]
+busrReplies
+  = lens _busrReplies (\ s a -> s{_busrReplies = a}) .
+      _Default
+      . _Coerce
+
+-- | The spreadsheet after updates were applied. This is only set if
+-- [BatchUpdateSpreadsheetRequest.include_spreadsheet_in_response] is
+-- \`true\`.
+busrUpdatedSpreadsheet :: Lens' BatchUpdateSpreadsheetResponse (Maybe Spreadsheet)
+busrUpdatedSpreadsheet
+  = lens _busrUpdatedSpreadsheet
+      (\ s a -> s{_busrUpdatedSpreadsheet = a})
+
+instance FromJSON BatchUpdateSpreadsheetResponse
+         where
+        parseJSON
+          = withObject "BatchUpdateSpreadsheetResponse"
+              (\ o ->
+                 BatchUpdateSpreadsheetResponse' <$>
+                   (o .:? "spreadsheetId") <*>
+                     (o .:? "replies" .!= mempty)
+                     <*> (o .:? "updatedSpreadsheet"))
+
+instance ToJSON BatchUpdateSpreadsheetResponse where
+        toJSON BatchUpdateSpreadsheetResponse'{..}
+          = object
+              (catMaybes
+                 [("spreadsheetId" .=) <$> _busrSpreadsheetId,
+                  ("replies" .=) <$> _busrReplies,
+                  ("updatedSpreadsheet" .=) <$>
+                    _busrUpdatedSpreadsheet])
+
+-- | Filter that describes what data should be selected or returned from a
+-- request.
+--
+-- /See:/ 'dataFilter' smart constructor.
+data DataFilter = DataFilter'
+    { _dfGridRange               :: !(Maybe GridRange)
+    , _dfA1Range                 :: !(Maybe Text)
+    , _dfDeveloperMetadataLookup :: !(Maybe DeveloperMetadataLookup)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DataFilter' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dfGridRange'
+--
+-- * 'dfA1Range'
+--
+-- * 'dfDeveloperMetadataLookup'
+dataFilter
+    :: DataFilter
+dataFilter =
+    DataFilter'
+    { _dfGridRange = Nothing
+    , _dfA1Range = Nothing
+    , _dfDeveloperMetadataLookup = Nothing
+    }
+
+-- | Selects data that matches the range described by the GridRange.
+dfGridRange :: Lens' DataFilter (Maybe GridRange)
+dfGridRange
+  = lens _dfGridRange (\ s a -> s{_dfGridRange = a})
+
+-- | Selects data that matches the specified A1 range.
+dfA1Range :: Lens' DataFilter (Maybe Text)
+dfA1Range
+  = lens _dfA1Range (\ s a -> s{_dfA1Range = a})
+
+-- | Selects data associated with the developer metadata matching the
+-- criteria described by this DeveloperMetadataLookup.
+dfDeveloperMetadataLookup :: Lens' DataFilter (Maybe DeveloperMetadataLookup)
+dfDeveloperMetadataLookup
+  = lens _dfDeveloperMetadataLookup
+      (\ s a -> s{_dfDeveloperMetadataLookup = a})
+
+instance FromJSON DataFilter where
+        parseJSON
+          = withObject "DataFilter"
+              (\ o ->
+                 DataFilter' <$>
+                   (o .:? "gridRange") <*> (o .:? "a1Range") <*>
+                     (o .:? "developerMetadataLookup"))
+
+instance ToJSON DataFilter where
+        toJSON DataFilter'{..}
+          = object
+              (catMaybes
+                 [("gridRange" .=) <$> _dfGridRange,
+                  ("a1Range" .=) <$> _dfA1Range,
+                  ("developerMetadataLookup" .=) <$>
+                    _dfDeveloperMetadataLookup])
+
+-- | Sets a data validation rule to every cell in the range. To clear
+-- validation in a range, call this with no rule specified.
+--
+-- /See:/ 'setDataValidationRequest' smart constructor.
+data SetDataValidationRequest = SetDataValidationRequest'
+    { _sdvrRule  :: !(Maybe DataValidationRule)
+    , _sdvrRange :: !(Maybe GridRange)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SetDataValidationRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sdvrRule'
+--
+-- * 'sdvrRange'
+setDataValidationRequest
+    :: SetDataValidationRequest
+setDataValidationRequest =
+    SetDataValidationRequest'
+    { _sdvrRule = Nothing
+    , _sdvrRange = Nothing
+    }
+
+-- | The data validation rule to set on each cell in the range, or empty to
+-- clear the data validation in the range.
+sdvrRule :: Lens' SetDataValidationRequest (Maybe DataValidationRule)
+sdvrRule = lens _sdvrRule (\ s a -> s{_sdvrRule = a})
+
+-- | The range the data validation rule should apply to.
+sdvrRange :: Lens' SetDataValidationRequest (Maybe GridRange)
+sdvrRange
+  = lens _sdvrRange (\ s a -> s{_sdvrRange = a})
+
+instance FromJSON SetDataValidationRequest where
+        parseJSON
+          = withObject "SetDataValidationRequest"
+              (\ o ->
+                 SetDataValidationRequest' <$>
+                   (o .:? "rule") <*> (o .:? "range"))
+
+instance ToJSON SetDataValidationRequest where
+        toJSON SetDataValidationRequest'{..}
+          = object
+              (catMaybes
+                 [("rule" .=) <$> _sdvrRule,
+                  ("range" .=) <$> _sdvrRange])
+
+-- | Properties referring a single dimension (either row or column). If both
+-- BandedRange.row_properties and BandedRange.column_properties are set,
+-- the fill colors are applied to cells according to the following rules: *
+-- header_color and footer_color take priority over band colors. *
+-- first_band_color takes priority over second_band_color. * row_properties
+-- takes priority over column_properties. For example, the first row color
+-- takes priority over the first column color, but the first column color
+-- takes priority over the second row color. Similarly, the row header
+-- takes priority over the column header in the top left cell, but the
+-- column header takes priority over the first row color if the row header
+-- is not set.
+--
+-- /See:/ 'bandingProperties' smart constructor.
+data BandingProperties = BandingProperties'
+    { _bpSecondBandColor :: !(Maybe Color)
+    , _bpHeaderColor     :: !(Maybe Color)
+    , _bpFooterColor     :: !(Maybe Color)
+    , _bpFirstBandColor  :: !(Maybe Color)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BandingProperties' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bpSecondBandColor'
+--
+-- * 'bpHeaderColor'
+--
+-- * 'bpFooterColor'
+--
+-- * 'bpFirstBandColor'
+bandingProperties
+    :: BandingProperties
+bandingProperties =
+    BandingProperties'
+    { _bpSecondBandColor = Nothing
+    , _bpHeaderColor = Nothing
+    , _bpFooterColor = Nothing
+    , _bpFirstBandColor = Nothing
+    }
+
+-- | The second color that is alternating. (Required)
+bpSecondBandColor :: Lens' BandingProperties (Maybe Color)
+bpSecondBandColor
+  = lens _bpSecondBandColor
+      (\ s a -> s{_bpSecondBandColor = a})
+
+-- | The color of the first row or column. If this field is set, the first
+-- row or column will be filled with this color and the colors will
+-- alternate between first_band_color and second_band_color starting from
+-- the second row or column. Otherwise, the first row or column will be
+-- filled with first_band_color and the colors will proceed to alternate as
+-- they normally would.
+bpHeaderColor :: Lens' BandingProperties (Maybe Color)
+bpHeaderColor
+  = lens _bpHeaderColor
+      (\ s a -> s{_bpHeaderColor = a})
+
+-- | The color of the last row or column. If this field is not set, the last
+-- row or column will be filled with either first_band_color or
+-- second_band_color, depending on the color of the previous row or column.
+bpFooterColor :: Lens' BandingProperties (Maybe Color)
+bpFooterColor
+  = lens _bpFooterColor
+      (\ s a -> s{_bpFooterColor = a})
+
+-- | The first color that is alternating. (Required)
+bpFirstBandColor :: Lens' BandingProperties (Maybe Color)
+bpFirstBandColor
+  = lens _bpFirstBandColor
+      (\ s a -> s{_bpFirstBandColor = a})
+
+instance FromJSON BandingProperties where
+        parseJSON
+          = withObject "BandingProperties"
+              (\ o ->
+                 BandingProperties' <$>
+                   (o .:? "secondBandColor") <*> (o .:? "headerColor")
+                     <*> (o .:? "footerColor")
+                     <*> (o .:? "firstBandColor"))
+
+instance ToJSON BandingProperties where
+        toJSON BandingProperties'{..}
+          = object
+              (catMaybes
+                 [("secondBandColor" .=) <$> _bpSecondBandColor,
+                  ("headerColor" .=) <$> _bpHeaderColor,
+                  ("footerColor" .=) <$> _bpFooterColor,
+                  ("firstBandColor" .=) <$> _bpFirstBandColor])
+
+-- | Duplicates a particular filter view.
+--
+-- /See:/ 'duplicateFilterViewRequest' smart constructor.
+newtype DuplicateFilterViewRequest = DuplicateFilterViewRequest'
+    { _dFilterId :: Maybe (Textual Int32)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DuplicateFilterViewRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dFilterId'
+duplicateFilterViewRequest
+    :: DuplicateFilterViewRequest
+duplicateFilterViewRequest =
+    DuplicateFilterViewRequest'
+    { _dFilterId = Nothing
+    }
+
+-- | The ID of the filter being duplicated.
+dFilterId :: Lens' DuplicateFilterViewRequest (Maybe Int32)
+dFilterId
+  = lens _dFilterId (\ s a -> s{_dFilterId = a}) .
+      mapping _Coerce
+
+instance FromJSON DuplicateFilterViewRequest where
+        parseJSON
+          = withObject "DuplicateFilterViewRequest"
+              (\ o ->
+                 DuplicateFilterViewRequest' <$> (o .:? "filterId"))
+
+instance ToJSON DuplicateFilterViewRequest where
+        toJSON DuplicateFilterViewRequest'{..}
+          = object (catMaybes [("filterId" .=) <$> _dFilterId])
+
+-- | A single grouping (either row or column) in a pivot table.
+--
+-- /See:/ 'pivotGroup' smart constructor.
+data PivotGroup = PivotGroup'
+    { _pgRepeatHeadings     :: !(Maybe Bool)
+    , _pgValueMetadata      :: !(Maybe [PivotGroupValueMetadata])
+    , _pgSourceColumnOffSet :: !(Maybe (Textual Int32))
+    , _pgSortOrder          :: !(Maybe PivotGroupSortOrder)
+    , _pgShowTotals         :: !(Maybe Bool)
+    , _pgValueBucket        :: !(Maybe PivotGroupSortValueBucket)
+    , _pgLabel              :: !(Maybe Text)
+    , _pgGroupRule          :: !(Maybe PivotGroupRule)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PivotGroup' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pgRepeatHeadings'
+--
+-- * 'pgValueMetadata'
+--
+-- * 'pgSourceColumnOffSet'
+--
+-- * 'pgSortOrder'
+--
+-- * 'pgShowTotals'
+--
+-- * 'pgValueBucket'
+--
+-- * 'pgLabel'
+--
+-- * 'pgGroupRule'
+pivotGroup
+    :: PivotGroup
+pivotGroup =
+    PivotGroup'
+    { _pgRepeatHeadings = Nothing
+    , _pgValueMetadata = Nothing
+    , _pgSourceColumnOffSet = Nothing
+    , _pgSortOrder = Nothing
+    , _pgShowTotals = Nothing
+    , _pgValueBucket = Nothing
+    , _pgLabel = Nothing
+    , _pgGroupRule = Nothing
+    }
+
+-- | True if the headings in this pivot group should be repeated. This is
+-- only valid for row groupings and is ignored by columns. By default, we
+-- minimize repitition of headings by not showing higher level headings
+-- where they are the same. For example, even though the third row below
+-- corresponds to \"Q1 Mar\", \"Q1\" is not shown because it is redundant
+-- with previous rows. Setting repeat_headings to true would cause \"Q1\"
+-- to be repeated for \"Feb\" and \"Mar\". +--------------+ | Q1 | Jan | |
+-- | Feb | | | Mar | +--------+-----+ | Q1 Total | +--------------+
+pgRepeatHeadings :: Lens' PivotGroup (Maybe Bool)
+pgRepeatHeadings
+  = lens _pgRepeatHeadings
+      (\ s a -> s{_pgRepeatHeadings = a})
+
+-- | Metadata about values in the grouping.
+pgValueMetadata :: Lens' PivotGroup [PivotGroupValueMetadata]
+pgValueMetadata
+  = lens _pgValueMetadata
+      (\ s a -> s{_pgValueMetadata = a})
+      . _Default
+      . _Coerce
+
+-- | The column offset of the source range that this grouping is based on.
+-- For example, if the source was \`C10:E15\`, a \`sourceColumnOffset\` of
+-- \`0\` means this group refers to column \`C\`, whereas the offset \`1\`
+-- would refer to column \`D\`.
+pgSourceColumnOffSet :: Lens' PivotGroup (Maybe Int32)
+pgSourceColumnOffSet
+  = lens _pgSourceColumnOffSet
+      (\ s a -> s{_pgSourceColumnOffSet = a})
+      . mapping _Coerce
+
+-- | The order the values in this group should be sorted.
+pgSortOrder :: Lens' PivotGroup (Maybe PivotGroupSortOrder)
+pgSortOrder
+  = lens _pgSortOrder (\ s a -> s{_pgSortOrder = a})
+
+-- | True if the pivot table should include the totals for this grouping.
+pgShowTotals :: Lens' PivotGroup (Maybe Bool)
+pgShowTotals
+  = lens _pgShowTotals (\ s a -> s{_pgShowTotals = a})
+
+-- | The bucket of the opposite pivot group to sort by. If not specified,
+-- sorting is alphabetical by this group\'s values.
+pgValueBucket :: Lens' PivotGroup (Maybe PivotGroupSortValueBucket)
+pgValueBucket
+  = lens _pgValueBucket
+      (\ s a -> s{_pgValueBucket = a})
+
+-- | The labels to use for the row\/column groups which can be customized.
+-- For example, in the following pivot table, the row label is \`Region\`
+-- (which could be renamed to \`State\`) and the column label is
+-- \`Product\` (which could be renamed \`Item\`). Pivot tables created
+-- before December 2017 do not have header labels. If you\'d like to add
+-- header labels to an existing pivot table, please delete the existing
+-- pivot table and then create a new pivot table with same parameters.
+-- +--------------+---------+-------+ | SUM of Units | Product | | | Region
+-- | Pen | Paper | +--------------+---------+-------+ | New York | 345 | 98
+-- | | Oregon | 234 | 123 | | Tennessee | 531 | 415 |
+-- +--------------+---------+-------+ | Grand Total | 1110 | 636 |
+-- +--------------+---------+-------+
+pgLabel :: Lens' PivotGroup (Maybe Text)
+pgLabel = lens _pgLabel (\ s a -> s{_pgLabel = a})
+
+-- | The group rule to apply to this row\/column group.
+pgGroupRule :: Lens' PivotGroup (Maybe PivotGroupRule)
+pgGroupRule
+  = lens _pgGroupRule (\ s a -> s{_pgGroupRule = a})
+
+instance FromJSON PivotGroup where
+        parseJSON
+          = withObject "PivotGroup"
+              (\ o ->
+                 PivotGroup' <$>
+                   (o .:? "repeatHeadings") <*>
+                     (o .:? "valueMetadata" .!= mempty)
+                     <*> (o .:? "sourceColumnOffset")
+                     <*> (o .:? "sortOrder")
+                     <*> (o .:? "showTotals")
+                     <*> (o .:? "valueBucket")
+                     <*> (o .:? "label")
+                     <*> (o .:? "groupRule"))
+
+instance ToJSON PivotGroup where
+        toJSON PivotGroup'{..}
+          = object
+              (catMaybes
+                 [("repeatHeadings" .=) <$> _pgRepeatHeadings,
+                  ("valueMetadata" .=) <$> _pgValueMetadata,
+                  ("sourceColumnOffset" .=) <$> _pgSourceColumnOffSet,
+                  ("sortOrder" .=) <$> _pgSortOrder,
+                  ("showTotals" .=) <$> _pgShowTotals,
+                  ("valueBucket" .=) <$> _pgValueBucket,
+                  ("label" .=) <$> _pgLabel,
+                  ("groupRule" .=) <$> _pgGroupRule])
+
+-- | The result of adding a banded range.
+--
+-- /See:/ 'addBandingResponse' smart constructor.
+newtype AddBandingResponse = AddBandingResponse'
+    { _aBandedRange :: Maybe BandedRange
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AddBandingResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aBandedRange'
+addBandingResponse
+    :: AddBandingResponse
+addBandingResponse =
+    AddBandingResponse'
+    { _aBandedRange = Nothing
+    }
+
+-- | The banded range that was added.
+aBandedRange :: Lens' AddBandingResponse (Maybe BandedRange)
+aBandedRange
+  = lens _aBandedRange (\ s a -> s{_aBandedRange = a})
+
+instance FromJSON AddBandingResponse where
+        parseJSON
+          = withObject "AddBandingResponse"
+              (\ o ->
+                 AddBandingResponse' <$> (o .:? "bandedRange"))
+
+instance ToJSON AddBandingResponse where
+        toJSON AddBandingResponse'{..}
+          = object
+              (catMaybes [("bandedRange" .=) <$> _aBandedRange])
+
+-- | An </chart/interactive/docs/gallery/orgchart org chart>. Org charts
+-- require a unique set of labels in labels and may optionally include
+-- parent_labels and tooltips. parent_labels contain, for each node, the
+-- label identifying the parent node. tooltips contain, for each node, an
+-- optional tooltip. For example, to describe an OrgChart with Alice as the
+-- CEO, Bob as the President (reporting to Alice) and Cathy as VP of Sales
+-- (also reporting to Alice), have labels contain \"Alice\", \"Bob\",
+-- \"Cathy\", parent_labels contain \"\", \"Alice\", \"Alice\" and tooltips
+-- contain \"CEO\", \"President\", \"VP Sales\".
+--
+-- /See:/ 'orgChartSpec' smart constructor.
+data OrgChartSpec = OrgChartSpec'
+    { _ocsNodeColor         :: !(Maybe Color)
+    , _ocsNodeSize          :: !(Maybe OrgChartSpecNodeSize)
+    , _ocsTooltips          :: !(Maybe ChartData)
+    , _ocsSelectedNodeColor :: !(Maybe Color)
+    , _ocsLabels            :: !(Maybe ChartData)
+    , _ocsParentLabels      :: !(Maybe ChartData)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'OrgChartSpec' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ocsNodeColor'
+--
+-- * 'ocsNodeSize'
+--
+-- * 'ocsTooltips'
+--
+-- * 'ocsSelectedNodeColor'
+--
+-- * 'ocsLabels'
+--
+-- * 'ocsParentLabels'
+orgChartSpec
+    :: OrgChartSpec
+orgChartSpec =
+    OrgChartSpec'
+    { _ocsNodeColor = Nothing
+    , _ocsNodeSize = Nothing
+    , _ocsTooltips = Nothing
+    , _ocsSelectedNodeColor = Nothing
+    , _ocsLabels = Nothing
+    , _ocsParentLabels = Nothing
+    }
+
+-- | The color of the org chart nodes.
+ocsNodeColor :: Lens' OrgChartSpec (Maybe Color)
+ocsNodeColor
+  = lens _ocsNodeColor (\ s a -> s{_ocsNodeColor = a})
+
+-- | The size of the org chart nodes.
+ocsNodeSize :: Lens' OrgChartSpec (Maybe OrgChartSpecNodeSize)
+ocsNodeSize
+  = lens _ocsNodeSize (\ s a -> s{_ocsNodeSize = a})
+
+-- | The data containing the tooltip for the corresponding node. A blank
+-- value results in no tooltip being displayed for the node. This field is
+-- optional.
+ocsTooltips :: Lens' OrgChartSpec (Maybe ChartData)
+ocsTooltips
+  = lens _ocsTooltips (\ s a -> s{_ocsTooltips = a})
+
+-- | The color of the selected org chart nodes.
+ocsSelectedNodeColor :: Lens' OrgChartSpec (Maybe Color)
+ocsSelectedNodeColor
+  = lens _ocsSelectedNodeColor
+      (\ s a -> s{_ocsSelectedNodeColor = a})
+
+-- | The data containing the labels for all the nodes in the chart. Labels
+-- must be unique.
+ocsLabels :: Lens' OrgChartSpec (Maybe ChartData)
+ocsLabels
+  = lens _ocsLabels (\ s a -> s{_ocsLabels = a})
+
+-- | The data containing the label of the parent for the corresponding node.
+-- A blank value indicates that the node has no parent and is a top-level
+-- node. This field is optional.
+ocsParentLabels :: Lens' OrgChartSpec (Maybe ChartData)
+ocsParentLabels
+  = lens _ocsParentLabels
+      (\ s a -> s{_ocsParentLabels = a})
+
+instance FromJSON OrgChartSpec where
+        parseJSON
+          = withObject "OrgChartSpec"
+              (\ o ->
+                 OrgChartSpec' <$>
+                   (o .:? "nodeColor") <*> (o .:? "nodeSize") <*>
+                     (o .:? "tooltips")
+                     <*> (o .:? "selectedNodeColor")
+                     <*> (o .:? "labels")
+                     <*> (o .:? "parentLabels"))
+
+instance ToJSON OrgChartSpec where
+        toJSON OrgChartSpec'{..}
+          = object
+              (catMaybes
+                 [("nodeColor" .=) <$> _ocsNodeColor,
+                  ("nodeSize" .=) <$> _ocsNodeSize,
+                  ("tooltips" .=) <$> _ocsTooltips,
+                  ("selectedNodeColor" .=) <$> _ocsSelectedNodeColor,
+                  ("labels" .=) <$> _ocsLabels,
+                  ("parentLabels" .=) <$> _ocsParentLabels])
+
+-- | Randomizes the order of the rows in a range.
+--
+-- /See:/ 'randomizeRangeRequest' smart constructor.
+newtype RandomizeRangeRequest = RandomizeRangeRequest'
+    { _rrrRange :: Maybe GridRange
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RandomizeRangeRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rrrRange'
+randomizeRangeRequest
+    :: RandomizeRangeRequest
+randomizeRangeRequest =
+    RandomizeRangeRequest'
+    { _rrrRange = Nothing
+    }
+
+-- | The range to randomize.
+rrrRange :: Lens' RandomizeRangeRequest (Maybe GridRange)
+rrrRange = lens _rrrRange (\ s a -> s{_rrrRange = a})
+
+instance FromJSON RandomizeRangeRequest where
+        parseJSON
+          = withObject "RandomizeRangeRequest"
+              (\ o -> RandomizeRangeRequest' <$> (o .:? "range"))
+
+instance ToJSON RandomizeRangeRequest where
+        toJSON RandomizeRangeRequest'{..}
+          = object (catMaybes [("range" .=) <$> _rrrRange])
+
+-- | A histogram series containing the series color and data.
+--
+-- /See:/ 'histogramSeries' smart constructor.
+data HistogramSeries = HistogramSeries'
+    { _hsBarColor :: !(Maybe Color)
+    , _hsData     :: !(Maybe ChartData)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'HistogramSeries' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'hsBarColor'
+--
+-- * 'hsData'
+histogramSeries
+    :: HistogramSeries
+histogramSeries =
+    HistogramSeries'
+    { _hsBarColor = Nothing
+    , _hsData = Nothing
+    }
+
+-- | The color of the column representing this series in each bucket. This
+-- field is optional.
+hsBarColor :: Lens' HistogramSeries (Maybe Color)
+hsBarColor
+  = lens _hsBarColor (\ s a -> s{_hsBarColor = a})
+
+-- | The data for this histogram series.
+hsData :: Lens' HistogramSeries (Maybe ChartData)
+hsData = lens _hsData (\ s a -> s{_hsData = a})
+
+instance FromJSON HistogramSeries where
+        parseJSON
+          = withObject "HistogramSeries"
+              (\ o ->
+                 HistogramSeries' <$>
+                   (o .:? "barColor") <*> (o .:? "data"))
+
+instance ToJSON HistogramSeries where
+        toJSON HistogramSeries'{..}
+          = object
+              (catMaybes
+                 [("barColor" .=) <$> _hsBarColor,
+                  ("data" .=) <$> _hsData])
+
+-- | A </chart/interactive/docs/gallery/treemap Treemap chart>.
+--
+-- /See:/ 'treemapChartSpec' smart constructor.
+data TreemapChartSpec = TreemapChartSpec'
+    { _tcsHintedLevels :: !(Maybe (Textual Int32))
+    , _tcsMaxValue     :: !(Maybe (Textual Double))
+    , _tcsHeaderColor  :: !(Maybe Color)
+    , _tcsSizeData     :: !(Maybe ChartData)
+    , _tcsColorData    :: !(Maybe ChartData)
+    , _tcsHideTooltips :: !(Maybe Bool)
+    , _tcsLevels       :: !(Maybe (Textual Int32))
+    , _tcsLabels       :: !(Maybe ChartData)
+    , _tcsColorScale   :: !(Maybe TreemapChartColorScale)
+    , _tcsTextFormat   :: !(Maybe TextFormat)
+    , _tcsMinValue     :: !(Maybe (Textual Double))
+    , _tcsParentLabels :: !(Maybe ChartData)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TreemapChartSpec' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tcsHintedLevels'
+--
+-- * 'tcsMaxValue'
+--
+-- * 'tcsHeaderColor'
+--
+-- * 'tcsSizeData'
+--
+-- * 'tcsColorData'
+--
+-- * 'tcsHideTooltips'
+--
+-- * 'tcsLevels'
+--
+-- * 'tcsLabels'
+--
+-- * 'tcsColorScale'
+--
+-- * 'tcsTextFormat'
+--
+-- * 'tcsMinValue'
+--
+-- * 'tcsParentLabels'
+treemapChartSpec
+    :: TreemapChartSpec
+treemapChartSpec =
+    TreemapChartSpec'
+    { _tcsHintedLevels = Nothing
+    , _tcsMaxValue = Nothing
+    , _tcsHeaderColor = Nothing
+    , _tcsSizeData = Nothing
+    , _tcsColorData = Nothing
+    , _tcsHideTooltips = Nothing
+    , _tcsLevels = Nothing
+    , _tcsLabels = Nothing
+    , _tcsColorScale = Nothing
+    , _tcsTextFormat = Nothing
+    , _tcsMinValue = Nothing
+    , _tcsParentLabels = Nothing
+    }
+
+-- | The number of additional data levels beyond the labeled levels to be
+-- shown on the treemap chart. These levels are not interactive and are
+-- shown without their labels. Defaults to 0 if not specified.
+tcsHintedLevels :: Lens' TreemapChartSpec (Maybe Int32)
+tcsHintedLevels
+  = lens _tcsHintedLevels
+      (\ s a -> s{_tcsHintedLevels = a})
+      . mapping _Coerce
+
+-- | The maximum possible data value. Cells with values greater than this
+-- will have the same color as cells with this value. If not specified,
+-- defaults to the actual maximum value from color_data, or the maximum
+-- value from size_data if color_data is not specified.
+tcsMaxValue :: Lens' TreemapChartSpec (Maybe Double)
+tcsMaxValue
+  = lens _tcsMaxValue (\ s a -> s{_tcsMaxValue = a}) .
+      mapping _Coerce
+
+-- | The background color for header cells.
+tcsHeaderColor :: Lens' TreemapChartSpec (Maybe Color)
+tcsHeaderColor
+  = lens _tcsHeaderColor
+      (\ s a -> s{_tcsHeaderColor = a})
+
+-- | The data that determines the size of each treemap data cell. This data
+-- is expected to be numeric. The cells corresponding to non-numeric or
+-- missing data will not be rendered. If color_data is not specified, this
+-- data is used to determine data cell background colors as well.
+tcsSizeData :: Lens' TreemapChartSpec (Maybe ChartData)
+tcsSizeData
+  = lens _tcsSizeData (\ s a -> s{_tcsSizeData = a})
+
+-- | The data that determines the background color of each treemap data cell.
+-- This field is optional. If not specified, size_data is used to determine
+-- background colors. If specified, the data is expected to be numeric.
+-- color_scale will determine how the values in this data map to data cell
+-- background colors.
+tcsColorData :: Lens' TreemapChartSpec (Maybe ChartData)
+tcsColorData
+  = lens _tcsColorData (\ s a -> s{_tcsColorData = a})
+
+-- | True to hide tooltips.
+tcsHideTooltips :: Lens' TreemapChartSpec (Maybe Bool)
+tcsHideTooltips
+  = lens _tcsHideTooltips
+      (\ s a -> s{_tcsHideTooltips = a})
+
+-- | The number of data levels to show on the treemap chart. These levels are
+-- interactive and are shown with their labels. Defaults to 2 if not
+-- specified.
+tcsLevels :: Lens' TreemapChartSpec (Maybe Int32)
+tcsLevels
+  = lens _tcsLevels (\ s a -> s{_tcsLevels = a}) .
+      mapping _Coerce
+
+-- | The data that contains the treemap cell labels.
+tcsLabels :: Lens' TreemapChartSpec (Maybe ChartData)
+tcsLabels
+  = lens _tcsLabels (\ s a -> s{_tcsLabels = a})
+
+-- | The color scale for data cells in the treemap chart. Data cells are
+-- assigned colors based on their color values. These color values come
+-- from color_data, or from size_data if color_data is not specified. Cells
+-- with color values less than or equal to min_value will have
+-- minValueColor as their background color. Cells with color values greater
+-- than or equal to max_value will have maxValueColor as their background
+-- color. Cells with color values between min_value and max_value will have
+-- background colors on a gradient between minValueColor and maxValueColor,
+-- the midpoint of the gradient being midValueColor. Cells with missing or
+-- non-numeric color values will have noDataColor as their background
+-- color.
+tcsColorScale :: Lens' TreemapChartSpec (Maybe TreemapChartColorScale)
+tcsColorScale
+  = lens _tcsColorScale
+      (\ s a -> s{_tcsColorScale = a})
+
+-- | The text format for all labels on the chart.
+tcsTextFormat :: Lens' TreemapChartSpec (Maybe TextFormat)
+tcsTextFormat
+  = lens _tcsTextFormat
+      (\ s a -> s{_tcsTextFormat = a})
+
+-- | The minimum possible data value. Cells with values less than this will
+-- have the same color as cells with this value. If not specified, defaults
+-- to the actual minimum value from color_data, or the minimum value from
+-- size_data if color_data is not specified.
+tcsMinValue :: Lens' TreemapChartSpec (Maybe Double)
+tcsMinValue
+  = lens _tcsMinValue (\ s a -> s{_tcsMinValue = a}) .
+      mapping _Coerce
+
+-- | The data the contains the treemap cells\' parent labels.
+tcsParentLabels :: Lens' TreemapChartSpec (Maybe ChartData)
+tcsParentLabels
+  = lens _tcsParentLabels
+      (\ s a -> s{_tcsParentLabels = a})
+
+instance FromJSON TreemapChartSpec where
+        parseJSON
+          = withObject "TreemapChartSpec"
+              (\ o ->
+                 TreemapChartSpec' <$>
+                   (o .:? "hintedLevels") <*> (o .:? "maxValue") <*>
+                     (o .:? "headerColor")
+                     <*> (o .:? "sizeData")
+                     <*> (o .:? "colorData")
+                     <*> (o .:? "hideTooltips")
+                     <*> (o .:? "levels")
+                     <*> (o .:? "labels")
+                     <*> (o .:? "colorScale")
+                     <*> (o .:? "textFormat")
+                     <*> (o .:? "minValue")
+                     <*> (o .:? "parentLabels"))
+
+instance ToJSON TreemapChartSpec where
+        toJSON TreemapChartSpec'{..}
+          = object
+              (catMaybes
+                 [("hintedLevels" .=) <$> _tcsHintedLevels,
+                  ("maxValue" .=) <$> _tcsMaxValue,
+                  ("headerColor" .=) <$> _tcsHeaderColor,
+                  ("sizeData" .=) <$> _tcsSizeData,
+                  ("colorData" .=) <$> _tcsColorData,
+                  ("hideTooltips" .=) <$> _tcsHideTooltips,
+                  ("levels" .=) <$> _tcsLevels,
+                  ("labels" .=) <$> _tcsLabels,
+                  ("colorScale" .=) <$> _tcsColorScale,
+                  ("textFormat" .=) <$> _tcsTextFormat,
+                  ("minValue" .=) <$> _tcsMinValue,
+                  ("parentLabels" .=) <$> _tcsParentLabels])
+
+-- | A rule describing a conditional format.
+--
+-- /See:/ 'conditionalFormatRule' smart constructor.
+data ConditionalFormatRule = ConditionalFormatRule'
+    { _cfrBooleanRule  :: !(Maybe BooleanRule)
+    , _cfrGradientRule :: !(Maybe GradientRule)
+    , _cfrRanges       :: !(Maybe [GridRange])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ConditionalFormatRule' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cfrBooleanRule'
+--
+-- * 'cfrGradientRule'
+--
+-- * 'cfrRanges'
+conditionalFormatRule
+    :: ConditionalFormatRule
+conditionalFormatRule =
+    ConditionalFormatRule'
+    { _cfrBooleanRule = Nothing
+    , _cfrGradientRule = Nothing
+    , _cfrRanges = Nothing
+    }
+
+-- | The formatting is either \"on\" or \"off\" according to the rule.
+cfrBooleanRule :: Lens' ConditionalFormatRule (Maybe BooleanRule)
+cfrBooleanRule
+  = lens _cfrBooleanRule
+      (\ s a -> s{_cfrBooleanRule = a})
+
+-- | The formatting will vary based on the gradients in the rule.
+cfrGradientRule :: Lens' ConditionalFormatRule (Maybe GradientRule)
+cfrGradientRule
+  = lens _cfrGradientRule
+      (\ s a -> s{_cfrGradientRule = a})
+
+-- | The ranges that are formatted if the condition is true. All the ranges
+-- must be on the same grid.
+cfrRanges :: Lens' ConditionalFormatRule [GridRange]
+cfrRanges
+  = lens _cfrRanges (\ s a -> s{_cfrRanges = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON ConditionalFormatRule where
+        parseJSON
+          = withObject "ConditionalFormatRule"
+              (\ o ->
+                 ConditionalFormatRule' <$>
+                   (o .:? "booleanRule") <*> (o .:? "gradientRule") <*>
+                     (o .:? "ranges" .!= mempty))
+
+instance ToJSON ConditionalFormatRule where
+        toJSON ConditionalFormatRule'{..}
+          = object
+              (catMaybes
+                 [("booleanRule" .=) <$> _cfrBooleanRule,
+                  ("gradientRule" .=) <$> _cfrGradientRule,
+                  ("ranges" .=) <$> _cfrRanges])
+
+-- | The specification for a basic chart. See BasicChartType for the list of
+-- charts this supports.
+--
+-- /See:/ 'basicChartSpec' smart constructor.
+data BasicChartSpec = BasicChartSpec'
+    { _basHeaderCount      :: !(Maybe (Textual Int32))
+    , _basLineSmoothing    :: !(Maybe Bool)
+    , _basInterpolateNulls :: !(Maybe Bool)
+    , _basStackedType      :: !(Maybe BasicChartSpecStackedType)
+    , _basLegendPosition   :: !(Maybe BasicChartSpecLegendPosition)
+    , _basSeries           :: !(Maybe [BasicChartSeries])
+    , _basCompareMode      :: !(Maybe BasicChartSpecCompareMode)
+    , _basChartType        :: !(Maybe BasicChartSpecChartType)
+    , _basThreeDimensional :: !(Maybe Bool)
+    , _basDomains          :: !(Maybe [BasicChartDomain])
+    , _basAxis             :: !(Maybe [BasicChartAxis])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BasicChartSpec' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'basHeaderCount'
+--
+-- * 'basLineSmoothing'
+--
+-- * 'basInterpolateNulls'
+--
+-- * 'basStackedType'
+--
+-- * 'basLegendPosition'
+--
+-- * 'basSeries'
+--
+-- * 'basCompareMode'
+--
+-- * 'basChartType'
+--
+-- * 'basThreeDimensional'
+--
+-- * 'basDomains'
+--
+-- * 'basAxis'
+basicChartSpec
+    :: BasicChartSpec
+basicChartSpec =
+    BasicChartSpec'
+    { _basHeaderCount = Nothing
+    , _basLineSmoothing = Nothing
+    , _basInterpolateNulls = Nothing
+    , _basStackedType = Nothing
+    , _basLegendPosition = Nothing
+    , _basSeries = Nothing
+    , _basCompareMode = Nothing
+    , _basChartType = Nothing
+    , _basThreeDimensional = Nothing
+    , _basDomains = Nothing
+    , _basAxis = Nothing
+    }
+
+-- | The number of rows or columns in the data that are \"headers\". If not
+-- set, Google Sheets will guess how many rows are headers based on the
+-- data. (Note that BasicChartAxis.title may override the axis title
+-- inferred from the header values.)
+basHeaderCount :: Lens' BasicChartSpec (Maybe Int32)
+basHeaderCount
+  = lens _basHeaderCount
+      (\ s a -> s{_basHeaderCount = a})
+      . mapping _Coerce
+
+-- | Gets whether all lines should be rendered smooth or straight by default.
+-- Applies to Line charts.
+basLineSmoothing :: Lens' BasicChartSpec (Maybe Bool)
+basLineSmoothing
+  = lens _basLineSmoothing
+      (\ s a -> s{_basLineSmoothing = a})
+
+-- | If some values in a series are missing, gaps may appear in the chart
+-- (e.g, segments of lines in a line chart will be missing). To eliminate
+-- these gaps set this to true. Applies to Line, Area, and Combo charts.
+basInterpolateNulls :: Lens' BasicChartSpec (Maybe Bool)
+basInterpolateNulls
+  = lens _basInterpolateNulls
+      (\ s a -> s{_basInterpolateNulls = a})
+
+-- | The stacked type for charts that support vertical stacking. Applies to
+-- Area, Bar, Column, Combo, and Stepped Area charts.
+basStackedType :: Lens' BasicChartSpec (Maybe BasicChartSpecStackedType)
+basStackedType
+  = lens _basStackedType
+      (\ s a -> s{_basStackedType = a})
+
+-- | The position of the chart legend.
+basLegendPosition :: Lens' BasicChartSpec (Maybe BasicChartSpecLegendPosition)
+basLegendPosition
+  = lens _basLegendPosition
+      (\ s a -> s{_basLegendPosition = a})
+
+-- | The data this chart is visualizing.
+basSeries :: Lens' BasicChartSpec [BasicChartSeries]
+basSeries
+  = lens _basSeries (\ s a -> s{_basSeries = a}) .
+      _Default
+      . _Coerce
+
+-- | The behavior of tooltips and data highlighting when hovering on data and
+-- chart area.
+basCompareMode :: Lens' BasicChartSpec (Maybe BasicChartSpecCompareMode)
+basCompareMode
+  = lens _basCompareMode
+      (\ s a -> s{_basCompareMode = a})
+
+-- | The type of the chart.
+basChartType :: Lens' BasicChartSpec (Maybe BasicChartSpecChartType)
+basChartType
+  = lens _basChartType (\ s a -> s{_basChartType = a})
+
+-- | True to make the chart 3D. Applies to Bar and Column charts.
+basThreeDimensional :: Lens' BasicChartSpec (Maybe Bool)
+basThreeDimensional
+  = lens _basThreeDimensional
+      (\ s a -> s{_basThreeDimensional = a})
+
+-- | The domain of data this is charting. Only a single domain is supported.
+basDomains :: Lens' BasicChartSpec [BasicChartDomain]
+basDomains
+  = lens _basDomains (\ s a -> s{_basDomains = a}) .
+      _Default
+      . _Coerce
+
+-- | The axis on the chart.
+basAxis :: Lens' BasicChartSpec [BasicChartAxis]
+basAxis
+  = lens _basAxis (\ s a -> s{_basAxis = a}) . _Default
+      . _Coerce
+
+instance FromJSON BasicChartSpec where
+        parseJSON
+          = withObject "BasicChartSpec"
+              (\ o ->
+                 BasicChartSpec' <$>
+                   (o .:? "headerCount") <*> (o .:? "lineSmoothing") <*>
+                     (o .:? "interpolateNulls")
+                     <*> (o .:? "stackedType")
+                     <*> (o .:? "legendPosition")
+                     <*> (o .:? "series" .!= mempty)
+                     <*> (o .:? "compareMode")
+                     <*> (o .:? "chartType")
+                     <*> (o .:? "threeDimensional")
+                     <*> (o .:? "domains" .!= mempty)
+                     <*> (o .:? "axis" .!= mempty))
+
+instance ToJSON BasicChartSpec where
+        toJSON BasicChartSpec'{..}
+          = object
+              (catMaybes
+                 [("headerCount" .=) <$> _basHeaderCount,
+                  ("lineSmoothing" .=) <$> _basLineSmoothing,
+                  ("interpolateNulls" .=) <$> _basInterpolateNulls,
+                  ("stackedType" .=) <$> _basStackedType,
+                  ("legendPosition" .=) <$> _basLegendPosition,
+                  ("series" .=) <$> _basSeries,
+                  ("compareMode" .=) <$> _basCompareMode,
+                  ("chartType" .=) <$> _basChartType,
+                  ("threeDimensional" .=) <$> _basThreeDimensional,
+                  ("domains" .=) <$> _basDomains,
+                  ("axis" .=) <$> _basAxis])
+
+-- | A group name and a list of items from the source data that should be
+-- placed in the group with this name.
+--
+-- /See:/ 'manualRuleGroup' smart constructor.
+data ManualRuleGroup = ManualRuleGroup'
+    { _mrgItems     :: !(Maybe [ExtendedValue])
+    , _mrgGroupName :: !(Maybe ExtendedValue)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ManualRuleGroup' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mrgItems'
+--
+-- * 'mrgGroupName'
+manualRuleGroup
+    :: ManualRuleGroup
+manualRuleGroup =
+    ManualRuleGroup'
+    { _mrgItems = Nothing
+    , _mrgGroupName = Nothing
+    }
+
+-- | The items in the source data that should be placed into this group. Each
+-- item may be a string, number, or boolean. Items may appear in at most
+-- one group within a given ManualRule. Items that do not appear in any
+-- group will appear on their own.
+mrgItems :: Lens' ManualRuleGroup [ExtendedValue]
+mrgItems
+  = lens _mrgItems (\ s a -> s{_mrgItems = a}) .
+      _Default
+      . _Coerce
+
+-- | The group name, which must be a string. Each group in a given ManualRule
+-- must have a unique group name.
+mrgGroupName :: Lens' ManualRuleGroup (Maybe ExtendedValue)
+mrgGroupName
+  = lens _mrgGroupName (\ s a -> s{_mrgGroupName = a})
+
+instance FromJSON ManualRuleGroup where
+        parseJSON
+          = withObject "ManualRuleGroup"
+              (\ o ->
+                 ManualRuleGroup' <$>
+                   (o .:? "items" .!= mempty) <*> (o .:? "groupName"))
+
+instance ToJSON ManualRuleGroup where
+        toJSON ManualRuleGroup'{..}
+          = object
+              (catMaybes
+                 [("items" .=) <$> _mrgItems,
+                  ("groupName" .=) <$> _mrgGroupName])
+
+-- | Adds a new conditional format rule at the given index. All subsequent
+-- rules\' indexes are incremented.
+--
+-- /See:/ 'addConditionalFormatRuleRequest' smart constructor.
+data AddConditionalFormatRuleRequest = AddConditionalFormatRuleRequest'
+    { _acfrrRule  :: !(Maybe ConditionalFormatRule)
+    , _acfrrIndex :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AddConditionalFormatRuleRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'acfrrRule'
+--
+-- * 'acfrrIndex'
+addConditionalFormatRuleRequest
+    :: AddConditionalFormatRuleRequest
+addConditionalFormatRuleRequest =
+    AddConditionalFormatRuleRequest'
+    { _acfrrRule = Nothing
+    , _acfrrIndex = Nothing
+    }
+
+-- | The rule to add.
+acfrrRule :: Lens' AddConditionalFormatRuleRequest (Maybe ConditionalFormatRule)
+acfrrRule
+  = lens _acfrrRule (\ s a -> s{_acfrrRule = a})
+
+-- | The zero-based index where the rule should be inserted.
+acfrrIndex :: Lens' AddConditionalFormatRuleRequest (Maybe Int32)
+acfrrIndex
+  = lens _acfrrIndex (\ s a -> s{_acfrrIndex = a}) .
+      mapping _Coerce
+
+instance FromJSON AddConditionalFormatRuleRequest
+         where
+        parseJSON
+          = withObject "AddConditionalFormatRuleRequest"
+              (\ o ->
+                 AddConditionalFormatRuleRequest' <$>
+                   (o .:? "rule") <*> (o .:? "index"))
+
+instance ToJSON AddConditionalFormatRuleRequest where
+        toJSON AddConditionalFormatRuleRequest'{..}
+          = object
+              (catMaybes
+                 [("rule" .=) <$> _acfrrRule,
+                  ("index" .=) <$> _acfrrIndex])
+
+-- | Developer metadata associated with a location or object in a
+-- spreadsheet. Developer metadata may be used to associate arbitrary data
+-- with various parts of a spreadsheet and will remain associated at those
+-- locations as they move around and the spreadsheet is edited. For
+-- example, if developer metadata is associated with row 5 and another row
+-- is then subsequently inserted above row 5, that original metadata will
+-- still be associated with the row it was first associated with (what is
+-- now row 6). If the associated object is deleted its metadata is deleted
+-- too.
+--
+-- /See:/ 'developerMetadata' smart constructor.
+data DeveloperMetadata = DeveloperMetadata'
+    { _dmLocation      :: !(Maybe DeveloperMetadataLocation)
+    , _dmMetadataId    :: !(Maybe (Textual Int32))
+    , _dmVisibility    :: !(Maybe DeveloperMetadataVisibility)
+    , _dmMetadataKey   :: !(Maybe Text)
+    , _dmMetadataValue :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeveloperMetadata' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dmLocation'
+--
+-- * 'dmMetadataId'
+--
+-- * 'dmVisibility'
+--
+-- * 'dmMetadataKey'
+--
+-- * 'dmMetadataValue'
+developerMetadata
+    :: DeveloperMetadata
+developerMetadata =
+    DeveloperMetadata'
+    { _dmLocation = Nothing
+    , _dmMetadataId = Nothing
+    , _dmVisibility = Nothing
+    , _dmMetadataKey = Nothing
+    , _dmMetadataValue = Nothing
+    }
+
+-- | The location where the metadata is associated.
+dmLocation :: Lens' DeveloperMetadata (Maybe DeveloperMetadataLocation)
+dmLocation
+  = lens _dmLocation (\ s a -> s{_dmLocation = a})
+
+-- | The spreadsheet-scoped unique ID that identifies the metadata. IDs may
+-- be specified when metadata is created, otherwise one will be randomly
+-- generated and assigned. Must be positive.
+dmMetadataId :: Lens' DeveloperMetadata (Maybe Int32)
+dmMetadataId
+  = lens _dmMetadataId (\ s a -> s{_dmMetadataId = a})
+      . mapping _Coerce
+
+-- | The metadata visibility. Developer metadata must always have a
+-- visibility specified.
+dmVisibility :: Lens' DeveloperMetadata (Maybe DeveloperMetadataVisibility)
+dmVisibility
+  = lens _dmVisibility (\ s a -> s{_dmVisibility = a})
+
+-- | The metadata key. There may be multiple metadata in a spreadsheet with
+-- the same key. Developer metadata must always have a key specified.
+dmMetadataKey :: Lens' DeveloperMetadata (Maybe Text)
+dmMetadataKey
+  = lens _dmMetadataKey
+      (\ s a -> s{_dmMetadataKey = a})
+
+-- | Data associated with the metadata\'s key.
+dmMetadataValue :: Lens' DeveloperMetadata (Maybe Text)
+dmMetadataValue
+  = lens _dmMetadataValue
+      (\ s a -> s{_dmMetadataValue = a})
+
+instance FromJSON DeveloperMetadata where
+        parseJSON
+          = withObject "DeveloperMetadata"
+              (\ o ->
+                 DeveloperMetadata' <$>
+                   (o .:? "location") <*> (o .:? "metadataId") <*>
+                     (o .:? "visibility")
+                     <*> (o .:? "metadataKey")
+                     <*> (o .:? "metadataValue"))
+
+instance ToJSON DeveloperMetadata where
+        toJSON DeveloperMetadata'{..}
+          = object
+              (catMaybes
+                 [("location" .=) <$> _dmLocation,
+                  ("metadataId" .=) <$> _dmMetadataId,
+                  ("visibility" .=) <$> _dmVisibility,
+                  ("metadataKey" .=) <$> _dmMetadataKey,
+                  ("metadataValue" .=) <$> _dmMetadataValue])
+
+-- | A color scale for a treemap chart.
+--
+-- /See:/ 'treemapChartColorScale' smart constructor.
+data TreemapChartColorScale = TreemapChartColorScale'
+    { _tccsMinValueColor :: !(Maybe Color)
+    , _tccsNoDataColor   :: !(Maybe Color)
+    , _tccsMaxValueColor :: !(Maybe Color)
+    , _tccsMidValueColor :: !(Maybe Color)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TreemapChartColorScale' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tccsMinValueColor'
+--
+-- * 'tccsNoDataColor'
+--
+-- * 'tccsMaxValueColor'
+--
+-- * 'tccsMidValueColor'
+treemapChartColorScale
+    :: TreemapChartColorScale
+treemapChartColorScale =
+    TreemapChartColorScale'
+    { _tccsMinValueColor = Nothing
+    , _tccsNoDataColor = Nothing
+    , _tccsMaxValueColor = Nothing
+    , _tccsMidValueColor = Nothing
+    }
+
+-- | The background color for cells with a color value less than or equal to
+-- minValue. Defaults to #dc3912 if not specified.
+tccsMinValueColor :: Lens' TreemapChartColorScale (Maybe Color)
+tccsMinValueColor
+  = lens _tccsMinValueColor
+      (\ s a -> s{_tccsMinValueColor = a})
+
+-- | The background color for cells that have no color data associated with
+-- them. Defaults to #000000 if not specified.
+tccsNoDataColor :: Lens' TreemapChartColorScale (Maybe Color)
+tccsNoDataColor
+  = lens _tccsNoDataColor
+      (\ s a -> s{_tccsNoDataColor = a})
+
+-- | The background color for cells with a color value greater than or equal
+-- to maxValue. Defaults to #109618 if not specified.
+tccsMaxValueColor :: Lens' TreemapChartColorScale (Maybe Color)
+tccsMaxValueColor
+  = lens _tccsMaxValueColor
+      (\ s a -> s{_tccsMaxValueColor = a})
+
+-- | The background color for cells with a color value at the midpoint
+-- between minValue and maxValue. Defaults to #efe6dc if not specified.
+tccsMidValueColor :: Lens' TreemapChartColorScale (Maybe Color)
+tccsMidValueColor
+  = lens _tccsMidValueColor
+      (\ s a -> s{_tccsMidValueColor = a})
+
+instance FromJSON TreemapChartColorScale where
+        parseJSON
+          = withObject "TreemapChartColorScale"
+              (\ o ->
+                 TreemapChartColorScale' <$>
+                   (o .:? "minValueColor") <*> (o .:? "noDataColor") <*>
+                     (o .:? "maxValueColor")
+                     <*> (o .:? "midValueColor"))
+
+instance ToJSON TreemapChartColorScale where
+        toJSON TreemapChartColorScale'{..}
+          = object
+              (catMaybes
+                 [("minValueColor" .=) <$> _tccsMinValueColor,
+                  ("noDataColor" .=) <$> _tccsNoDataColor,
+                  ("maxValueColor" .=) <$> _tccsMaxValueColor,
+                  ("midValueColor" .=) <$> _tccsMidValueColor])
+
+-- | The result of duplicating a sheet.
+--
+-- /See:/ 'duplicateSheetResponse' smart constructor.
+newtype DuplicateSheetResponse = DuplicateSheetResponse'
+    { _dsrProperties :: Maybe SheetProperties
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DuplicateSheetResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dsrProperties'
+duplicateSheetResponse
+    :: DuplicateSheetResponse
+duplicateSheetResponse =
+    DuplicateSheetResponse'
+    { _dsrProperties = Nothing
+    }
+
+-- | The properties of the duplicate sheet.
+dsrProperties :: Lens' DuplicateSheetResponse (Maybe SheetProperties)
+dsrProperties
+  = lens _dsrProperties
+      (\ s a -> s{_dsrProperties = a})
+
+instance FromJSON DuplicateSheetResponse where
+        parseJSON
+          = withObject "DuplicateSheetResponse"
+              (\ o ->
+                 DuplicateSheetResponse' <$> (o .:? "properties"))
+
+instance ToJSON DuplicateSheetResponse where
+        toJSON DuplicateSheetResponse'{..}
+          = object
+              (catMaybes [("properties" .=) <$> _dsrProperties])
+
+-- | The format of a run of text in a cell. Absent values indicate that the
+-- field isn\'t specified.
+--
+-- /See:/ 'textFormat' smart constructor.
+data TextFormat = TextFormat'
+    { _tfFontFamily      :: !(Maybe Text)
+    , _tfForegRoundColor :: !(Maybe Color)
+    , _tfFontSize        :: !(Maybe (Textual Int32))
+    , _tfUnderline       :: !(Maybe Bool)
+    , _tfItalic          :: !(Maybe Bool)
+    , _tfBold            :: !(Maybe Bool)
+    , _tfStrikethrough   :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TextFormat' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tfFontFamily'
+--
+-- * 'tfForegRoundColor'
+--
+-- * 'tfFontSize'
+--
+-- * 'tfUnderline'
+--
+-- * 'tfItalic'
+--
+-- * 'tfBold'
+--
+-- * 'tfStrikethrough'
+textFormat
+    :: TextFormat
+textFormat =
+    TextFormat'
+    { _tfFontFamily = Nothing
+    , _tfForegRoundColor = Nothing
+    , _tfFontSize = Nothing
+    , _tfUnderline = Nothing
+    , _tfItalic = Nothing
+    , _tfBold = Nothing
+    , _tfStrikethrough = Nothing
+    }
+
+-- | The font family.
+tfFontFamily :: Lens' TextFormat (Maybe Text)
+tfFontFamily
+  = lens _tfFontFamily (\ s a -> s{_tfFontFamily = a})
+
+-- | The foreground color of the text.
+tfForegRoundColor :: Lens' TextFormat (Maybe Color)
+tfForegRoundColor
+  = lens _tfForegRoundColor
+      (\ s a -> s{_tfForegRoundColor = a})
+
+-- | The size of the font.
+tfFontSize :: Lens' TextFormat (Maybe Int32)
+tfFontSize
+  = lens _tfFontSize (\ s a -> s{_tfFontSize = a}) .
+      mapping _Coerce
+
+-- | True if the text is underlined.
+tfUnderline :: Lens' TextFormat (Maybe Bool)
+tfUnderline
+  = lens _tfUnderline (\ s a -> s{_tfUnderline = a})
+
+-- | True if the text is italicized.
+tfItalic :: Lens' TextFormat (Maybe Bool)
+tfItalic = lens _tfItalic (\ s a -> s{_tfItalic = a})
+
+-- | True if the text is bold.
+tfBold :: Lens' TextFormat (Maybe Bool)
+tfBold = lens _tfBold (\ s a -> s{_tfBold = a})
+
+-- | True if the text has a strikethrough.
+tfStrikethrough :: Lens' TextFormat (Maybe Bool)
+tfStrikethrough
+  = lens _tfStrikethrough
+      (\ s a -> s{_tfStrikethrough = a})
+
+instance FromJSON TextFormat where
+        parseJSON
+          = withObject "TextFormat"
+              (\ o ->
+                 TextFormat' <$>
+                   (o .:? "fontFamily") <*> (o .:? "foregroundColor")
+                     <*> (o .:? "fontSize")
+                     <*> (o .:? "underline")
+                     <*> (o .:? "italic")
+                     <*> (o .:? "bold")
+                     <*> (o .:? "strikethrough"))
+
+instance ToJSON TextFormat where
+        toJSON TextFormat'{..}
+          = object
+              (catMaybes
+                 [("fontFamily" .=) <$> _tfFontFamily,
+                  ("foregroundColor" .=) <$> _tfForegRoundColor,
+                  ("fontSize" .=) <$> _tfFontSize,
+                  ("underline" .=) <$> _tfUnderline,
+                  ("italic" .=) <$> _tfItalic, ("bold" .=) <$> _tfBold,
+                  ("strikethrough" .=) <$> _tfStrikethrough])
+
+-- | A request to create developer metadata.
+--
+-- /See:/ 'createDeveloperMetadataRequest' smart constructor.
+newtype CreateDeveloperMetadataRequest = CreateDeveloperMetadataRequest'
+    { _cDeveloperMetadata :: Maybe DeveloperMetadata
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreateDeveloperMetadataRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cDeveloperMetadata'
+createDeveloperMetadataRequest
+    :: CreateDeveloperMetadataRequest
+createDeveloperMetadataRequest =
+    CreateDeveloperMetadataRequest'
+    { _cDeveloperMetadata = Nothing
+    }
+
+-- | The developer metadata to create.
+cDeveloperMetadata :: Lens' CreateDeveloperMetadataRequest (Maybe DeveloperMetadata)
+cDeveloperMetadata
+  = lens _cDeveloperMetadata
+      (\ s a -> s{_cDeveloperMetadata = a})
+
+instance FromJSON CreateDeveloperMetadataRequest
+         where
+        parseJSON
+          = withObject "CreateDeveloperMetadataRequest"
+              (\ o ->
+                 CreateDeveloperMetadataRequest' <$>
+                   (o .:? "developerMetadata"))
+
+instance ToJSON CreateDeveloperMetadataRequest where
+        toJSON CreateDeveloperMetadataRequest'{..}
+          = object
+              (catMaybes
+                 [("developerMetadata" .=) <$> _cDeveloperMetadata])
+
+-- | The response when clearing a range of values in a spreadsheet.
+--
+-- /See:/ 'batchClearValuesResponse' smart constructor.
+data BatchClearValuesResponse = BatchClearValuesResponse'
+    { _bcvrClearedRanges :: !(Maybe [Text])
+    , _bcvrSpreadsheetId :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BatchClearValuesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bcvrClearedRanges'
+--
+-- * 'bcvrSpreadsheetId'
+batchClearValuesResponse
+    :: BatchClearValuesResponse
+batchClearValuesResponse =
+    BatchClearValuesResponse'
+    { _bcvrClearedRanges = Nothing
+    , _bcvrSpreadsheetId = Nothing
+    }
+
+-- | The ranges that were cleared, in A1 notation. (If the requests were for
+-- an unbounded range or a ranger larger than the bounds of the sheet, this
+-- will be the actual ranges that were cleared, bounded to the sheet\'s
+-- limits.)
+bcvrClearedRanges :: Lens' BatchClearValuesResponse [Text]
+bcvrClearedRanges
+  = lens _bcvrClearedRanges
+      (\ s a -> s{_bcvrClearedRanges = a})
+      . _Default
+      . _Coerce
+
+-- | The spreadsheet the updates were applied to.
+bcvrSpreadsheetId :: Lens' BatchClearValuesResponse (Maybe Text)
+bcvrSpreadsheetId
+  = lens _bcvrSpreadsheetId
+      (\ s a -> s{_bcvrSpreadsheetId = a})
+
+instance FromJSON BatchClearValuesResponse where
+        parseJSON
+          = withObject "BatchClearValuesResponse"
+              (\ o ->
+                 BatchClearValuesResponse' <$>
+                   (o .:? "clearedRanges" .!= mempty) <*>
+                     (o .:? "spreadsheetId"))
+
+instance ToJSON BatchClearValuesResponse where
+        toJSON BatchClearValuesResponse'{..}
+          = object
+              (catMaybes
+                 [("clearedRanges" .=) <$> _bcvrClearedRanges,
+                  ("spreadsheetId" .=) <$> _bcvrSpreadsheetId])
+
+-- | A value range that was matched by one or more data filers.
+--
+-- /See:/ 'matchedValueRange' smart constructor.
+data MatchedValueRange = MatchedValueRange'
+    { _mvrValueRange  :: !(Maybe ValueRange)
+    , _mvrDataFilters :: !(Maybe [DataFilter])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MatchedValueRange' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mvrValueRange'
+--
+-- * 'mvrDataFilters'
+matchedValueRange
+    :: MatchedValueRange
+matchedValueRange =
+    MatchedValueRange'
+    { _mvrValueRange = Nothing
+    , _mvrDataFilters = Nothing
+    }
+
+-- | The values matched by the DataFilter.
+mvrValueRange :: Lens' MatchedValueRange (Maybe ValueRange)
+mvrValueRange
+  = lens _mvrValueRange
+      (\ s a -> s{_mvrValueRange = a})
+
+-- | The DataFilters from the request that matched the range of values.
+mvrDataFilters :: Lens' MatchedValueRange [DataFilter]
+mvrDataFilters
+  = lens _mvrDataFilters
+      (\ s a -> s{_mvrDataFilters = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON MatchedValueRange where
+        parseJSON
+          = withObject "MatchedValueRange"
+              (\ o ->
+                 MatchedValueRange' <$>
+                   (o .:? "valueRange") <*>
+                     (o .:? "dataFilters" .!= mempty))
+
+instance ToJSON MatchedValueRange where
+        toJSON MatchedValueRange'{..}
+          = object
+              (catMaybes
+                 [("valueRange" .=) <$> _mvrValueRange,
+                  ("dataFilters" .=) <$> _mvrDataFilters])
+
+-- | The domain of a chart. For example, if charting stock prices over time,
+-- this would be the date.
+--
+-- /See:/ 'basicChartDomain' smart constructor.
+data BasicChartDomain = BasicChartDomain'
+    { _bcdReversed :: !(Maybe Bool)
+    , _bcdDomain   :: !(Maybe ChartData)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BasicChartDomain' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bcdReversed'
+--
+-- * 'bcdDomain'
+basicChartDomain
+    :: BasicChartDomain
+basicChartDomain =
+    BasicChartDomain'
+    { _bcdReversed = Nothing
+    , _bcdDomain = Nothing
+    }
+
+-- | True to reverse the order of the domain values (horizontal axis).
+bcdReversed :: Lens' BasicChartDomain (Maybe Bool)
+bcdReversed
+  = lens _bcdReversed (\ s a -> s{_bcdReversed = a})
+
+-- | The data of the domain. For example, if charting stock prices over time,
+-- this is the data representing the dates.
+bcdDomain :: Lens' BasicChartDomain (Maybe ChartData)
+bcdDomain
+  = lens _bcdDomain (\ s a -> s{_bcdDomain = a})
+
+instance FromJSON BasicChartDomain where
+        parseJSON
+          = withObject "BasicChartDomain"
+              (\ o ->
+                 BasicChartDomain' <$>
+                   (o .:? "reversed") <*> (o .:? "domain"))
+
+instance ToJSON BasicChartDomain where
+        toJSON BasicChartDomain'{..}
+          = object
+              (catMaybes
+                 [("reversed" .=) <$> _bcdReversed,
+                  ("domain" .=) <$> _bcdDomain])
+
+-- | Allows you to organize the numeric values in a source data column into
+-- buckets of a constant size. All values from HistogramRule.start to
+-- HistogramRule.end are placed into groups of size HistogramRule.interval.
+-- In addition, all values below HistogramRule.start are placed in one
+-- group, and all values above HistogramRule.end are placed in another.
+-- Only HistogramRule.interval is required, though if HistogramRule.start
+-- and HistogramRule.end are both provided, HistogramRule.start must be
+-- less than HistogramRule.end. For example, a pivot table showing average
+-- purchase amount by age that has 50+ rows: +-----+-------------------+ |
+-- Age | AVERAGE of Amount | +-----+-------------------+ | 16 | $27.13 | |
+-- 17 | $5.24 | | 18 | $20.15 | ... +-----+-------------------+ could be
+-- turned into a pivot table that looks like the one below by applying a
+-- histogram group rule with a HistogramRule.start of 25, an
+-- HistogramRule.interval of 20, and an HistogramRule.end of 65.
+-- +-------------+-------------------+ | Grouped Age | AVERAGE of Amount |
+-- +-------------+-------------------+ | \< 25 | $19.34 | | 25-45 | $31.43
+-- | | 45-65 | $35.87 | | > 65 | $27.55 |
+-- +-------------+-------------------+ | Grand Total | $29.12 |
+-- +-------------+-------------------+
+--
+-- /See:/ 'histogramRule' smart constructor.
+data HistogramRule = HistogramRule'
+    { _hrStart    :: !(Maybe (Textual Double))
+    , _hrInterval :: !(Maybe (Textual Double))
+    , _hrEnd      :: !(Maybe (Textual Double))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'HistogramRule' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'hrStart'
+--
+-- * 'hrInterval'
+--
+-- * 'hrEnd'
+histogramRule
+    :: HistogramRule
+histogramRule =
+    HistogramRule'
+    { _hrStart = Nothing
+    , _hrInterval = Nothing
+    , _hrEnd = Nothing
+    }
+
+-- | The minimum value at which items are placed into buckets of constant
+-- size. Values below start are lumped into a single bucket. This field is
+-- optional.
+hrStart :: Lens' HistogramRule (Maybe Double)
+hrStart
+  = lens _hrStart (\ s a -> s{_hrStart = a}) .
+      mapping _Coerce
+
+-- | The size of the buckets that are created. Must be positive.
+hrInterval :: Lens' HistogramRule (Maybe Double)
+hrInterval
+  = lens _hrInterval (\ s a -> s{_hrInterval = a}) .
+      mapping _Coerce
+
+-- | The maximum value at which items are placed into buckets of constant
+-- size. Values above end are lumped into a single bucket. This field is
+-- optional.
+hrEnd :: Lens' HistogramRule (Maybe Double)
+hrEnd
+  = lens _hrEnd (\ s a -> s{_hrEnd = a}) .
+      mapping _Coerce
+
+instance FromJSON HistogramRule where
+        parseJSON
+          = withObject "HistogramRule"
+              (\ o ->
+                 HistogramRule' <$>
+                   (o .:? "start") <*> (o .:? "interval") <*>
+                     (o .:? "end"))
+
+instance ToJSON HistogramRule where
+        toJSON HistogramRule'{..}
+          = object
+              (catMaybes
+                 [("start" .=) <$> _hrStart,
+                  ("interval" .=) <$> _hrInterval,
+                  ("end" .=) <$> _hrEnd])
+
+-- | A developer metadata entry and the data filters specified in the
+-- original request that matched it.
+--
+-- /See:/ 'matchedDeveloperMetadata' smart constructor.
+data MatchedDeveloperMetadata = MatchedDeveloperMetadata'
+    { _mdmDataFilters       :: !(Maybe [DataFilter])
+    , _mdmDeveloperMetadata :: !(Maybe DeveloperMetadata)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MatchedDeveloperMetadata' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mdmDataFilters'
+--
+-- * 'mdmDeveloperMetadata'
+matchedDeveloperMetadata
+    :: MatchedDeveloperMetadata
+matchedDeveloperMetadata =
+    MatchedDeveloperMetadata'
+    { _mdmDataFilters = Nothing
+    , _mdmDeveloperMetadata = Nothing
+    }
+
+-- | All filters matching the returned developer metadata.
+mdmDataFilters :: Lens' MatchedDeveloperMetadata [DataFilter]
+mdmDataFilters
+  = lens _mdmDataFilters
+      (\ s a -> s{_mdmDataFilters = a})
+      . _Default
+      . _Coerce
+
+-- | The developer metadata matching the specified filters.
+mdmDeveloperMetadata :: Lens' MatchedDeveloperMetadata (Maybe DeveloperMetadata)
+mdmDeveloperMetadata
+  = lens _mdmDeveloperMetadata
+      (\ s a -> s{_mdmDeveloperMetadata = a})
+
+instance FromJSON MatchedDeveloperMetadata where
+        parseJSON
+          = withObject "MatchedDeveloperMetadata"
+              (\ o ->
+                 MatchedDeveloperMetadata' <$>
+                   (o .:? "dataFilters" .!= mempty) <*>
+                     (o .:? "developerMetadata"))
+
+instance ToJSON MatchedDeveloperMetadata where
+        toJSON MatchedDeveloperMetadata'{..}
+          = object
+              (catMaybes
+                 [("dataFilters" .=) <$> _mdmDataFilters,
+                  ("developerMetadata" .=) <$> _mdmDeveloperMetadata])
+
+-- | Inserts cells into a range, shifting the existing cells over or down.
+--
+-- /See:/ 'insertRangeRequest' smart constructor.
+data InsertRangeRequest = InsertRangeRequest'
+    { _irrShiftDimension :: !(Maybe InsertRangeRequestShiftDimension)
+    , _irrRange          :: !(Maybe GridRange)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InsertRangeRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'irrShiftDimension'
+--
+-- * 'irrRange'
+insertRangeRequest
+    :: InsertRangeRequest
+insertRangeRequest =
+    InsertRangeRequest'
+    { _irrShiftDimension = Nothing
+    , _irrRange = Nothing
+    }
+
+-- | The dimension which will be shifted when inserting cells. If ROWS,
+-- existing cells will be shifted down. If COLUMNS, existing cells will be
+-- shifted right.
+irrShiftDimension :: Lens' InsertRangeRequest (Maybe InsertRangeRequestShiftDimension)
+irrShiftDimension
+  = lens _irrShiftDimension
+      (\ s a -> s{_irrShiftDimension = a})
+
+-- | The range to insert new cells into.
+irrRange :: Lens' InsertRangeRequest (Maybe GridRange)
+irrRange = lens _irrRange (\ s a -> s{_irrRange = a})
+
+instance FromJSON InsertRangeRequest where
+        parseJSON
+          = withObject "InsertRangeRequest"
+              (\ o ->
+                 InsertRangeRequest' <$>
+                   (o .:? "shiftDimension") <*> (o .:? "range"))
+
+instance ToJSON InsertRangeRequest where
+        toJSON InsertRangeRequest'{..}
+          = object
+              (catMaybes
+                 [("shiftDimension" .=) <$> _irrShiftDimension,
+                  ("range" .=) <$> _irrRange])
+
+-- | The amount of padding around the cell, in pixels. When updating padding,
+-- every field must be specified.
+--
+-- /See:/ 'padding' smart constructor.
+data Padding = Padding'
+    { _pBottom :: !(Maybe (Textual Int32))
+    , _pLeft   :: !(Maybe (Textual Int32))
+    , _pRight  :: !(Maybe (Textual Int32))
+    , _pTop    :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Padding' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pBottom'
+--
+-- * 'pLeft'
+--
+-- * 'pRight'
+--
+-- * 'pTop'
+padding
+    :: Padding
+padding =
+    Padding'
+    { _pBottom = Nothing
+    , _pLeft = Nothing
+    , _pRight = Nothing
+    , _pTop = Nothing
+    }
+
+-- | The bottom padding of the cell.
+pBottom :: Lens' Padding (Maybe Int32)
+pBottom
+  = lens _pBottom (\ s a -> s{_pBottom = a}) .
+      mapping _Coerce
+
+-- | The left padding of the cell.
+pLeft :: Lens' Padding (Maybe Int32)
+pLeft
+  = lens _pLeft (\ s a -> s{_pLeft = a}) .
+      mapping _Coerce
+
+-- | The right padding of the cell.
+pRight :: Lens' Padding (Maybe Int32)
+pRight
+  = lens _pRight (\ s a -> s{_pRight = a}) .
+      mapping _Coerce
+
+-- | The top padding of the cell.
+pTop :: Lens' Padding (Maybe Int32)
+pTop
+  = lens _pTop (\ s a -> s{_pTop = a}) .
+      mapping _Coerce
+
+instance FromJSON Padding where
+        parseJSON
+          = withObject "Padding"
+              (\ o ->
+                 Padding' <$>
+                   (o .:? "bottom") <*> (o .:? "left") <*>
+                     (o .:? "right")
+                     <*> (o .:? "top"))
+
+instance ToJSON Padding where
+        toJSON Padding'{..}
+          = object
+              (catMaybes
+                 [("bottom" .=) <$> _pBottom, ("left" .=) <$> _pLeft,
+                  ("right" .=) <$> _pRight, ("top" .=) <$> _pTop])
+
+-- | The specifications of a chart.
+--
+-- /See:/ 'chartSpec' smart constructor.
+data ChartSpec = ChartSpec'
+    { _csTitleTextPosition       :: !(Maybe TextPosition)
+    , _csFontName                :: !(Maybe Text)
+    , _csSubtitleTextPosition    :: !(Maybe TextPosition)
+    , _csBackgRoundColor         :: !(Maybe Color)
+    , _csCandlestickChart        :: !(Maybe CandlestickChartSpec)
+    , _csWaterfallChart          :: !(Maybe WaterfallChartSpec)
+    , _csTitleTextFormat         :: !(Maybe TextFormat)
+    , _csSubtitle                :: !(Maybe Text)
+    , _csAltText                 :: !(Maybe Text)
+    , _csHistogramChart          :: !(Maybe HistogramChartSpec)
+    , _csBubbleChart             :: !(Maybe BubbleChartSpec)
+    , _csMaximized               :: !(Maybe Bool)
+    , _csSubtitleTextFormat      :: !(Maybe TextFormat)
+    , _csTitle                   :: !(Maybe Text)
+    , _csPieChart                :: !(Maybe PieChartSpec)
+    , _csOrgChart                :: !(Maybe OrgChartSpec)
+    , _csTreemapChart            :: !(Maybe TreemapChartSpec)
+    , _csBasicChart              :: !(Maybe BasicChartSpec)
+    , _csHiddenDimensionStrategy :: !(Maybe ChartSpecHiddenDimensionStrategy)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ChartSpec' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'csTitleTextPosition'
+--
+-- * 'csFontName'
+--
+-- * 'csSubtitleTextPosition'
+--
+-- * 'csBackgRoundColor'
+--
+-- * 'csCandlestickChart'
+--
+-- * 'csWaterfallChart'
+--
+-- * 'csTitleTextFormat'
+--
+-- * 'csSubtitle'
+--
+-- * 'csAltText'
+--
+-- * 'csHistogramChart'
+--
+-- * 'csBubbleChart'
+--
+-- * 'csMaximized'
+--
+-- * 'csSubtitleTextFormat'
+--
+-- * 'csTitle'
+--
+-- * 'csPieChart'
+--
+-- * 'csOrgChart'
+--
+-- * 'csTreemapChart'
+--
+-- * 'csBasicChart'
+--
+-- * 'csHiddenDimensionStrategy'
+chartSpec
+    :: ChartSpec
+chartSpec =
+    ChartSpec'
+    { _csTitleTextPosition = Nothing
+    , _csFontName = Nothing
+    , _csSubtitleTextPosition = Nothing
+    , _csBackgRoundColor = Nothing
+    , _csCandlestickChart = Nothing
+    , _csWaterfallChart = Nothing
+    , _csTitleTextFormat = Nothing
+    , _csSubtitle = Nothing
+    , _csAltText = Nothing
+    , _csHistogramChart = Nothing
+    , _csBubbleChart = Nothing
+    , _csMaximized = Nothing
+    , _csSubtitleTextFormat = Nothing
+    , _csTitle = Nothing
+    , _csPieChart = Nothing
+    , _csOrgChart = Nothing
+    , _csTreemapChart = Nothing
+    , _csBasicChart = Nothing
+    , _csHiddenDimensionStrategy = Nothing
+    }
+
+-- | The title text position. This field is optional.
+csTitleTextPosition :: Lens' ChartSpec (Maybe TextPosition)
+csTitleTextPosition
+  = lens _csTitleTextPosition
+      (\ s a -> s{_csTitleTextPosition = a})
+
+-- | The name of the font to use by default for all chart text (e.g. title,
+-- axis labels, legend). If a font is specified for a specific part of the
+-- chart it will override this font name.
+csFontName :: Lens' ChartSpec (Maybe Text)
+csFontName
+  = lens _csFontName (\ s a -> s{_csFontName = a})
+
+-- | The subtitle text position. This field is optional.
+csSubtitleTextPosition :: Lens' ChartSpec (Maybe TextPosition)
+csSubtitleTextPosition
+  = lens _csSubtitleTextPosition
+      (\ s a -> s{_csSubtitleTextPosition = a})
+
+-- | The background color of the entire chart. Not applicable to Org charts.
+csBackgRoundColor :: Lens' ChartSpec (Maybe Color)
+csBackgRoundColor
+  = lens _csBackgRoundColor
+      (\ s a -> s{_csBackgRoundColor = a})
+
+-- | A candlestick chart specification.
+csCandlestickChart :: Lens' ChartSpec (Maybe CandlestickChartSpec)
+csCandlestickChart
+  = lens _csCandlestickChart
+      (\ s a -> s{_csCandlestickChart = a})
+
+-- | A waterfall chart specification.
+csWaterfallChart :: Lens' ChartSpec (Maybe WaterfallChartSpec)
+csWaterfallChart
+  = lens _csWaterfallChart
+      (\ s a -> s{_csWaterfallChart = a})
+
+-- | The title text format. Strikethrough and underline are not supported.
+csTitleTextFormat :: Lens' ChartSpec (Maybe TextFormat)
+csTitleTextFormat
+  = lens _csTitleTextFormat
+      (\ s a -> s{_csTitleTextFormat = a})
+
+-- | The subtitle of the chart.
+csSubtitle :: Lens' ChartSpec (Maybe Text)
+csSubtitle
+  = lens _csSubtitle (\ s a -> s{_csSubtitle = a})
+
+-- | The alternative text that describes the chart. This is often used for
+-- accessibility.
+csAltText :: Lens' ChartSpec (Maybe Text)
+csAltText
+  = lens _csAltText (\ s a -> s{_csAltText = a})
+
+-- | A histogram chart specification.
+csHistogramChart :: Lens' ChartSpec (Maybe HistogramChartSpec)
+csHistogramChart
+  = lens _csHistogramChart
+      (\ s a -> s{_csHistogramChart = a})
+
+-- | A bubble chart specification.
+csBubbleChart :: Lens' ChartSpec (Maybe BubbleChartSpec)
+csBubbleChart
+  = lens _csBubbleChart
+      (\ s a -> s{_csBubbleChart = a})
+
+-- | True to make a chart fill the entire space in which it\'s rendered with
+-- minimum padding. False to use the default padding. (Not applicable to
+-- Geo and Org charts.)
+csMaximized :: Lens' ChartSpec (Maybe Bool)
+csMaximized
+  = lens _csMaximized (\ s a -> s{_csMaximized = a})
+
+-- | The subtitle text format. Strikethrough and underline are not supported.
+csSubtitleTextFormat :: Lens' ChartSpec (Maybe TextFormat)
+csSubtitleTextFormat
+  = lens _csSubtitleTextFormat
+      (\ s a -> s{_csSubtitleTextFormat = a})
+
+-- | The title of the chart.
+csTitle :: Lens' ChartSpec (Maybe Text)
+csTitle = lens _csTitle (\ s a -> s{_csTitle = a})
+
+-- | A pie chart specification.
+csPieChart :: Lens' ChartSpec (Maybe PieChartSpec)
+csPieChart
+  = lens _csPieChart (\ s a -> s{_csPieChart = a})
+
+-- | An org chart specification.
+csOrgChart :: Lens' ChartSpec (Maybe OrgChartSpec)
+csOrgChart
+  = lens _csOrgChart (\ s a -> s{_csOrgChart = a})
+
+-- | A treemap chart specification.
+csTreemapChart :: Lens' ChartSpec (Maybe TreemapChartSpec)
+csTreemapChart
+  = lens _csTreemapChart
+      (\ s a -> s{_csTreemapChart = a})
+
+-- | A basic chart specification, can be one of many kinds of charts. See
+-- BasicChartType for the list of all charts this supports.
+csBasicChart :: Lens' ChartSpec (Maybe BasicChartSpec)
+csBasicChart
+  = lens _csBasicChart (\ s a -> s{_csBasicChart = a})
+
+-- | Determines how the charts will use hidden rows or columns.
+csHiddenDimensionStrategy :: Lens' ChartSpec (Maybe ChartSpecHiddenDimensionStrategy)
+csHiddenDimensionStrategy
+  = lens _csHiddenDimensionStrategy
+      (\ s a -> s{_csHiddenDimensionStrategy = a})
+
+instance FromJSON ChartSpec where
+        parseJSON
+          = withObject "ChartSpec"
+              (\ o ->
+                 ChartSpec' <$>
+                   (o .:? "titleTextPosition") <*> (o .:? "fontName")
+                     <*> (o .:? "subtitleTextPosition")
+                     <*> (o .:? "backgroundColor")
+                     <*> (o .:? "candlestickChart")
+                     <*> (o .:? "waterfallChart")
+                     <*> (o .:? "titleTextFormat")
+                     <*> (o .:? "subtitle")
+                     <*> (o .:? "altText")
+                     <*> (o .:? "histogramChart")
+                     <*> (o .:? "bubbleChart")
+                     <*> (o .:? "maximized")
+                     <*> (o .:? "subtitleTextFormat")
+                     <*> (o .:? "title")
+                     <*> (o .:? "pieChart")
+                     <*> (o .:? "orgChart")
+                     <*> (o .:? "treemapChart")
+                     <*> (o .:? "basicChart")
+                     <*> (o .:? "hiddenDimensionStrategy"))
+
+instance ToJSON ChartSpec where
+        toJSON ChartSpec'{..}
+          = object
+              (catMaybes
+                 [("titleTextPosition" .=) <$> _csTitleTextPosition,
+                  ("fontName" .=) <$> _csFontName,
+                  ("subtitleTextPosition" .=) <$>
+                    _csSubtitleTextPosition,
+                  ("backgroundColor" .=) <$> _csBackgRoundColor,
+                  ("candlestickChart" .=) <$> _csCandlestickChart,
+                  ("waterfallChart" .=) <$> _csWaterfallChart,
+                  ("titleTextFormat" .=) <$> _csTitleTextFormat,
+                  ("subtitle" .=) <$> _csSubtitle,
+                  ("altText" .=) <$> _csAltText,
+                  ("histogramChart" .=) <$> _csHistogramChart,
+                  ("bubbleChart" .=) <$> _csBubbleChart,
+                  ("maximized" .=) <$> _csMaximized,
+                  ("subtitleTextFormat" .=) <$> _csSubtitleTextFormat,
+                  ("title" .=) <$> _csTitle,
+                  ("pieChart" .=) <$> _csPieChart,
+                  ("orgChart" .=) <$> _csOrgChart,
+                  ("treemapChart" .=) <$> _csTreemapChart,
+                  ("basicChart" .=) <$> _csBasicChart,
+                  ("hiddenDimensionStrategy" .=) <$>
+                    _csHiddenDimensionStrategy])
+
+-- | Properties about a dimension.
+--
+-- /See:/ 'dimensionProperties' smart constructor.
+data DimensionProperties = DimensionProperties'
+    { _dpHiddenByFilter    :: !(Maybe Bool)
+    , _dpPixelSize         :: !(Maybe (Textual Int32))
+    , _dpHiddenByUser      :: !(Maybe Bool)
+    , _dpDeveloperMetadata :: !(Maybe [DeveloperMetadata])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DimensionProperties' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dpHiddenByFilter'
+--
+-- * 'dpPixelSize'
+--
+-- * 'dpHiddenByUser'
+--
+-- * 'dpDeveloperMetadata'
+dimensionProperties
+    :: DimensionProperties
+dimensionProperties =
+    DimensionProperties'
+    { _dpHiddenByFilter = Nothing
+    , _dpPixelSize = Nothing
+    , _dpHiddenByUser = Nothing
+    , _dpDeveloperMetadata = Nothing
+    }
+
+-- | True if this dimension is being filtered. This field is read-only.
+dpHiddenByFilter :: Lens' DimensionProperties (Maybe Bool)
+dpHiddenByFilter
+  = lens _dpHiddenByFilter
+      (\ s a -> s{_dpHiddenByFilter = a})
+
+-- | The height (if a row) or width (if a column) of the dimension in pixels.
+dpPixelSize :: Lens' DimensionProperties (Maybe Int32)
+dpPixelSize
+  = lens _dpPixelSize (\ s a -> s{_dpPixelSize = a}) .
+      mapping _Coerce
+
+-- | True if this dimension is explicitly hidden.
+dpHiddenByUser :: Lens' DimensionProperties (Maybe Bool)
+dpHiddenByUser
+  = lens _dpHiddenByUser
+      (\ s a -> s{_dpHiddenByUser = a})
+
+-- | The developer metadata associated with a single row or column.
+dpDeveloperMetadata :: Lens' DimensionProperties [DeveloperMetadata]
+dpDeveloperMetadata
+  = lens _dpDeveloperMetadata
+      (\ s a -> s{_dpDeveloperMetadata = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON DimensionProperties where
+        parseJSON
+          = withObject "DimensionProperties"
+              (\ o ->
+                 DimensionProperties' <$>
+                   (o .:? "hiddenByFilter") <*> (o .:? "pixelSize") <*>
+                     (o .:? "hiddenByUser")
+                     <*> (o .:? "developerMetadata" .!= mempty))
+
+instance ToJSON DimensionProperties where
+        toJSON DimensionProperties'{..}
+          = object
+              (catMaybes
+                 [("hiddenByFilter" .=) <$> _dpHiddenByFilter,
+                  ("pixelSize" .=) <$> _dpPixelSize,
+                  ("hiddenByUser" .=) <$> _dpHiddenByUser,
+                  ("developerMetadata" .=) <$> _dpDeveloperMetadata])
+
+-- | Updates properties of the supplied banded range.
+--
+-- /See:/ 'updateBandingRequest' smart constructor.
+data UpdateBandingRequest = UpdateBandingRequest'
+    { _ubrBandedRange :: !(Maybe BandedRange)
+    , _ubrFields      :: !(Maybe GFieldMask)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdateBandingRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ubrBandedRange'
+--
+-- * 'ubrFields'
+updateBandingRequest
+    :: UpdateBandingRequest
+updateBandingRequest =
+    UpdateBandingRequest'
+    { _ubrBandedRange = Nothing
+    , _ubrFields = Nothing
+    }
+
+-- | The banded range to update with the new properties.
+ubrBandedRange :: Lens' UpdateBandingRequest (Maybe BandedRange)
+ubrBandedRange
+  = lens _ubrBandedRange
+      (\ s a -> s{_ubrBandedRange = a})
+
+-- | The fields that should be updated. At least one field must be specified.
+-- The root \`bandedRange\` is implied and should not be specified. A
+-- single \`\"*\"\` can be used as short-hand for listing every field.
+ubrFields :: Lens' UpdateBandingRequest (Maybe GFieldMask)
+ubrFields
+  = lens _ubrFields (\ s a -> s{_ubrFields = a})
+
+instance FromJSON UpdateBandingRequest where
+        parseJSON
+          = withObject "UpdateBandingRequest"
+              (\ o ->
+                 UpdateBandingRequest' <$>
+                   (o .:? "bandedRange") <*> (o .:? "fields"))
+
+instance ToJSON UpdateBandingRequest where
+        toJSON UpdateBandingRequest'{..}
+          = object
+              (catMaybes
+                 [("bandedRange" .=) <$> _ubrBandedRange,
+                  ("fields" .=) <$> _ubrFields])
+
+-- | The response when retrieving more than one range of values in a
+-- spreadsheet.
+--
+-- /See:/ 'batchGetValuesResponse' smart constructor.
+data BatchGetValuesResponse = BatchGetValuesResponse'
+    { _bgvrSpreadsheetId :: !(Maybe Text)
+    , _bgvrValueRanges   :: !(Maybe [ValueRange])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BatchGetValuesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bgvrSpreadsheetId'
+--
+-- * 'bgvrValueRanges'
+batchGetValuesResponse
+    :: BatchGetValuesResponse
+batchGetValuesResponse =
+    BatchGetValuesResponse'
+    { _bgvrSpreadsheetId = Nothing
+    , _bgvrValueRanges = Nothing
+    }
+
+-- | The ID of the spreadsheet the data was retrieved from.
+bgvrSpreadsheetId :: Lens' BatchGetValuesResponse (Maybe Text)
+bgvrSpreadsheetId
+  = lens _bgvrSpreadsheetId
+      (\ s a -> s{_bgvrSpreadsheetId = a})
+
+-- | The requested values. The order of the ValueRanges is the same as the
+-- order of the requested ranges.
+bgvrValueRanges :: Lens' BatchGetValuesResponse [ValueRange]
+bgvrValueRanges
+  = lens _bgvrValueRanges
+      (\ s a -> s{_bgvrValueRanges = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON BatchGetValuesResponse where
+        parseJSON
+          = withObject "BatchGetValuesResponse"
+              (\ o ->
+                 BatchGetValuesResponse' <$>
+                   (o .:? "spreadsheetId") <*>
+                     (o .:? "valueRanges" .!= mempty))
+
+instance ToJSON BatchGetValuesResponse where
+        toJSON BatchGetValuesResponse'{..}
+          = object
+              (catMaybes
+                 [("spreadsheetId" .=) <$> _bgvrSpreadsheetId,
+                  ("valueRanges" .=) <$> _bgvrValueRanges])
+
+-- | Removes the banded range with the given ID from the spreadsheet.
+--
+-- /See:/ 'deleteBandingRequest' smart constructor.
+newtype DeleteBandingRequest = DeleteBandingRequest'
+    { _dbrBandedRangeId :: Maybe (Textual Int32)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteBandingRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dbrBandedRangeId'
+deleteBandingRequest
+    :: DeleteBandingRequest
+deleteBandingRequest =
+    DeleteBandingRequest'
+    { _dbrBandedRangeId = Nothing
+    }
+
+-- | The ID of the banded range to delete.
+dbrBandedRangeId :: Lens' DeleteBandingRequest (Maybe Int32)
+dbrBandedRangeId
+  = lens _dbrBandedRangeId
+      (\ s a -> s{_dbrBandedRangeId = a})
+      . mapping _Coerce
+
+instance FromJSON DeleteBandingRequest where
+        parseJSON
+          = withObject "DeleteBandingRequest"
+              (\ o ->
+                 DeleteBandingRequest' <$> (o .:? "bandedRangeId"))
+
+instance ToJSON DeleteBandingRequest where
+        toJSON DeleteBandingRequest'{..}
+          = object
+              (catMaybes
+                 [("bandedRangeId" .=) <$> _dbrBandedRangeId])
+
+-- | The response from deleting developer metadata.
+--
+-- /See:/ 'deleteDeveloperMetadataResponse' smart constructor.
+newtype DeleteDeveloperMetadataResponse = DeleteDeveloperMetadataResponse'
+    { _ddmrDeletedDeveloperMetadata :: Maybe [DeveloperMetadata]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteDeveloperMetadataResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ddmrDeletedDeveloperMetadata'
+deleteDeveloperMetadataResponse
+    :: DeleteDeveloperMetadataResponse
+deleteDeveloperMetadataResponse =
+    DeleteDeveloperMetadataResponse'
+    { _ddmrDeletedDeveloperMetadata = Nothing
+    }
+
+-- | The metadata that was deleted.
+ddmrDeletedDeveloperMetadata :: Lens' DeleteDeveloperMetadataResponse [DeveloperMetadata]
+ddmrDeletedDeveloperMetadata
+  = lens _ddmrDeletedDeveloperMetadata
+      (\ s a -> s{_ddmrDeletedDeveloperMetadata = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON DeleteDeveloperMetadataResponse
+         where
+        parseJSON
+          = withObject "DeleteDeveloperMetadataResponse"
+              (\ o ->
+                 DeleteDeveloperMetadataResponse' <$>
+                   (o .:? "deletedDeveloperMetadata" .!= mempty))
+
+instance ToJSON DeleteDeveloperMetadataResponse where
+        toJSON DeleteDeveloperMetadataResponse'{..}
+          = object
+              (catMaybes
+                 [("deletedDeveloperMetadata" .=) <$>
+                    _ddmrDeletedDeveloperMetadata])
+
+-- | The response from updating developer metadata.
+--
+-- /See:/ 'updateDeveloperMetadataResponse' smart constructor.
+newtype UpdateDeveloperMetadataResponse = UpdateDeveloperMetadataResponse'
+    { _uDeveloperMetadata :: Maybe [DeveloperMetadata]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdateDeveloperMetadataResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uDeveloperMetadata'
+updateDeveloperMetadataResponse
+    :: UpdateDeveloperMetadataResponse
+updateDeveloperMetadataResponse =
+    UpdateDeveloperMetadataResponse'
+    { _uDeveloperMetadata = Nothing
+    }
+
+-- | The updated developer metadata.
+uDeveloperMetadata :: Lens' UpdateDeveloperMetadataResponse [DeveloperMetadata]
+uDeveloperMetadata
+  = lens _uDeveloperMetadata
+      (\ s a -> s{_uDeveloperMetadata = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON UpdateDeveloperMetadataResponse
+         where
+        parseJSON
+          = withObject "UpdateDeveloperMetadataResponse"
+              (\ o ->
+                 UpdateDeveloperMetadataResponse' <$>
+                   (o .:? "developerMetadata" .!= mempty))
+
+instance ToJSON UpdateDeveloperMetadataResponse where
+        toJSON UpdateDeveloperMetadataResponse'{..}
+          = object
+              (catMaybes
+                 [("developerMetadata" .=) <$> _uDeveloperMetadata])
+
+-- | A single kind of update to apply to a spreadsheet.
+--
+-- /See:/ 'request'' smart constructor.
+data Request' = Request''
+    { _reqAddFilterView                :: !(Maybe AddFilterViewRequest)
+    , _reqDeleteProtectedRange         :: !(Maybe DeleteProtectedRangeRequest)
+    , _reqUpdateProtectedRange         :: !(Maybe UpdateProtectedRangeRequest)
+    , _reqUpdateCells                  :: !(Maybe UpdateCellsRequest)
+    , _reqCreateDeveloperMetadata      :: !(Maybe CreateDeveloperMetadataRequest)
+    , _reqDuplicateFilterView          :: !(Maybe DuplicateFilterViewRequest)
+    , _reqAddConditionalFormatRule     :: !(Maybe AddConditionalFormatRuleRequest)
+    , _reqRandomizeRange               :: !(Maybe RandomizeRangeRequest)
+    , _reqSortRange                    :: !(Maybe SortRangeRequest)
+    , _reqUpdateNamedRange             :: !(Maybe UpdateNamedRangeRequest)
+    , _reqDeleteNamedRange             :: !(Maybe DeleteNamedRangeRequest)
+    , _reqInsertRange                  :: !(Maybe InsertRangeRequest)
+    , _reqDeleteBanding                :: !(Maybe DeleteBandingRequest)
+    , _reqUpdateBanding                :: !(Maybe UpdateBandingRequest)
+    , _reqClearBasicFilter             :: !(Maybe ClearBasicFilterRequest)
+    , _reqAppendCells                  :: !(Maybe AppendCellsRequest)
+    , _reqPasteData                    :: !(Maybe PasteDataRequest)
+    , _reqUpdateEmbeddedObjectPosition :: !(Maybe UpdateEmbeddedObjectPositionRequest)
+    , _reqDeleteRange                  :: !(Maybe DeleteRangeRequest)
+    , _reqCopyPaste                    :: !(Maybe CopyPasteRequest)
+    , _reqUpdateDimensionGroup         :: !(Maybe UpdateDimensionGroupRequest)
+    , _reqDeleteDimensionGroup         :: !(Maybe DeleteDimensionGroupRequest)
+    , _reqAutoResizeDimensions         :: !(Maybe AutoResizeDimensionsRequest)
+    , _reqAddSheet                     :: !(Maybe AddSheetRequest)
+    , _reqFindReplace                  :: !(Maybe FindReplaceRequest)
+    , _reqDeleteDimension              :: !(Maybe DeleteDimensionRequest)
+    , _reqCutPaste                     :: !(Maybe CutPasteRequest)
+    , _reqMoveDimension                :: !(Maybe MoveDimensionRequest)
+    , _reqRepeatCell                   :: !(Maybe RepeatCellRequest)
+    , _reqAddProtectedRange            :: !(Maybe AddProtectedRangeRequest)
+    , _reqUpdateFilterView             :: !(Maybe UpdateFilterViewRequest)
+    , _reqDeleteFilterView             :: !(Maybe DeleteFilterViewRequest)
+    , _reqInsertDimension              :: !(Maybe InsertDimensionRequest)
+    , _reqUpdateSheetProperties        :: !(Maybe UpdateSheetPropertiesRequest)
+    , _reqDeleteConditionalFormatRule  :: !(Maybe DeleteConditionalFormatRuleRequest)
+    , _reqUpdateConditionalFormatRule  :: !(Maybe UpdateConditionalFormatRuleRequest)
+    , _reqDeleteEmbeddedObject         :: !(Maybe DeleteEmbeddedObjectRequest)
+    , _reqDeleteDeveloperMetadata      :: !(Maybe DeleteDeveloperMetadataRequest)
+    , _reqUpdateDeveloperMetadata      :: !(Maybe UpdateDeveloperMetadataRequest)
+    , _reqMergeCells                   :: !(Maybe MergeCellsRequest)
+    , _reqAddNamedRange                :: !(Maybe AddNamedRangeRequest)
+    , _reqAddChart                     :: !(Maybe AddChartRequest)
+    , _reqAddBanding                   :: !(Maybe AddBandingRequest)
+    , _reqDuplicateSheet               :: !(Maybe DuplicateSheetRequest)
+    , _reqAutoFill                     :: !(Maybe AutoFillRequest)
+    , _reqUpdateDimensionProperties    :: !(Maybe UpdateDimensionPropertiesRequest)
+    , _reqUpdateChartSpec              :: !(Maybe UpdateChartSpecRequest)
+    , _reqSetBasicFilter               :: !(Maybe SetBasicFilterRequest)
+    , _reqTextToColumns                :: !(Maybe TextToColumnsRequest)
+    , _reqAddDimensionGroup            :: !(Maybe AddDimensionGroupRequest)
+    , _reqUpdateSpreadsheetProperties  :: !(Maybe UpdateSpreadsheetPropertiesRequest)
+    , _reqDeleteSheet                  :: !(Maybe DeleteSheetRequest)
+    , _reqUnmergeCells                 :: !(Maybe UnmergeCellsRequest)
+    , _reqUpdateBOrders                :: !(Maybe UpdateBOrdersRequest)
+    , _reqAppendDimension              :: !(Maybe AppendDimensionRequest)
+    , _reqSetDataValidation            :: !(Maybe SetDataValidationRequest)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Request' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'reqAddFilterView'
+--
+-- * 'reqDeleteProtectedRange'
+--
+-- * 'reqUpdateProtectedRange'
+--
+-- * 'reqUpdateCells'
+--
+-- * 'reqCreateDeveloperMetadata'
+--
+-- * 'reqDuplicateFilterView'
+--
+-- * 'reqAddConditionalFormatRule'
+--
+-- * 'reqRandomizeRange'
+--
+-- * 'reqSortRange'
+--
+-- * 'reqUpdateNamedRange'
+--
+-- * 'reqDeleteNamedRange'
+--
+-- * 'reqInsertRange'
+--
+-- * 'reqDeleteBanding'
+--
+-- * 'reqUpdateBanding'
+--
+-- * 'reqClearBasicFilter'
+--
+-- * 'reqAppendCells'
+--
+-- * 'reqPasteData'
+--
+-- * 'reqUpdateEmbeddedObjectPosition'
+--
+-- * 'reqDeleteRange'
+--
+-- * 'reqCopyPaste'
+--
+-- * 'reqUpdateDimensionGroup'
+--
+-- * 'reqDeleteDimensionGroup'
+--
+-- * 'reqAutoResizeDimensions'
+--
+-- * 'reqAddSheet'
+--
+-- * 'reqFindReplace'
+--
+-- * 'reqDeleteDimension'
+--
+-- * 'reqCutPaste'
+--
+-- * 'reqMoveDimension'
+--
+-- * 'reqRepeatCell'
+--
+-- * 'reqAddProtectedRange'
+--
+-- * 'reqUpdateFilterView'
+--
+-- * 'reqDeleteFilterView'
+--
+-- * 'reqInsertDimension'
+--
+-- * 'reqUpdateSheetProperties'
+--
+-- * 'reqDeleteConditionalFormatRule'
+--
+-- * 'reqUpdateConditionalFormatRule'
+--
+-- * 'reqDeleteEmbeddedObject'
+--
+-- * 'reqDeleteDeveloperMetadata'
+--
+-- * 'reqUpdateDeveloperMetadata'
+--
+-- * 'reqMergeCells'
+--
+-- * 'reqAddNamedRange'
+--
+-- * 'reqAddChart'
+--
+-- * 'reqAddBanding'
+--
+-- * 'reqDuplicateSheet'
+--
+-- * 'reqAutoFill'
+--
+-- * 'reqUpdateDimensionProperties'
+--
+-- * 'reqUpdateChartSpec'
+--
+-- * 'reqSetBasicFilter'
+--
+-- * 'reqTextToColumns'
+--
+-- * 'reqAddDimensionGroup'
+--
+-- * 'reqUpdateSpreadsheetProperties'
+--
+-- * 'reqDeleteSheet'
+--
+-- * 'reqUnmergeCells'
+--
+-- * 'reqUpdateBOrders'
+--
+-- * 'reqAppendDimension'
+--
+-- * 'reqSetDataValidation'
+request'
+    :: Request'
+request' =
+    Request''
+    { _reqAddFilterView = Nothing
+    , _reqDeleteProtectedRange = Nothing
+    , _reqUpdateProtectedRange = Nothing
+    , _reqUpdateCells = Nothing
+    , _reqCreateDeveloperMetadata = Nothing
+    , _reqDuplicateFilterView = Nothing
+    , _reqAddConditionalFormatRule = Nothing
+    , _reqRandomizeRange = Nothing
+    , _reqSortRange = Nothing
+    , _reqUpdateNamedRange = Nothing
+    , _reqDeleteNamedRange = Nothing
+    , _reqInsertRange = Nothing
+    , _reqDeleteBanding = Nothing
+    , _reqUpdateBanding = Nothing
+    , _reqClearBasicFilter = Nothing
+    , _reqAppendCells = Nothing
+    , _reqPasteData = Nothing
+    , _reqUpdateEmbeddedObjectPosition = Nothing
+    , _reqDeleteRange = Nothing
+    , _reqCopyPaste = Nothing
+    , _reqUpdateDimensionGroup = Nothing
+    , _reqDeleteDimensionGroup = Nothing
+    , _reqAutoResizeDimensions = Nothing
+    , _reqAddSheet = Nothing
+    , _reqFindReplace = Nothing
+    , _reqDeleteDimension = Nothing
+    , _reqCutPaste = Nothing
+    , _reqMoveDimension = Nothing
+    , _reqRepeatCell = Nothing
+    , _reqAddProtectedRange = Nothing
+    , _reqUpdateFilterView = Nothing
+    , _reqDeleteFilterView = Nothing
+    , _reqInsertDimension = Nothing
+    , _reqUpdateSheetProperties = Nothing
+    , _reqDeleteConditionalFormatRule = Nothing
+    , _reqUpdateConditionalFormatRule = Nothing
+    , _reqDeleteEmbeddedObject = Nothing
+    , _reqDeleteDeveloperMetadata = Nothing
+    , _reqUpdateDeveloperMetadata = Nothing
+    , _reqMergeCells = Nothing
+    , _reqAddNamedRange = Nothing
+    , _reqAddChart = Nothing
+    , _reqAddBanding = Nothing
+    , _reqDuplicateSheet = Nothing
+    , _reqAutoFill = Nothing
+    , _reqUpdateDimensionProperties = Nothing
+    , _reqUpdateChartSpec = Nothing
+    , _reqSetBasicFilter = Nothing
+    , _reqTextToColumns = Nothing
+    , _reqAddDimensionGroup = Nothing
+    , _reqUpdateSpreadsheetProperties = Nothing
+    , _reqDeleteSheet = Nothing
+    , _reqUnmergeCells = Nothing
+    , _reqUpdateBOrders = Nothing
+    , _reqAppendDimension = Nothing
+    , _reqSetDataValidation = Nothing
+    }
+
+-- | Adds a filter view.
+reqAddFilterView :: Lens' Request' (Maybe AddFilterViewRequest)
+reqAddFilterView
+  = lens _reqAddFilterView
+      (\ s a -> s{_reqAddFilterView = a})
+
+-- | Deletes a protected range.
+reqDeleteProtectedRange :: Lens' Request' (Maybe DeleteProtectedRangeRequest)
+reqDeleteProtectedRange
+  = lens _reqDeleteProtectedRange
+      (\ s a -> s{_reqDeleteProtectedRange = a})
+
+-- | Updates a protected range.
+reqUpdateProtectedRange :: Lens' Request' (Maybe UpdateProtectedRangeRequest)
+reqUpdateProtectedRange
+  = lens _reqUpdateProtectedRange
+      (\ s a -> s{_reqUpdateProtectedRange = a})
+
+-- | Updates many cells at once.
+reqUpdateCells :: Lens' Request' (Maybe UpdateCellsRequest)
+reqUpdateCells
+  = lens _reqUpdateCells
+      (\ s a -> s{_reqUpdateCells = a})
+
+-- | Creates new developer metadata
+reqCreateDeveloperMetadata :: Lens' Request' (Maybe CreateDeveloperMetadataRequest)
+reqCreateDeveloperMetadata
+  = lens _reqCreateDeveloperMetadata
+      (\ s a -> s{_reqCreateDeveloperMetadata = a})
+
+-- | Duplicates a filter view.
+reqDuplicateFilterView :: Lens' Request' (Maybe DuplicateFilterViewRequest)
+reqDuplicateFilterView
+  = lens _reqDuplicateFilterView
+      (\ s a -> s{_reqDuplicateFilterView = a})
+
+-- | Adds a new conditional format rule.
+reqAddConditionalFormatRule :: Lens' Request' (Maybe AddConditionalFormatRuleRequest)
+reqAddConditionalFormatRule
+  = lens _reqAddConditionalFormatRule
+      (\ s a -> s{_reqAddConditionalFormatRule = a})
+
+-- | Randomizes the order of the rows in a range.
+reqRandomizeRange :: Lens' Request' (Maybe RandomizeRangeRequest)
+reqRandomizeRange
+  = lens _reqRandomizeRange
+      (\ s a -> s{_reqRandomizeRange = a})
+
+-- | Sorts data in a range.
+reqSortRange :: Lens' Request' (Maybe SortRangeRequest)
+reqSortRange
+  = lens _reqSortRange (\ s a -> s{_reqSortRange = a})
+
+-- | Updates a named range.
+reqUpdateNamedRange :: Lens' Request' (Maybe UpdateNamedRangeRequest)
+reqUpdateNamedRange
+  = lens _reqUpdateNamedRange
+      (\ s a -> s{_reqUpdateNamedRange = a})
+
+-- | Deletes a named range.
+reqDeleteNamedRange :: Lens' Request' (Maybe DeleteNamedRangeRequest)
+reqDeleteNamedRange
+  = lens _reqDeleteNamedRange
+      (\ s a -> s{_reqDeleteNamedRange = a})
+
+-- | Inserts new cells in a sheet, shifting the existing cells.
+reqInsertRange :: Lens' Request' (Maybe InsertRangeRequest)
+reqInsertRange
+  = lens _reqInsertRange
+      (\ s a -> s{_reqInsertRange = a})
+
+-- | Removes a banded range
+reqDeleteBanding :: Lens' Request' (Maybe DeleteBandingRequest)
+reqDeleteBanding
+  = lens _reqDeleteBanding
+      (\ s a -> s{_reqDeleteBanding = a})
+
+-- | Updates a banded range
+reqUpdateBanding :: Lens' Request' (Maybe UpdateBandingRequest)
+reqUpdateBanding
+  = lens _reqUpdateBanding
+      (\ s a -> s{_reqUpdateBanding = a})
+
+-- | Clears the basic filter on a sheet.
+reqClearBasicFilter :: Lens' Request' (Maybe ClearBasicFilterRequest)
+reqClearBasicFilter
+  = lens _reqClearBasicFilter
+      (\ s a -> s{_reqClearBasicFilter = a})
+
+-- | Appends cells after the last row with data in a sheet.
+reqAppendCells :: Lens' Request' (Maybe AppendCellsRequest)
+reqAppendCells
+  = lens _reqAppendCells
+      (\ s a -> s{_reqAppendCells = a})
+
+-- | Pastes data (HTML or delimited) into a sheet.
+reqPasteData :: Lens' Request' (Maybe PasteDataRequest)
+reqPasteData
+  = lens _reqPasteData (\ s a -> s{_reqPasteData = a})
+
+-- | Updates an embedded object\'s (e.g. chart, image) position.
+reqUpdateEmbeddedObjectPosition :: Lens' Request' (Maybe UpdateEmbeddedObjectPositionRequest)
+reqUpdateEmbeddedObjectPosition
+  = lens _reqUpdateEmbeddedObjectPosition
+      (\ s a -> s{_reqUpdateEmbeddedObjectPosition = a})
+
+-- | Deletes a range of cells from a sheet, shifting the remaining cells.
+reqDeleteRange :: Lens' Request' (Maybe DeleteRangeRequest)
+reqDeleteRange
+  = lens _reqDeleteRange
+      (\ s a -> s{_reqDeleteRange = a})
+
+-- | Copies data from one area and pastes it to another.
+reqCopyPaste :: Lens' Request' (Maybe CopyPasteRequest)
+reqCopyPaste
+  = lens _reqCopyPaste (\ s a -> s{_reqCopyPaste = a})
+
+-- | Updates the state of the specified group.
+reqUpdateDimensionGroup :: Lens' Request' (Maybe UpdateDimensionGroupRequest)
+reqUpdateDimensionGroup
+  = lens _reqUpdateDimensionGroup
+      (\ s a -> s{_reqUpdateDimensionGroup = a})
+
+-- | Deletes a group over the specified range.
+reqDeleteDimensionGroup :: Lens' Request' (Maybe DeleteDimensionGroupRequest)
+reqDeleteDimensionGroup
+  = lens _reqDeleteDimensionGroup
+      (\ s a -> s{_reqDeleteDimensionGroup = a})
+
+-- | Automatically resizes one or more dimensions based on the contents of
+-- the cells in that dimension.
+reqAutoResizeDimensions :: Lens' Request' (Maybe AutoResizeDimensionsRequest)
+reqAutoResizeDimensions
+  = lens _reqAutoResizeDimensions
+      (\ s a -> s{_reqAutoResizeDimensions = a})
+
+-- | Adds a sheet.
+reqAddSheet :: Lens' Request' (Maybe AddSheetRequest)
+reqAddSheet
+  = lens _reqAddSheet (\ s a -> s{_reqAddSheet = a})
+
+-- | Finds and replaces occurrences of some text with other text.
+reqFindReplace :: Lens' Request' (Maybe FindReplaceRequest)
+reqFindReplace
+  = lens _reqFindReplace
+      (\ s a -> s{_reqFindReplace = a})
+
+-- | Deletes rows or columns in a sheet.
+reqDeleteDimension :: Lens' Request' (Maybe DeleteDimensionRequest)
+reqDeleteDimension
+  = lens _reqDeleteDimension
+      (\ s a -> s{_reqDeleteDimension = a})
+
+-- | Cuts data from one area and pastes it to another.
+reqCutPaste :: Lens' Request' (Maybe CutPasteRequest)
+reqCutPaste
+  = lens _reqCutPaste (\ s a -> s{_reqCutPaste = a})
+
+-- | Moves rows or columns to another location in a sheet.
+reqMoveDimension :: Lens' Request' (Maybe MoveDimensionRequest)
+reqMoveDimension
+  = lens _reqMoveDimension
+      (\ s a -> s{_reqMoveDimension = a})
+
+-- | Repeats a single cell across a range.
+reqRepeatCell :: Lens' Request' (Maybe RepeatCellRequest)
+reqRepeatCell
+  = lens _reqRepeatCell
+      (\ s a -> s{_reqRepeatCell = a})
+
+-- | Adds a protected range.
+reqAddProtectedRange :: Lens' Request' (Maybe AddProtectedRangeRequest)
+reqAddProtectedRange
+  = lens _reqAddProtectedRange
+      (\ s a -> s{_reqAddProtectedRange = a})
+
+-- | Updates the properties of a filter view.
+reqUpdateFilterView :: Lens' Request' (Maybe UpdateFilterViewRequest)
+reqUpdateFilterView
+  = lens _reqUpdateFilterView
+      (\ s a -> s{_reqUpdateFilterView = a})
+
+-- | Deletes a filter view from a sheet.
+reqDeleteFilterView :: Lens' Request' (Maybe DeleteFilterViewRequest)
+reqDeleteFilterView
+  = lens _reqDeleteFilterView
+      (\ s a -> s{_reqDeleteFilterView = a})
+
+-- | Inserts new rows or columns in a sheet.
+reqInsertDimension :: Lens' Request' (Maybe InsertDimensionRequest)
+reqInsertDimension
+  = lens _reqInsertDimension
+      (\ s a -> s{_reqInsertDimension = a})
+
+-- | Updates a sheet\'s properties.
+reqUpdateSheetProperties :: Lens' Request' (Maybe UpdateSheetPropertiesRequest)
+reqUpdateSheetProperties
+  = lens _reqUpdateSheetProperties
+      (\ s a -> s{_reqUpdateSheetProperties = a})
+
+-- | Deletes an existing conditional format rule.
+reqDeleteConditionalFormatRule :: Lens' Request' (Maybe DeleteConditionalFormatRuleRequest)
+reqDeleteConditionalFormatRule
+  = lens _reqDeleteConditionalFormatRule
+      (\ s a -> s{_reqDeleteConditionalFormatRule = a})
+
+-- | Updates an existing conditional format rule.
+reqUpdateConditionalFormatRule :: Lens' Request' (Maybe UpdateConditionalFormatRuleRequest)
+reqUpdateConditionalFormatRule
+  = lens _reqUpdateConditionalFormatRule
+      (\ s a -> s{_reqUpdateConditionalFormatRule = a})
+
+-- | Deletes an embedded object (e.g, chart, image) in a sheet.
+reqDeleteEmbeddedObject :: Lens' Request' (Maybe DeleteEmbeddedObjectRequest)
+reqDeleteEmbeddedObject
+  = lens _reqDeleteEmbeddedObject
+      (\ s a -> s{_reqDeleteEmbeddedObject = a})
+
+-- | Deletes developer metadata
+reqDeleteDeveloperMetadata :: Lens' Request' (Maybe DeleteDeveloperMetadataRequest)
+reqDeleteDeveloperMetadata
+  = lens _reqDeleteDeveloperMetadata
+      (\ s a -> s{_reqDeleteDeveloperMetadata = a})
+
+-- | Updates an existing developer metadata entry
+reqUpdateDeveloperMetadata :: Lens' Request' (Maybe UpdateDeveloperMetadataRequest)
+reqUpdateDeveloperMetadata
+  = lens _reqUpdateDeveloperMetadata
+      (\ s a -> s{_reqUpdateDeveloperMetadata = a})
+
+-- | Merges cells together.
+reqMergeCells :: Lens' Request' (Maybe MergeCellsRequest)
+reqMergeCells
+  = lens _reqMergeCells
+      (\ s a -> s{_reqMergeCells = a})
+
+-- | Adds a named range.
+reqAddNamedRange :: Lens' Request' (Maybe AddNamedRangeRequest)
+reqAddNamedRange
+  = lens _reqAddNamedRange
+      (\ s a -> s{_reqAddNamedRange = a})
+
+-- | Adds a chart.
+reqAddChart :: Lens' Request' (Maybe AddChartRequest)
+reqAddChart
+  = lens _reqAddChart (\ s a -> s{_reqAddChart = a})
+
+-- | Adds a new banded range
+reqAddBanding :: Lens' Request' (Maybe AddBandingRequest)
+reqAddBanding
+  = lens _reqAddBanding
+      (\ s a -> s{_reqAddBanding = a})
+
+-- | Duplicates a sheet.
+reqDuplicateSheet :: Lens' Request' (Maybe DuplicateSheetRequest)
+reqDuplicateSheet
+  = lens _reqDuplicateSheet
+      (\ s a -> s{_reqDuplicateSheet = a})
+
+-- | Automatically fills in more data based on existing data.
+reqAutoFill :: Lens' Request' (Maybe AutoFillRequest)
+reqAutoFill
+  = lens _reqAutoFill (\ s a -> s{_reqAutoFill = a})
+
+-- | Updates dimensions\' properties.
+reqUpdateDimensionProperties :: Lens' Request' (Maybe UpdateDimensionPropertiesRequest)
+reqUpdateDimensionProperties
+  = lens _reqUpdateDimensionProperties
+      (\ s a -> s{_reqUpdateDimensionProperties = a})
+
+-- | Updates a chart\'s specifications.
+reqUpdateChartSpec :: Lens' Request' (Maybe UpdateChartSpecRequest)
+reqUpdateChartSpec
+  = lens _reqUpdateChartSpec
+      (\ s a -> s{_reqUpdateChartSpec = a})
+
+-- | Sets the basic filter on a sheet.
+reqSetBasicFilter :: Lens' Request' (Maybe SetBasicFilterRequest)
+reqSetBasicFilter
+  = lens _reqSetBasicFilter
+      (\ s a -> s{_reqSetBasicFilter = a})
+
+-- | Converts a column of text into many columns of text.
+reqTextToColumns :: Lens' Request' (Maybe TextToColumnsRequest)
+reqTextToColumns
+  = lens _reqTextToColumns
+      (\ s a -> s{_reqTextToColumns = a})
+
+-- | Creates a group over the specified range.
+reqAddDimensionGroup :: Lens' Request' (Maybe AddDimensionGroupRequest)
+reqAddDimensionGroup
+  = lens _reqAddDimensionGroup
+      (\ s a -> s{_reqAddDimensionGroup = a})
+
+-- | Updates the spreadsheet\'s properties.
+reqUpdateSpreadsheetProperties :: Lens' Request' (Maybe UpdateSpreadsheetPropertiesRequest)
+reqUpdateSpreadsheetProperties
+  = lens _reqUpdateSpreadsheetProperties
+      (\ s a -> s{_reqUpdateSpreadsheetProperties = a})
+
+-- | Deletes a sheet.
+reqDeleteSheet :: Lens' Request' (Maybe DeleteSheetRequest)
+reqDeleteSheet
+  = lens _reqDeleteSheet
+      (\ s a -> s{_reqDeleteSheet = a})
+
+-- | Unmerges merged cells.
+reqUnmergeCells :: Lens' Request' (Maybe UnmergeCellsRequest)
+reqUnmergeCells
+  = lens _reqUnmergeCells
+      (\ s a -> s{_reqUnmergeCells = a})
+
+-- | Updates the borders in a range of cells.
+reqUpdateBOrders :: Lens' Request' (Maybe UpdateBOrdersRequest)
+reqUpdateBOrders
+  = lens _reqUpdateBOrders
+      (\ s a -> s{_reqUpdateBOrders = a})
+
+-- | Appends dimensions to the end of a sheet.
+reqAppendDimension :: Lens' Request' (Maybe AppendDimensionRequest)
+reqAppendDimension
+  = lens _reqAppendDimension
+      (\ s a -> s{_reqAppendDimension = a})
+
+-- | Sets data validation for one or more cells.
+reqSetDataValidation :: Lens' Request' (Maybe SetDataValidationRequest)
+reqSetDataValidation
+  = lens _reqSetDataValidation
+      (\ s a -> s{_reqSetDataValidation = a})
+
+instance FromJSON Request' where
+        parseJSON
+          = withObject "Request"
+              (\ o ->
+                 Request'' <$>
+                   (o .:? "addFilterView") <*>
+                     (o .:? "deleteProtectedRange")
+                     <*> (o .:? "updateProtectedRange")
+                     <*> (o .:? "updateCells")
+                     <*> (o .:? "createDeveloperMetadata")
+                     <*> (o .:? "duplicateFilterView")
+                     <*> (o .:? "addConditionalFormatRule")
+                     <*> (o .:? "randomizeRange")
+                     <*> (o .:? "sortRange")
+                     <*> (o .:? "updateNamedRange")
+                     <*> (o .:? "deleteNamedRange")
+                     <*> (o .:? "insertRange")
+                     <*> (o .:? "deleteBanding")
+                     <*> (o .:? "updateBanding")
+                     <*> (o .:? "clearBasicFilter")
+                     <*> (o .:? "appendCells")
+                     <*> (o .:? "pasteData")
+                     <*> (o .:? "updateEmbeddedObjectPosition")
+                     <*> (o .:? "deleteRange")
+                     <*> (o .:? "copyPaste")
+                     <*> (o .:? "updateDimensionGroup")
+                     <*> (o .:? "deleteDimensionGroup")
+                     <*> (o .:? "autoResizeDimensions")
+                     <*> (o .:? "addSheet")
+                     <*> (o .:? "findReplace")
+                     <*> (o .:? "deleteDimension")
+                     <*> (o .:? "cutPaste")
+                     <*> (o .:? "moveDimension")
+                     <*> (o .:? "repeatCell")
+                     <*> (o .:? "addProtectedRange")
+                     <*> (o .:? "updateFilterView")
+                     <*> (o .:? "deleteFilterView")
+                     <*> (o .:? "insertDimension")
+                     <*> (o .:? "updateSheetProperties")
+                     <*> (o .:? "deleteConditionalFormatRule")
+                     <*> (o .:? "updateConditionalFormatRule")
+                     <*> (o .:? "deleteEmbeddedObject")
+                     <*> (o .:? "deleteDeveloperMetadata")
+                     <*> (o .:? "updateDeveloperMetadata")
+                     <*> (o .:? "mergeCells")
+                     <*> (o .:? "addNamedRange")
+                     <*> (o .:? "addChart")
+                     <*> (o .:? "addBanding")
+                     <*> (o .:? "duplicateSheet")
+                     <*> (o .:? "autoFill")
+                     <*> (o .:? "updateDimensionProperties")
+                     <*> (o .:? "updateChartSpec")
+                     <*> (o .:? "setBasicFilter")
+                     <*> (o .:? "textToColumns")
+                     <*> (o .:? "addDimensionGroup")
+                     <*> (o .:? "updateSpreadsheetProperties")
+                     <*> (o .:? "deleteSheet")
+                     <*> (o .:? "unmergeCells")
+                     <*> (o .:? "updateBorders")
+                     <*> (o .:? "appendDimension")
+                     <*> (o .:? "setDataValidation"))
+
+instance ToJSON Request' where
+        toJSON Request''{..}
+          = object
+              (catMaybes
+                 [("addFilterView" .=) <$> _reqAddFilterView,
+                  ("deleteProtectedRange" .=) <$>
+                    _reqDeleteProtectedRange,
+                  ("updateProtectedRange" .=) <$>
+                    _reqUpdateProtectedRange,
+                  ("updateCells" .=) <$> _reqUpdateCells,
+                  ("createDeveloperMetadata" .=) <$>
+                    _reqCreateDeveloperMetadata,
+                  ("duplicateFilterView" .=) <$>
+                    _reqDuplicateFilterView,
+                  ("addConditionalFormatRule" .=) <$>
+                    _reqAddConditionalFormatRule,
+                  ("randomizeRange" .=) <$> _reqRandomizeRange,
+                  ("sortRange" .=) <$> _reqSortRange,
+                  ("updateNamedRange" .=) <$> _reqUpdateNamedRange,
+                  ("deleteNamedRange" .=) <$> _reqDeleteNamedRange,
+                  ("insertRange" .=) <$> _reqInsertRange,
+                  ("deleteBanding" .=) <$> _reqDeleteBanding,
+                  ("updateBanding" .=) <$> _reqUpdateBanding,
+                  ("clearBasicFilter" .=) <$> _reqClearBasicFilter,
+                  ("appendCells" .=) <$> _reqAppendCells,
+                  ("pasteData" .=) <$> _reqPasteData,
+                  ("updateEmbeddedObjectPosition" .=) <$>
+                    _reqUpdateEmbeddedObjectPosition,
+                  ("deleteRange" .=) <$> _reqDeleteRange,
+                  ("copyPaste" .=) <$> _reqCopyPaste,
+                  ("updateDimensionGroup" .=) <$>
+                    _reqUpdateDimensionGroup,
+                  ("deleteDimensionGroup" .=) <$>
+                    _reqDeleteDimensionGroup,
+                  ("autoResizeDimensions" .=) <$>
+                    _reqAutoResizeDimensions,
+                  ("addSheet" .=) <$> _reqAddSheet,
+                  ("findReplace" .=) <$> _reqFindReplace,
+                  ("deleteDimension" .=) <$> _reqDeleteDimension,
+                  ("cutPaste" .=) <$> _reqCutPaste,
+                  ("moveDimension" .=) <$> _reqMoveDimension,
+                  ("repeatCell" .=) <$> _reqRepeatCell,
+                  ("addProtectedRange" .=) <$> _reqAddProtectedRange,
+                  ("updateFilterView" .=) <$> _reqUpdateFilterView,
+                  ("deleteFilterView" .=) <$> _reqDeleteFilterView,
+                  ("insertDimension" .=) <$> _reqInsertDimension,
+                  ("updateSheetProperties" .=) <$>
+                    _reqUpdateSheetProperties,
+                  ("deleteConditionalFormatRule" .=) <$>
+                    _reqDeleteConditionalFormatRule,
+                  ("updateConditionalFormatRule" .=) <$>
+                    _reqUpdateConditionalFormatRule,
+                  ("deleteEmbeddedObject" .=) <$>
+                    _reqDeleteEmbeddedObject,
+                  ("deleteDeveloperMetadata" .=) <$>
+                    _reqDeleteDeveloperMetadata,
+                  ("updateDeveloperMetadata" .=) <$>
+                    _reqUpdateDeveloperMetadata,
+                  ("mergeCells" .=) <$> _reqMergeCells,
+                  ("addNamedRange" .=) <$> _reqAddNamedRange,
+                  ("addChart" .=) <$> _reqAddChart,
+                  ("addBanding" .=) <$> _reqAddBanding,
+                  ("duplicateSheet" .=) <$> _reqDuplicateSheet,
+                  ("autoFill" .=) <$> _reqAutoFill,
+                  ("updateDimensionProperties" .=) <$>
+                    _reqUpdateDimensionProperties,
+                  ("updateChartSpec" .=) <$> _reqUpdateChartSpec,
+                  ("setBasicFilter" .=) <$> _reqSetBasicFilter,
+                  ("textToColumns" .=) <$> _reqTextToColumns,
+                  ("addDimensionGroup" .=) <$> _reqAddDimensionGroup,
+                  ("updateSpreadsheetProperties" .=) <$>
+                    _reqUpdateSpreadsheetProperties,
+                  ("deleteSheet" .=) <$> _reqDeleteSheet,
+                  ("unmergeCells" .=) <$> _reqUnmergeCells,
+                  ("updateBorders" .=) <$> _reqUpdateBOrders,
+                  ("appendDimension" .=) <$> _reqAppendDimension,
+                  ("setDataValidation" .=) <$> _reqSetDataValidation])
+
+-- | Properties that describe the style of a line.
+--
+-- /See:/ 'lineStyle' smart constructor.
+data LineStyle = LineStyle'
+    { _lsWidth :: !(Maybe (Textual Int32))
+    , _lsType  :: !(Maybe LineStyleType)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'LineStyle' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lsWidth'
+--
+-- * 'lsType'
+lineStyle
+    :: LineStyle
+lineStyle =
+    LineStyle'
+    { _lsWidth = Nothing
+    , _lsType = Nothing
+    }
+
+-- | The thickness of the line, in px.
+lsWidth :: Lens' LineStyle (Maybe Int32)
+lsWidth
+  = lens _lsWidth (\ s a -> s{_lsWidth = a}) .
+      mapping _Coerce
+
+-- | The dash type of the line.
+lsType :: Lens' LineStyle (Maybe LineStyleType)
+lsType = lens _lsType (\ s a -> s{_lsType = a})
+
+instance FromJSON LineStyle where
+        parseJSON
+          = withObject "LineStyle"
+              (\ o ->
+                 LineStyle' <$> (o .:? "width") <*> (o .:? "type"))
+
+instance ToJSON LineStyle where
+        toJSON LineStyle'{..}
+          = object
+              (catMaybes
+                 [("width" .=) <$> _lsWidth, ("type" .=) <$> _lsType])
 
 -- | The result of deleting a conditional format rule.
 --
diff --git a/gen/Network/Google/Sheets/Types/Sum.hs b/gen/Network/Google/Sheets/Types/Sum.hs
--- a/gen/Network/Google/Sheets/Types/Sum.hs
+++ b/gen/Network/Google/Sheets/Types/Sum.hs
@@ -16,1945 +16,2989 @@
 --
 module Network.Google.Sheets.Types.Sum where
 
-import           Network.Google.Prelude
-
--- | What kind of data to paste.
-data CopyPasteRequestPasteType
-    = PasteNormal
-      -- ^ @PASTE_NORMAL@
-      -- Paste values, formulas, formats, and merges.
-    | PasteValues
-      -- ^ @PASTE_VALUES@
-      -- Paste the values ONLY without formats, formulas, or merges.
-    | PasteFormat
-      -- ^ @PASTE_FORMAT@
-      -- Paste the format and data validation only.
-    | PasteNoBOrders
-      -- ^ @PASTE_NO_BORDERS@
-      -- Like PASTE_NORMAL but without borders.
-    | PasteFormula
-      -- ^ @PASTE_FORMULA@
-      -- Paste the formulas only.
-    | PasteDataValidation
-      -- ^ @PASTE_DATA_VALIDATION@
-      -- Paste the data validation only.
-    | PasteConditionalFormatting
-      -- ^ @PASTE_CONDITIONAL_FORMATTING@
-      -- Paste the conditional formatting rules only.
-      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
-
-instance Hashable CopyPasteRequestPasteType
-
-instance FromHttpApiData CopyPasteRequestPasteType where
-    parseQueryParam = \case
-        "PASTE_NORMAL" -> Right PasteNormal
-        "PASTE_VALUES" -> Right PasteValues
-        "PASTE_FORMAT" -> Right PasteFormat
-        "PASTE_NO_BORDERS" -> Right PasteNoBOrders
-        "PASTE_FORMULA" -> Right PasteFormula
-        "PASTE_DATA_VALIDATION" -> Right PasteDataValidation
-        "PASTE_CONDITIONAL_FORMATTING" -> Right PasteConditionalFormatting
-        x -> Left ("Unable to parse CopyPasteRequestPasteType from: " <> x)
-
-instance ToHttpApiData CopyPasteRequestPasteType where
-    toQueryParam = \case
-        PasteNormal -> "PASTE_NORMAL"
-        PasteValues -> "PASTE_VALUES"
-        PasteFormat -> "PASTE_FORMAT"
-        PasteNoBOrders -> "PASTE_NO_BORDERS"
-        PasteFormula -> "PASTE_FORMULA"
-        PasteDataValidation -> "PASTE_DATA_VALIDATION"
-        PasteConditionalFormatting -> "PASTE_CONDITIONAL_FORMATTING"
-
-instance FromJSON CopyPasteRequestPasteType where
-    parseJSON = parseJSONText "CopyPasteRequestPasteType"
-
-instance ToJSON CopyPasteRequestPasteType where
-    toJSON = toJSONText
-
--- | The position of this axis.
-data BasicChartAxisPosition
-    = BasicChartAxisPositionUnspecified
-      -- ^ @BASIC_CHART_AXIS_POSITION_UNSPECIFIED@
-      -- Default value, do not use.
-    | BottomAxis
-      -- ^ @BOTTOM_AXIS@
-      -- The axis rendered at the bottom of a chart. For most charts, this is the
-      -- standard major axis. For bar charts, this is a minor axis.
-    | LeftAxis
-      -- ^ @LEFT_AXIS@
-      -- The axis rendered at the left of a chart. For most charts, this is a
-      -- minor axis. For bar charts, this is the standard major axis.
-    | RightAxis
-      -- ^ @RIGHT_AXIS@
-      -- The axis rendered at the right of a chart. For most charts, this is a
-      -- minor axis. For bar charts, this is an unusual major axis.
-      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
-
-instance Hashable BasicChartAxisPosition
-
-instance FromHttpApiData BasicChartAxisPosition where
-    parseQueryParam = \case
-        "BASIC_CHART_AXIS_POSITION_UNSPECIFIED" -> Right BasicChartAxisPositionUnspecified
-        "BOTTOM_AXIS" -> Right BottomAxis
-        "LEFT_AXIS" -> Right LeftAxis
-        "RIGHT_AXIS" -> Right RightAxis
-        x -> Left ("Unable to parse BasicChartAxisPosition from: " <> x)
-
-instance ToHttpApiData BasicChartAxisPosition where
-    toQueryParam = \case
-        BasicChartAxisPositionUnspecified -> "BASIC_CHART_AXIS_POSITION_UNSPECIFIED"
-        BottomAxis -> "BOTTOM_AXIS"
-        LeftAxis -> "LEFT_AXIS"
-        RightAxis -> "RIGHT_AXIS"
-
-instance FromJSON BasicChartAxisPosition where
-    parseJSON = parseJSONText "BasicChartAxisPosition"
-
-instance ToJSON BasicChartAxisPosition where
-    toJSON = toJSONText
-
--- | The dimension from which deleted cells will be replaced with. If ROWS,
--- existing cells will be shifted upward to replace the deleted cells. If
--- COLUMNS, existing cells will be shifted left to replace the deleted
--- cells.
-data DeleteRangeRequestShiftDimension
-    = DimensionUnspecified
-      -- ^ @DIMENSION_UNSPECIFIED@
-      -- The default value, do not use.
-    | Rows
-      -- ^ @ROWS@
-      -- Operates on the rows of a sheet.
-    | Columns
-      -- ^ @COLUMNS@
-      -- Operates on the columns of a sheet.
-      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
-
-instance Hashable DeleteRangeRequestShiftDimension
-
-instance FromHttpApiData DeleteRangeRequestShiftDimension where
-    parseQueryParam = \case
-        "DIMENSION_UNSPECIFIED" -> Right DimensionUnspecified
-        "ROWS" -> Right Rows
-        "COLUMNS" -> Right Columns
-        x -> Left ("Unable to parse DeleteRangeRequestShiftDimension from: " <> x)
-
-instance ToHttpApiData DeleteRangeRequestShiftDimension where
-    toQueryParam = \case
-        DimensionUnspecified -> "DIMENSION_UNSPECIFIED"
-        Rows -> "ROWS"
-        Columns -> "COLUMNS"
-
-instance FromJSON DeleteRangeRequestShiftDimension where
-    parseJSON = parseJSONText "DeleteRangeRequestShiftDimension"
-
-instance ToJSON DeleteRangeRequestShiftDimension where
-    toJSON = toJSONText
-
--- | The minor axis that will specify the range of values for this series.
--- For example, if charting stocks over time, the \"Volume\" series may
--- want to be pinned to the right with the prices pinned to the left,
--- because the scale of trading volume is different than the scale of
--- prices. It is an error to specify an axis that isn\'t a valid minor axis
--- for the chart\'s type.
-data BasicChartSeriesTargetAxis
-    = BCSTABasicChartAxisPositionUnspecified
-      -- ^ @BASIC_CHART_AXIS_POSITION_UNSPECIFIED@
-      -- Default value, do not use.
-    | BCSTABottomAxis
-      -- ^ @BOTTOM_AXIS@
-      -- The axis rendered at the bottom of a chart. For most charts, this is the
-      -- standard major axis. For bar charts, this is a minor axis.
-    | BCSTALeftAxis
-      -- ^ @LEFT_AXIS@
-      -- The axis rendered at the left of a chart. For most charts, this is a
-      -- minor axis. For bar charts, this is the standard major axis.
-    | BCSTARightAxis
-      -- ^ @RIGHT_AXIS@
-      -- The axis rendered at the right of a chart. For most charts, this is a
-      -- minor axis. For bar charts, this is an unusual major axis.
-      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
-
-instance Hashable BasicChartSeriesTargetAxis
-
-instance FromHttpApiData BasicChartSeriesTargetAxis where
-    parseQueryParam = \case
-        "BASIC_CHART_AXIS_POSITION_UNSPECIFIED" -> Right BCSTABasicChartAxisPositionUnspecified
-        "BOTTOM_AXIS" -> Right BCSTABottomAxis
-        "LEFT_AXIS" -> Right BCSTALeftAxis
-        "RIGHT_AXIS" -> Right BCSTARightAxis
-        x -> Left ("Unable to parse BasicChartSeriesTargetAxis from: " <> x)
-
-instance ToHttpApiData BasicChartSeriesTargetAxis where
-    toQueryParam = \case
-        BCSTABasicChartAxisPositionUnspecified -> "BASIC_CHART_AXIS_POSITION_UNSPECIFIED"
-        BCSTABottomAxis -> "BOTTOM_AXIS"
-        BCSTALeftAxis -> "LEFT_AXIS"
-        BCSTARightAxis -> "RIGHT_AXIS"
-
-instance FromJSON BasicChartSeriesTargetAxis where
-    parseJSON = parseJSONText "BasicChartSeriesTargetAxis"
-
-instance ToJSON BasicChartSeriesTargetAxis where
-    toJSON = toJSONText
-
--- | Determines how dates, times, and durations in the response should be
--- rendered. This is ignored if response_value_render_option is
--- FORMATTED_VALUE. The default dateTime render option is
--- [DateTimeRenderOption.SERIAL_NUMBER].
-data BatchUpdateValuesRequestResponseDateTimeRenderOption
-    = SerialNumber
-      -- ^ @SERIAL_NUMBER@
-      -- Instructs date, time, datetime, and duration fields to be output as
-      -- doubles in \"serial number\" format, as popularized by Lotus 1-2-3. Days
-      -- are counted from December 31st 1899 and are incremented by 1, and times
-      -- are fractions of a day. For example, January 1st 1900 at noon would be
-      -- 1.5, 1 because it\'s 1 day offset from December 31st 1899, and .5
-      -- because noon is half a day. February 1st 1900 at 3pm would be 32.625.
-      -- This correctly treats the year 1900 as not a leap year.
-    | FormattedString
-      -- ^ @FORMATTED_STRING@
-      -- Instructs date, time, datetime, and duration fields to be output as
-      -- strings in their given number format (which is dependent on the
-      -- spreadsheet locale).
-      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
-
-instance Hashable BatchUpdateValuesRequestResponseDateTimeRenderOption
-
-instance FromHttpApiData BatchUpdateValuesRequestResponseDateTimeRenderOption where
-    parseQueryParam = \case
-        "SERIAL_NUMBER" -> Right SerialNumber
-        "FORMATTED_STRING" -> Right FormattedString
-        x -> Left ("Unable to parse BatchUpdateValuesRequestResponseDateTimeRenderOption from: " <> x)
-
-instance ToHttpApiData BatchUpdateValuesRequestResponseDateTimeRenderOption where
-    toQueryParam = \case
-        SerialNumber -> "SERIAL_NUMBER"
-        FormattedString -> "FORMATTED_STRING"
-
-instance FromJSON BatchUpdateValuesRequestResponseDateTimeRenderOption where
-    parseJSON = parseJSONText "BatchUpdateValuesRequestResponseDateTimeRenderOption"
-
-instance ToJSON BatchUpdateValuesRequestResponseDateTimeRenderOption where
-    toJSON = toJSONText
-
--- | Whether rows or columns should be appended.
-data AppendDimensionRequestDimension
-    = ADRDDimensionUnspecified
-      -- ^ @DIMENSION_UNSPECIFIED@
-      -- The default value, do not use.
-    | ADRDRows
-      -- ^ @ROWS@
-      -- Operates on the rows of a sheet.
-    | ADRDColumns
-      -- ^ @COLUMNS@
-      -- Operates on the columns of a sheet.
-      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
-
-instance Hashable AppendDimensionRequestDimension
-
-instance FromHttpApiData AppendDimensionRequestDimension where
-    parseQueryParam = \case
-        "DIMENSION_UNSPECIFIED" -> Right ADRDDimensionUnspecified
-        "ROWS" -> Right ADRDRows
-        "COLUMNS" -> Right ADRDColumns
-        x -> Left ("Unable to parse AppendDimensionRequestDimension from: " <> x)
-
-instance ToHttpApiData AppendDimensionRequestDimension where
-    toQueryParam = \case
-        ADRDDimensionUnspecified -> "DIMENSION_UNSPECIFIED"
-        ADRDRows -> "ROWS"
-        ADRDColumns -> "COLUMNS"
-
-instance FromJSON AppendDimensionRequestDimension where
-    parseJSON = parseJSONText "AppendDimensionRequestDimension"
-
-instance ToJSON AppendDimensionRequestDimension where
-    toJSON = toJSONText
-
--- | The dimension of the span.
-data DimensionRangeDimension
-    = DRDDimensionUnspecified
-      -- ^ @DIMENSION_UNSPECIFIED@
-      -- The default value, do not use.
-    | DRDRows
-      -- ^ @ROWS@
-      -- Operates on the rows of a sheet.
-    | DRDColumns
-      -- ^ @COLUMNS@
-      -- Operates on the columns of a sheet.
-      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
-
-instance Hashable DimensionRangeDimension
-
-instance FromHttpApiData DimensionRangeDimension where
-    parseQueryParam = \case
-        "DIMENSION_UNSPECIFIED" -> Right DRDDimensionUnspecified
-        "ROWS" -> Right DRDRows
-        "COLUMNS" -> Right DRDColumns
-        x -> Left ("Unable to parse DimensionRangeDimension from: " <> x)
-
-instance ToHttpApiData DimensionRangeDimension where
-    toQueryParam = \case
-        DRDDimensionUnspecified -> "DIMENSION_UNSPECIFIED"
-        DRDRows -> "ROWS"
-        DRDColumns -> "COLUMNS"
-
-instance FromJSON DimensionRangeDimension where
-    parseJSON = parseJSONText "DimensionRangeDimension"
-
-instance ToJSON DimensionRangeDimension where
-    toJSON = toJSONText
-
--- | The dimension that data should be filled into.
-data SourceAndDestinationDimension
-    = SADDDimensionUnspecified
-      -- ^ @DIMENSION_UNSPECIFIED@
-      -- The default value, do not use.
-    | SADDRows
-      -- ^ @ROWS@
-      -- Operates on the rows of a sheet.
-    | SADDColumns
-      -- ^ @COLUMNS@
-      -- Operates on the columns of a sheet.
-      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
-
-instance Hashable SourceAndDestinationDimension
-
-instance FromHttpApiData SourceAndDestinationDimension where
-    parseQueryParam = \case
-        "DIMENSION_UNSPECIFIED" -> Right SADDDimensionUnspecified
-        "ROWS" -> Right SADDRows
-        "COLUMNS" -> Right SADDColumns
-        x -> Left ("Unable to parse SourceAndDestinationDimension from: " <> x)
-
-instance ToHttpApiData SourceAndDestinationDimension where
-    toQueryParam = \case
-        SADDDimensionUnspecified -> "DIMENSION_UNSPECIFIED"
-        SADDRows -> "ROWS"
-        SADDColumns -> "COLUMNS"
-
-instance FromJSON SourceAndDestinationDimension where
-    parseJSON = parseJSONText "SourceAndDestinationDimension"
-
-instance ToJSON SourceAndDestinationDimension where
-    toJSON = toJSONText
-
--- | The wrap strategy for the value in the cell.
-data CellFormatWrapStrategy
-    = WrapStrategyUnspecified
-      -- ^ @WRAP_STRATEGY_UNSPECIFIED@
-      -- The default value, do not use.
-    | OverflowCell
-      -- ^ @OVERFLOW_CELL@
-      -- Lines that are longer than the cell width will be written in the next
-      -- cell over, so long as that cell is empty. If the next cell over is
-      -- non-empty, this behaves the same as CLIP. The text will never wrap to
-      -- the next line unless the user manually inserts a new line. Example: |
-      -- First sentence. | | Manual newline that is very long. \<- Text continues
-      -- into next cell | Next newline. |
-    | LegacyWrap
-      -- ^ @LEGACY_WRAP@
-      -- This wrap strategy represents the old Google Sheets wrap strategy where
-      -- words that are longer than a line are clipped rather than broken. This
-      -- strategy is not supported on all platforms and is being phased out.
-      -- Example: | Cell has a | | loooooooooo| \<- Word is clipped. | word. |
-    | Clip
-      -- ^ @CLIP@
-      -- Lines that are longer than the cell width will be clipped. The text will
-      -- never wrap to the next line unless the user manually inserts a new line.
-      -- Example: | First sentence. | | Manual newline t| \<- Text is clipped |
-      -- Next newline. |
-    | Wrap
-      -- ^ @WRAP@
-      -- Words that are longer than a line are wrapped at the character level
-      -- rather than clipped. Example: | Cell has a | | loooooooooo| \<- Word is
-      -- broken. | ong word. |
-      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
-
-instance Hashable CellFormatWrapStrategy
-
-instance FromHttpApiData CellFormatWrapStrategy where
-    parseQueryParam = \case
-        "WRAP_STRATEGY_UNSPECIFIED" -> Right WrapStrategyUnspecified
-        "OVERFLOW_CELL" -> Right OverflowCell
-        "LEGACY_WRAP" -> Right LegacyWrap
-        "CLIP" -> Right Clip
-        "WRAP" -> Right Wrap
-        x -> Left ("Unable to parse CellFormatWrapStrategy from: " <> x)
-
-instance ToHttpApiData CellFormatWrapStrategy where
-    toQueryParam = \case
-        WrapStrategyUnspecified -> "WRAP_STRATEGY_UNSPECIFIED"
-        OverflowCell -> "OVERFLOW_CELL"
-        LegacyWrap -> "LEGACY_WRAP"
-        Clip -> "CLIP"
-        Wrap -> "WRAP"
-
-instance FromJSON CellFormatWrapStrategy where
-    parseJSON = parseJSONText "CellFormatWrapStrategy"
-
-instance ToJSON CellFormatWrapStrategy where
-    toJSON = toJSONText
-
--- | How the input data should be interpreted.
-data BatchUpdateValuesRequestValueInputOption
-    = InputValueOptionUnspecified
-      -- ^ @INPUT_VALUE_OPTION_UNSPECIFIED@
-      -- Default input value. This value must not be used.
-    | Raw
-      -- ^ @RAW@
-      -- The values the user has entered will not be parsed and will be stored
-      -- as-is.
-    | UserEntered
-      -- ^ @USER_ENTERED@
-      -- The values will be parsed as if the user typed them into the UI. Numbers
-      -- will stay as numbers, but strings may be converted to numbers, dates,
-      -- etc. following the same rules that are applied when entering text into a
-      -- cell via the Google Sheets UI.
-      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
-
-instance Hashable BatchUpdateValuesRequestValueInputOption
-
-instance FromHttpApiData BatchUpdateValuesRequestValueInputOption where
-    parseQueryParam = \case
-        "INPUT_VALUE_OPTION_UNSPECIFIED" -> Right InputValueOptionUnspecified
-        "RAW" -> Right Raw
-        "USER_ENTERED" -> Right UserEntered
-        x -> Left ("Unable to parse BatchUpdateValuesRequestValueInputOption from: " <> x)
-
-instance ToHttpApiData BatchUpdateValuesRequestValueInputOption where
-    toQueryParam = \case
-        InputValueOptionUnspecified -> "INPUT_VALUE_OPTION_UNSPECIFIED"
-        Raw -> "RAW"
-        UserEntered -> "USER_ENTERED"
-
-instance FromJSON BatchUpdateValuesRequestValueInputOption where
-    parseJSON = parseJSONText "BatchUpdateValuesRequestValueInputOption"
-
-instance ToJSON BatchUpdateValuesRequestValueInputOption where
-    toJSON = toJSONText
-
--- | Determines how values in the response should be rendered. The default
--- render option is ValueRenderOption.FORMATTED_VALUE.
-data BatchUpdateValuesRequestResponseValueRenderOption
-    = FormattedValue
-      -- ^ @FORMATTED_VALUE@
-      -- Values will be calculated & formatted in the reply according to the
-      -- cell\'s formatting. Formatting is based on the spreadsheet\'s locale,
-      -- not the requesting user\'s locale. For example, if \`A1\` is \`1.23\`
-      -- and \`A2\` is \`=A1\` and formatted as currency, then \`A2\` would
-      -- return \`\"$1.23\"\`.
-    | UnformattedValue
-      -- ^ @UNFORMATTED_VALUE@
-      -- Values will be calculated, but not formatted in the reply. For example,
-      -- if \`A1\` is \`1.23\` and \`A2\` is \`=A1\` and formatted as currency,
-      -- then \`A2\` would return the number \`1.23\`.
-    | Formula
-      -- ^ @FORMULA@
-      -- Values will not be calculated. The reply will include the formulas. For
-      -- example, if \`A1\` is \`1.23\` and \`A2\` is \`=A1\` and formatted as
-      -- currency, then A2 would return \`\"=A1\"\`.
-      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
-
-instance Hashable BatchUpdateValuesRequestResponseValueRenderOption
-
-instance FromHttpApiData BatchUpdateValuesRequestResponseValueRenderOption where
-    parseQueryParam = \case
-        "FORMATTED_VALUE" -> Right FormattedValue
-        "UNFORMATTED_VALUE" -> Right UnformattedValue
-        "FORMULA" -> Right Formula
-        x -> Left ("Unable to parse BatchUpdateValuesRequestResponseValueRenderOption from: " <> x)
-
-instance ToHttpApiData BatchUpdateValuesRequestResponseValueRenderOption where
-    toQueryParam = \case
-        FormattedValue -> "FORMATTED_VALUE"
-        UnformattedValue -> "UNFORMATTED_VALUE"
-        Formula -> "FORMULA"
-
-instance FromJSON BatchUpdateValuesRequestResponseValueRenderOption where
-    parseJSON = parseJSONText "BatchUpdateValuesRequestResponseValueRenderOption"
-
-instance ToJSON BatchUpdateValuesRequestResponseValueRenderOption where
-    toJSON = toJSONText
-
--- | Where the legend of the pie chart should be drawn.
-data PieChartSpecLegendPosition
-    = PieChartLegendPositionUnspecified
-      -- ^ @PIE_CHART_LEGEND_POSITION_UNSPECIFIED@
-      -- Default value, do not use.
-    | BottomLegend
-      -- ^ @BOTTOM_LEGEND@
-      -- The legend is rendered on the bottom of the chart.
-    | LeftLegend
-      -- ^ @LEFT_LEGEND@
-      -- The legend is rendered on the left of the chart.
-    | RightLegend
-      -- ^ @RIGHT_LEGEND@
-      -- The legend is rendered on the right of the chart.
-    | TopLegend
-      -- ^ @TOP_LEGEND@
-      -- The legend is rendered on the top of the chart.
-    | NoLegend
-      -- ^ @NO_LEGEND@
-      -- No legend is rendered.
-    | LabeledLegend
-      -- ^ @LABELED_LEGEND@
-      -- Each pie slice has a label attached to it.
-      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
-
-instance Hashable PieChartSpecLegendPosition
-
-instance FromHttpApiData PieChartSpecLegendPosition where
-    parseQueryParam = \case
-        "PIE_CHART_LEGEND_POSITION_UNSPECIFIED" -> Right PieChartLegendPositionUnspecified
-        "BOTTOM_LEGEND" -> Right BottomLegend
-        "LEFT_LEGEND" -> Right LeftLegend
-        "RIGHT_LEGEND" -> Right RightLegend
-        "TOP_LEGEND" -> Right TopLegend
-        "NO_LEGEND" -> Right NoLegend
-        "LABELED_LEGEND" -> Right LabeledLegend
-        x -> Left ("Unable to parse PieChartSpecLegendPosition from: " <> x)
-
-instance ToHttpApiData PieChartSpecLegendPosition where
-    toQueryParam = \case
-        PieChartLegendPositionUnspecified -> "PIE_CHART_LEGEND_POSITION_UNSPECIFIED"
-        BottomLegend -> "BOTTOM_LEGEND"
-        LeftLegend -> "LEFT_LEGEND"
-        RightLegend -> "RIGHT_LEGEND"
-        TopLegend -> "TOP_LEGEND"
-        NoLegend -> "NO_LEGEND"
-        LabeledLegend -> "LABELED_LEGEND"
-
-instance FromJSON PieChartSpecLegendPosition where
-    parseJSON = parseJSONText "PieChartSpecLegendPosition"
-
-instance ToJSON PieChartSpecLegendPosition where
-    toJSON = toJSONText
-
--- | The vertical alignment of the value in the cell.
-data CellFormatVerticalAlignment
-    = VerticalAlignUnspecified
-      -- ^ @VERTICAL_ALIGN_UNSPECIFIED@
-      -- The vertical alignment is not specified. Do not use this.
-    | Top
-      -- ^ @TOP@
-      -- The text is explicitly aligned to the top of the cell.
-    | Middle
-      -- ^ @MIDDLE@
-      -- The text is explicitly aligned to the middle of the cell.
-    | Bottom
-      -- ^ @BOTTOM@
-      -- The text is explicitly aligned to the bottom of the cell.
-      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
-
-instance Hashable CellFormatVerticalAlignment
-
-instance FromHttpApiData CellFormatVerticalAlignment where
-    parseQueryParam = \case
-        "VERTICAL_ALIGN_UNSPECIFIED" -> Right VerticalAlignUnspecified
-        "TOP" -> Right Top
-        "MIDDLE" -> Right Middle
-        "BOTTOM" -> Right Bottom
-        x -> Left ("Unable to parse CellFormatVerticalAlignment from: " <> x)
-
-instance ToHttpApiData CellFormatVerticalAlignment where
-    toQueryParam = \case
-        VerticalAlignUnspecified -> "VERTICAL_ALIGN_UNSPECIFIED"
-        Top -> "TOP"
-        Middle -> "MIDDLE"
-        Bottom -> "BOTTOM"
-
-instance FromJSON CellFormatVerticalAlignment where
-    parseJSON = parseJSONText "CellFormatVerticalAlignment"
-
-instance ToJSON CellFormatVerticalAlignment where
-    toJSON = toJSONText
-
--- | The type of the number format. When writing, this field must be set.
-data NumberFormatType
-    = NumberFormatTypeUnspecified
-      -- ^ @NUMBER_FORMAT_TYPE_UNSPECIFIED@
-      -- The number format is not specified and is based on the contents of the
-      -- cell. Do not explicitly use this.
-    | Text
-      -- ^ @TEXT@
-      -- Text formatting, e.g \`1000.12\`
-    | Number
-      -- ^ @NUMBER@
-      -- Number formatting, e.g, \`1,000.12\`
-    | Percent
-      -- ^ @PERCENT@
-      -- Percent formatting, e.g \`10.12%\`
-    | Currency
-      -- ^ @CURRENCY@
-      -- Currency formatting, e.g \`$1,000.12\`
-    | Date
-      -- ^ @DATE@
-      -- Date formatting, e.g \`9\/26\/2008\`
-    | Time
-      -- ^ @TIME@
-      -- Time formatting, e.g \`3:59:00 PM\`
-    | DateTime
-      -- ^ @DATE_TIME@
-      -- Date+Time formatting, e.g \`9\/26\/08 15:59:00\`
-    | Scientific
-      -- ^ @SCIENTIFIC@
-      -- Scientific number formatting, e.g \`1.01E+03\`
-      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
-
-instance Hashable NumberFormatType
-
-instance FromHttpApiData NumberFormatType where
-    parseQueryParam = \case
-        "NUMBER_FORMAT_TYPE_UNSPECIFIED" -> Right NumberFormatTypeUnspecified
-        "TEXT" -> Right Text
-        "NUMBER" -> Right Number
-        "PERCENT" -> Right Percent
-        "CURRENCY" -> Right Currency
-        "DATE" -> Right Date
-        "TIME" -> Right Time
-        "DATE_TIME" -> Right DateTime
-        "SCIENTIFIC" -> Right Scientific
-        x -> Left ("Unable to parse NumberFormatType from: " <> x)
-
-instance ToHttpApiData NumberFormatType where
-    toQueryParam = \case
-        NumberFormatTypeUnspecified -> "NUMBER_FORMAT_TYPE_UNSPECIFIED"
-        Text -> "TEXT"
-        Number -> "NUMBER"
-        Percent -> "PERCENT"
-        Currency -> "CURRENCY"
-        Date -> "DATE"
-        Time -> "TIME"
-        DateTime -> "DATE_TIME"
-        Scientific -> "SCIENTIFIC"
-
-instance FromJSON NumberFormatType where
-    parseJSON = parseJSONText "NumberFormatType"
-
-instance ToJSON NumberFormatType where
-    toJSON = toJSONText
-
--- | A relative date (based on the current date). Valid only if the type is
--- DATE_BEFORE, DATE_AFTER, DATE_ON_OR_BEFORE or DATE_ON_OR_AFTER. Relative
--- dates are not supported in data validation. They are supported only in
--- conditional formatting and conditional filters.
-data ConditionValueRelativeDate
-    = RelativeDateUnspecified
-      -- ^ @RELATIVE_DATE_UNSPECIFIED@
-      -- Default value, do not use.
-    | PastYear
-      -- ^ @PAST_YEAR@
-      -- The value is one year before today.
-    | PastMonth
-      -- ^ @PAST_MONTH@
-      -- The value is one month before today.
-    | PastWeek
-      -- ^ @PAST_WEEK@
-      -- The value is one week before today.
-    | Yesterday
-      -- ^ @YESTERDAY@
-      -- The value is yesterday.
-    | Today
-      -- ^ @TODAY@
-      -- The value is today.
-    | Tomorrow
-      -- ^ @TOMORROW@
-      -- The value is tomorrow.
-      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
-
-instance Hashable ConditionValueRelativeDate
-
-instance FromHttpApiData ConditionValueRelativeDate where
-    parseQueryParam = \case
-        "RELATIVE_DATE_UNSPECIFIED" -> Right RelativeDateUnspecified
-        "PAST_YEAR" -> Right PastYear
-        "PAST_MONTH" -> Right PastMonth
-        "PAST_WEEK" -> Right PastWeek
-        "YESTERDAY" -> Right Yesterday
-        "TODAY" -> Right Today
-        "TOMORROW" -> Right Tomorrow
-        x -> Left ("Unable to parse ConditionValueRelativeDate from: " <> x)
-
-instance ToHttpApiData ConditionValueRelativeDate where
-    toQueryParam = \case
-        RelativeDateUnspecified -> "RELATIVE_DATE_UNSPECIFIED"
-        PastYear -> "PAST_YEAR"
-        PastMonth -> "PAST_MONTH"
-        PastWeek -> "PAST_WEEK"
-        Yesterday -> "YESTERDAY"
-        Today -> "TODAY"
-        Tomorrow -> "TOMORROW"
-
-instance FromJSON ConditionValueRelativeDate where
-    parseJSON = parseJSONText "ConditionValueRelativeDate"
-
-instance ToJSON ConditionValueRelativeDate where
-    toJSON = toJSONText
-
--- | The order data should be sorted.
-data SortSpecSortOrder
-    = SortOrderUnspecified
-      -- ^ @SORT_ORDER_UNSPECIFIED@
-      -- Default value, do not use this.
-    | Ascending
-      -- ^ @ASCENDING@
-      -- Sort ascending.
-    | Descending
-      -- ^ @DESCENDING@
-      -- Sort descending.
-      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
-
-instance Hashable SortSpecSortOrder
-
-instance FromHttpApiData SortSpecSortOrder where
-    parseQueryParam = \case
-        "SORT_ORDER_UNSPECIFIED" -> Right SortOrderUnspecified
-        "ASCENDING" -> Right Ascending
-        "DESCENDING" -> Right Descending
-        x -> Left ("Unable to parse SortSpecSortOrder from: " <> x)
-
-instance ToHttpApiData SortSpecSortOrder where
-    toQueryParam = \case
-        SortOrderUnspecified -> "SORT_ORDER_UNSPECIFIED"
-        Ascending -> "ASCENDING"
-        Descending -> "DESCENDING"
-
-instance FromJSON SortSpecSortOrder where
-    parseJSON = parseJSONText "SortSpecSortOrder"
-
-instance ToJSON SortSpecSortOrder where
-    toJSON = toJSONText
-
--- | A function to summarize the value. If formula is set, the only supported
--- values are SUM and CUSTOM. If sourceColumnOffset is set, then \`CUSTOM\`
--- is not supported.
-data PivotValueSummarizeFunction
-    = PivotStandardValueFunctionUnspecified
-      -- ^ @PIVOT_STANDARD_VALUE_FUNCTION_UNSPECIFIED@
-      -- The default, do not use.
-    | Sum
-      -- ^ @SUM@
-      -- Corresponds to the \`SUM\` function.
-    | Counta
-      -- ^ @COUNTA@
-      -- Corresponds to the \`COUNTA\` function.
-    | Count
-      -- ^ @COUNT@
-      -- Corresponds to the \`COUNT\` function.
-    | Countunique
-      -- ^ @COUNTUNIQUE@
-      -- Corresponds to the \`COUNTUNIQUE\` function.
-    | Average
-      -- ^ @AVERAGE@
-      -- Corresponds to the \`AVERAGE\` function.
-    | Max
-      -- ^ @MAX@
-      -- Corresponds to the \`MAX\` function.
-    | Min
-      -- ^ @MIN@
-      -- Corresponds to the \`MIN\` function.
-    | Median
-      -- ^ @MEDIAN@
-      -- Corresponds to the \`MEDIAN\` function.
-    | Product
-      -- ^ @PRODUCT@
-      -- Corresponds to the \`PRODUCT\` function.
-    | Stdev
-      -- ^ @STDEV@
-      -- Corresponds to the \`STDEV\` function.
-    | Stdevp
-      -- ^ @STDEVP@
-      -- Corresponds to the \`STDEVP\` function.
-    | Var
-      -- ^ @VAR@
-      -- Corresponds to the \`VAR\` function.
-    | Varp
-      -- ^ @VARP@
-      -- Corresponds to the \`VARP\` function.
-    | Custom
-      -- ^ @CUSTOM@
-      -- Indicates the formula should be used as-is. Only valid if
-      -- PivotValue.formula was set.
-      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
-
-instance Hashable PivotValueSummarizeFunction
-
-instance FromHttpApiData PivotValueSummarizeFunction where
-    parseQueryParam = \case
-        "PIVOT_STANDARD_VALUE_FUNCTION_UNSPECIFIED" -> Right PivotStandardValueFunctionUnspecified
-        "SUM" -> Right Sum
-        "COUNTA" -> Right Counta
-        "COUNT" -> Right Count
-        "COUNTUNIQUE" -> Right Countunique
-        "AVERAGE" -> Right Average
-        "MAX" -> Right Max
-        "MIN" -> Right Min
-        "MEDIAN" -> Right Median
-        "PRODUCT" -> Right Product
-        "STDEV" -> Right Stdev
-        "STDEVP" -> Right Stdevp
-        "VAR" -> Right Var
-        "VARP" -> Right Varp
-        "CUSTOM" -> Right Custom
-        x -> Left ("Unable to parse PivotValueSummarizeFunction from: " <> x)
-
-instance ToHttpApiData PivotValueSummarizeFunction where
-    toQueryParam = \case
-        PivotStandardValueFunctionUnspecified -> "PIVOT_STANDARD_VALUE_FUNCTION_UNSPECIFIED"
-        Sum -> "SUM"
-        Counta -> "COUNTA"
-        Count -> "COUNT"
-        Countunique -> "COUNTUNIQUE"
-        Average -> "AVERAGE"
-        Max -> "MAX"
-        Min -> "MIN"
-        Median -> "MEDIAN"
-        Product -> "PRODUCT"
-        Stdev -> "STDEV"
-        Stdevp -> "STDEVP"
-        Var -> "VAR"
-        Varp -> "VARP"
-        Custom -> "CUSTOM"
-
-instance FromJSON PivotValueSummarizeFunction where
-    parseJSON = parseJSONText "PivotValueSummarizeFunction"
-
-instance ToJSON PivotValueSummarizeFunction where
-    toJSON = toJSONText
-
--- | How a hyperlink, if it exists, should be displayed in the cell.
-data CellFormatHyperlinkDisplayType
-    = HyperlinkDisplayTypeUnspecified
-      -- ^ @HYPERLINK_DISPLAY_TYPE_UNSPECIFIED@
-      -- The default value: the hyperlink is rendered. Do not use this.
-    | Linked
-      -- ^ @LINKED@
-      -- A hyperlink should be explicitly rendered.
-    | PlainText
-      -- ^ @PLAIN_TEXT@
-      -- A hyperlink should not be rendered.
-      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
-
-instance Hashable CellFormatHyperlinkDisplayType
-
-instance FromHttpApiData CellFormatHyperlinkDisplayType where
-    parseQueryParam = \case
-        "HYPERLINK_DISPLAY_TYPE_UNSPECIFIED" -> Right HyperlinkDisplayTypeUnspecified
-        "LINKED" -> Right Linked
-        "PLAIN_TEXT" -> Right PlainText
-        x -> Left ("Unable to parse CellFormatHyperlinkDisplayType from: " <> x)
-
-instance ToHttpApiData CellFormatHyperlinkDisplayType where
-    toQueryParam = \case
-        HyperlinkDisplayTypeUnspecified -> "HYPERLINK_DISPLAY_TYPE_UNSPECIFIED"
-        Linked -> "LINKED"
-        PlainText -> "PLAIN_TEXT"
-
-instance FromJSON CellFormatHyperlinkDisplayType where
-    parseJSON = parseJSONText "CellFormatHyperlinkDisplayType"
-
-instance ToJSON CellFormatHyperlinkDisplayType where
-    toJSON = toJSONText
-
--- | The type of sheet. Defaults to GRID. This field cannot be changed once
--- set.
-data SheetPropertiesSheetType
-    = SheetTypeUnspecified
-      -- ^ @SHEET_TYPE_UNSPECIFIED@
-      -- Default value, do not use.
-    | Grid
-      -- ^ @GRID@
-      -- The sheet is a grid.
-    | Object
-      -- ^ @OBJECT@
-      -- The sheet has no grid and instead has an object like a chart or image.
-      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
-
-instance Hashable SheetPropertiesSheetType
-
-instance FromHttpApiData SheetPropertiesSheetType where
-    parseQueryParam = \case
-        "SHEET_TYPE_UNSPECIFIED" -> Right SheetTypeUnspecified
-        "GRID" -> Right Grid
-        "OBJECT" -> Right Object
-        x -> Left ("Unable to parse SheetPropertiesSheetType from: " <> x)
-
-instance ToHttpApiData SheetPropertiesSheetType where
-    toQueryParam = \case
-        SheetTypeUnspecified -> "SHEET_TYPE_UNSPECIFIED"
-        Grid -> "GRID"
-        Object -> "OBJECT"
-
-instance FromJSON SheetPropertiesSheetType where
-    parseJSON = parseJSONText "SheetPropertiesSheetType"
-
-instance ToJSON SheetPropertiesSheetType where
-    toJSON = toJSONText
-
--- | How the cells should be merged.
-data MergeCellsRequestMergeType
-    = MergeAll
-      -- ^ @MERGE_ALL@
-      -- Create a single merge from the range
-    | MergeColumns
-      -- ^ @MERGE_COLUMNS@
-      -- Create a merge for each column in the range
-    | MergeRows
-      -- ^ @MERGE_ROWS@
-      -- Create a merge for each row in the range
-      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
-
-instance Hashable MergeCellsRequestMergeType
-
-instance FromHttpApiData MergeCellsRequestMergeType where
-    parseQueryParam = \case
-        "MERGE_ALL" -> Right MergeAll
-        "MERGE_COLUMNS" -> Right MergeColumns
-        "MERGE_ROWS" -> Right MergeRows
-        x -> Left ("Unable to parse MergeCellsRequestMergeType from: " <> x)
-
-instance ToHttpApiData MergeCellsRequestMergeType where
-    toQueryParam = \case
-        MergeAll -> "MERGE_ALL"
-        MergeColumns -> "MERGE_COLUMNS"
-        MergeRows -> "MERGE_ROWS"
-
-instance FromJSON MergeCellsRequestMergeType where
-    parseJSON = parseJSONText "MergeCellsRequestMergeType"
-
-instance ToJSON MergeCellsRequestMergeType where
-    toJSON = toJSONText
-
--- | The horizontal alignment of the value in the cell.
-data CellFormatHorizontalAlignment
-    = HorizontalAlignUnspecified
-      -- ^ @HORIZONTAL_ALIGN_UNSPECIFIED@
-      -- The horizontal alignment is not specified. Do not use this.
-    | Left'
-      -- ^ @LEFT@
-      -- The text is explicitly aligned to the left of the cell.
-    | Center
-      -- ^ @CENTER@
-      -- The text is explicitly aligned to the center of the cell.
-    | Right'
-      -- ^ @RIGHT@
-      -- The text is explicitly aligned to the right of the cell.
-      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
-
-instance Hashable CellFormatHorizontalAlignment
-
-instance FromHttpApiData CellFormatHorizontalAlignment where
-    parseQueryParam = \case
-        "HORIZONTAL_ALIGN_UNSPECIFIED" -> Right HorizontalAlignUnspecified
-        "LEFT" -> Right Left'
-        "CENTER" -> Right Center
-        "RIGHT" -> Right Right'
-        x -> Left ("Unable to parse CellFormatHorizontalAlignment from: " <> x)
-
-instance ToHttpApiData CellFormatHorizontalAlignment where
-    toQueryParam = \case
-        HorizontalAlignUnspecified -> "HORIZONTAL_ALIGN_UNSPECIFIED"
-        Left' -> "LEFT"
-        Center -> "CENTER"
-        Right' -> "RIGHT"
-
-instance FromJSON CellFormatHorizontalAlignment where
-    parseJSON = parseJSONText "CellFormatHorizontalAlignment"
-
-instance ToJSON CellFormatHorizontalAlignment where
-    toJSON = toJSONText
-
--- | The type of condition.
-data BooleanConditionType
-    = ConditionTypeUnspecified
-      -- ^ @CONDITION_TYPE_UNSPECIFIED@
-      -- The default value, do not use.
-    | NumberGreater
-      -- ^ @NUMBER_GREATER@
-      -- The cell\'s value must be greater than the condition\'s value. Supported
-      -- by data validation, conditional formatting and filters. Requires a
-      -- single ConditionValue.
-    | NumberGreaterThanEQ
-      -- ^ @NUMBER_GREATER_THAN_EQ@
-      -- The cell\'s value must be greater than or equal to the condition\'s
-      -- value. Supported by data validation, conditional formatting and filters.
-      -- Requires a single ConditionValue.
-    | NumberLess
-      -- ^ @NUMBER_LESS@
-      -- The cell\'s value must be less than the condition\'s value. Supported by
-      -- data validation, conditional formatting and filters. Requires a single
-      -- ConditionValue.
-    | NumberLessThanEQ
-      -- ^ @NUMBER_LESS_THAN_EQ@
-      -- The cell\'s value must be less than or equal to the condition\'s value.
-      -- Supported by data validation, conditional formatting and filters.
-      -- Requires a single ConditionValue.
-    | NumberEQ
-      -- ^ @NUMBER_EQ@
-      -- The cell\'s value must be equal to the condition\'s value. Supported by
-      -- data validation, conditional formatting and filters. Requires a single
-      -- ConditionValue.
-    | NumberNotEQ
-      -- ^ @NUMBER_NOT_EQ@
-      -- The cell\'s value must be not equal to the condition\'s value. Supported
-      -- by data validation, conditional formatting and filters. Requires a
-      -- single ConditionValue.
-    | NumberBetween
-      -- ^ @NUMBER_BETWEEN@
-      -- The cell\'s value must be between the two condition values. Supported by
-      -- data validation, conditional formatting and filters. Requires exactly
-      -- two ConditionValues.
-    | NumberNotBetween
-      -- ^ @NUMBER_NOT_BETWEEN@
-      -- The cell\'s value must not be between the two condition values.
-      -- Supported by data validation, conditional formatting and filters.
-      -- Requires exactly two ConditionValues.
-    | TextContains
-      -- ^ @TEXT_CONTAINS@
-      -- The cell\'s value must contain the condition\'s value. Supported by data
-      -- validation, conditional formatting and filters. Requires a single
-      -- ConditionValue.
-    | TextNotContains
-      -- ^ @TEXT_NOT_CONTAINS@
-      -- The cell\'s value must not contain the condition\'s value. Supported by
-      -- data validation, conditional formatting and filters. Requires a single
-      -- ConditionValue.
-    | TextStartsWith
-      -- ^ @TEXT_STARTS_WITH@
-      -- The cell\'s value must start with the condition\'s value. Supported by
-      -- conditional formatting and filters. Requires a single ConditionValue.
-    | TextEndsWith
-      -- ^ @TEXT_ENDS_WITH@
-      -- The cell\'s value must end with the condition\'s value. Supported by
-      -- conditional formatting and filters. Requires a single ConditionValue.
-    | TextEQ
-      -- ^ @TEXT_EQ@
-      -- The cell\'s value must be exactly the condition\'s value. Supported by
-      -- data validation, conditional formatting and filters. Requires a single
-      -- ConditionValue.
-    | TextIsEmail
-      -- ^ @TEXT_IS_EMAIL@
-      -- The cell\'s value must be a valid email address. Supported by data
-      -- validation. Requires no ConditionValues.
-    | TextIsURL
-      -- ^ @TEXT_IS_URL@
-      -- The cell\'s value must be a valid URL. Supported by data validation.
-      -- Requires no ConditionValues.
-    | DateEQ
-      -- ^ @DATE_EQ@
-      -- The cell\'s value must be the same date as the condition\'s value.
-      -- Supported by data validation, conditional formatting and filters.
-      -- Requires a single ConditionValue.
-    | DateBefore
-      -- ^ @DATE_BEFORE@
-      -- The cell\'s value must be before the date of the condition\'s value.
-      -- Supported by data validation, conditional formatting and filters.
-      -- Requires a single ConditionValue that may be a relative date.
-    | DateAfter
-      -- ^ @DATE_AFTER@
-      -- The cell\'s value must be after the date of the condition\'s value.
-      -- Supported by data validation, conditional formatting and filters.
-      -- Requires a single ConditionValue that may be a relative date.
-    | DateOnOrBefore
-      -- ^ @DATE_ON_OR_BEFORE@
-      -- The cell\'s value must be on or before the date of the condition\'s
-      -- value. Supported by data validation. Requires a single ConditionValue
-      -- that may be a relative date.
-    | DateOnOrAfter
-      -- ^ @DATE_ON_OR_AFTER@
-      -- The cell\'s value must be on or after the date of the condition\'s
-      -- value. Supported by data validation. Requires a single ConditionValue
-      -- that may be a relative date.
-    | DateBetween
-      -- ^ @DATE_BETWEEN@
-      -- The cell\'s value must be between the dates of the two condition values.
-      -- Supported by data validation. Requires exactly two ConditionValues.
-    | DateNotBetween
-      -- ^ @DATE_NOT_BETWEEN@
-      -- The cell\'s value must be outside the dates of the two condition values.
-      -- Supported by data validation. Requires exactly two ConditionValues.
-    | DateIsValid
-      -- ^ @DATE_IS_VALID@
-      -- The cell\'s value must be a date. Supported by data validation. Requires
-      -- no ConditionValues.
-    | OneOfRange
-      -- ^ @ONE_OF_RANGE@
-      -- The cell\'s value must be listed in the grid in condition value\'s
-      -- range. Supported by data validation. Requires a single ConditionValue,
-      -- and the value must be a valid range in A1 notation.
-    | OneOfList
-      -- ^ @ONE_OF_LIST@
-      -- The cell\'s value must in the list of condition values. Supported by
-      -- data validation. Supports any number of condition values, one per item
-      -- in the list. Formulas are not supported in the values.
-    | Blank
-      -- ^ @BLANK@
-      -- The cell\'s value must be empty. Supported by conditional formatting and
-      -- filters. Requires no ConditionValues.
-    | NotBlank
-      -- ^ @NOT_BLANK@
-      -- The cell\'s value must not be empty. Supported by conditional formatting
-      -- and filters. Requires no ConditionValues.
-    | CustomFormula
-      -- ^ @CUSTOM_FORMULA@
-      -- The condition\'s formula must evaluate to true. Supported by data
-      -- validation, conditional formatting and filters. Requires a single
-      -- ConditionValue.
-      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
-
-instance Hashable BooleanConditionType
-
-instance FromHttpApiData BooleanConditionType where
-    parseQueryParam = \case
-        "CONDITION_TYPE_UNSPECIFIED" -> Right ConditionTypeUnspecified
-        "NUMBER_GREATER" -> Right NumberGreater
-        "NUMBER_GREATER_THAN_EQ" -> Right NumberGreaterThanEQ
-        "NUMBER_LESS" -> Right NumberLess
-        "NUMBER_LESS_THAN_EQ" -> Right NumberLessThanEQ
-        "NUMBER_EQ" -> Right NumberEQ
-        "NUMBER_NOT_EQ" -> Right NumberNotEQ
-        "NUMBER_BETWEEN" -> Right NumberBetween
-        "NUMBER_NOT_BETWEEN" -> Right NumberNotBetween
-        "TEXT_CONTAINS" -> Right TextContains
-        "TEXT_NOT_CONTAINS" -> Right TextNotContains
-        "TEXT_STARTS_WITH" -> Right TextStartsWith
-        "TEXT_ENDS_WITH" -> Right TextEndsWith
-        "TEXT_EQ" -> Right TextEQ
-        "TEXT_IS_EMAIL" -> Right TextIsEmail
-        "TEXT_IS_URL" -> Right TextIsURL
-        "DATE_EQ" -> Right DateEQ
-        "DATE_BEFORE" -> Right DateBefore
-        "DATE_AFTER" -> Right DateAfter
-        "DATE_ON_OR_BEFORE" -> Right DateOnOrBefore
-        "DATE_ON_OR_AFTER" -> Right DateOnOrAfter
-        "DATE_BETWEEN" -> Right DateBetween
-        "DATE_NOT_BETWEEN" -> Right DateNotBetween
-        "DATE_IS_VALID" -> Right DateIsValid
-        "ONE_OF_RANGE" -> Right OneOfRange
-        "ONE_OF_LIST" -> Right OneOfList
-        "BLANK" -> Right Blank
-        "NOT_BLANK" -> Right NotBlank
-        "CUSTOM_FORMULA" -> Right CustomFormula
-        x -> Left ("Unable to parse BooleanConditionType from: " <> x)
-
-instance ToHttpApiData BooleanConditionType where
-    toQueryParam = \case
-        ConditionTypeUnspecified -> "CONDITION_TYPE_UNSPECIFIED"
-        NumberGreater -> "NUMBER_GREATER"
-        NumberGreaterThanEQ -> "NUMBER_GREATER_THAN_EQ"
-        NumberLess -> "NUMBER_LESS"
-        NumberLessThanEQ -> "NUMBER_LESS_THAN_EQ"
-        NumberEQ -> "NUMBER_EQ"
-        NumberNotEQ -> "NUMBER_NOT_EQ"
-        NumberBetween -> "NUMBER_BETWEEN"
-        NumberNotBetween -> "NUMBER_NOT_BETWEEN"
-        TextContains -> "TEXT_CONTAINS"
-        TextNotContains -> "TEXT_NOT_CONTAINS"
-        TextStartsWith -> "TEXT_STARTS_WITH"
-        TextEndsWith -> "TEXT_ENDS_WITH"
-        TextEQ -> "TEXT_EQ"
-        TextIsEmail -> "TEXT_IS_EMAIL"
-        TextIsURL -> "TEXT_IS_URL"
-        DateEQ -> "DATE_EQ"
-        DateBefore -> "DATE_BEFORE"
-        DateAfter -> "DATE_AFTER"
-        DateOnOrBefore -> "DATE_ON_OR_BEFORE"
-        DateOnOrAfter -> "DATE_ON_OR_AFTER"
-        DateBetween -> "DATE_BETWEEN"
-        DateNotBetween -> "DATE_NOT_BETWEEN"
-        DateIsValid -> "DATE_IS_VALID"
-        OneOfRange -> "ONE_OF_RANGE"
-        OneOfList -> "ONE_OF_LIST"
-        Blank -> "BLANK"
-        NotBlank -> "NOT_BLANK"
-        CustomFormula -> "CUSTOM_FORMULA"
-
-instance FromJSON BooleanConditionType where
-    parseJSON = parseJSONText "BooleanConditionType"
-
-instance ToJSON BooleanConditionType where
-    toJSON = toJSONText
-
--- | The major dimension of the values. For output, if the spreadsheet data
--- is: \`A1=1,B1=2,A2=3,B2=4\`, then requesting
--- \`range=A1:B2,majorDimension=ROWS\` will return \`[[1,2],[3,4]]\`,
--- whereas requesting \`range=A1:B2,majorDimension=COLUMNS\` will return
--- \`[[1,3],[2,4]]\`. For input, with \`range=A1:B2,majorDimension=ROWS\`
--- then \`[[1,2],[3,4]]\` will set \`A1=1,B1=2,A2=3,B2=4\`. With
--- \`range=A1:B2,majorDimension=COLUMNS\` then \`[[1,2],[3,4]]\` will set
--- \`A1=1,B1=3,A2=2,B2=4\`. When writing, if this field is not set, it
--- defaults to ROWS.
-data ValueRangeMajorDimension
-    = VRMDDimensionUnspecified
-      -- ^ @DIMENSION_UNSPECIFIED@
-      -- The default value, do not use.
-    | VRMDRows
-      -- ^ @ROWS@
-      -- Operates on the rows of a sheet.
-    | VRMDColumns
-      -- ^ @COLUMNS@
-      -- Operates on the columns of a sheet.
-      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
-
-instance Hashable ValueRangeMajorDimension
-
-instance FromHttpApiData ValueRangeMajorDimension where
-    parseQueryParam = \case
-        "DIMENSION_UNSPECIFIED" -> Right VRMDDimensionUnspecified
-        "ROWS" -> Right VRMDRows
-        "COLUMNS" -> Right VRMDColumns
-        x -> Left ("Unable to parse ValueRangeMajorDimension from: " <> x)
-
-instance ToHttpApiData ValueRangeMajorDimension where
-    toQueryParam = \case
-        VRMDDimensionUnspecified -> "DIMENSION_UNSPECIFIED"
-        VRMDRows -> "ROWS"
-        VRMDColumns -> "COLUMNS"
-
-instance FromJSON ValueRangeMajorDimension where
-    parseJSON = parseJSONText "ValueRangeMajorDimension"
-
-instance ToJSON ValueRangeMajorDimension where
-    toJSON = toJSONText
-
--- | The order the values in this group should be sorted.
-data PivotGroupSortOrder
-    = PGSOSortOrderUnspecified
-      -- ^ @SORT_ORDER_UNSPECIFIED@
-      -- Default value, do not use this.
-    | PGSOAscending
-      -- ^ @ASCENDING@
-      -- Sort ascending.
-    | PGSODescending
-      -- ^ @DESCENDING@
-      -- Sort descending.
-      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
-
-instance Hashable PivotGroupSortOrder
-
-instance FromHttpApiData PivotGroupSortOrder where
-    parseQueryParam = \case
-        "SORT_ORDER_UNSPECIFIED" -> Right PGSOSortOrderUnspecified
-        "ASCENDING" -> Right PGSOAscending
-        "DESCENDING" -> Right PGSODescending
-        x -> Left ("Unable to parse PivotGroupSortOrder from: " <> x)
-
-instance ToHttpApiData PivotGroupSortOrder where
-    toQueryParam = \case
-        PGSOSortOrderUnspecified -> "SORT_ORDER_UNSPECIFIED"
-        PGSOAscending -> "ASCENDING"
-        PGSODescending -> "DESCENDING"
-
-instance FromJSON PivotGroupSortOrder where
-    parseJSON = parseJSONText "PivotGroupSortOrder"
-
-instance ToJSON PivotGroupSortOrder where
-    toJSON = toJSONText
-
--- | The type of the chart.
-data BasicChartSpecChartType
-    = BasicChartTypeUnspecified
-      -- ^ @BASIC_CHART_TYPE_UNSPECIFIED@
-      -- Default value, do not use.
-    | Bar
-      -- ^ @BAR@
-      -- A </chart/interactive/docs/gallery/barchart bar chart>.
-    | Line
-      -- ^ @LINE@
-      -- A </chart/interactive/docs/gallery/linechart line chart>.
-    | Area
-      -- ^ @AREA@
-      -- An </chart/interactive/docs/gallery/areachart area chart>.
-    | Column
-      -- ^ @COLUMN@
-      -- A </chart/interactive/docs/gallery/columnchart column chart>.
-    | Scatter
-      -- ^ @SCATTER@
-      -- A </chart/interactive/docs/gallery/scatterchart scatter chart>.
-    | Combo
-      -- ^ @COMBO@
-      -- A </chart/interactive/docs/gallery/combochart combo chart>.
-      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
-
-instance Hashable BasicChartSpecChartType
-
-instance FromHttpApiData BasicChartSpecChartType where
-    parseQueryParam = \case
-        "BASIC_CHART_TYPE_UNSPECIFIED" -> Right BasicChartTypeUnspecified
-        "BAR" -> Right Bar
-        "LINE" -> Right Line
-        "AREA" -> Right Area
-        "COLUMN" -> Right Column
-        "SCATTER" -> Right Scatter
-        "COMBO" -> Right Combo
-        x -> Left ("Unable to parse BasicChartSpecChartType from: " <> x)
-
-instance ToHttpApiData BasicChartSpecChartType where
-    toQueryParam = \case
-        BasicChartTypeUnspecified -> "BASIC_CHART_TYPE_UNSPECIFIED"
-        Bar -> "BAR"
-        Line -> "LINE"
-        Area -> "AREA"
-        Column -> "COLUMN"
-        Scatter -> "SCATTER"
-        Combo -> "COMBO"
-
-instance FromJSON BasicChartSpecChartType where
-    parseJSON = parseJSONText "BasicChartSpecChartType"
-
-instance ToJSON BasicChartSpecChartType where
-    toJSON = toJSONText
-
--- | V1 error format.
-data Xgafv
-    = X1
-      -- ^ @1@
-      -- v1 error format
-    | X2
-      -- ^ @2@
-      -- v2 error format
-      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
-
-instance Hashable Xgafv
-
-instance FromHttpApiData Xgafv where
-    parseQueryParam = \case
-        "1" -> Right X1
-        "2" -> Right X2
-        x -> Left ("Unable to parse Xgafv from: " <> x)
-
-instance ToHttpApiData Xgafv where
-    toQueryParam = \case
-        X1 -> "1"
-        X2 -> "2"
-
-instance FromJSON Xgafv where
-    parseJSON = parseJSONText "Xgafv"
-
-instance ToJSON Xgafv where
-    toJSON = toJSONText
-
--- | The amount of time to wait before volatile functions are recalculated.
-data SpreadsheetPropertiesAutoRecalc
-    = RecalculationIntervalUnspecified
-      -- ^ @RECALCULATION_INTERVAL_UNSPECIFIED@
-      -- Default value. This value must not be used.
-    | OnChange
-      -- ^ @ON_CHANGE@
-      -- Volatile functions are updated on every change.
-    | Minute
-      -- ^ @MINUTE@
-      -- Volatile functions are updated on every change and every minute.
-    | Hour
-      -- ^ @HOUR@
-      -- Volatile functions are updated on every change and hourly.
-      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
-
-instance Hashable SpreadsheetPropertiesAutoRecalc
-
-instance FromHttpApiData SpreadsheetPropertiesAutoRecalc where
-    parseQueryParam = \case
-        "RECALCULATION_INTERVAL_UNSPECIFIED" -> Right RecalculationIntervalUnspecified
-        "ON_CHANGE" -> Right OnChange
-        "MINUTE" -> Right Minute
-        "HOUR" -> Right Hour
-        x -> Left ("Unable to parse SpreadsheetPropertiesAutoRecalc from: " <> x)
-
-instance ToHttpApiData SpreadsheetPropertiesAutoRecalc where
-    toQueryParam = \case
-        RecalculationIntervalUnspecified -> "RECALCULATION_INTERVAL_UNSPECIFIED"
-        OnChange -> "ON_CHANGE"
-        Minute -> "MINUTE"
-        Hour -> "HOUR"
-
-instance FromJSON SpreadsheetPropertiesAutoRecalc where
-    parseJSON = parseJSONText "SpreadsheetPropertiesAutoRecalc"
-
-instance ToJSON SpreadsheetPropertiesAutoRecalc where
-    toJSON = toJSONText
-
--- | How that data should be oriented when pasting.
-data CopyPasteRequestPasteOrientation
-    = Normal
-      -- ^ @NORMAL@
-      -- Paste normally.
-    | Transpose
-      -- ^ @TRANSPOSE@
-      -- Paste transposed, where all rows become columns and vice versa.
-      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
-
-instance Hashable CopyPasteRequestPasteOrientation
-
-instance FromHttpApiData CopyPasteRequestPasteOrientation where
-    parseQueryParam = \case
-        "NORMAL" -> Right Normal
-        "TRANSPOSE" -> Right Transpose
-        x -> Left ("Unable to parse CopyPasteRequestPasteOrientation from: " <> x)
-
-instance ToHttpApiData CopyPasteRequestPasteOrientation where
-    toQueryParam = \case
-        Normal -> "NORMAL"
-        Transpose -> "TRANSPOSE"
-
-instance FromJSON CopyPasteRequestPasteOrientation where
-    parseJSON = parseJSONText "CopyPasteRequestPasteOrientation"
-
-instance ToJSON CopyPasteRequestPasteOrientation where
-    toJSON = toJSONText
-
--- | How the data should be pasted.
-data PasteDataRequestType
-    = PDRTPasteNormal
-      -- ^ @PASTE_NORMAL@
-      -- Paste values, formulas, formats, and merges.
-    | PDRTPasteValues
-      -- ^ @PASTE_VALUES@
-      -- Paste the values ONLY without formats, formulas, or merges.
-    | PDRTPasteFormat
-      -- ^ @PASTE_FORMAT@
-      -- Paste the format and data validation only.
-    | PDRTPasteNoBOrders
-      -- ^ @PASTE_NO_BORDERS@
-      -- Like PASTE_NORMAL but without borders.
-    | PDRTPasteFormula
-      -- ^ @PASTE_FORMULA@
-      -- Paste the formulas only.
-    | PDRTPasteDataValidation
-      -- ^ @PASTE_DATA_VALIDATION@
-      -- Paste the data validation only.
-    | PDRTPasteConditionalFormatting
-      -- ^ @PASTE_CONDITIONAL_FORMATTING@
-      -- Paste the conditional formatting rules only.
-      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
-
-instance Hashable PasteDataRequestType
-
-instance FromHttpApiData PasteDataRequestType where
-    parseQueryParam = \case
-        "PASTE_NORMAL" -> Right PDRTPasteNormal
-        "PASTE_VALUES" -> Right PDRTPasteValues
-        "PASTE_FORMAT" -> Right PDRTPasteFormat
-        "PASTE_NO_BORDERS" -> Right PDRTPasteNoBOrders
-        "PASTE_FORMULA" -> Right PDRTPasteFormula
-        "PASTE_DATA_VALIDATION" -> Right PDRTPasteDataValidation
-        "PASTE_CONDITIONAL_FORMATTING" -> Right PDRTPasteConditionalFormatting
-        x -> Left ("Unable to parse PasteDataRequestType from: " <> x)
-
-instance ToHttpApiData PasteDataRequestType where
-    toQueryParam = \case
-        PDRTPasteNormal -> "PASTE_NORMAL"
-        PDRTPasteValues -> "PASTE_VALUES"
-        PDRTPasteFormat -> "PASTE_FORMAT"
-        PDRTPasteNoBOrders -> "PASTE_NO_BORDERS"
-        PDRTPasteFormula -> "PASTE_FORMULA"
-        PDRTPasteDataValidation -> "PASTE_DATA_VALIDATION"
-        PDRTPasteConditionalFormatting -> "PASTE_CONDITIONAL_FORMATTING"
-
-instance FromJSON PasteDataRequestType where
-    parseJSON = parseJSONText "PasteDataRequestType"
-
-instance ToJSON PasteDataRequestType where
-    toJSON = toJSONText
-
--- | The direction of the text in the cell.
-data CellFormatTextDirection
-    = TextDirectionUnspecified
-      -- ^ @TEXT_DIRECTION_UNSPECIFIED@
-      -- The text direction is not specified. Do not use this.
-    | LeftToRight
-      -- ^ @LEFT_TO_RIGHT@
-      -- The text direction of left-to-right was set by the user.
-    | RightToLeft
-      -- ^ @RIGHT_TO_LEFT@
-      -- The text direction of right-to-left was set by the user.
-      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
-
-instance Hashable CellFormatTextDirection
-
-instance FromHttpApiData CellFormatTextDirection where
-    parseQueryParam = \case
-        "TEXT_DIRECTION_UNSPECIFIED" -> Right TextDirectionUnspecified
-        "LEFT_TO_RIGHT" -> Right LeftToRight
-        "RIGHT_TO_LEFT" -> Right RightToLeft
-        x -> Left ("Unable to parse CellFormatTextDirection from: " <> x)
-
-instance ToHttpApiData CellFormatTextDirection where
-    toQueryParam = \case
-        TextDirectionUnspecified -> "TEXT_DIRECTION_UNSPECIFIED"
-        LeftToRight -> "LEFT_TO_RIGHT"
-        RightToLeft -> "RIGHT_TO_LEFT"
-
-instance FromJSON CellFormatTextDirection where
-    parseJSON = parseJSONText "CellFormatTextDirection"
-
-instance ToJSON CellFormatTextDirection where
-    toJSON = toJSONText
-
--- | The type of this series. Valid only if the chartType is COMBO. Different
--- types will change the way the series is visualized. Only LINE, AREA, and
--- COLUMN are supported.
-data BasicChartSeriesType
-    = BCSTBasicChartTypeUnspecified
-      -- ^ @BASIC_CHART_TYPE_UNSPECIFIED@
-      -- Default value, do not use.
-    | BCSTBar
-      -- ^ @BAR@
-      -- A </chart/interactive/docs/gallery/barchart bar chart>.
-    | BCSTLine
-      -- ^ @LINE@
-      -- A </chart/interactive/docs/gallery/linechart line chart>.
-    | BCSTArea
-      -- ^ @AREA@
-      -- An </chart/interactive/docs/gallery/areachart area chart>.
-    | BCSTColumn
-      -- ^ @COLUMN@
-      -- A </chart/interactive/docs/gallery/columnchart column chart>.
-    | BCSTScatter
-      -- ^ @SCATTER@
-      -- A </chart/interactive/docs/gallery/scatterchart scatter chart>.
-    | BCSTCombo
-      -- ^ @COMBO@
-      -- A </chart/interactive/docs/gallery/combochart combo chart>.
-      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
-
-instance Hashable BasicChartSeriesType
-
-instance FromHttpApiData BasicChartSeriesType where
-    parseQueryParam = \case
-        "BASIC_CHART_TYPE_UNSPECIFIED" -> Right BCSTBasicChartTypeUnspecified
-        "BAR" -> Right BCSTBar
-        "LINE" -> Right BCSTLine
-        "AREA" -> Right BCSTArea
-        "COLUMN" -> Right BCSTColumn
-        "SCATTER" -> Right BCSTScatter
-        "COMBO" -> Right BCSTCombo
-        x -> Left ("Unable to parse BasicChartSeriesType from: " <> x)
-
-instance ToHttpApiData BasicChartSeriesType where
-    toQueryParam = \case
-        BCSTBasicChartTypeUnspecified -> "BASIC_CHART_TYPE_UNSPECIFIED"
-        BCSTBar -> "BAR"
-        BCSTLine -> "LINE"
-        BCSTArea -> "AREA"
-        BCSTColumn -> "COLUMN"
-        BCSTScatter -> "SCATTER"
-        BCSTCombo -> "COMBO"
-
-instance FromJSON BasicChartSeriesType where
-    parseJSON = parseJSONText "BasicChartSeriesType"
-
-instance ToJSON BasicChartSeriesType where
-    toJSON = toJSONText
-
--- | Determines how the charts will use hidden rows or columns.
-data ChartSpecHiddenDimensionStrategy
-    = ChartHiddenDimensionStrategyUnspecified
-      -- ^ @CHART_HIDDEN_DIMENSION_STRATEGY_UNSPECIFIED@
-      -- Default value, do not use.
-    | SkipHiddenRowsAndColumns
-      -- ^ @SKIP_HIDDEN_ROWS_AND_COLUMNS@
-      -- Charts will skip hidden rows and columns.
-    | SkipHiddenRows
-      -- ^ @SKIP_HIDDEN_ROWS@
-      -- Charts will skip hidden rows only.
-    | SkipHiddenColumns
-      -- ^ @SKIP_HIDDEN_COLUMNS@
-      -- Charts will skip hidden columns only.
-    | ShowAll
-      -- ^ @SHOW_ALL@
-      -- Charts will not skip any hidden rows or columns.
-      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
-
-instance Hashable ChartSpecHiddenDimensionStrategy
-
-instance FromHttpApiData ChartSpecHiddenDimensionStrategy where
-    parseQueryParam = \case
-        "CHART_HIDDEN_DIMENSION_STRATEGY_UNSPECIFIED" -> Right ChartHiddenDimensionStrategyUnspecified
-        "SKIP_HIDDEN_ROWS_AND_COLUMNS" -> Right SkipHiddenRowsAndColumns
-        "SKIP_HIDDEN_ROWS" -> Right SkipHiddenRows
-        "SKIP_HIDDEN_COLUMNS" -> Right SkipHiddenColumns
-        "SHOW_ALL" -> Right ShowAll
-        x -> Left ("Unable to parse ChartSpecHiddenDimensionStrategy from: " <> x)
-
-instance ToHttpApiData ChartSpecHiddenDimensionStrategy where
-    toQueryParam = \case
-        ChartHiddenDimensionStrategyUnspecified -> "CHART_HIDDEN_DIMENSION_STRATEGY_UNSPECIFIED"
-        SkipHiddenRowsAndColumns -> "SKIP_HIDDEN_ROWS_AND_COLUMNS"
-        SkipHiddenRows -> "SKIP_HIDDEN_ROWS"
-        SkipHiddenColumns -> "SKIP_HIDDEN_COLUMNS"
-        ShowAll -> "SHOW_ALL"
-
-instance FromJSON ChartSpecHiddenDimensionStrategy where
-    parseJSON = parseJSONText "ChartSpecHiddenDimensionStrategy"
-
-instance ToJSON ChartSpecHiddenDimensionStrategy where
-    toJSON = toJSONText
-
--- | The style of the border.
-data BOrderStyle
-    = StyleUnspecified
-      -- ^ @STYLE_UNSPECIFIED@
-      -- The style is not specified. Do not use this.
-    | Dotted
-      -- ^ @DOTTED@
-      -- The border is dotted.
-    | Dashed
-      -- ^ @DASHED@
-      -- The border is dashed.
-    | Solid
-      -- ^ @SOLID@
-      -- The border is a thin solid line.
-    | SolidMedium
-      -- ^ @SOLID_MEDIUM@
-      -- The border is a medium solid line.
-    | SolidThick
-      -- ^ @SOLID_THICK@
-      -- The border is a thick solid line.
-    | None
-      -- ^ @NONE@
-      -- No border. Used only when updating a border in order to erase it.
-    | Double
-      -- ^ @DOUBLE@
-      -- The border is two solid lines.
-      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
-
-instance Hashable BOrderStyle
-
-instance FromHttpApiData BOrderStyle where
-    parseQueryParam = \case
-        "STYLE_UNSPECIFIED" -> Right StyleUnspecified
-        "DOTTED" -> Right Dotted
-        "DASHED" -> Right Dashed
-        "SOLID" -> Right Solid
-        "SOLID_MEDIUM" -> Right SolidMedium
-        "SOLID_THICK" -> Right SolidThick
-        "NONE" -> Right None
-        "DOUBLE" -> Right Double
-        x -> Left ("Unable to parse BOrderStyle from: " <> x)
-
-instance ToHttpApiData BOrderStyle where
-    toQueryParam = \case
-        StyleUnspecified -> "STYLE_UNSPECIFIED"
-        Dotted -> "DOTTED"
-        Dashed -> "DASHED"
-        Solid -> "SOLID"
-        SolidMedium -> "SOLID_MEDIUM"
-        SolidThick -> "SOLID_THICK"
-        None -> "NONE"
-        Double -> "DOUBLE"
-
-instance FromJSON BOrderStyle where
-    parseJSON = parseJSONText "BOrderStyle"
-
-instance ToJSON BOrderStyle where
-    toJSON = toJSONText
-
--- | What kind of data to paste. All the source data will be cut, regardless
--- of what is pasted.
-data CutPasteRequestPasteType
-    = CPRPTPasteNormal
-      -- ^ @PASTE_NORMAL@
-      -- Paste values, formulas, formats, and merges.
-    | CPRPTPasteValues
-      -- ^ @PASTE_VALUES@
-      -- Paste the values ONLY without formats, formulas, or merges.
-    | CPRPTPasteFormat
-      -- ^ @PASTE_FORMAT@
-      -- Paste the format and data validation only.
-    | CPRPTPasteNoBOrders
-      -- ^ @PASTE_NO_BORDERS@
-      -- Like PASTE_NORMAL but without borders.
-    | CPRPTPasteFormula
-      -- ^ @PASTE_FORMULA@
-      -- Paste the formulas only.
-    | CPRPTPasteDataValidation
-      -- ^ @PASTE_DATA_VALIDATION@
-      -- Paste the data validation only.
-    | CPRPTPasteConditionalFormatting
-      -- ^ @PASTE_CONDITIONAL_FORMATTING@
-      -- Paste the conditional formatting rules only.
-      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
-
-instance Hashable CutPasteRequestPasteType
-
-instance FromHttpApiData CutPasteRequestPasteType where
-    parseQueryParam = \case
-        "PASTE_NORMAL" -> Right CPRPTPasteNormal
-        "PASTE_VALUES" -> Right CPRPTPasteValues
-        "PASTE_FORMAT" -> Right CPRPTPasteFormat
-        "PASTE_NO_BORDERS" -> Right CPRPTPasteNoBOrders
-        "PASTE_FORMULA" -> Right CPRPTPasteFormula
-        "PASTE_DATA_VALIDATION" -> Right CPRPTPasteDataValidation
-        "PASTE_CONDITIONAL_FORMATTING" -> Right CPRPTPasteConditionalFormatting
-        x -> Left ("Unable to parse CutPasteRequestPasteType from: " <> x)
-
-instance ToHttpApiData CutPasteRequestPasteType where
-    toQueryParam = \case
-        CPRPTPasteNormal -> "PASTE_NORMAL"
-        CPRPTPasteValues -> "PASTE_VALUES"
-        CPRPTPasteFormat -> "PASTE_FORMAT"
-        CPRPTPasteNoBOrders -> "PASTE_NO_BORDERS"
-        CPRPTPasteFormula -> "PASTE_FORMULA"
-        CPRPTPasteDataValidation -> "PASTE_DATA_VALIDATION"
-        CPRPTPasteConditionalFormatting -> "PASTE_CONDITIONAL_FORMATTING"
-
-instance FromJSON CutPasteRequestPasteType where
-    parseJSON = parseJSONText "CutPasteRequestPasteType"
-
-instance ToJSON CutPasteRequestPasteType where
-    toJSON = toJSONText
-
--- | The position of the chart legend.
-data BasicChartSpecLegendPosition
-    = BCSLPBasicChartLegendPositionUnspecified
-      -- ^ @BASIC_CHART_LEGEND_POSITION_UNSPECIFIED@
-      -- Default value, do not use.
-    | BCSLPBottomLegend
-      -- ^ @BOTTOM_LEGEND@
-      -- The legend is rendered on the bottom of the chart.
-    | BCSLPLeftLegend
-      -- ^ @LEFT_LEGEND@
-      -- The legend is rendered on the left of the chart.
-    | BCSLPRightLegend
-      -- ^ @RIGHT_LEGEND@
-      -- The legend is rendered on the right of the chart.
-    | BCSLPTopLegend
-      -- ^ @TOP_LEGEND@
-      -- The legend is rendered on the top of the chart.
-    | BCSLPNoLegend
-      -- ^ @NO_LEGEND@
-      -- No legend is rendered.
-      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
-
-instance Hashable BasicChartSpecLegendPosition
-
-instance FromHttpApiData BasicChartSpecLegendPosition where
-    parseQueryParam = \case
-        "BASIC_CHART_LEGEND_POSITION_UNSPECIFIED" -> Right BCSLPBasicChartLegendPositionUnspecified
-        "BOTTOM_LEGEND" -> Right BCSLPBottomLegend
-        "LEFT_LEGEND" -> Right BCSLPLeftLegend
-        "RIGHT_LEGEND" -> Right BCSLPRightLegend
-        "TOP_LEGEND" -> Right BCSLPTopLegend
-        "NO_LEGEND" -> Right BCSLPNoLegend
-        x -> Left ("Unable to parse BasicChartSpecLegendPosition from: " <> x)
-
-instance ToHttpApiData BasicChartSpecLegendPosition where
-    toQueryParam = \case
-        BCSLPBasicChartLegendPositionUnspecified -> "BASIC_CHART_LEGEND_POSITION_UNSPECIFIED"
-        BCSLPBottomLegend -> "BOTTOM_LEGEND"
-        BCSLPLeftLegend -> "LEFT_LEGEND"
-        BCSLPRightLegend -> "RIGHT_LEGEND"
-        BCSLPTopLegend -> "TOP_LEGEND"
-        BCSLPNoLegend -> "NO_LEGEND"
-
-instance FromJSON BasicChartSpecLegendPosition where
-    parseJSON = parseJSONText "BasicChartSpecLegendPosition"
-
-instance ToJSON BasicChartSpecLegendPosition where
-    toJSON = toJSONText
-
--- | The type of error.
-data ErrorValueType
-    = ErrorTypeUnspecified
-      -- ^ @ERROR_TYPE_UNSPECIFIED@
-      -- The default error type, do not use this.
-    | Error'
-      -- ^ @ERROR@
-      -- Corresponds to the \`#ERROR!\` error.
-    | NullValue
-      -- ^ @NULL_VALUE@
-      -- Corresponds to the \`#NULL!\` error.
-    | DivideByZero
-      -- ^ @DIVIDE_BY_ZERO@
-      -- Corresponds to the \`#DIV\/0\` error.
-    | Value
-      -- ^ @VALUE@
-      -- Corresponds to the \`#VALUE!\` error.
-    | Ref
-      -- ^ @REF@
-      -- Corresponds to the \`#REF!\` error.
-    | Name
-      -- ^ @NAME@
-      -- Corresponds to the \`#NAME?\` error.
-    | Num
-      -- ^ @NUM@
-      -- Corresponds to the \`#NUM\`! error.
-    | NA
-      -- ^ @N_A@
-      -- Corresponds to the \`#N\/A\` error.
-    | Loading
-      -- ^ @LOADING@
-      -- Corresponds to the \`Loading...\` state.
-      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
-
-instance Hashable ErrorValueType
-
-instance FromHttpApiData ErrorValueType where
-    parseQueryParam = \case
-        "ERROR_TYPE_UNSPECIFIED" -> Right ErrorTypeUnspecified
-        "ERROR" -> Right Error'
-        "NULL_VALUE" -> Right NullValue
-        "DIVIDE_BY_ZERO" -> Right DivideByZero
-        "VALUE" -> Right Value
-        "REF" -> Right Ref
-        "NAME" -> Right Name
-        "NUM" -> Right Num
-        "N_A" -> Right NA
-        "LOADING" -> Right Loading
-        x -> Left ("Unable to parse ErrorValueType from: " <> x)
-
-instance ToHttpApiData ErrorValueType where
-    toQueryParam = \case
-        ErrorTypeUnspecified -> "ERROR_TYPE_UNSPECIFIED"
-        Error' -> "ERROR"
-        NullValue -> "NULL_VALUE"
-        DivideByZero -> "DIVIDE_BY_ZERO"
-        Value -> "VALUE"
-        Ref -> "REF"
-        Name -> "NAME"
-        Num -> "NUM"
-        NA -> "N_A"
-        Loading -> "LOADING"
-
-instance FromJSON ErrorValueType where
-    parseJSON = parseJSONText "ErrorValueType"
-
-instance ToJSON ErrorValueType where
-    toJSON = toJSONText
-
--- | Whether values should be listed horizontally (as columns) or vertically
--- (as rows).
-data PivotTableValueLayout
-    = Horizontal
-      -- ^ @HORIZONTAL@
-      -- Values are laid out horizontally (as columns).
-    | Vertical
-      -- ^ @VERTICAL@
-      -- Values are laid out vertically (as rows).
-      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
-
-instance Hashable PivotTableValueLayout
-
-instance FromHttpApiData PivotTableValueLayout where
-    parseQueryParam = \case
-        "HORIZONTAL" -> Right Horizontal
-        "VERTICAL" -> Right Vertical
-        x -> Left ("Unable to parse PivotTableValueLayout from: " <> x)
-
-instance ToHttpApiData PivotTableValueLayout where
-    toQueryParam = \case
-        Horizontal -> "HORIZONTAL"
-        Vertical -> "VERTICAL"
-
-instance FromJSON PivotTableValueLayout where
-    parseJSON = parseJSONText "PivotTableValueLayout"
-
-instance ToJSON PivotTableValueLayout where
-    toJSON = toJSONText
-
--- | How the value should be interpreted.
-data InterpolationPointType
-    = IPTInterpolationPointTypeUnspecified
-      -- ^ @INTERPOLATION_POINT_TYPE_UNSPECIFIED@
-      -- The default value, do not use.
-    | IPTMin
-      -- ^ @MIN@
-      -- The interpolation point will use the minimum value in the cells over the
-      -- range of the conditional format.
-    | IPTMax
-      -- ^ @MAX@
-      -- The interpolation point will use the maximum value in the cells over the
-      -- range of the conditional format.
-    | IPTNumber
-      -- ^ @NUMBER@
-      -- The interpolation point will use exactly the value in
-      -- InterpolationPoint.value.
-    | IPTPercent
-      -- ^ @PERCENT@
-      -- The interpolation point will be the given percentage over all the cells
-      -- in the range of the conditional format. This is equivalent to NUMBER if
-      -- the value was: \`=(MAX(FLATTEN(range)) * (value \/ 100)) +
-      -- (MIN(FLATTEN(range)) * (1 - (value \/ 100)))\` (where errors in the
-      -- range are ignored when flattening).
-    | IPTPercentile
-      -- ^ @PERCENTILE@
-      -- The interpolation point will be the given percentile over all the cells
-      -- in the range of the conditional format. This is equivalent to NUMBER if
-      -- the value was: \`=PERCENTILE(FLATTEN(range), value \/ 100)\` (where
-      -- errors in the range are ignored when flattening).
-      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
-
-instance Hashable InterpolationPointType
-
-instance FromHttpApiData InterpolationPointType where
-    parseQueryParam = \case
-        "INTERPOLATION_POINT_TYPE_UNSPECIFIED" -> Right IPTInterpolationPointTypeUnspecified
-        "MIN" -> Right IPTMin
-        "MAX" -> Right IPTMax
-        "NUMBER" -> Right IPTNumber
-        "PERCENT" -> Right IPTPercent
-        "PERCENTILE" -> Right IPTPercentile
-        x -> Left ("Unable to parse InterpolationPointType from: " <> x)
-
-instance ToHttpApiData InterpolationPointType where
-    toQueryParam = \case
-        IPTInterpolationPointTypeUnspecified -> "INTERPOLATION_POINT_TYPE_UNSPECIFIED"
-        IPTMin -> "MIN"
-        IPTMax -> "MAX"
-        IPTNumber -> "NUMBER"
-        IPTPercent -> "PERCENT"
-        IPTPercentile -> "PERCENTILE"
-
-instance FromJSON InterpolationPointType where
-    parseJSON = parseJSONText "InterpolationPointType"
-
-instance ToJSON InterpolationPointType where
-    toJSON = toJSONText
-
--- | The delimiter type to use.
-data TextToColumnsRequestDelimiterType
-    = TTCRDTDelimiterTypeUnspecified
-      -- ^ @DELIMITER_TYPE_UNSPECIFIED@
-      -- Default value. This value must not be used.
-    | TTCRDTComma
-      -- ^ @COMMA@
-      -- \",\"
-    | TTCRDTSemicolon
-      -- ^ @SEMICOLON@
-      -- \";\"
-    | TTCRDTPeriod
-      -- ^ @PERIOD@
-      -- \".\"
-    | TTCRDTSpace
-      -- ^ @SPACE@
-      -- \" \"
-    | TTCRDTCustom
-      -- ^ @CUSTOM@
-      -- A custom value as defined in delimiter.
-      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
-
-instance Hashable TextToColumnsRequestDelimiterType
-
-instance FromHttpApiData TextToColumnsRequestDelimiterType where
-    parseQueryParam = \case
-        "DELIMITER_TYPE_UNSPECIFIED" -> Right TTCRDTDelimiterTypeUnspecified
-        "COMMA" -> Right TTCRDTComma
-        "SEMICOLON" -> Right TTCRDTSemicolon
-        "PERIOD" -> Right TTCRDTPeriod
-        "SPACE" -> Right TTCRDTSpace
-        "CUSTOM" -> Right TTCRDTCustom
-        x -> Left ("Unable to parse TextToColumnsRequestDelimiterType from: " <> x)
-
-instance ToHttpApiData TextToColumnsRequestDelimiterType where
-    toQueryParam = \case
-        TTCRDTDelimiterTypeUnspecified -> "DELIMITER_TYPE_UNSPECIFIED"
-        TTCRDTComma -> "COMMA"
-        TTCRDTSemicolon -> "SEMICOLON"
-        TTCRDTPeriod -> "PERIOD"
-        TTCRDTSpace -> "SPACE"
-        TTCRDTCustom -> "CUSTOM"
+import           Network.Google.Prelude hiding (Bytes)
+
+-- | The stacked type for charts that support vertical stacking. Applies to
+-- Area, Bar, Column, Combo, and Stepped Area charts.
+data BasicChartSpecStackedType
+    = BasicChartStackedTypeUnspecified
+      -- ^ @BASIC_CHART_STACKED_TYPE_UNSPECIFIED@
+      -- Default value, do not use.
+    | NotStacked
+      -- ^ @NOT_STACKED@
+      -- Series are not stacked.
+    | Stacked
+      -- ^ @STACKED@
+      -- Series values are stacked, each value is rendered vertically beginning
+      -- from the top of the value below it.
+    | PercentStacked
+      -- ^ @PERCENT_STACKED@
+      -- Vertical stacks are stretched to reach the top of the chart, with values
+      -- laid out as percentages of each other.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable BasicChartSpecStackedType
+
+instance FromHttpApiData BasicChartSpecStackedType where
+    parseQueryParam = \case
+        "BASIC_CHART_STACKED_TYPE_UNSPECIFIED" -> Right BasicChartStackedTypeUnspecified
+        "NOT_STACKED" -> Right NotStacked
+        "STACKED" -> Right Stacked
+        "PERCENT_STACKED" -> Right PercentStacked
+        x -> Left ("Unable to parse BasicChartSpecStackedType from: " <> x)
+
+instance ToHttpApiData BasicChartSpecStackedType where
+    toQueryParam = \case
+        BasicChartStackedTypeUnspecified -> "BASIC_CHART_STACKED_TYPE_UNSPECIFIED"
+        NotStacked -> "NOT_STACKED"
+        Stacked -> "STACKED"
+        PercentStacked -> "PERCENT_STACKED"
+
+instance FromJSON BasicChartSpecStackedType where
+    parseJSON = parseJSONText "BasicChartSpecStackedType"
+
+instance ToJSON BasicChartSpecStackedType where
+    toJSON = toJSONText
+
+-- | What kind of data to paste.
+data CopyPasteRequestPasteType
+    = PasteNormal
+      -- ^ @PASTE_NORMAL@
+      -- Paste values, formulas, formats, and merges.
+    | PasteValues
+      -- ^ @PASTE_VALUES@
+      -- Paste the values ONLY without formats, formulas, or merges.
+    | PasteFormat
+      -- ^ @PASTE_FORMAT@
+      -- Paste the format and data validation only.
+    | PasteNoBOrders
+      -- ^ @PASTE_NO_BORDERS@
+      -- Like PASTE_NORMAL but without borders.
+    | PasteFormula
+      -- ^ @PASTE_FORMULA@
+      -- Paste the formulas only.
+    | PasteDataValidation
+      -- ^ @PASTE_DATA_VALIDATION@
+      -- Paste the data validation only.
+    | PasteConditionalFormatting
+      -- ^ @PASTE_CONDITIONAL_FORMATTING@
+      -- Paste the conditional formatting rules only.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable CopyPasteRequestPasteType
+
+instance FromHttpApiData CopyPasteRequestPasteType where
+    parseQueryParam = \case
+        "PASTE_NORMAL" -> Right PasteNormal
+        "PASTE_VALUES" -> Right PasteValues
+        "PASTE_FORMAT" -> Right PasteFormat
+        "PASTE_NO_BORDERS" -> Right PasteNoBOrders
+        "PASTE_FORMULA" -> Right PasteFormula
+        "PASTE_DATA_VALIDATION" -> Right PasteDataValidation
+        "PASTE_CONDITIONAL_FORMATTING" -> Right PasteConditionalFormatting
+        x -> Left ("Unable to parse CopyPasteRequestPasteType from: " <> x)
+
+instance ToHttpApiData CopyPasteRequestPasteType where
+    toQueryParam = \case
+        PasteNormal -> "PASTE_NORMAL"
+        PasteValues -> "PASTE_VALUES"
+        PasteFormat -> "PASTE_FORMAT"
+        PasteNoBOrders -> "PASTE_NO_BORDERS"
+        PasteFormula -> "PASTE_FORMULA"
+        PasteDataValidation -> "PASTE_DATA_VALIDATION"
+        PasteConditionalFormatting -> "PASTE_CONDITIONAL_FORMATTING"
+
+instance FromJSON CopyPasteRequestPasteType where
+    parseJSON = parseJSONText "CopyPasteRequestPasteType"
+
+instance ToJSON CopyPasteRequestPasteType where
+    toJSON = toJSONText
+
+-- | Determines how this lookup matches the location. If this field is
+-- specified as EXACT, only developer metadata associated on the exact
+-- location specified is matched. If this field is specified to
+-- INTERSECTING, developer metadata associated on intersecting locations is
+-- also matched. If left unspecified, this field assumes a default value of
+-- INTERSECTING. If this field is specified, a metadataLocation must also
+-- be specified.
+data DeveloperMetadataLookupLocationMatchingStrategy
+    = DeveloperMetadataLocationMatchingStrategyUnspecified
+      -- ^ @DEVELOPER_METADATA_LOCATION_MATCHING_STRATEGY_UNSPECIFIED@
+      -- Default value. This value must not be used.
+    | ExactLocation
+      -- ^ @EXACT_LOCATION@
+      -- Indicates that a specified location should be matched exactly. For
+      -- example, if row three were specified as a location this matching
+      -- strategy would only match developer metadata also associated on row
+      -- three. Metadata associated on other locations would not be considered.
+    | IntersectingLocation
+      -- ^ @INTERSECTING_LOCATION@
+      -- Indicates that a specified location should match that exact location as
+      -- well as any intersecting locations. For example, if row three were
+      -- specified as a location this matching strategy would match developer
+      -- metadata associated on row three as well as metadata associated on
+      -- locations that intersect row three. If, for instance, there was
+      -- developer metadata associated on column B, this matching strategy would
+      -- also match that location because column B intersects row three.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable DeveloperMetadataLookupLocationMatchingStrategy
+
+instance FromHttpApiData DeveloperMetadataLookupLocationMatchingStrategy where
+    parseQueryParam = \case
+        "DEVELOPER_METADATA_LOCATION_MATCHING_STRATEGY_UNSPECIFIED" -> Right DeveloperMetadataLocationMatchingStrategyUnspecified
+        "EXACT_LOCATION" -> Right ExactLocation
+        "INTERSECTING_LOCATION" -> Right IntersectingLocation
+        x -> Left ("Unable to parse DeveloperMetadataLookupLocationMatchingStrategy from: " <> x)
+
+instance ToHttpApiData DeveloperMetadataLookupLocationMatchingStrategy where
+    toQueryParam = \case
+        DeveloperMetadataLocationMatchingStrategyUnspecified -> "DEVELOPER_METADATA_LOCATION_MATCHING_STRATEGY_UNSPECIFIED"
+        ExactLocation -> "EXACT_LOCATION"
+        IntersectingLocation -> "INTERSECTING_LOCATION"
+
+instance FromJSON DeveloperMetadataLookupLocationMatchingStrategy where
+    parseJSON = parseJSONText "DeveloperMetadataLookupLocationMatchingStrategy"
+
+instance ToJSON DeveloperMetadataLookupLocationMatchingStrategy where
+    toJSON = toJSONText
+
+-- | Determines how dates, times, and durations in the response should be
+-- rendered. This is ignored if response_value_render_option is
+-- FORMATTED_VALUE. The default dateTime render option is
+-- DateTimeRenderOption.SERIAL_NUMBER.
+data BatchUpdateValuesByDataFilterRequestResponseDateTimeRenderOption
+    = SerialNumber
+      -- ^ @SERIAL_NUMBER@
+      -- Instructs date, time, datetime, and duration fields to be output as
+      -- doubles in \"serial number\" format, as popularized by Lotus 1-2-3. The
+      -- whole number portion of the value (left of the decimal) counts the days
+      -- since December 30th 1899. The fractional portion (right of the decimal)
+      -- counts the time as a fraction of the day. For example, January 1st 1900
+      -- at noon would be 2.5, 2 because it\'s 2 days after December 30st 1899,
+      -- and .5 because noon is half a day. February 1st 1900 at 3pm would be
+      -- 33.625. This correctly treats the year 1900 as not a leap year.
+    | FormattedString
+      -- ^ @FORMATTED_STRING@
+      -- Instructs date, time, datetime, and duration fields to be output as
+      -- strings in their given number format (which is dependent on the
+      -- spreadsheet locale).
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable BatchUpdateValuesByDataFilterRequestResponseDateTimeRenderOption
+
+instance FromHttpApiData BatchUpdateValuesByDataFilterRequestResponseDateTimeRenderOption where
+    parseQueryParam = \case
+        "SERIAL_NUMBER" -> Right SerialNumber
+        "FORMATTED_STRING" -> Right FormattedString
+        x -> Left ("Unable to parse BatchUpdateValuesByDataFilterRequestResponseDateTimeRenderOption from: " <> x)
+
+instance ToHttpApiData BatchUpdateValuesByDataFilterRequestResponseDateTimeRenderOption where
+    toQueryParam = \case
+        SerialNumber -> "SERIAL_NUMBER"
+        FormattedString -> "FORMATTED_STRING"
+
+instance FromJSON BatchUpdateValuesByDataFilterRequestResponseDateTimeRenderOption where
+    parseJSON = parseJSONText "BatchUpdateValuesByDataFilterRequestResponseDateTimeRenderOption"
+
+instance ToJSON BatchUpdateValuesByDataFilterRequestResponseDateTimeRenderOption where
+    toJSON = toJSONText
+
+-- | The position of this axis.
+data BasicChartAxisPosition
+    = BasicChartAxisPositionUnspecified
+      -- ^ @BASIC_CHART_AXIS_POSITION_UNSPECIFIED@
+      -- Default value, do not use.
+    | BottomAxis
+      -- ^ @BOTTOM_AXIS@
+      -- The axis rendered at the bottom of a chart. For most charts, this is the
+      -- standard major axis. For bar charts, this is a minor axis.
+    | LeftAxis
+      -- ^ @LEFT_AXIS@
+      -- The axis rendered at the left of a chart. For most charts, this is a
+      -- minor axis. For bar charts, this is the standard major axis.
+    | RightAxis
+      -- ^ @RIGHT_AXIS@
+      -- The axis rendered at the right of a chart. For most charts, this is a
+      -- minor axis. For bar charts, this is an unusual major axis.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable BasicChartAxisPosition
+
+instance FromHttpApiData BasicChartAxisPosition where
+    parseQueryParam = \case
+        "BASIC_CHART_AXIS_POSITION_UNSPECIFIED" -> Right BasicChartAxisPositionUnspecified
+        "BOTTOM_AXIS" -> Right BottomAxis
+        "LEFT_AXIS" -> Right LeftAxis
+        "RIGHT_AXIS" -> Right RightAxis
+        x -> Left ("Unable to parse BasicChartAxisPosition from: " <> x)
+
+instance ToHttpApiData BasicChartAxisPosition where
+    toQueryParam = \case
+        BasicChartAxisPositionUnspecified -> "BASIC_CHART_AXIS_POSITION_UNSPECIFIED"
+        BottomAxis -> "BOTTOM_AXIS"
+        LeftAxis -> "LEFT_AXIS"
+        RightAxis -> "RIGHT_AXIS"
+
+instance FromJSON BasicChartAxisPosition where
+    parseJSON = parseJSONText "BasicChartAxisPosition"
+
+instance ToJSON BasicChartAxisPosition where
+    toJSON = toJSONText
+
+-- | The dimension from which deleted cells will be replaced with. If ROWS,
+-- existing cells will be shifted upward to replace the deleted cells. If
+-- COLUMNS, existing cells will be shifted left to replace the deleted
+-- cells.
+data DeleteRangeRequestShiftDimension
+    = DimensionUnspecified
+      -- ^ @DIMENSION_UNSPECIFIED@
+      -- The default value, do not use.
+    | Rows
+      -- ^ @ROWS@
+      -- Operates on the rows of a sheet.
+    | Columns
+      -- ^ @COLUMNS@
+      -- Operates on the columns of a sheet.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable DeleteRangeRequestShiftDimension
+
+instance FromHttpApiData DeleteRangeRequestShiftDimension where
+    parseQueryParam = \case
+        "DIMENSION_UNSPECIFIED" -> Right DimensionUnspecified
+        "ROWS" -> Right Rows
+        "COLUMNS" -> Right Columns
+        x -> Left ("Unable to parse DeleteRangeRequestShiftDimension from: " <> x)
+
+instance ToHttpApiData DeleteRangeRequestShiftDimension where
+    toQueryParam = \case
+        DimensionUnspecified -> "DIMENSION_UNSPECIFIED"
+        Rows -> "ROWS"
+        Columns -> "COLUMNS"
+
+instance FromJSON DeleteRangeRequestShiftDimension where
+    parseJSON = parseJSONText "DeleteRangeRequestShiftDimension"
+
+instance ToJSON DeleteRangeRequestShiftDimension where
+    toJSON = toJSONText
+
+-- | The minor axis that will specify the range of values for this series.
+-- For example, if charting stocks over time, the \"Volume\" series may
+-- want to be pinned to the right with the prices pinned to the left,
+-- because the scale of trading volume is different than the scale of
+-- prices. It is an error to specify an axis that isn\'t a valid minor axis
+-- for the chart\'s type.
+data BasicChartSeriesTargetAxis
+    = BCSTABasicChartAxisPositionUnspecified
+      -- ^ @BASIC_CHART_AXIS_POSITION_UNSPECIFIED@
+      -- Default value, do not use.
+    | BCSTABottomAxis
+      -- ^ @BOTTOM_AXIS@
+      -- The axis rendered at the bottom of a chart. For most charts, this is the
+      -- standard major axis. For bar charts, this is a minor axis.
+    | BCSTALeftAxis
+      -- ^ @LEFT_AXIS@
+      -- The axis rendered at the left of a chart. For most charts, this is a
+      -- minor axis. For bar charts, this is the standard major axis.
+    | BCSTARightAxis
+      -- ^ @RIGHT_AXIS@
+      -- The axis rendered at the right of a chart. For most charts, this is a
+      -- minor axis. For bar charts, this is an unusual major axis.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable BasicChartSeriesTargetAxis
+
+instance FromHttpApiData BasicChartSeriesTargetAxis where
+    parseQueryParam = \case
+        "BASIC_CHART_AXIS_POSITION_UNSPECIFIED" -> Right BCSTABasicChartAxisPositionUnspecified
+        "BOTTOM_AXIS" -> Right BCSTABottomAxis
+        "LEFT_AXIS" -> Right BCSTALeftAxis
+        "RIGHT_AXIS" -> Right BCSTARightAxis
+        x -> Left ("Unable to parse BasicChartSeriesTargetAxis from: " <> x)
+
+instance ToHttpApiData BasicChartSeriesTargetAxis where
+    toQueryParam = \case
+        BCSTABasicChartAxisPositionUnspecified -> "BASIC_CHART_AXIS_POSITION_UNSPECIFIED"
+        BCSTABottomAxis -> "BOTTOM_AXIS"
+        BCSTALeftAxis -> "LEFT_AXIS"
+        BCSTARightAxis -> "RIGHT_AXIS"
+
+instance FromJSON BasicChartSeriesTargetAxis where
+    parseJSON = parseJSONText "BasicChartSeriesTargetAxis"
+
+instance ToJSON BasicChartSeriesTargetAxis where
+    toJSON = toJSONText
+
+-- | The major dimension of the values.
+data DataFilterValueRangeMajorDimension
+    = DFVRMDDimensionUnspecified
+      -- ^ @DIMENSION_UNSPECIFIED@
+      -- The default value, do not use.
+    | DFVRMDRows
+      -- ^ @ROWS@
+      -- Operates on the rows of a sheet.
+    | DFVRMDColumns
+      -- ^ @COLUMNS@
+      -- Operates on the columns of a sheet.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable DataFilterValueRangeMajorDimension
+
+instance FromHttpApiData DataFilterValueRangeMajorDimension where
+    parseQueryParam = \case
+        "DIMENSION_UNSPECIFIED" -> Right DFVRMDDimensionUnspecified
+        "ROWS" -> Right DFVRMDRows
+        "COLUMNS" -> Right DFVRMDColumns
+        x -> Left ("Unable to parse DataFilterValueRangeMajorDimension from: " <> x)
+
+instance ToHttpApiData DataFilterValueRangeMajorDimension where
+    toQueryParam = \case
+        DFVRMDDimensionUnspecified -> "DIMENSION_UNSPECIFIED"
+        DFVRMDRows -> "ROWS"
+        DFVRMDColumns -> "COLUMNS"
+
+instance FromJSON DataFilterValueRangeMajorDimension where
+    parseJSON = parseJSONText "DataFilterValueRangeMajorDimension"
+
+instance ToJSON DataFilterValueRangeMajorDimension where
+    toJSON = toJSONText
+
+-- | Where the legend of the chart should be drawn.
+data BubbleChartSpecLegendPosition
+    = BubbleChartLegendPositionUnspecified
+      -- ^ @BUBBLE_CHART_LEGEND_POSITION_UNSPECIFIED@
+      -- Default value, do not use.
+    | BottomLegend
+      -- ^ @BOTTOM_LEGEND@
+      -- The legend is rendered on the bottom of the chart.
+    | LeftLegend
+      -- ^ @LEFT_LEGEND@
+      -- The legend is rendered on the left of the chart.
+    | RightLegend
+      -- ^ @RIGHT_LEGEND@
+      -- The legend is rendered on the right of the chart.
+    | TopLegend
+      -- ^ @TOP_LEGEND@
+      -- The legend is rendered on the top of the chart.
+    | NoLegend
+      -- ^ @NO_LEGEND@
+      -- No legend is rendered.
+    | InsideLegend
+      -- ^ @INSIDE_LEGEND@
+      -- The legend is rendered inside the chart area.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable BubbleChartSpecLegendPosition
+
+instance FromHttpApiData BubbleChartSpecLegendPosition where
+    parseQueryParam = \case
+        "BUBBLE_CHART_LEGEND_POSITION_UNSPECIFIED" -> Right BubbleChartLegendPositionUnspecified
+        "BOTTOM_LEGEND" -> Right BottomLegend
+        "LEFT_LEGEND" -> Right LeftLegend
+        "RIGHT_LEGEND" -> Right RightLegend
+        "TOP_LEGEND" -> Right TopLegend
+        "NO_LEGEND" -> Right NoLegend
+        "INSIDE_LEGEND" -> Right InsideLegend
+        x -> Left ("Unable to parse BubbleChartSpecLegendPosition from: " <> x)
+
+instance ToHttpApiData BubbleChartSpecLegendPosition where
+    toQueryParam = \case
+        BubbleChartLegendPositionUnspecified -> "BUBBLE_CHART_LEGEND_POSITION_UNSPECIFIED"
+        BottomLegend -> "BOTTOM_LEGEND"
+        LeftLegend -> "LEFT_LEGEND"
+        RightLegend -> "RIGHT_LEGEND"
+        TopLegend -> "TOP_LEGEND"
+        NoLegend -> "NO_LEGEND"
+        InsideLegend -> "INSIDE_LEGEND"
+
+instance FromJSON BubbleChartSpecLegendPosition where
+    parseJSON = parseJSONText "BubbleChartSpecLegendPosition"
+
+instance ToJSON BubbleChartSpecLegendPosition where
+    toJSON = toJSONText
+
+-- | Determines how dates, times, and durations in the response should be
+-- rendered. This is ignored if response_value_render_option is
+-- FORMATTED_VALUE. The default dateTime render option is
+-- DateTimeRenderOption.SERIAL_NUMBER.
+data BatchUpdateValuesRequestResponseDateTimeRenderOption
+    = BUVRRDTROSerialNumber
+      -- ^ @SERIAL_NUMBER@
+      -- Instructs date, time, datetime, and duration fields to be output as
+      -- doubles in \"serial number\" format, as popularized by Lotus 1-2-3. The
+      -- whole number portion of the value (left of the decimal) counts the days
+      -- since December 30th 1899. The fractional portion (right of the decimal)
+      -- counts the time as a fraction of the day. For example, January 1st 1900
+      -- at noon would be 2.5, 2 because it\'s 2 days after December 30st 1899,
+      -- and .5 because noon is half a day. February 1st 1900 at 3pm would be
+      -- 33.625. This correctly treats the year 1900 as not a leap year.
+    | BUVRRDTROFormattedString
+      -- ^ @FORMATTED_STRING@
+      -- Instructs date, time, datetime, and duration fields to be output as
+      -- strings in their given number format (which is dependent on the
+      -- spreadsheet locale).
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable BatchUpdateValuesRequestResponseDateTimeRenderOption
+
+instance FromHttpApiData BatchUpdateValuesRequestResponseDateTimeRenderOption where
+    parseQueryParam = \case
+        "SERIAL_NUMBER" -> Right BUVRRDTROSerialNumber
+        "FORMATTED_STRING" -> Right BUVRRDTROFormattedString
+        x -> Left ("Unable to parse BatchUpdateValuesRequestResponseDateTimeRenderOption from: " <> x)
+
+instance ToHttpApiData BatchUpdateValuesRequestResponseDateTimeRenderOption where
+    toQueryParam = \case
+        BUVRRDTROSerialNumber -> "SERIAL_NUMBER"
+        BUVRRDTROFormattedString -> "FORMATTED_STRING"
+
+instance FromJSON BatchUpdateValuesRequestResponseDateTimeRenderOption where
+    parseJSON = parseJSONText "BatchUpdateValuesRequestResponseDateTimeRenderOption"
+
+instance ToJSON BatchUpdateValuesRequestResponseDateTimeRenderOption where
+    toJSON = toJSONText
+
+-- | Whether rows or columns should be appended.
+data AppendDimensionRequestDimension
+    = ADRDDimensionUnspecified
+      -- ^ @DIMENSION_UNSPECIFIED@
+      -- The default value, do not use.
+    | ADRDRows
+      -- ^ @ROWS@
+      -- Operates on the rows of a sheet.
+    | ADRDColumns
+      -- ^ @COLUMNS@
+      -- Operates on the columns of a sheet.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable AppendDimensionRequestDimension
+
+instance FromHttpApiData AppendDimensionRequestDimension where
+    parseQueryParam = \case
+        "DIMENSION_UNSPECIFIED" -> Right ADRDDimensionUnspecified
+        "ROWS" -> Right ADRDRows
+        "COLUMNS" -> Right ADRDColumns
+        x -> Left ("Unable to parse AppendDimensionRequestDimension from: " <> x)
+
+instance ToHttpApiData AppendDimensionRequestDimension where
+    toQueryParam = \case
+        ADRDDimensionUnspecified -> "DIMENSION_UNSPECIFIED"
+        ADRDRows -> "ROWS"
+        ADRDColumns -> "COLUMNS"
+
+instance FromJSON AppendDimensionRequestDimension where
+    parseJSON = parseJSONText "AppendDimensionRequestDimension"
+
+instance ToJSON AppendDimensionRequestDimension where
+    toJSON = toJSONText
+
+-- | The dimension of the span.
+data DimensionRangeDimension
+    = DRDDimensionUnspecified
+      -- ^ @DIMENSION_UNSPECIFIED@
+      -- The default value, do not use.
+    | DRDRows
+      -- ^ @ROWS@
+      -- Operates on the rows of a sheet.
+    | DRDColumns
+      -- ^ @COLUMNS@
+      -- Operates on the columns of a sheet.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable DimensionRangeDimension
+
+instance FromHttpApiData DimensionRangeDimension where
+    parseQueryParam = \case
+        "DIMENSION_UNSPECIFIED" -> Right DRDDimensionUnspecified
+        "ROWS" -> Right DRDRows
+        "COLUMNS" -> Right DRDColumns
+        x -> Left ("Unable to parse DimensionRangeDimension from: " <> x)
+
+instance ToHttpApiData DimensionRangeDimension where
+    toQueryParam = \case
+        DRDDimensionUnspecified -> "DIMENSION_UNSPECIFIED"
+        DRDRows -> "ROWS"
+        DRDColumns -> "COLUMNS"
+
+instance FromJSON DimensionRangeDimension where
+    parseJSON = parseJSONText "DimensionRangeDimension"
+
+instance ToJSON DimensionRangeDimension where
+    toJSON = toJSONText
+
+-- | How values should be represented in the output. The default render
+-- option is ValueRenderOption.FORMATTED_VALUE.
+data BatchGetValuesByDataFilterRequestValueRenderOption
+    = FormattedValue
+      -- ^ @FORMATTED_VALUE@
+      -- Values will be calculated & formatted in the reply according to the
+      -- cell\'s formatting. Formatting is based on the spreadsheet\'s locale,
+      -- not the requesting user\'s locale. For example, if \`A1\` is \`1.23\`
+      -- and \`A2\` is \`=A1\` and formatted as currency, then \`A2\` would
+      -- return \`\"$1.23\"\`.
+    | UnformattedValue
+      -- ^ @UNFORMATTED_VALUE@
+      -- Values will be calculated, but not formatted in the reply. For example,
+      -- if \`A1\` is \`1.23\` and \`A2\` is \`=A1\` and formatted as currency,
+      -- then \`A2\` would return the number \`1.23\`.
+    | Formula
+      -- ^ @FORMULA@
+      -- Values will not be calculated. The reply will include the formulas. For
+      -- example, if \`A1\` is \`1.23\` and \`A2\` is \`=A1\` and formatted as
+      -- currency, then A2 would return \`\"=A1\"\`.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable BatchGetValuesByDataFilterRequestValueRenderOption
+
+instance FromHttpApiData BatchGetValuesByDataFilterRequestValueRenderOption where
+    parseQueryParam = \case
+        "FORMATTED_VALUE" -> Right FormattedValue
+        "UNFORMATTED_VALUE" -> Right UnformattedValue
+        "FORMULA" -> Right Formula
+        x -> Left ("Unable to parse BatchGetValuesByDataFilterRequestValueRenderOption from: " <> x)
+
+instance ToHttpApiData BatchGetValuesByDataFilterRequestValueRenderOption where
+    toQueryParam = \case
+        FormattedValue -> "FORMATTED_VALUE"
+        UnformattedValue -> "UNFORMATTED_VALUE"
+        Formula -> "FORMULA"
+
+instance FromJSON BatchGetValuesByDataFilterRequestValueRenderOption where
+    parseJSON = parseJSONText "BatchGetValuesByDataFilterRequestValueRenderOption"
+
+instance ToJSON BatchGetValuesByDataFilterRequestValueRenderOption where
+    toJSON = toJSONText
+
+-- | The dimension that data should be filled into.
+data SourceAndDestinationDimension
+    = SADDDimensionUnspecified
+      -- ^ @DIMENSION_UNSPECIFIED@
+      -- The default value, do not use.
+    | SADDRows
+      -- ^ @ROWS@
+      -- Operates on the rows of a sheet.
+    | SADDColumns
+      -- ^ @COLUMNS@
+      -- Operates on the columns of a sheet.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable SourceAndDestinationDimension
+
+instance FromHttpApiData SourceAndDestinationDimension where
+    parseQueryParam = \case
+        "DIMENSION_UNSPECIFIED" -> Right SADDDimensionUnspecified
+        "ROWS" -> Right SADDRows
+        "COLUMNS" -> Right SADDColumns
+        x -> Left ("Unable to parse SourceAndDestinationDimension from: " <> x)
+
+instance ToHttpApiData SourceAndDestinationDimension where
+    toQueryParam = \case
+        SADDDimensionUnspecified -> "DIMENSION_UNSPECIFIED"
+        SADDRows -> "ROWS"
+        SADDColumns -> "COLUMNS"
+
+instance FromJSON SourceAndDestinationDimension where
+    parseJSON = parseJSONText "SourceAndDestinationDimension"
+
+instance ToJSON SourceAndDestinationDimension where
+    toJSON = toJSONText
+
+-- | The wrap strategy for the value in the cell.
+data CellFormatWrapStrategy
+    = WrapStrategyUnspecified
+      -- ^ @WRAP_STRATEGY_UNSPECIFIED@
+      -- The default value, do not use.
+    | OverflowCell
+      -- ^ @OVERFLOW_CELL@
+      -- Lines that are longer than the cell width will be written in the next
+      -- cell over, so long as that cell is empty. If the next cell over is
+      -- non-empty, this behaves the same as CLIP. The text will never wrap to
+      -- the next line unless the user manually inserts a new line. Example: |
+      -- First sentence. | | Manual newline that is very long. \<- Text continues
+      -- into next cell | Next newline. |
+    | LegacyWrap
+      -- ^ @LEGACY_WRAP@
+      -- This wrap strategy represents the old Google Sheets wrap strategy where
+      -- words that are longer than a line are clipped rather than broken. This
+      -- strategy is not supported on all platforms and is being phased out.
+      -- Example: | Cell has a | | loooooooooo| \<- Word is clipped. | word. |
+    | Clip
+      -- ^ @CLIP@
+      -- Lines that are longer than the cell width will be clipped. The text will
+      -- never wrap to the next line unless the user manually inserts a new line.
+      -- Example: | First sentence. | | Manual newline t| \<- Text is clipped |
+      -- Next newline. |
+    | Wrap
+      -- ^ @WRAP@
+      -- Words that are longer than a line are wrapped at the character level
+      -- rather than clipped. Example: | Cell has a | | loooooooooo| \<- Word is
+      -- broken. | ong word. |
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable CellFormatWrapStrategy
+
+instance FromHttpApiData CellFormatWrapStrategy where
+    parseQueryParam = \case
+        "WRAP_STRATEGY_UNSPECIFIED" -> Right WrapStrategyUnspecified
+        "OVERFLOW_CELL" -> Right OverflowCell
+        "LEGACY_WRAP" -> Right LegacyWrap
+        "CLIP" -> Right Clip
+        "WRAP" -> Right Wrap
+        x -> Left ("Unable to parse CellFormatWrapStrategy from: " <> x)
+
+instance ToHttpApiData CellFormatWrapStrategy where
+    toQueryParam = \case
+        WrapStrategyUnspecified -> "WRAP_STRATEGY_UNSPECIFIED"
+        OverflowCell -> "OVERFLOW_CELL"
+        LegacyWrap -> "LEGACY_WRAP"
+        Clip -> "CLIP"
+        Wrap -> "WRAP"
+
+instance FromJSON CellFormatWrapStrategy where
+    parseJSON = parseJSONText "CellFormatWrapStrategy"
+
+instance ToJSON CellFormatWrapStrategy where
+    toJSON = toJSONText
+
+-- | How the input data should be interpreted.
+data BatchUpdateValuesRequestValueInputOption
+    = InputValueOptionUnspecified
+      -- ^ @INPUT_VALUE_OPTION_UNSPECIFIED@
+      -- Default input value. This value must not be used.
+    | Raw
+      -- ^ @RAW@
+      -- The values the user has entered will not be parsed and will be stored
+      -- as-is.
+    | UserEntered
+      -- ^ @USER_ENTERED@
+      -- The values will be parsed as if the user typed them into the UI. Numbers
+      -- will stay as numbers, but strings may be converted to numbers, dates,
+      -- etc. following the same rules that are applied when entering text into a
+      -- cell via the Google Sheets UI.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable BatchUpdateValuesRequestValueInputOption
+
+instance FromHttpApiData BatchUpdateValuesRequestValueInputOption where
+    parseQueryParam = \case
+        "INPUT_VALUE_OPTION_UNSPECIFIED" -> Right InputValueOptionUnspecified
+        "RAW" -> Right Raw
+        "USER_ENTERED" -> Right UserEntered
+        x -> Left ("Unable to parse BatchUpdateValuesRequestValueInputOption from: " <> x)
+
+instance ToHttpApiData BatchUpdateValuesRequestValueInputOption where
+    toQueryParam = \case
+        InputValueOptionUnspecified -> "INPUT_VALUE_OPTION_UNSPECIFIED"
+        Raw -> "RAW"
+        UserEntered -> "USER_ENTERED"
+
+instance FromJSON BatchUpdateValuesRequestValueInputOption where
+    parseJSON = parseJSONText "BatchUpdateValuesRequestValueInputOption"
+
+instance ToJSON BatchUpdateValuesRequestValueInputOption where
+    toJSON = toJSONText
+
+-- | Horizontal alignment setting for the piece of text.
+data TextPositionHorizontalAlignment
+    = HorizontalAlignUnspecified
+      -- ^ @HORIZONTAL_ALIGN_UNSPECIFIED@
+      -- The horizontal alignment is not specified. Do not use this.
+    | Left'
+      -- ^ @LEFT@
+      -- The text is explicitly aligned to the left of the cell.
+    | Center
+      -- ^ @CENTER@
+      -- The text is explicitly aligned to the center of the cell.
+    | Right'
+      -- ^ @RIGHT@
+      -- The text is explicitly aligned to the right of the cell.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable TextPositionHorizontalAlignment
+
+instance FromHttpApiData TextPositionHorizontalAlignment where
+    parseQueryParam = \case
+        "HORIZONTAL_ALIGN_UNSPECIFIED" -> Right HorizontalAlignUnspecified
+        "LEFT" -> Right Left'
+        "CENTER" -> Right Center
+        "RIGHT" -> Right Right'
+        x -> Left ("Unable to parse TextPositionHorizontalAlignment from: " <> x)
+
+instance ToHttpApiData TextPositionHorizontalAlignment where
+    toQueryParam = \case
+        HorizontalAlignUnspecified -> "HORIZONTAL_ALIGN_UNSPECIFIED"
+        Left' -> "LEFT"
+        Center -> "CENTER"
+        Right' -> "RIGHT"
+
+instance FromJSON TextPositionHorizontalAlignment where
+    parseJSON = parseJSONText "TextPositionHorizontalAlignment"
+
+instance ToJSON TextPositionHorizontalAlignment where
+    toJSON = toJSONText
+
+-- | The metadata visibility. Developer metadata must always have a
+-- visibility specified.
+data DeveloperMetadataVisibility
+    = DeveloperMetadataVisibilityUnspecified
+      -- ^ @DEVELOPER_METADATA_VISIBILITY_UNSPECIFIED@
+      -- Default value.
+    | Document
+      -- ^ @DOCUMENT@
+      -- Document-visible metadata is accessible from any developer project with
+      -- access to the document.
+    | Project
+      -- ^ @PROJECT@
+      -- Project-visible metadata is only visible to and accessible by the
+      -- developer project that created the metadata.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable DeveloperMetadataVisibility
+
+instance FromHttpApiData DeveloperMetadataVisibility where
+    parseQueryParam = \case
+        "DEVELOPER_METADATA_VISIBILITY_UNSPECIFIED" -> Right DeveloperMetadataVisibilityUnspecified
+        "DOCUMENT" -> Right Document
+        "PROJECT" -> Right Project
+        x -> Left ("Unable to parse DeveloperMetadataVisibility from: " <> x)
+
+instance ToHttpApiData DeveloperMetadataVisibility where
+    toQueryParam = \case
+        DeveloperMetadataVisibilityUnspecified -> "DEVELOPER_METADATA_VISIBILITY_UNSPECIFIED"
+        Document -> "DOCUMENT"
+        Project -> "PROJECT"
+
+instance FromJSON DeveloperMetadataVisibility where
+    parseJSON = parseJSONText "DeveloperMetadataVisibility"
+
+instance ToJSON DeveloperMetadataVisibility where
+    toJSON = toJSONText
+
+-- | Determines how values in the response should be rendered. The default
+-- render option is ValueRenderOption.FORMATTED_VALUE.
+data BatchUpdateValuesRequestResponseValueRenderOption
+    = BUVRRVROFormattedValue
+      -- ^ @FORMATTED_VALUE@
+      -- Values will be calculated & formatted in the reply according to the
+      -- cell\'s formatting. Formatting is based on the spreadsheet\'s locale,
+      -- not the requesting user\'s locale. For example, if \`A1\` is \`1.23\`
+      -- and \`A2\` is \`=A1\` and formatted as currency, then \`A2\` would
+      -- return \`\"$1.23\"\`.
+    | BUVRRVROUnformattedValue
+      -- ^ @UNFORMATTED_VALUE@
+      -- Values will be calculated, but not formatted in the reply. For example,
+      -- if \`A1\` is \`1.23\` and \`A2\` is \`=A1\` and formatted as currency,
+      -- then \`A2\` would return the number \`1.23\`.
+    | BUVRRVROFormula
+      -- ^ @FORMULA@
+      -- Values will not be calculated. The reply will include the formulas. For
+      -- example, if \`A1\` is \`1.23\` and \`A2\` is \`=A1\` and formatted as
+      -- currency, then A2 would return \`\"=A1\"\`.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable BatchUpdateValuesRequestResponseValueRenderOption
+
+instance FromHttpApiData BatchUpdateValuesRequestResponseValueRenderOption where
+    parseQueryParam = \case
+        "FORMATTED_VALUE" -> Right BUVRRVROFormattedValue
+        "UNFORMATTED_VALUE" -> Right BUVRRVROUnformattedValue
+        "FORMULA" -> Right BUVRRVROFormula
+        x -> Left ("Unable to parse BatchUpdateValuesRequestResponseValueRenderOption from: " <> x)
+
+instance ToHttpApiData BatchUpdateValuesRequestResponseValueRenderOption where
+    toQueryParam = \case
+        BUVRRVROFormattedValue -> "FORMATTED_VALUE"
+        BUVRRVROUnformattedValue -> "UNFORMATTED_VALUE"
+        BUVRRVROFormula -> "FORMULA"
+
+instance FromJSON BatchUpdateValuesRequestResponseValueRenderOption where
+    parseJSON = parseJSONText "BatchUpdateValuesRequestResponseValueRenderOption"
+
+instance ToJSON BatchUpdateValuesRequestResponseValueRenderOption where
+    toJSON = toJSONText
+
+-- | Where the legend of the pie chart should be drawn.
+data PieChartSpecLegendPosition
+    = PCSLPPieChartLegendPositionUnspecified
+      -- ^ @PIE_CHART_LEGEND_POSITION_UNSPECIFIED@
+      -- Default value, do not use.
+    | PCSLPBottomLegend
+      -- ^ @BOTTOM_LEGEND@
+      -- The legend is rendered on the bottom of the chart.
+    | PCSLPLeftLegend
+      -- ^ @LEFT_LEGEND@
+      -- The legend is rendered on the left of the chart.
+    | PCSLPRightLegend
+      -- ^ @RIGHT_LEGEND@
+      -- The legend is rendered on the right of the chart.
+    | PCSLPTopLegend
+      -- ^ @TOP_LEGEND@
+      -- The legend is rendered on the top of the chart.
+    | PCSLPNoLegend
+      -- ^ @NO_LEGEND@
+      -- No legend is rendered.
+    | PCSLPLabeledLegend
+      -- ^ @LABELED_LEGEND@
+      -- Each pie slice has a label attached to it.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable PieChartSpecLegendPosition
+
+instance FromHttpApiData PieChartSpecLegendPosition where
+    parseQueryParam = \case
+        "PIE_CHART_LEGEND_POSITION_UNSPECIFIED" -> Right PCSLPPieChartLegendPositionUnspecified
+        "BOTTOM_LEGEND" -> Right PCSLPBottomLegend
+        "LEFT_LEGEND" -> Right PCSLPLeftLegend
+        "RIGHT_LEGEND" -> Right PCSLPRightLegend
+        "TOP_LEGEND" -> Right PCSLPTopLegend
+        "NO_LEGEND" -> Right PCSLPNoLegend
+        "LABELED_LEGEND" -> Right PCSLPLabeledLegend
+        x -> Left ("Unable to parse PieChartSpecLegendPosition from: " <> x)
+
+instance ToHttpApiData PieChartSpecLegendPosition where
+    toQueryParam = \case
+        PCSLPPieChartLegendPositionUnspecified -> "PIE_CHART_LEGEND_POSITION_UNSPECIFIED"
+        PCSLPBottomLegend -> "BOTTOM_LEGEND"
+        PCSLPLeftLegend -> "LEFT_LEGEND"
+        PCSLPRightLegend -> "RIGHT_LEGEND"
+        PCSLPTopLegend -> "TOP_LEGEND"
+        PCSLPNoLegend -> "NO_LEGEND"
+        PCSLPLabeledLegend -> "LABELED_LEGEND"
+
+instance FromJSON PieChartSpecLegendPosition where
+    parseJSON = parseJSONText "PieChartSpecLegendPosition"
+
+instance ToJSON PieChartSpecLegendPosition where
+    toJSON = toJSONText
+
+-- | The vertical alignment of the value in the cell.
+data CellFormatVerticalAlignment
+    = VerticalAlignUnspecified
+      -- ^ @VERTICAL_ALIGN_UNSPECIFIED@
+      -- The vertical alignment is not specified. Do not use this.
+    | Top
+      -- ^ @TOP@
+      -- The text is explicitly aligned to the top of the cell.
+    | Middle
+      -- ^ @MIDDLE@
+      -- The text is explicitly aligned to the middle of the cell.
+    | Bottom
+      -- ^ @BOTTOM@
+      -- The text is explicitly aligned to the bottom of the cell.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable CellFormatVerticalAlignment
+
+instance FromHttpApiData CellFormatVerticalAlignment where
+    parseQueryParam = \case
+        "VERTICAL_ALIGN_UNSPECIFIED" -> Right VerticalAlignUnspecified
+        "TOP" -> Right Top
+        "MIDDLE" -> Right Middle
+        "BOTTOM" -> Right Bottom
+        x -> Left ("Unable to parse CellFormatVerticalAlignment from: " <> x)
+
+instance ToHttpApiData CellFormatVerticalAlignment where
+    toQueryParam = \case
+        VerticalAlignUnspecified -> "VERTICAL_ALIGN_UNSPECIFIED"
+        Top -> "TOP"
+        Middle -> "MIDDLE"
+        Bottom -> "BOTTOM"
+
+instance FromJSON CellFormatVerticalAlignment where
+    parseJSON = parseJSONText "CellFormatVerticalAlignment"
+
+instance ToJSON CellFormatVerticalAlignment where
+    toJSON = toJSONText
+
+-- | The type of the number format. When writing, this field must be set.
+data NumberFormatType
+    = NumberFormatTypeUnspecified
+      -- ^ @NUMBER_FORMAT_TYPE_UNSPECIFIED@
+      -- The number format is not specified and is based on the contents of the
+      -- cell. Do not explicitly use this.
+    | Text
+      -- ^ @TEXT@
+      -- Text formatting, e.g \`1000.12\`
+    | Number
+      -- ^ @NUMBER@
+      -- Number formatting, e.g, \`1,000.12\`
+    | Percent
+      -- ^ @PERCENT@
+      -- Percent formatting, e.g \`10.12%\`
+    | Currency
+      -- ^ @CURRENCY@
+      -- Currency formatting, e.g \`$1,000.12\`
+    | Date
+      -- ^ @DATE@
+      -- Date formatting, e.g \`9\/26\/2008\`
+    | Time
+      -- ^ @TIME@
+      -- Time formatting, e.g \`3:59:00 PM\`
+    | DateTime
+      -- ^ @DATE_TIME@
+      -- Date+Time formatting, e.g \`9\/26\/08 15:59:00\`
+    | Scientific
+      -- ^ @SCIENTIFIC@
+      -- Scientific number formatting, e.g \`1.01E+03\`
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable NumberFormatType
+
+instance FromHttpApiData NumberFormatType where
+    parseQueryParam = \case
+        "NUMBER_FORMAT_TYPE_UNSPECIFIED" -> Right NumberFormatTypeUnspecified
+        "TEXT" -> Right Text
+        "NUMBER" -> Right Number
+        "PERCENT" -> Right Percent
+        "CURRENCY" -> Right Currency
+        "DATE" -> Right Date
+        "TIME" -> Right Time
+        "DATE_TIME" -> Right DateTime
+        "SCIENTIFIC" -> Right Scientific
+        x -> Left ("Unable to parse NumberFormatType from: " <> x)
+
+instance ToHttpApiData NumberFormatType where
+    toQueryParam = \case
+        NumberFormatTypeUnspecified -> "NUMBER_FORMAT_TYPE_UNSPECIFIED"
+        Text -> "TEXT"
+        Number -> "NUMBER"
+        Percent -> "PERCENT"
+        Currency -> "CURRENCY"
+        Date -> "DATE"
+        Time -> "TIME"
+        DateTime -> "DATE_TIME"
+        Scientific -> "SCIENTIFIC"
+
+instance FromJSON NumberFormatType where
+    parseJSON = parseJSONText "NumberFormatType"
+
+instance ToJSON NumberFormatType where
+    toJSON = toJSONText
+
+-- | A relative date (based on the current date). Valid only if the type is
+-- DATE_BEFORE, DATE_AFTER, DATE_ON_OR_BEFORE or DATE_ON_OR_AFTER. Relative
+-- dates are not supported in data validation. They are supported only in
+-- conditional formatting and conditional filters.
+data ConditionValueRelativeDate
+    = RelativeDateUnspecified
+      -- ^ @RELATIVE_DATE_UNSPECIFIED@
+      -- Default value, do not use.
+    | PastYear
+      -- ^ @PAST_YEAR@
+      -- The value is one year before today.
+    | PastMonth
+      -- ^ @PAST_MONTH@
+      -- The value is one month before today.
+    | PastWeek
+      -- ^ @PAST_WEEK@
+      -- The value is one week before today.
+    | Yesterday
+      -- ^ @YESTERDAY@
+      -- The value is yesterday.
+    | Today
+      -- ^ @TODAY@
+      -- The value is today.
+    | Tomorrow
+      -- ^ @TOMORROW@
+      -- The value is tomorrow.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable ConditionValueRelativeDate
+
+instance FromHttpApiData ConditionValueRelativeDate where
+    parseQueryParam = \case
+        "RELATIVE_DATE_UNSPECIFIED" -> Right RelativeDateUnspecified
+        "PAST_YEAR" -> Right PastYear
+        "PAST_MONTH" -> Right PastMonth
+        "PAST_WEEK" -> Right PastWeek
+        "YESTERDAY" -> Right Yesterday
+        "TODAY" -> Right Today
+        "TOMORROW" -> Right Tomorrow
+        x -> Left ("Unable to parse ConditionValueRelativeDate from: " <> x)
+
+instance ToHttpApiData ConditionValueRelativeDate where
+    toQueryParam = \case
+        RelativeDateUnspecified -> "RELATIVE_DATE_UNSPECIFIED"
+        PastYear -> "PAST_YEAR"
+        PastMonth -> "PAST_MONTH"
+        PastWeek -> "PAST_WEEK"
+        Yesterday -> "YESTERDAY"
+        Today -> "TODAY"
+        Tomorrow -> "TOMORROW"
+
+instance FromJSON ConditionValueRelativeDate where
+    parseJSON = parseJSONText "ConditionValueRelativeDate"
+
+instance ToJSON ConditionValueRelativeDate where
+    toJSON = toJSONText
+
+-- | The type of location this object represents. This field is read-only.
+data DeveloperMetadataLocationLocationType
+    = DMLLTDeveloperMetadataLocationTypeUnspecified
+      -- ^ @DEVELOPER_METADATA_LOCATION_TYPE_UNSPECIFIED@
+      -- Default value.
+    | DMLLTRow
+      -- ^ @ROW@
+      -- Developer metadata associated on an entire row dimension.
+    | DMLLTColumn
+      -- ^ @COLUMN@
+      -- Developer metadata associated on an entire column dimension.
+    | DMLLTSheet
+      -- ^ @SHEET@
+      -- Developer metadata associated on an entire sheet.
+    | DMLLTSpreadsheet
+      -- ^ @SPREADSHEET@
+      -- Developer metadata associated on the entire spreadsheet.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable DeveloperMetadataLocationLocationType
+
+instance FromHttpApiData DeveloperMetadataLocationLocationType where
+    parseQueryParam = \case
+        "DEVELOPER_METADATA_LOCATION_TYPE_UNSPECIFIED" -> Right DMLLTDeveloperMetadataLocationTypeUnspecified
+        "ROW" -> Right DMLLTRow
+        "COLUMN" -> Right DMLLTColumn
+        "SHEET" -> Right DMLLTSheet
+        "SPREADSHEET" -> Right DMLLTSpreadsheet
+        x -> Left ("Unable to parse DeveloperMetadataLocationLocationType from: " <> x)
+
+instance ToHttpApiData DeveloperMetadataLocationLocationType where
+    toQueryParam = \case
+        DMLLTDeveloperMetadataLocationTypeUnspecified -> "DEVELOPER_METADATA_LOCATION_TYPE_UNSPECIFIED"
+        DMLLTRow -> "ROW"
+        DMLLTColumn -> "COLUMN"
+        DMLLTSheet -> "SHEET"
+        DMLLTSpreadsheet -> "SPREADSHEET"
+
+instance FromJSON DeveloperMetadataLocationLocationType where
+    parseJSON = parseJSONText "DeveloperMetadataLocationLocationType"
+
+instance ToJSON DeveloperMetadataLocationLocationType where
+    toJSON = toJSONText
+
+-- | The order data should be sorted.
+data SortSpecSortOrder
+    = SortOrderUnspecified
+      -- ^ @SORT_ORDER_UNSPECIFIED@
+      -- Default value, do not use this.
+    | Ascending
+      -- ^ @ASCENDING@
+      -- Sort ascending.
+    | Descending
+      -- ^ @DESCENDING@
+      -- Sort descending.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable SortSpecSortOrder
+
+instance FromHttpApiData SortSpecSortOrder where
+    parseQueryParam = \case
+        "SORT_ORDER_UNSPECIFIED" -> Right SortOrderUnspecified
+        "ASCENDING" -> Right Ascending
+        "DESCENDING" -> Right Descending
+        x -> Left ("Unable to parse SortSpecSortOrder from: " <> x)
+
+instance ToHttpApiData SortSpecSortOrder where
+    toQueryParam = \case
+        SortOrderUnspecified -> "SORT_ORDER_UNSPECIFIED"
+        Ascending -> "ASCENDING"
+        Descending -> "DESCENDING"
+
+instance FromJSON SortSpecSortOrder where
+    parseJSON = parseJSONText "SortSpecSortOrder"
+
+instance ToJSON SortSpecSortOrder where
+    toJSON = toJSONText
+
+-- | A function to summarize the value. If formula is set, the only supported
+-- values are SUM and CUSTOM. If sourceColumnOffset is set, then \`CUSTOM\`
+-- is not supported.
+data PivotValueSummarizeFunction
+    = PivotStandardValueFunctionUnspecified
+      -- ^ @PIVOT_STANDARD_VALUE_FUNCTION_UNSPECIFIED@
+      -- The default, do not use.
+    | Sum
+      -- ^ @SUM@
+      -- Corresponds to the \`SUM\` function.
+    | Counta
+      -- ^ @COUNTA@
+      -- Corresponds to the \`COUNTA\` function.
+    | Count
+      -- ^ @COUNT@
+      -- Corresponds to the \`COUNT\` function.
+    | Countunique
+      -- ^ @COUNTUNIQUE@
+      -- Corresponds to the \`COUNTUNIQUE\` function.
+    | Average
+      -- ^ @AVERAGE@
+      -- Corresponds to the \`AVERAGE\` function.
+    | Max
+      -- ^ @MAX@
+      -- Corresponds to the \`MAX\` function.
+    | Min
+      -- ^ @MIN@
+      -- Corresponds to the \`MIN\` function.
+    | Median
+      -- ^ @MEDIAN@
+      -- Corresponds to the \`MEDIAN\` function.
+    | Product
+      -- ^ @PRODUCT@
+      -- Corresponds to the \`PRODUCT\` function.
+    | Stdev
+      -- ^ @STDEV@
+      -- Corresponds to the \`STDEV\` function.
+    | Stdevp
+      -- ^ @STDEVP@
+      -- Corresponds to the \`STDEVP\` function.
+    | Var
+      -- ^ @VAR@
+      -- Corresponds to the \`VAR\` function.
+    | Varp
+      -- ^ @VARP@
+      -- Corresponds to the \`VARP\` function.
+    | Custom
+      -- ^ @CUSTOM@
+      -- Indicates the formula should be used as-is. Only valid if
+      -- PivotValue.formula was set.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable PivotValueSummarizeFunction
+
+instance FromHttpApiData PivotValueSummarizeFunction where
+    parseQueryParam = \case
+        "PIVOT_STANDARD_VALUE_FUNCTION_UNSPECIFIED" -> Right PivotStandardValueFunctionUnspecified
+        "SUM" -> Right Sum
+        "COUNTA" -> Right Counta
+        "COUNT" -> Right Count
+        "COUNTUNIQUE" -> Right Countunique
+        "AVERAGE" -> Right Average
+        "MAX" -> Right Max
+        "MIN" -> Right Min
+        "MEDIAN" -> Right Median
+        "PRODUCT" -> Right Product
+        "STDEV" -> Right Stdev
+        "STDEVP" -> Right Stdevp
+        "VAR" -> Right Var
+        "VARP" -> Right Varp
+        "CUSTOM" -> Right Custom
+        x -> Left ("Unable to parse PivotValueSummarizeFunction from: " <> x)
+
+instance ToHttpApiData PivotValueSummarizeFunction where
+    toQueryParam = \case
+        PivotStandardValueFunctionUnspecified -> "PIVOT_STANDARD_VALUE_FUNCTION_UNSPECIFIED"
+        Sum -> "SUM"
+        Counta -> "COUNTA"
+        Count -> "COUNT"
+        Countunique -> "COUNTUNIQUE"
+        Average -> "AVERAGE"
+        Max -> "MAX"
+        Min -> "MIN"
+        Median -> "MEDIAN"
+        Product -> "PRODUCT"
+        Stdev -> "STDEV"
+        Stdevp -> "STDEVP"
+        Var -> "VAR"
+        Varp -> "VARP"
+        Custom -> "CUSTOM"
+
+instance FromJSON PivotValueSummarizeFunction where
+    parseJSON = parseJSONText "PivotValueSummarizeFunction"
+
+instance ToJSON PivotValueSummarizeFunction where
+    toJSON = toJSONText
+
+-- | The size of the org chart nodes.
+data OrgChartSpecNodeSize
+    = OrgChartLabelSizeUnspecified
+      -- ^ @ORG_CHART_LABEL_SIZE_UNSPECIFIED@
+      -- Default value, do not use.
+    | Small
+      -- ^ @SMALL@
+      -- The small org chart node size.
+    | Medium
+      -- ^ @MEDIUM@
+      -- The medium org chart node size.
+    | Large
+      -- ^ @LARGE@
+      -- The large org chart node size.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable OrgChartSpecNodeSize
+
+instance FromHttpApiData OrgChartSpecNodeSize where
+    parseQueryParam = \case
+        "ORG_CHART_LABEL_SIZE_UNSPECIFIED" -> Right OrgChartLabelSizeUnspecified
+        "SMALL" -> Right Small
+        "MEDIUM" -> Right Medium
+        "LARGE" -> Right Large
+        x -> Left ("Unable to parse OrgChartSpecNodeSize from: " <> x)
+
+instance ToHttpApiData OrgChartSpecNodeSize where
+    toQueryParam = \case
+        OrgChartLabelSizeUnspecified -> "ORG_CHART_LABEL_SIZE_UNSPECIFIED"
+        Small -> "SMALL"
+        Medium -> "MEDIUM"
+        Large -> "LARGE"
+
+instance FromJSON OrgChartSpecNodeSize where
+    parseJSON = parseJSONText "OrgChartSpecNodeSize"
+
+instance ToJSON OrgChartSpecNodeSize where
+    toJSON = toJSONText
+
+-- | Determines how values in the response should be rendered. The default
+-- render option is ValueRenderOption.FORMATTED_VALUE.
+data BatchUpdateValuesByDataFilterRequestResponseValueRenderOption
+    = BUVBDFRRVROFormattedValue
+      -- ^ @FORMATTED_VALUE@
+      -- Values will be calculated & formatted in the reply according to the
+      -- cell\'s formatting. Formatting is based on the spreadsheet\'s locale,
+      -- not the requesting user\'s locale. For example, if \`A1\` is \`1.23\`
+      -- and \`A2\` is \`=A1\` and formatted as currency, then \`A2\` would
+      -- return \`\"$1.23\"\`.
+    | BUVBDFRRVROUnformattedValue
+      -- ^ @UNFORMATTED_VALUE@
+      -- Values will be calculated, but not formatted in the reply. For example,
+      -- if \`A1\` is \`1.23\` and \`A2\` is \`=A1\` and formatted as currency,
+      -- then \`A2\` would return the number \`1.23\`.
+    | BUVBDFRRVROFormula
+      -- ^ @FORMULA@
+      -- Values will not be calculated. The reply will include the formulas. For
+      -- example, if \`A1\` is \`1.23\` and \`A2\` is \`=A1\` and formatted as
+      -- currency, then A2 would return \`\"=A1\"\`.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable BatchUpdateValuesByDataFilterRequestResponseValueRenderOption
+
+instance FromHttpApiData BatchUpdateValuesByDataFilterRequestResponseValueRenderOption where
+    parseQueryParam = \case
+        "FORMATTED_VALUE" -> Right BUVBDFRRVROFormattedValue
+        "UNFORMATTED_VALUE" -> Right BUVBDFRRVROUnformattedValue
+        "FORMULA" -> Right BUVBDFRRVROFormula
+        x -> Left ("Unable to parse BatchUpdateValuesByDataFilterRequestResponseValueRenderOption from: " <> x)
+
+instance ToHttpApiData BatchUpdateValuesByDataFilterRequestResponseValueRenderOption where
+    toQueryParam = \case
+        BUVBDFRRVROFormattedValue -> "FORMATTED_VALUE"
+        BUVBDFRRVROUnformattedValue -> "UNFORMATTED_VALUE"
+        BUVBDFRRVROFormula -> "FORMULA"
+
+instance FromJSON BatchUpdateValuesByDataFilterRequestResponseValueRenderOption where
+    parseJSON = parseJSONText "BatchUpdateValuesByDataFilterRequestResponseValueRenderOption"
+
+instance ToJSON BatchUpdateValuesByDataFilterRequestResponseValueRenderOption where
+    toJSON = toJSONText
+
+-- | The dash type of the line.
+data LineStyleType
+    = LSTLineDashTypeUnspecified
+      -- ^ @LINE_DASH_TYPE_UNSPECIFIED@
+      -- Default value, do not use.
+    | LSTInvisible
+      -- ^ @INVISIBLE@
+      -- No dash type, which is equivalent to a non-visible line.
+    | LSTCustom
+      -- ^ @CUSTOM@
+      -- A custom dash for a line. Modifying the exact custom dash style is
+      -- currently unsupported.
+    | LSTSolid
+      -- ^ @SOLID@
+      -- A solid line.
+    | LSTDotted
+      -- ^ @DOTTED@
+      -- A dotted line.
+    | LSTMediumDashed
+      -- ^ @MEDIUM_DASHED@
+      -- A dashed line where the dashes have \"medium\" length.
+    | LSTMediumDashedDotted
+      -- ^ @MEDIUM_DASHED_DOTTED@
+      -- A line that alternates between a \"medium\" dash and a dot.
+    | LSTLongDashed
+      -- ^ @LONG_DASHED@
+      -- A dashed line where the dashes have \"long\" length.
+    | LSTLongDashedDotted
+      -- ^ @LONG_DASHED_DOTTED@
+      -- A line that alternates between a \"long\" dash and a dot.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable LineStyleType
+
+instance FromHttpApiData LineStyleType where
+    parseQueryParam = \case
+        "LINE_DASH_TYPE_UNSPECIFIED" -> Right LSTLineDashTypeUnspecified
+        "INVISIBLE" -> Right LSTInvisible
+        "CUSTOM" -> Right LSTCustom
+        "SOLID" -> Right LSTSolid
+        "DOTTED" -> Right LSTDotted
+        "MEDIUM_DASHED" -> Right LSTMediumDashed
+        "MEDIUM_DASHED_DOTTED" -> Right LSTMediumDashedDotted
+        "LONG_DASHED" -> Right LSTLongDashed
+        "LONG_DASHED_DOTTED" -> Right LSTLongDashedDotted
+        x -> Left ("Unable to parse LineStyleType from: " <> x)
+
+instance ToHttpApiData LineStyleType where
+    toQueryParam = \case
+        LSTLineDashTypeUnspecified -> "LINE_DASH_TYPE_UNSPECIFIED"
+        LSTInvisible -> "INVISIBLE"
+        LSTCustom -> "CUSTOM"
+        LSTSolid -> "SOLID"
+        LSTDotted -> "DOTTED"
+        LSTMediumDashed -> "MEDIUM_DASHED"
+        LSTMediumDashedDotted -> "MEDIUM_DASHED_DOTTED"
+        LSTLongDashed -> "LONG_DASHED"
+        LSTLongDashedDotted -> "LONG_DASHED_DOTTED"
+
+instance FromJSON LineStyleType where
+    parseJSON = parseJSONText "LineStyleType"
+
+instance ToJSON LineStyleType where
+    toJSON = toJSONText
+
+-- | How a hyperlink, if it exists, should be displayed in the cell.
+data CellFormatHyperlinkDisplayType
+    = HyperlinkDisplayTypeUnspecified
+      -- ^ @HYPERLINK_DISPLAY_TYPE_UNSPECIFIED@
+      -- The default value: the hyperlink is rendered. Do not use this.
+    | Linked
+      -- ^ @LINKED@
+      -- A hyperlink should be explicitly rendered.
+    | PlainText
+      -- ^ @PLAIN_TEXT@
+      -- A hyperlink should not be rendered.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable CellFormatHyperlinkDisplayType
+
+instance FromHttpApiData CellFormatHyperlinkDisplayType where
+    parseQueryParam = \case
+        "HYPERLINK_DISPLAY_TYPE_UNSPECIFIED" -> Right HyperlinkDisplayTypeUnspecified
+        "LINKED" -> Right Linked
+        "PLAIN_TEXT" -> Right PlainText
+        x -> Left ("Unable to parse CellFormatHyperlinkDisplayType from: " <> x)
+
+instance ToHttpApiData CellFormatHyperlinkDisplayType where
+    toQueryParam = \case
+        HyperlinkDisplayTypeUnspecified -> "HYPERLINK_DISPLAY_TYPE_UNSPECIFIED"
+        Linked -> "LINKED"
+        PlainText -> "PLAIN_TEXT"
+
+instance FromJSON CellFormatHyperlinkDisplayType where
+    parseJSON = parseJSONText "CellFormatHyperlinkDisplayType"
+
+instance ToJSON CellFormatHyperlinkDisplayType where
+    toJSON = toJSONText
+
+-- | How the input data should be interpreted.
+data BatchUpdateValuesByDataFilterRequestValueInputOption
+    = BUVBDFRVIOInputValueOptionUnspecified
+      -- ^ @INPUT_VALUE_OPTION_UNSPECIFIED@
+      -- Default input value. This value must not be used.
+    | BUVBDFRVIORaw
+      -- ^ @RAW@
+      -- The values the user has entered will not be parsed and will be stored
+      -- as-is.
+    | BUVBDFRVIOUserEntered
+      -- ^ @USER_ENTERED@
+      -- The values will be parsed as if the user typed them into the UI. Numbers
+      -- will stay as numbers, but strings may be converted to numbers, dates,
+      -- etc. following the same rules that are applied when entering text into a
+      -- cell via the Google Sheets UI.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable BatchUpdateValuesByDataFilterRequestValueInputOption
+
+instance FromHttpApiData BatchUpdateValuesByDataFilterRequestValueInputOption where
+    parseQueryParam = \case
+        "INPUT_VALUE_OPTION_UNSPECIFIED" -> Right BUVBDFRVIOInputValueOptionUnspecified
+        "RAW" -> Right BUVBDFRVIORaw
+        "USER_ENTERED" -> Right BUVBDFRVIOUserEntered
+        x -> Left ("Unable to parse BatchUpdateValuesByDataFilterRequestValueInputOption from: " <> x)
+
+instance ToHttpApiData BatchUpdateValuesByDataFilterRequestValueInputOption where
+    toQueryParam = \case
+        BUVBDFRVIOInputValueOptionUnspecified -> "INPUT_VALUE_OPTION_UNSPECIFIED"
+        BUVBDFRVIORaw -> "RAW"
+        BUVBDFRVIOUserEntered -> "USER_ENTERED"
+
+instance FromJSON BatchUpdateValuesByDataFilterRequestValueInputOption where
+    parseJSON = parseJSONText "BatchUpdateValuesByDataFilterRequestValueInputOption"
+
+instance ToJSON BatchUpdateValuesByDataFilterRequestValueInputOption where
+    toJSON = toJSONText
+
+-- | The position of the chart legend.
+data HistogramChartSpecLegendPosition
+    = HCSLPHistogramChartLegendPositionUnspecified
+      -- ^ @HISTOGRAM_CHART_LEGEND_POSITION_UNSPECIFIED@
+      -- Default value, do not use.
+    | HCSLPBottomLegend
+      -- ^ @BOTTOM_LEGEND@
+      -- The legend is rendered on the bottom of the chart.
+    | HCSLPLeftLegend
+      -- ^ @LEFT_LEGEND@
+      -- The legend is rendered on the left of the chart.
+    | HCSLPRightLegend
+      -- ^ @RIGHT_LEGEND@
+      -- The legend is rendered on the right of the chart.
+    | HCSLPTopLegend
+      -- ^ @TOP_LEGEND@
+      -- The legend is rendered on the top of the chart.
+    | HCSLPNoLegend
+      -- ^ @NO_LEGEND@
+      -- No legend is rendered.
+    | HCSLPInsideLegend
+      -- ^ @INSIDE_LEGEND@
+      -- The legend is rendered inside the chart area.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable HistogramChartSpecLegendPosition
+
+instance FromHttpApiData HistogramChartSpecLegendPosition where
+    parseQueryParam = \case
+        "HISTOGRAM_CHART_LEGEND_POSITION_UNSPECIFIED" -> Right HCSLPHistogramChartLegendPositionUnspecified
+        "BOTTOM_LEGEND" -> Right HCSLPBottomLegend
+        "LEFT_LEGEND" -> Right HCSLPLeftLegend
+        "RIGHT_LEGEND" -> Right HCSLPRightLegend
+        "TOP_LEGEND" -> Right HCSLPTopLegend
+        "NO_LEGEND" -> Right HCSLPNoLegend
+        "INSIDE_LEGEND" -> Right HCSLPInsideLegend
+        x -> Left ("Unable to parse HistogramChartSpecLegendPosition from: " <> x)
+
+instance ToHttpApiData HistogramChartSpecLegendPosition where
+    toQueryParam = \case
+        HCSLPHistogramChartLegendPositionUnspecified -> "HISTOGRAM_CHART_LEGEND_POSITION_UNSPECIFIED"
+        HCSLPBottomLegend -> "BOTTOM_LEGEND"
+        HCSLPLeftLegend -> "LEFT_LEGEND"
+        HCSLPRightLegend -> "RIGHT_LEGEND"
+        HCSLPTopLegend -> "TOP_LEGEND"
+        HCSLPNoLegend -> "NO_LEGEND"
+        HCSLPInsideLegend -> "INSIDE_LEGEND"
+
+instance FromJSON HistogramChartSpecLegendPosition where
+    parseJSON = parseJSONText "HistogramChartSpecLegendPosition"
+
+instance ToJSON HistogramChartSpecLegendPosition where
+    toJSON = toJSONText
+
+-- | The type of sheet. Defaults to GRID. This field cannot be changed once
+-- set.
+data SheetPropertiesSheetType
+    = SheetTypeUnspecified
+      -- ^ @SHEET_TYPE_UNSPECIFIED@
+      -- Default value, do not use.
+    | Grid
+      -- ^ @GRID@
+      -- The sheet is a grid.
+    | Object
+      -- ^ @OBJECT@
+      -- The sheet has no grid and instead has an object like a chart or image.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable SheetPropertiesSheetType
+
+instance FromHttpApiData SheetPropertiesSheetType where
+    parseQueryParam = \case
+        "SHEET_TYPE_UNSPECIFIED" -> Right SheetTypeUnspecified
+        "GRID" -> Right Grid
+        "OBJECT" -> Right Object
+        x -> Left ("Unable to parse SheetPropertiesSheetType from: " <> x)
+
+instance ToHttpApiData SheetPropertiesSheetType where
+    toQueryParam = \case
+        SheetTypeUnspecified -> "SHEET_TYPE_UNSPECIFIED"
+        Grid -> "GRID"
+        Object -> "OBJECT"
+
+instance FromJSON SheetPropertiesSheetType where
+    parseJSON = parseJSONText "SheetPropertiesSheetType"
+
+instance ToJSON SheetPropertiesSheetType where
+    toJSON = toJSONText
+
+-- | Limits the selected developer metadata to those entries which are
+-- associated with locations of the specified type. For example, when this
+-- field is specified as ROW this lookup only considers developer metadata
+-- associated on rows. If the field is left unspecified, all location types
+-- are considered. This field cannot be specified as SPREADSHEET when the
+-- locationMatchingStrategy is specified as INTERSECTING or when the
+-- metadataLocation is specified as a non-spreadsheet location: spreadsheet
+-- metadata cannot intersect any other developer metadata location. This
+-- field also must be left unspecified when the locationMatchingStrategy is
+-- specified as EXACT.
+data DeveloperMetadataLookupLocationType
+    = DDeveloperMetadataLocationTypeUnspecified
+      -- ^ @DEVELOPER_METADATA_LOCATION_TYPE_UNSPECIFIED@
+      -- Default value.
+    | DRow
+      -- ^ @ROW@
+      -- Developer metadata associated on an entire row dimension.
+    | DColumn
+      -- ^ @COLUMN@
+      -- Developer metadata associated on an entire column dimension.
+    | DSheet
+      -- ^ @SHEET@
+      -- Developer metadata associated on an entire sheet.
+    | DSpreadsheet
+      -- ^ @SPREADSHEET@
+      -- Developer metadata associated on the entire spreadsheet.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable DeveloperMetadataLookupLocationType
+
+instance FromHttpApiData DeveloperMetadataLookupLocationType where
+    parseQueryParam = \case
+        "DEVELOPER_METADATA_LOCATION_TYPE_UNSPECIFIED" -> Right DDeveloperMetadataLocationTypeUnspecified
+        "ROW" -> Right DRow
+        "COLUMN" -> Right DColumn
+        "SHEET" -> Right DSheet
+        "SPREADSHEET" -> Right DSpreadsheet
+        x -> Left ("Unable to parse DeveloperMetadataLookupLocationType from: " <> x)
+
+instance ToHttpApiData DeveloperMetadataLookupLocationType where
+    toQueryParam = \case
+        DDeveloperMetadataLocationTypeUnspecified -> "DEVELOPER_METADATA_LOCATION_TYPE_UNSPECIFIED"
+        DRow -> "ROW"
+        DColumn -> "COLUMN"
+        DSheet -> "SHEET"
+        DSpreadsheet -> "SPREADSHEET"
+
+instance FromJSON DeveloperMetadataLookupLocationType where
+    parseJSON = parseJSONText "DeveloperMetadataLookupLocationType"
+
+instance ToJSON DeveloperMetadataLookupLocationType where
+    toJSON = toJSONText
+
+-- | How the cells should be merged.
+data MergeCellsRequestMergeType
+    = MergeAll
+      -- ^ @MERGE_ALL@
+      -- Create a single merge from the range
+    | MergeColumns
+      -- ^ @MERGE_COLUMNS@
+      -- Create a merge for each column in the range
+    | MergeRows
+      -- ^ @MERGE_ROWS@
+      -- Create a merge for each row in the range
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable MergeCellsRequestMergeType
+
+instance FromHttpApiData MergeCellsRequestMergeType where
+    parseQueryParam = \case
+        "MERGE_ALL" -> Right MergeAll
+        "MERGE_COLUMNS" -> Right MergeColumns
+        "MERGE_ROWS" -> Right MergeRows
+        x -> Left ("Unable to parse MergeCellsRequestMergeType from: " <> x)
+
+instance ToHttpApiData MergeCellsRequestMergeType where
+    toQueryParam = \case
+        MergeAll -> "MERGE_ALL"
+        MergeColumns -> "MERGE_COLUMNS"
+        MergeRows -> "MERGE_ROWS"
+
+instance FromJSON MergeCellsRequestMergeType where
+    parseJSON = parseJSONText "MergeCellsRequestMergeType"
+
+instance ToJSON MergeCellsRequestMergeType where
+    toJSON = toJSONText
+
+-- | The horizontal alignment of the value in the cell.
+data CellFormatHorizontalAlignment
+    = CFHAHorizontalAlignUnspecified
+      -- ^ @HORIZONTAL_ALIGN_UNSPECIFIED@
+      -- The horizontal alignment is not specified. Do not use this.
+    | CFHALeft'
+      -- ^ @LEFT@
+      -- The text is explicitly aligned to the left of the cell.
+    | CFHACenter
+      -- ^ @CENTER@
+      -- The text is explicitly aligned to the center of the cell.
+    | CFHARight'
+      -- ^ @RIGHT@
+      -- The text is explicitly aligned to the right of the cell.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable CellFormatHorizontalAlignment
+
+instance FromHttpApiData CellFormatHorizontalAlignment where
+    parseQueryParam = \case
+        "HORIZONTAL_ALIGN_UNSPECIFIED" -> Right CFHAHorizontalAlignUnspecified
+        "LEFT" -> Right CFHALeft'
+        "CENTER" -> Right CFHACenter
+        "RIGHT" -> Right CFHARight'
+        x -> Left ("Unable to parse CellFormatHorizontalAlignment from: " <> x)
+
+instance ToHttpApiData CellFormatHorizontalAlignment where
+    toQueryParam = \case
+        CFHAHorizontalAlignUnspecified -> "HORIZONTAL_ALIGN_UNSPECIFIED"
+        CFHALeft' -> "LEFT"
+        CFHACenter -> "CENTER"
+        CFHARight' -> "RIGHT"
+
+instance FromJSON CellFormatHorizontalAlignment where
+    parseJSON = parseJSONText "CellFormatHorizontalAlignment"
+
+instance ToJSON CellFormatHorizontalAlignment where
+    toJSON = toJSONText
+
+-- | The stacked type.
+data WaterfallChartSpecStackedType
+    = WCSSTWaterfallStackedTypeUnspecified
+      -- ^ @WATERFALL_STACKED_TYPE_UNSPECIFIED@
+      -- Default value, do not use.
+    | WCSSTStacked
+      -- ^ @STACKED@
+      -- Values corresponding to the same domain (horizontal axis) value will be
+      -- stacked vertically.
+    | WCSSTSequential
+      -- ^ @SEQUENTIAL@
+      -- Series will spread out along the horizontal axis.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable WaterfallChartSpecStackedType
+
+instance FromHttpApiData WaterfallChartSpecStackedType where
+    parseQueryParam = \case
+        "WATERFALL_STACKED_TYPE_UNSPECIFIED" -> Right WCSSTWaterfallStackedTypeUnspecified
+        "STACKED" -> Right WCSSTStacked
+        "SEQUENTIAL" -> Right WCSSTSequential
+        x -> Left ("Unable to parse WaterfallChartSpecStackedType from: " <> x)
+
+instance ToHttpApiData WaterfallChartSpecStackedType where
+    toQueryParam = \case
+        WCSSTWaterfallStackedTypeUnspecified -> "WATERFALL_STACKED_TYPE_UNSPECIFIED"
+        WCSSTStacked -> "STACKED"
+        WCSSTSequential -> "SEQUENTIAL"
+
+instance FromJSON WaterfallChartSpecStackedType where
+    parseJSON = parseJSONText "WaterfallChartSpecStackedType"
+
+instance ToJSON WaterfallChartSpecStackedType where
+    toJSON = toJSONText
+
+-- | The type of date-time grouping to apply.
+data DateTimeRuleType
+    = DateTimeRuleTypeUnspecified
+      -- ^ @DATE_TIME_RULE_TYPE_UNSPECIFIED@
+      -- The default type, do not use.
+    | Second
+      -- ^ @SECOND@
+      -- Group dates by second, from 0 to 59.
+    | Minute
+      -- ^ @MINUTE@
+      -- Group dates by minute, from 0 to 59.
+    | Hour
+      -- ^ @HOUR@
+      -- Group dates by hour using a 24-hour system, from 0 to 23.
+    | HourMinute
+      -- ^ @HOUR_MINUTE@
+      -- Group dates by hour and minute using a 24-hour system, for example
+      -- 19:45.
+    | HourMinuteAmpm
+      -- ^ @HOUR_MINUTE_AMPM@
+      -- Group dates by hour and minute using a 12-hour system, for example 7:45
+      -- PM. The AM\/PM designation is translated based on the spreadsheet
+      -- locale.
+    | DayOfWeek
+      -- ^ @DAY_OF_WEEK@
+      -- Group dates by day of week, for example Sunday. The days of the week
+      -- will be translated based on the spreadsheet locale.
+    | DayOfYear
+      -- ^ @DAY_OF_YEAR@
+      -- Group dates by day of year, from 1 to 366. Note that dates after Feb. 29
+      -- fall in different buckets in leap years than in non-leap years.
+    | DayOfMonth
+      -- ^ @DAY_OF_MONTH@
+      -- Group dates by day of month, from 1 to 31.
+    | DayMonth
+      -- ^ @DAY_MONTH@
+      -- Group dates by day and month, for example 22-Nov. The month is
+      -- translated based on the spreadsheet locale.
+    | Month
+      -- ^ @MONTH@
+      -- Group dates by month, for example Nov. The month is translated based on
+      -- the spreadsheet locale.
+    | Quarter
+      -- ^ @QUARTER@
+      -- Group dates by quarter, for example Q1 (which represents Jan-Mar).
+    | Year
+      -- ^ @YEAR@
+      -- Group dates by year, for example 2008.
+    | YearMonth
+      -- ^ @YEAR_MONTH@
+      -- Group dates by year and month, for example 2008-Nov. The month is
+      -- translated based on the spreadsheet locale.
+    | YearQuarter
+      -- ^ @YEAR_QUARTER@
+      -- Group dates by year and quarter, for example 2008 Q4.
+    | YearMonthDay
+      -- ^ @YEAR_MONTH_DAY@
+      -- Group dates by year, month, and day, for example 2008-11-22.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable DateTimeRuleType
+
+instance FromHttpApiData DateTimeRuleType where
+    parseQueryParam = \case
+        "DATE_TIME_RULE_TYPE_UNSPECIFIED" -> Right DateTimeRuleTypeUnspecified
+        "SECOND" -> Right Second
+        "MINUTE" -> Right Minute
+        "HOUR" -> Right Hour
+        "HOUR_MINUTE" -> Right HourMinute
+        "HOUR_MINUTE_AMPM" -> Right HourMinuteAmpm
+        "DAY_OF_WEEK" -> Right DayOfWeek
+        "DAY_OF_YEAR" -> Right DayOfYear
+        "DAY_OF_MONTH" -> Right DayOfMonth
+        "DAY_MONTH" -> Right DayMonth
+        "MONTH" -> Right Month
+        "QUARTER" -> Right Quarter
+        "YEAR" -> Right Year
+        "YEAR_MONTH" -> Right YearMonth
+        "YEAR_QUARTER" -> Right YearQuarter
+        "YEAR_MONTH_DAY" -> Right YearMonthDay
+        x -> Left ("Unable to parse DateTimeRuleType from: " <> x)
+
+instance ToHttpApiData DateTimeRuleType where
+    toQueryParam = \case
+        DateTimeRuleTypeUnspecified -> "DATE_TIME_RULE_TYPE_UNSPECIFIED"
+        Second -> "SECOND"
+        Minute -> "MINUTE"
+        Hour -> "HOUR"
+        HourMinute -> "HOUR_MINUTE"
+        HourMinuteAmpm -> "HOUR_MINUTE_AMPM"
+        DayOfWeek -> "DAY_OF_WEEK"
+        DayOfYear -> "DAY_OF_YEAR"
+        DayOfMonth -> "DAY_OF_MONTH"
+        DayMonth -> "DAY_MONTH"
+        Month -> "MONTH"
+        Quarter -> "QUARTER"
+        Year -> "YEAR"
+        YearMonth -> "YEAR_MONTH"
+        YearQuarter -> "YEAR_QUARTER"
+        YearMonthDay -> "YEAR_MONTH_DAY"
+
+instance FromJSON DateTimeRuleType where
+    parseJSON = parseJSONText "DateTimeRuleType"
+
+instance ToJSON DateTimeRuleType where
+    toJSON = toJSONText
+
+-- | Limits the selected developer metadata to that which has a matching
+-- DeveloperMetadata.visibility. If left unspecified, all developer
+-- metadata visibile to the requesting project is considered.
+data DeveloperMetadataLookupVisibility
+    = DMLVDeveloperMetadataVisibilityUnspecified
+      -- ^ @DEVELOPER_METADATA_VISIBILITY_UNSPECIFIED@
+      -- Default value.
+    | DMLVDocument
+      -- ^ @DOCUMENT@
+      -- Document-visible metadata is accessible from any developer project with
+      -- access to the document.
+    | DMLVProject
+      -- ^ @PROJECT@
+      -- Project-visible metadata is only visible to and accessible by the
+      -- developer project that created the metadata.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable DeveloperMetadataLookupVisibility
+
+instance FromHttpApiData DeveloperMetadataLookupVisibility where
+    parseQueryParam = \case
+        "DEVELOPER_METADATA_VISIBILITY_UNSPECIFIED" -> Right DMLVDeveloperMetadataVisibilityUnspecified
+        "DOCUMENT" -> Right DMLVDocument
+        "PROJECT" -> Right DMLVProject
+        x -> Left ("Unable to parse DeveloperMetadataLookupVisibility from: " <> x)
+
+instance ToHttpApiData DeveloperMetadataLookupVisibility where
+    toQueryParam = \case
+        DMLVDeveloperMetadataVisibilityUnspecified -> "DEVELOPER_METADATA_VISIBILITY_UNSPECIFIED"
+        DMLVDocument -> "DOCUMENT"
+        DMLVProject -> "PROJECT"
+
+instance FromJSON DeveloperMetadataLookupVisibility where
+    parseJSON = parseJSONText "DeveloperMetadataLookupVisibility"
+
+instance ToJSON DeveloperMetadataLookupVisibility where
+    toJSON = toJSONText
+
+-- | The behavior of tooltips and data highlighting when hovering on data and
+-- chart area.
+data BasicChartSpecCompareMode
+    = BasicChartCompareModeUnspecified
+      -- ^ @BASIC_CHART_COMPARE_MODE_UNSPECIFIED@
+      -- Default value, do not use.
+    | Datum
+      -- ^ @DATUM@
+      -- Only the focused data element is highlighted and shown in the tooltip.
+    | Category
+      -- ^ @CATEGORY@
+      -- All data elements with the same category (e.g., domain value) are
+      -- highlighted and shown in the tooltip.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable BasicChartSpecCompareMode
+
+instance FromHttpApiData BasicChartSpecCompareMode where
+    parseQueryParam = \case
+        "BASIC_CHART_COMPARE_MODE_UNSPECIFIED" -> Right BasicChartCompareModeUnspecified
+        "DATUM" -> Right Datum
+        "CATEGORY" -> Right Category
+        x -> Left ("Unable to parse BasicChartSpecCompareMode from: " <> x)
+
+instance ToHttpApiData BasicChartSpecCompareMode where
+    toQueryParam = \case
+        BasicChartCompareModeUnspecified -> "BASIC_CHART_COMPARE_MODE_UNSPECIFIED"
+        Datum -> "DATUM"
+        Category -> "CATEGORY"
+
+instance FromJSON BasicChartSpecCompareMode where
+    parseJSON = parseJSONText "BasicChartSpecCompareMode"
+
+instance ToJSON BasicChartSpecCompareMode where
+    toJSON = toJSONText
+
+-- | The type of condition.
+data BooleanConditionType
+    = ConditionTypeUnspecified
+      -- ^ @CONDITION_TYPE_UNSPECIFIED@
+      -- The default value, do not use.
+    | NumberGreater
+      -- ^ @NUMBER_GREATER@
+      -- The cell\'s value must be greater than the condition\'s value. Supported
+      -- by data validation, conditional formatting and filters. Requires a
+      -- single ConditionValue.
+    | NumberGreaterThanEQ
+      -- ^ @NUMBER_GREATER_THAN_EQ@
+      -- The cell\'s value must be greater than or equal to the condition\'s
+      -- value. Supported by data validation, conditional formatting and filters.
+      -- Requires a single ConditionValue.
+    | NumberLess
+      -- ^ @NUMBER_LESS@
+      -- The cell\'s value must be less than the condition\'s value. Supported by
+      -- data validation, conditional formatting and filters. Requires a single
+      -- ConditionValue.
+    | NumberLessThanEQ
+      -- ^ @NUMBER_LESS_THAN_EQ@
+      -- The cell\'s value must be less than or equal to the condition\'s value.
+      -- Supported by data validation, conditional formatting and filters.
+      -- Requires a single ConditionValue.
+    | NumberEQ
+      -- ^ @NUMBER_EQ@
+      -- The cell\'s value must be equal to the condition\'s value. Supported by
+      -- data validation, conditional formatting and filters. Requires a single
+      -- ConditionValue.
+    | NumberNotEQ
+      -- ^ @NUMBER_NOT_EQ@
+      -- The cell\'s value must be not equal to the condition\'s value. Supported
+      -- by data validation, conditional formatting and filters. Requires a
+      -- single ConditionValue.
+    | NumberBetween
+      -- ^ @NUMBER_BETWEEN@
+      -- The cell\'s value must be between the two condition values. Supported by
+      -- data validation, conditional formatting and filters. Requires exactly
+      -- two ConditionValues.
+    | NumberNotBetween
+      -- ^ @NUMBER_NOT_BETWEEN@
+      -- The cell\'s value must not be between the two condition values.
+      -- Supported by data validation, conditional formatting and filters.
+      -- Requires exactly two ConditionValues.
+    | TextContains
+      -- ^ @TEXT_CONTAINS@
+      -- The cell\'s value must contain the condition\'s value. Supported by data
+      -- validation, conditional formatting and filters. Requires a single
+      -- ConditionValue.
+    | TextNotContains
+      -- ^ @TEXT_NOT_CONTAINS@
+      -- The cell\'s value must not contain the condition\'s value. Supported by
+      -- data validation, conditional formatting and filters. Requires a single
+      -- ConditionValue.
+    | TextStartsWith
+      -- ^ @TEXT_STARTS_WITH@
+      -- The cell\'s value must start with the condition\'s value. Supported by
+      -- conditional formatting and filters. Requires a single ConditionValue.
+    | TextEndsWith
+      -- ^ @TEXT_ENDS_WITH@
+      -- The cell\'s value must end with the condition\'s value. Supported by
+      -- conditional formatting and filters. Requires a single ConditionValue.
+    | TextEQ
+      -- ^ @TEXT_EQ@
+      -- The cell\'s value must be exactly the condition\'s value. Supported by
+      -- data validation, conditional formatting and filters. Requires a single
+      -- ConditionValue.
+    | TextIsEmail
+      -- ^ @TEXT_IS_EMAIL@
+      -- The cell\'s value must be a valid email address. Supported by data
+      -- validation. Requires no ConditionValues.
+    | TextIsURL
+      -- ^ @TEXT_IS_URL@
+      -- The cell\'s value must be a valid URL. Supported by data validation.
+      -- Requires no ConditionValues.
+    | DateEQ
+      -- ^ @DATE_EQ@
+      -- The cell\'s value must be the same date as the condition\'s value.
+      -- Supported by data validation, conditional formatting and filters.
+      -- Requires a single ConditionValue.
+    | DateBefore
+      -- ^ @DATE_BEFORE@
+      -- The cell\'s value must be before the date of the condition\'s value.
+      -- Supported by data validation, conditional formatting and filters.
+      -- Requires a single ConditionValue that may be a relative date.
+    | DateAfter
+      -- ^ @DATE_AFTER@
+      -- The cell\'s value must be after the date of the condition\'s value.
+      -- Supported by data validation, conditional formatting and filters.
+      -- Requires a single ConditionValue that may be a relative date.
+    | DateOnOrBefore
+      -- ^ @DATE_ON_OR_BEFORE@
+      -- The cell\'s value must be on or before the date of the condition\'s
+      -- value. Supported by data validation. Requires a single ConditionValue
+      -- that may be a relative date.
+    | DateOnOrAfter
+      -- ^ @DATE_ON_OR_AFTER@
+      -- The cell\'s value must be on or after the date of the condition\'s
+      -- value. Supported by data validation. Requires a single ConditionValue
+      -- that may be a relative date.
+    | DateBetween
+      -- ^ @DATE_BETWEEN@
+      -- The cell\'s value must be between the dates of the two condition values.
+      -- Supported by data validation. Requires exactly two ConditionValues.
+    | DateNotBetween
+      -- ^ @DATE_NOT_BETWEEN@
+      -- The cell\'s value must be outside the dates of the two condition values.
+      -- Supported by data validation. Requires exactly two ConditionValues.
+    | DateIsValid
+      -- ^ @DATE_IS_VALID@
+      -- The cell\'s value must be a date. Supported by data validation. Requires
+      -- no ConditionValues.
+    | OneOfRange
+      -- ^ @ONE_OF_RANGE@
+      -- The cell\'s value must be listed in the grid in condition value\'s
+      -- range. Supported by data validation. Requires a single ConditionValue,
+      -- and the value must be a valid range in A1 notation.
+    | OneOfList
+      -- ^ @ONE_OF_LIST@
+      -- The cell\'s value must be in the list of condition values. Supported by
+      -- data validation. Supports any number of condition values, one per item
+      -- in the list. Formulas are not supported in the values.
+    | Blank
+      -- ^ @BLANK@
+      -- The cell\'s value must be empty. Supported by conditional formatting and
+      -- filters. Requires no ConditionValues.
+    | NotBlank
+      -- ^ @NOT_BLANK@
+      -- The cell\'s value must not be empty. Supported by conditional formatting
+      -- and filters. Requires no ConditionValues.
+    | CustomFormula
+      -- ^ @CUSTOM_FORMULA@
+      -- The condition\'s formula must evaluate to true. Supported by data
+      -- validation, conditional formatting and filters. Requires a single
+      -- ConditionValue.
+    | Boolean
+      -- ^ @BOOLEAN@
+      -- The cell\'s value must be TRUE\/FALSE or in the list of condition
+      -- values. Supported by data validation. Renders as a cell checkbox.
+      -- Supports zero, one or two ConditionValues. No values indicates the cell
+      -- must be TRUE or FALSE, where TRUE renders as checked and FALSE renders
+      -- as unchecked. One value indicates the cell will render as checked when
+      -- it contains that value and unchecked when it is blank. Two values
+      -- indicate that the cell will render as checked when it contains the first
+      -- value and unchecked when it contains the second value. For example,
+      -- [\"Yes\",\"No\"] indicates that the cell will render a checked box when
+      -- it has the value \"Yes\" and an unchecked box when it has the value
+      -- \"No\".
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable BooleanConditionType
+
+instance FromHttpApiData BooleanConditionType where
+    parseQueryParam = \case
+        "CONDITION_TYPE_UNSPECIFIED" -> Right ConditionTypeUnspecified
+        "NUMBER_GREATER" -> Right NumberGreater
+        "NUMBER_GREATER_THAN_EQ" -> Right NumberGreaterThanEQ
+        "NUMBER_LESS" -> Right NumberLess
+        "NUMBER_LESS_THAN_EQ" -> Right NumberLessThanEQ
+        "NUMBER_EQ" -> Right NumberEQ
+        "NUMBER_NOT_EQ" -> Right NumberNotEQ
+        "NUMBER_BETWEEN" -> Right NumberBetween
+        "NUMBER_NOT_BETWEEN" -> Right NumberNotBetween
+        "TEXT_CONTAINS" -> Right TextContains
+        "TEXT_NOT_CONTAINS" -> Right TextNotContains
+        "TEXT_STARTS_WITH" -> Right TextStartsWith
+        "TEXT_ENDS_WITH" -> Right TextEndsWith
+        "TEXT_EQ" -> Right TextEQ
+        "TEXT_IS_EMAIL" -> Right TextIsEmail
+        "TEXT_IS_URL" -> Right TextIsURL
+        "DATE_EQ" -> Right DateEQ
+        "DATE_BEFORE" -> Right DateBefore
+        "DATE_AFTER" -> Right DateAfter
+        "DATE_ON_OR_BEFORE" -> Right DateOnOrBefore
+        "DATE_ON_OR_AFTER" -> Right DateOnOrAfter
+        "DATE_BETWEEN" -> Right DateBetween
+        "DATE_NOT_BETWEEN" -> Right DateNotBetween
+        "DATE_IS_VALID" -> Right DateIsValid
+        "ONE_OF_RANGE" -> Right OneOfRange
+        "ONE_OF_LIST" -> Right OneOfList
+        "BLANK" -> Right Blank
+        "NOT_BLANK" -> Right NotBlank
+        "CUSTOM_FORMULA" -> Right CustomFormula
+        "BOOLEAN" -> Right Boolean
+        x -> Left ("Unable to parse BooleanConditionType from: " <> x)
+
+instance ToHttpApiData BooleanConditionType where
+    toQueryParam = \case
+        ConditionTypeUnspecified -> "CONDITION_TYPE_UNSPECIFIED"
+        NumberGreater -> "NUMBER_GREATER"
+        NumberGreaterThanEQ -> "NUMBER_GREATER_THAN_EQ"
+        NumberLess -> "NUMBER_LESS"
+        NumberLessThanEQ -> "NUMBER_LESS_THAN_EQ"
+        NumberEQ -> "NUMBER_EQ"
+        NumberNotEQ -> "NUMBER_NOT_EQ"
+        NumberBetween -> "NUMBER_BETWEEN"
+        NumberNotBetween -> "NUMBER_NOT_BETWEEN"
+        TextContains -> "TEXT_CONTAINS"
+        TextNotContains -> "TEXT_NOT_CONTAINS"
+        TextStartsWith -> "TEXT_STARTS_WITH"
+        TextEndsWith -> "TEXT_ENDS_WITH"
+        TextEQ -> "TEXT_EQ"
+        TextIsEmail -> "TEXT_IS_EMAIL"
+        TextIsURL -> "TEXT_IS_URL"
+        DateEQ -> "DATE_EQ"
+        DateBefore -> "DATE_BEFORE"
+        DateAfter -> "DATE_AFTER"
+        DateOnOrBefore -> "DATE_ON_OR_BEFORE"
+        DateOnOrAfter -> "DATE_ON_OR_AFTER"
+        DateBetween -> "DATE_BETWEEN"
+        DateNotBetween -> "DATE_NOT_BETWEEN"
+        DateIsValid -> "DATE_IS_VALID"
+        OneOfRange -> "ONE_OF_RANGE"
+        OneOfList -> "ONE_OF_LIST"
+        Blank -> "BLANK"
+        NotBlank -> "NOT_BLANK"
+        CustomFormula -> "CUSTOM_FORMULA"
+        Boolean -> "BOOLEAN"
+
+instance FromJSON BooleanConditionType where
+    parseJSON = parseJSONText "BooleanConditionType"
+
+instance ToJSON BooleanConditionType where
+    toJSON = toJSONText
+
+-- | The major dimension of the values. For output, if the spreadsheet data
+-- is: \`A1=1,B1=2,A2=3,B2=4\`, then requesting
+-- \`range=A1:B2,majorDimension=ROWS\` will return \`[[1,2],[3,4]]\`,
+-- whereas requesting \`range=A1:B2,majorDimension=COLUMNS\` will return
+-- \`[[1,3],[2,4]]\`. For input, with \`range=A1:B2,majorDimension=ROWS\`
+-- then \`[[1,2],[3,4]]\` will set \`A1=1,B1=2,A2=3,B2=4\`. With
+-- \`range=A1:B2,majorDimension=COLUMNS\` then \`[[1,2],[3,4]]\` will set
+-- \`A1=1,B1=3,A2=2,B2=4\`. When writing, if this field is not set, it
+-- defaults to ROWS.
+data ValueRangeMajorDimension
+    = VRMDDimensionUnspecified
+      -- ^ @DIMENSION_UNSPECIFIED@
+      -- The default value, do not use.
+    | VRMDRows
+      -- ^ @ROWS@
+      -- Operates on the rows of a sheet.
+    | VRMDColumns
+      -- ^ @COLUMNS@
+      -- Operates on the columns of a sheet.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable ValueRangeMajorDimension
+
+instance FromHttpApiData ValueRangeMajorDimension where
+    parseQueryParam = \case
+        "DIMENSION_UNSPECIFIED" -> Right VRMDDimensionUnspecified
+        "ROWS" -> Right VRMDRows
+        "COLUMNS" -> Right VRMDColumns
+        x -> Left ("Unable to parse ValueRangeMajorDimension from: " <> x)
+
+instance ToHttpApiData ValueRangeMajorDimension where
+    toQueryParam = \case
+        VRMDDimensionUnspecified -> "DIMENSION_UNSPECIFIED"
+        VRMDRows -> "ROWS"
+        VRMDColumns -> "COLUMNS"
+
+instance FromJSON ValueRangeMajorDimension where
+    parseJSON = parseJSONText "ValueRangeMajorDimension"
+
+instance ToJSON ValueRangeMajorDimension where
+    toJSON = toJSONText
+
+-- | The order the values in this group should be sorted.
+data PivotGroupSortOrder
+    = PGSOSortOrderUnspecified
+      -- ^ @SORT_ORDER_UNSPECIFIED@
+      -- Default value, do not use this.
+    | PGSOAscending
+      -- ^ @ASCENDING@
+      -- Sort ascending.
+    | PGSODescending
+      -- ^ @DESCENDING@
+      -- Sort descending.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable PivotGroupSortOrder
+
+instance FromHttpApiData PivotGroupSortOrder where
+    parseQueryParam = \case
+        "SORT_ORDER_UNSPECIFIED" -> Right PGSOSortOrderUnspecified
+        "ASCENDING" -> Right PGSOAscending
+        "DESCENDING" -> Right PGSODescending
+        x -> Left ("Unable to parse PivotGroupSortOrder from: " <> x)
+
+instance ToHttpApiData PivotGroupSortOrder where
+    toQueryParam = \case
+        PGSOSortOrderUnspecified -> "SORT_ORDER_UNSPECIFIED"
+        PGSOAscending -> "ASCENDING"
+        PGSODescending -> "DESCENDING"
+
+instance FromJSON PivotGroupSortOrder where
+    parseJSON = parseJSONText "PivotGroupSortOrder"
+
+instance ToJSON PivotGroupSortOrder where
+    toJSON = toJSONText
+
+-- | The type of the chart.
+data BasicChartSpecChartType
+    = BasicChartTypeUnspecified
+      -- ^ @BASIC_CHART_TYPE_UNSPECIFIED@
+      -- Default value, do not use.
+    | Bar
+      -- ^ @BAR@
+      -- A </chart/interactive/docs/gallery/barchart bar chart>.
+    | Line
+      -- ^ @LINE@
+      -- A </chart/interactive/docs/gallery/linechart line chart>.
+    | Area
+      -- ^ @AREA@
+      -- An </chart/interactive/docs/gallery/areachart area chart>.
+    | Column
+      -- ^ @COLUMN@
+      -- A </chart/interactive/docs/gallery/columnchart column chart>.
+    | Scatter
+      -- ^ @SCATTER@
+      -- A </chart/interactive/docs/gallery/scatterchart scatter chart>.
+    | Combo
+      -- ^ @COMBO@
+      -- A </chart/interactive/docs/gallery/combochart combo chart>.
+    | SteppedArea
+      -- ^ @STEPPED_AREA@
+      -- A </chart/interactive/docs/gallery/steppedareachart stepped area chart>.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable BasicChartSpecChartType
+
+instance FromHttpApiData BasicChartSpecChartType where
+    parseQueryParam = \case
+        "BASIC_CHART_TYPE_UNSPECIFIED" -> Right BasicChartTypeUnspecified
+        "BAR" -> Right Bar
+        "LINE" -> Right Line
+        "AREA" -> Right Area
+        "COLUMN" -> Right Column
+        "SCATTER" -> Right Scatter
+        "COMBO" -> Right Combo
+        "STEPPED_AREA" -> Right SteppedArea
+        x -> Left ("Unable to parse BasicChartSpecChartType from: " <> x)
+
+instance ToHttpApiData BasicChartSpecChartType where
+    toQueryParam = \case
+        BasicChartTypeUnspecified -> "BASIC_CHART_TYPE_UNSPECIFIED"
+        Bar -> "BAR"
+        Line -> "LINE"
+        Area -> "AREA"
+        Column -> "COLUMN"
+        Scatter -> "SCATTER"
+        Combo -> "COMBO"
+        SteppedArea -> "STEPPED_AREA"
+
+instance FromJSON BasicChartSpecChartType where
+    parseJSON = parseJSONText "BasicChartSpecChartType"
+
+instance ToJSON BasicChartSpecChartType where
+    toJSON = toJSONText
+
+-- | V1 error format.
+data Xgafv
+    = X1
+      -- ^ @1@
+      -- v1 error format
+    | X2
+      -- ^ @2@
+      -- v2 error format
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable Xgafv
+
+instance FromHttpApiData Xgafv where
+    parseQueryParam = \case
+        "1" -> Right X1
+        "2" -> Right X2
+        x -> Left ("Unable to parse Xgafv from: " <> x)
+
+instance ToHttpApiData Xgafv where
+    toQueryParam = \case
+        X1 -> "1"
+        X2 -> "2"
+
+instance FromJSON Xgafv where
+    parseJSON = parseJSONText "Xgafv"
+
+instance ToJSON Xgafv where
+    toJSON = toJSONText
+
+-- | The amount of time to wait before volatile functions are recalculated.
+data SpreadsheetPropertiesAutoRecalc
+    = SPARRecalculationIntervalUnspecified
+      -- ^ @RECALCULATION_INTERVAL_UNSPECIFIED@
+      -- Default value. This value must not be used.
+    | SPAROnChange
+      -- ^ @ON_CHANGE@
+      -- Volatile functions are updated on every change.
+    | SPARMinute
+      -- ^ @MINUTE@
+      -- Volatile functions are updated on every change and every minute.
+    | SPARHour
+      -- ^ @HOUR@
+      -- Volatile functions are updated on every change and hourly.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable SpreadsheetPropertiesAutoRecalc
+
+instance FromHttpApiData SpreadsheetPropertiesAutoRecalc where
+    parseQueryParam = \case
+        "RECALCULATION_INTERVAL_UNSPECIFIED" -> Right SPARRecalculationIntervalUnspecified
+        "ON_CHANGE" -> Right SPAROnChange
+        "MINUTE" -> Right SPARMinute
+        "HOUR" -> Right SPARHour
+        x -> Left ("Unable to parse SpreadsheetPropertiesAutoRecalc from: " <> x)
+
+instance ToHttpApiData SpreadsheetPropertiesAutoRecalc where
+    toQueryParam = \case
+        SPARRecalculationIntervalUnspecified -> "RECALCULATION_INTERVAL_UNSPECIFIED"
+        SPAROnChange -> "ON_CHANGE"
+        SPARMinute -> "MINUTE"
+        SPARHour -> "HOUR"
+
+instance FromJSON SpreadsheetPropertiesAutoRecalc where
+    parseJSON = parseJSONText "SpreadsheetPropertiesAutoRecalc"
+
+instance ToJSON SpreadsheetPropertiesAutoRecalc where
+    toJSON = toJSONText
+
+-- | How that data should be oriented when pasting.
+data CopyPasteRequestPasteOrientation
+    = Normal
+      -- ^ @NORMAL@
+      -- Paste normally.
+    | Transpose
+      -- ^ @TRANSPOSE@
+      -- Paste transposed, where all rows become columns and vice versa.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable CopyPasteRequestPasteOrientation
+
+instance FromHttpApiData CopyPasteRequestPasteOrientation where
+    parseQueryParam = \case
+        "NORMAL" -> Right Normal
+        "TRANSPOSE" -> Right Transpose
+        x -> Left ("Unable to parse CopyPasteRequestPasteOrientation from: " <> x)
+
+instance ToHttpApiData CopyPasteRequestPasteOrientation where
+    toQueryParam = \case
+        Normal -> "NORMAL"
+        Transpose -> "TRANSPOSE"
+
+instance FromJSON CopyPasteRequestPasteOrientation where
+    parseJSON = parseJSONText "CopyPasteRequestPasteOrientation"
+
+instance ToJSON CopyPasteRequestPasteOrientation where
+    toJSON = toJSONText
+
+-- | How the data should be pasted.
+data PasteDataRequestType
+    = PDRTPasteNormal
+      -- ^ @PASTE_NORMAL@
+      -- Paste values, formulas, formats, and merges.
+    | PDRTPasteValues
+      -- ^ @PASTE_VALUES@
+      -- Paste the values ONLY without formats, formulas, or merges.
+    | PDRTPasteFormat
+      -- ^ @PASTE_FORMAT@
+      -- Paste the format and data validation only.
+    | PDRTPasteNoBOrders
+      -- ^ @PASTE_NO_BORDERS@
+      -- Like PASTE_NORMAL but without borders.
+    | PDRTPasteFormula
+      -- ^ @PASTE_FORMULA@
+      -- Paste the formulas only.
+    | PDRTPasteDataValidation
+      -- ^ @PASTE_DATA_VALIDATION@
+      -- Paste the data validation only.
+    | PDRTPasteConditionalFormatting
+      -- ^ @PASTE_CONDITIONAL_FORMATTING@
+      -- Paste the conditional formatting rules only.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable PasteDataRequestType
+
+instance FromHttpApiData PasteDataRequestType where
+    parseQueryParam = \case
+        "PASTE_NORMAL" -> Right PDRTPasteNormal
+        "PASTE_VALUES" -> Right PDRTPasteValues
+        "PASTE_FORMAT" -> Right PDRTPasteFormat
+        "PASTE_NO_BORDERS" -> Right PDRTPasteNoBOrders
+        "PASTE_FORMULA" -> Right PDRTPasteFormula
+        "PASTE_DATA_VALIDATION" -> Right PDRTPasteDataValidation
+        "PASTE_CONDITIONAL_FORMATTING" -> Right PDRTPasteConditionalFormatting
+        x -> Left ("Unable to parse PasteDataRequestType from: " <> x)
+
+instance ToHttpApiData PasteDataRequestType where
+    toQueryParam = \case
+        PDRTPasteNormal -> "PASTE_NORMAL"
+        PDRTPasteValues -> "PASTE_VALUES"
+        PDRTPasteFormat -> "PASTE_FORMAT"
+        PDRTPasteNoBOrders -> "PASTE_NO_BORDERS"
+        PDRTPasteFormula -> "PASTE_FORMULA"
+        PDRTPasteDataValidation -> "PASTE_DATA_VALIDATION"
+        PDRTPasteConditionalFormatting -> "PASTE_CONDITIONAL_FORMATTING"
+
+instance FromJSON PasteDataRequestType where
+    parseJSON = parseJSONText "PasteDataRequestType"
+
+instance ToJSON PasteDataRequestType where
+    toJSON = toJSONText
+
+-- | The direction of the text in the cell.
+data CellFormatTextDirection
+    = TextDirectionUnspecified
+      -- ^ @TEXT_DIRECTION_UNSPECIFIED@
+      -- The text direction is not specified. Do not use this.
+    | LeftToRight
+      -- ^ @LEFT_TO_RIGHT@
+      -- The text direction of left-to-right was set by the user.
+    | RightToLeft
+      -- ^ @RIGHT_TO_LEFT@
+      -- The text direction of right-to-left was set by the user.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable CellFormatTextDirection
+
+instance FromHttpApiData CellFormatTextDirection where
+    parseQueryParam = \case
+        "TEXT_DIRECTION_UNSPECIFIED" -> Right TextDirectionUnspecified
+        "LEFT_TO_RIGHT" -> Right LeftToRight
+        "RIGHT_TO_LEFT" -> Right RightToLeft
+        x -> Left ("Unable to parse CellFormatTextDirection from: " <> x)
+
+instance ToHttpApiData CellFormatTextDirection where
+    toQueryParam = \case
+        TextDirectionUnspecified -> "TEXT_DIRECTION_UNSPECIFIED"
+        LeftToRight -> "LEFT_TO_RIGHT"
+        RightToLeft -> "RIGHT_TO_LEFT"
+
+instance FromJSON CellFormatTextDirection where
+    parseJSON = parseJSONText "CellFormatTextDirection"
+
+instance ToJSON CellFormatTextDirection where
+    toJSON = toJSONText
+
+-- | The type of this series. Valid only if the chartType is COMBO. Different
+-- types will change the way the series is visualized. Only LINE, AREA, and
+-- COLUMN are supported.
+data BasicChartSeriesType
+    = BCSTBasicChartTypeUnspecified
+      -- ^ @BASIC_CHART_TYPE_UNSPECIFIED@
+      -- Default value, do not use.
+    | BCSTBar
+      -- ^ @BAR@
+      -- A </chart/interactive/docs/gallery/barchart bar chart>.
+    | BCSTLine
+      -- ^ @LINE@
+      -- A </chart/interactive/docs/gallery/linechart line chart>.
+    | BCSTArea
+      -- ^ @AREA@
+      -- An </chart/interactive/docs/gallery/areachart area chart>.
+    | BCSTColumn
+      -- ^ @COLUMN@
+      -- A </chart/interactive/docs/gallery/columnchart column chart>.
+    | BCSTScatter
+      -- ^ @SCATTER@
+      -- A </chart/interactive/docs/gallery/scatterchart scatter chart>.
+    | BCSTCombo
+      -- ^ @COMBO@
+      -- A </chart/interactive/docs/gallery/combochart combo chart>.
+    | BCSTSteppedArea
+      -- ^ @STEPPED_AREA@
+      -- A </chart/interactive/docs/gallery/steppedareachart stepped area chart>.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable BasicChartSeriesType
+
+instance FromHttpApiData BasicChartSeriesType where
+    parseQueryParam = \case
+        "BASIC_CHART_TYPE_UNSPECIFIED" -> Right BCSTBasicChartTypeUnspecified
+        "BAR" -> Right BCSTBar
+        "LINE" -> Right BCSTLine
+        "AREA" -> Right BCSTArea
+        "COLUMN" -> Right BCSTColumn
+        "SCATTER" -> Right BCSTScatter
+        "COMBO" -> Right BCSTCombo
+        "STEPPED_AREA" -> Right BCSTSteppedArea
+        x -> Left ("Unable to parse BasicChartSeriesType from: " <> x)
+
+instance ToHttpApiData BasicChartSeriesType where
+    toQueryParam = \case
+        BCSTBasicChartTypeUnspecified -> "BASIC_CHART_TYPE_UNSPECIFIED"
+        BCSTBar -> "BAR"
+        BCSTLine -> "LINE"
+        BCSTArea -> "AREA"
+        BCSTColumn -> "COLUMN"
+        BCSTScatter -> "SCATTER"
+        BCSTCombo -> "COMBO"
+        BCSTSteppedArea -> "STEPPED_AREA"
+
+instance FromJSON BasicChartSeriesType where
+    parseJSON = parseJSONText "BasicChartSeriesType"
+
+instance ToJSON BasicChartSeriesType where
+    toJSON = toJSONText
+
+-- | If specified, indicates that pivot values should be displayed as the
+-- result of a calculation with another pivot value. For example, if
+-- calculated_display_type is specified as PERCENT_OF_GRAND_TOTAL, all the
+-- pivot values are displayed as the percentage of the grand total. In the
+-- Sheets UI, this is referred to as \"Show As\" in the value section of a
+-- pivot table.
+data PivotValueCalculatedDisplayType
+    = PivotValueCalculatedDisplayTypeUnspecified
+      -- ^ @PIVOT_VALUE_CALCULATED_DISPLAY_TYPE_UNSPECIFIED@
+      -- Default value, do not use.
+    | PercentOfRowTotal
+      -- ^ @PERCENT_OF_ROW_TOTAL@
+      -- Shows the pivot values as percentage of the row total values.
+    | PercentOfColumnTotal
+      -- ^ @PERCENT_OF_COLUMN_TOTAL@
+      -- Shows the pivot values as percentage of the column total values.
+    | PercentOfGrandTotal
+      -- ^ @PERCENT_OF_GRAND_TOTAL@
+      -- Shows the pivot values as percentage of the grand total values.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable PivotValueCalculatedDisplayType
+
+instance FromHttpApiData PivotValueCalculatedDisplayType where
+    parseQueryParam = \case
+        "PIVOT_VALUE_CALCULATED_DISPLAY_TYPE_UNSPECIFIED" -> Right PivotValueCalculatedDisplayTypeUnspecified
+        "PERCENT_OF_ROW_TOTAL" -> Right PercentOfRowTotal
+        "PERCENT_OF_COLUMN_TOTAL" -> Right PercentOfColumnTotal
+        "PERCENT_OF_GRAND_TOTAL" -> Right PercentOfGrandTotal
+        x -> Left ("Unable to parse PivotValueCalculatedDisplayType from: " <> x)
+
+instance ToHttpApiData PivotValueCalculatedDisplayType where
+    toQueryParam = \case
+        PivotValueCalculatedDisplayTypeUnspecified -> "PIVOT_VALUE_CALCULATED_DISPLAY_TYPE_UNSPECIFIED"
+        PercentOfRowTotal -> "PERCENT_OF_ROW_TOTAL"
+        PercentOfColumnTotal -> "PERCENT_OF_COLUMN_TOTAL"
+        PercentOfGrandTotal -> "PERCENT_OF_GRAND_TOTAL"
+
+instance FromJSON PivotValueCalculatedDisplayType where
+    parseJSON = parseJSONText "PivotValueCalculatedDisplayType"
+
+instance ToJSON PivotValueCalculatedDisplayType where
+    toJSON = toJSONText
+
+-- | How dates, times, and durations should be represented in the output.
+-- This is ignored if value_render_option is FORMATTED_VALUE. The default
+-- dateTime render option is [DateTimeRenderOption.SERIAL_NUMBER].
+data BatchGetValuesByDataFilterRequestDateTimeRenderOption
+    = BGVBDFRDTROSerialNumber
+      -- ^ @SERIAL_NUMBER@
+      -- Instructs date, time, datetime, and duration fields to be output as
+      -- doubles in \"serial number\" format, as popularized by Lotus 1-2-3. The
+      -- whole number portion of the value (left of the decimal) counts the days
+      -- since December 30th 1899. The fractional portion (right of the decimal)
+      -- counts the time as a fraction of the day. For example, January 1st 1900
+      -- at noon would be 2.5, 2 because it\'s 2 days after December 30st 1899,
+      -- and .5 because noon is half a day. February 1st 1900 at 3pm would be
+      -- 33.625. This correctly treats the year 1900 as not a leap year.
+    | BGVBDFRDTROFormattedString
+      -- ^ @FORMATTED_STRING@
+      -- Instructs date, time, datetime, and duration fields to be output as
+      -- strings in their given number format (which is dependent on the
+      -- spreadsheet locale).
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable BatchGetValuesByDataFilterRequestDateTimeRenderOption
+
+instance FromHttpApiData BatchGetValuesByDataFilterRequestDateTimeRenderOption where
+    parseQueryParam = \case
+        "SERIAL_NUMBER" -> Right BGVBDFRDTROSerialNumber
+        "FORMATTED_STRING" -> Right BGVBDFRDTROFormattedString
+        x -> Left ("Unable to parse BatchGetValuesByDataFilterRequestDateTimeRenderOption from: " <> x)
+
+instance ToHttpApiData BatchGetValuesByDataFilterRequestDateTimeRenderOption where
+    toQueryParam = \case
+        BGVBDFRDTROSerialNumber -> "SERIAL_NUMBER"
+        BGVBDFRDTROFormattedString -> "FORMATTED_STRING"
+
+instance FromJSON BatchGetValuesByDataFilterRequestDateTimeRenderOption where
+    parseJSON = parseJSONText "BatchGetValuesByDataFilterRequestDateTimeRenderOption"
+
+instance ToJSON BatchGetValuesByDataFilterRequestDateTimeRenderOption where
+    toJSON = toJSONText
+
+-- | Determines how the charts will use hidden rows or columns.
+data ChartSpecHiddenDimensionStrategy
+    = ChartHiddenDimensionStrategyUnspecified
+      -- ^ @CHART_HIDDEN_DIMENSION_STRATEGY_UNSPECIFIED@
+      -- Default value, do not use.
+    | SkipHiddenRowsAndColumns
+      -- ^ @SKIP_HIDDEN_ROWS_AND_COLUMNS@
+      -- Charts will skip hidden rows and columns.
+    | SkipHiddenRows
+      -- ^ @SKIP_HIDDEN_ROWS@
+      -- Charts will skip hidden rows only.
+    | SkipHiddenColumns
+      -- ^ @SKIP_HIDDEN_COLUMNS@
+      -- Charts will skip hidden columns only.
+    | ShowAll
+      -- ^ @SHOW_ALL@
+      -- Charts will not skip any hidden rows or columns.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable ChartSpecHiddenDimensionStrategy
+
+instance FromHttpApiData ChartSpecHiddenDimensionStrategy where
+    parseQueryParam = \case
+        "CHART_HIDDEN_DIMENSION_STRATEGY_UNSPECIFIED" -> Right ChartHiddenDimensionStrategyUnspecified
+        "SKIP_HIDDEN_ROWS_AND_COLUMNS" -> Right SkipHiddenRowsAndColumns
+        "SKIP_HIDDEN_ROWS" -> Right SkipHiddenRows
+        "SKIP_HIDDEN_COLUMNS" -> Right SkipHiddenColumns
+        "SHOW_ALL" -> Right ShowAll
+        x -> Left ("Unable to parse ChartSpecHiddenDimensionStrategy from: " <> x)
+
+instance ToHttpApiData ChartSpecHiddenDimensionStrategy where
+    toQueryParam = \case
+        ChartHiddenDimensionStrategyUnspecified -> "CHART_HIDDEN_DIMENSION_STRATEGY_UNSPECIFIED"
+        SkipHiddenRowsAndColumns -> "SKIP_HIDDEN_ROWS_AND_COLUMNS"
+        SkipHiddenRows -> "SKIP_HIDDEN_ROWS"
+        SkipHiddenColumns -> "SKIP_HIDDEN_COLUMNS"
+        ShowAll -> "SHOW_ALL"
+
+instance FromJSON ChartSpecHiddenDimensionStrategy where
+    parseJSON = parseJSONText "ChartSpecHiddenDimensionStrategy"
+
+instance ToJSON ChartSpecHiddenDimensionStrategy where
+    toJSON = toJSONText
+
+-- | The style of the border.
+data BOrderStyle
+    = StyleUnspecified
+      -- ^ @STYLE_UNSPECIFIED@
+      -- The style is not specified. Do not use this.
+    | Dotted
+      -- ^ @DOTTED@
+      -- The border is dotted.
+    | Dashed
+      -- ^ @DASHED@
+      -- The border is dashed.
+    | Solid
+      -- ^ @SOLID@
+      -- The border is a thin solid line.
+    | SolidMedium
+      -- ^ @SOLID_MEDIUM@
+      -- The border is a medium solid line.
+    | SolidThick
+      -- ^ @SOLID_THICK@
+      -- The border is a thick solid line.
+    | None
+      -- ^ @NONE@
+      -- No border. Used only when updating a border in order to erase it.
+    | Double
+      -- ^ @DOUBLE@
+      -- The border is two solid lines.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable BOrderStyle
+
+instance FromHttpApiData BOrderStyle where
+    parseQueryParam = \case
+        "STYLE_UNSPECIFIED" -> Right StyleUnspecified
+        "DOTTED" -> Right Dotted
+        "DASHED" -> Right Dashed
+        "SOLID" -> Right Solid
+        "SOLID_MEDIUM" -> Right SolidMedium
+        "SOLID_THICK" -> Right SolidThick
+        "NONE" -> Right None
+        "DOUBLE" -> Right Double
+        x -> Left ("Unable to parse BOrderStyle from: " <> x)
+
+instance ToHttpApiData BOrderStyle where
+    toQueryParam = \case
+        StyleUnspecified -> "STYLE_UNSPECIFIED"
+        Dotted -> "DOTTED"
+        Dashed -> "DASHED"
+        Solid -> "SOLID"
+        SolidMedium -> "SOLID_MEDIUM"
+        SolidThick -> "SOLID_THICK"
+        None -> "NONE"
+        Double -> "DOUBLE"
+
+instance FromJSON BOrderStyle where
+    parseJSON = parseJSONText "BOrderStyle"
+
+instance ToJSON BOrderStyle where
+    toJSON = toJSONText
+
+-- | What kind of data to paste. All the source data will be cut, regardless
+-- of what is pasted.
+data CutPasteRequestPasteType
+    = CPRPTPasteNormal
+      -- ^ @PASTE_NORMAL@
+      -- Paste values, formulas, formats, and merges.
+    | CPRPTPasteValues
+      -- ^ @PASTE_VALUES@
+      -- Paste the values ONLY without formats, formulas, or merges.
+    | CPRPTPasteFormat
+      -- ^ @PASTE_FORMAT@
+      -- Paste the format and data validation only.
+    | CPRPTPasteNoBOrders
+      -- ^ @PASTE_NO_BORDERS@
+      -- Like PASTE_NORMAL but without borders.
+    | CPRPTPasteFormula
+      -- ^ @PASTE_FORMULA@
+      -- Paste the formulas only.
+    | CPRPTPasteDataValidation
+      -- ^ @PASTE_DATA_VALIDATION@
+      -- Paste the data validation only.
+    | CPRPTPasteConditionalFormatting
+      -- ^ @PASTE_CONDITIONAL_FORMATTING@
+      -- Paste the conditional formatting rules only.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable CutPasteRequestPasteType
+
+instance FromHttpApiData CutPasteRequestPasteType where
+    parseQueryParam = \case
+        "PASTE_NORMAL" -> Right CPRPTPasteNormal
+        "PASTE_VALUES" -> Right CPRPTPasteValues
+        "PASTE_FORMAT" -> Right CPRPTPasteFormat
+        "PASTE_NO_BORDERS" -> Right CPRPTPasteNoBOrders
+        "PASTE_FORMULA" -> Right CPRPTPasteFormula
+        "PASTE_DATA_VALIDATION" -> Right CPRPTPasteDataValidation
+        "PASTE_CONDITIONAL_FORMATTING" -> Right CPRPTPasteConditionalFormatting
+        x -> Left ("Unable to parse CutPasteRequestPasteType from: " <> x)
+
+instance ToHttpApiData CutPasteRequestPasteType where
+    toQueryParam = \case
+        CPRPTPasteNormal -> "PASTE_NORMAL"
+        CPRPTPasteValues -> "PASTE_VALUES"
+        CPRPTPasteFormat -> "PASTE_FORMAT"
+        CPRPTPasteNoBOrders -> "PASTE_NO_BORDERS"
+        CPRPTPasteFormula -> "PASTE_FORMULA"
+        CPRPTPasteDataValidation -> "PASTE_DATA_VALIDATION"
+        CPRPTPasteConditionalFormatting -> "PASTE_CONDITIONAL_FORMATTING"
+
+instance FromJSON CutPasteRequestPasteType where
+    parseJSON = parseJSONText "CutPasteRequestPasteType"
+
+instance ToJSON CutPasteRequestPasteType where
+    toJSON = toJSONText
+
+-- | The position of the chart legend.
+data BasicChartSpecLegendPosition
+    = BCSLPBasicChartLegendPositionUnspecified
+      -- ^ @BASIC_CHART_LEGEND_POSITION_UNSPECIFIED@
+      -- Default value, do not use.
+    | BCSLPBottomLegend
+      -- ^ @BOTTOM_LEGEND@
+      -- The legend is rendered on the bottom of the chart.
+    | BCSLPLeftLegend
+      -- ^ @LEFT_LEGEND@
+      -- The legend is rendered on the left of the chart.
+    | BCSLPRightLegend
+      -- ^ @RIGHT_LEGEND@
+      -- The legend is rendered on the right of the chart.
+    | BCSLPTopLegend
+      -- ^ @TOP_LEGEND@
+      -- The legend is rendered on the top of the chart.
+    | BCSLPNoLegend
+      -- ^ @NO_LEGEND@
+      -- No legend is rendered.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable BasicChartSpecLegendPosition
+
+instance FromHttpApiData BasicChartSpecLegendPosition where
+    parseQueryParam = \case
+        "BASIC_CHART_LEGEND_POSITION_UNSPECIFIED" -> Right BCSLPBasicChartLegendPositionUnspecified
+        "BOTTOM_LEGEND" -> Right BCSLPBottomLegend
+        "LEFT_LEGEND" -> Right BCSLPLeftLegend
+        "RIGHT_LEGEND" -> Right BCSLPRightLegend
+        "TOP_LEGEND" -> Right BCSLPTopLegend
+        "NO_LEGEND" -> Right BCSLPNoLegend
+        x -> Left ("Unable to parse BasicChartSpecLegendPosition from: " <> x)
+
+instance ToHttpApiData BasicChartSpecLegendPosition where
+    toQueryParam = \case
+        BCSLPBasicChartLegendPositionUnspecified -> "BASIC_CHART_LEGEND_POSITION_UNSPECIFIED"
+        BCSLPBottomLegend -> "BOTTOM_LEGEND"
+        BCSLPLeftLegend -> "LEFT_LEGEND"
+        BCSLPRightLegend -> "RIGHT_LEGEND"
+        BCSLPTopLegend -> "TOP_LEGEND"
+        BCSLPNoLegend -> "NO_LEGEND"
+
+instance FromJSON BasicChartSpecLegendPosition where
+    parseJSON = parseJSONText "BasicChartSpecLegendPosition"
+
+instance ToJSON BasicChartSpecLegendPosition where
+    toJSON = toJSONText
+
+-- | The type of error.
+data ErrorValueType
+    = ErrorTypeUnspecified
+      -- ^ @ERROR_TYPE_UNSPECIFIED@
+      -- The default error type, do not use this.
+    | Error'
+      -- ^ @ERROR@
+      -- Corresponds to the \`#ERROR!\` error.
+    | NullValue
+      -- ^ @NULL_VALUE@
+      -- Corresponds to the \`#NULL!\` error.
+    | DivideByZero
+      -- ^ @DIVIDE_BY_ZERO@
+      -- Corresponds to the \`#DIV\/0\` error.
+    | Value
+      -- ^ @VALUE@
+      -- Corresponds to the \`#VALUE!\` error.
+    | Ref
+      -- ^ @REF@
+      -- Corresponds to the \`#REF!\` error.
+    | Name
+      -- ^ @NAME@
+      -- Corresponds to the \`#NAME?\` error.
+    | Num
+      -- ^ @NUM@
+      -- Corresponds to the \`#NUM\`! error.
+    | NA
+      -- ^ @N_A@
+      -- Corresponds to the \`#N\/A\` error.
+    | Loading
+      -- ^ @LOADING@
+      -- Corresponds to the \`Loading...\` state.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable ErrorValueType
+
+instance FromHttpApiData ErrorValueType where
+    parseQueryParam = \case
+        "ERROR_TYPE_UNSPECIFIED" -> Right ErrorTypeUnspecified
+        "ERROR" -> Right Error'
+        "NULL_VALUE" -> Right NullValue
+        "DIVIDE_BY_ZERO" -> Right DivideByZero
+        "VALUE" -> Right Value
+        "REF" -> Right Ref
+        "NAME" -> Right Name
+        "NUM" -> Right Num
+        "N_A" -> Right NA
+        "LOADING" -> Right Loading
+        x -> Left ("Unable to parse ErrorValueType from: " <> x)
+
+instance ToHttpApiData ErrorValueType where
+    toQueryParam = \case
+        ErrorTypeUnspecified -> "ERROR_TYPE_UNSPECIFIED"
+        Error' -> "ERROR"
+        NullValue -> "NULL_VALUE"
+        DivideByZero -> "DIVIDE_BY_ZERO"
+        Value -> "VALUE"
+        Ref -> "REF"
+        Name -> "NAME"
+        Num -> "NUM"
+        NA -> "N_A"
+        Loading -> "LOADING"
+
+instance FromJSON ErrorValueType where
+    parseJSON = parseJSONText "ErrorValueType"
+
+instance ToJSON ErrorValueType where
+    toJSON = toJSONText
+
+-- | The major dimension that results should use. For example, if the
+-- spreadsheet data is: \`A1=1,B1=2,A2=3,B2=4\`, then a request that
+-- selects that range and sets \`majorDimension=ROWS\` will return
+-- \`[[1,2],[3,4]]\`, whereas a request that sets
+-- \`majorDimension=COLUMNS\` will return \`[[1,3],[2,4]]\`.
+data BatchGetValuesByDataFilterRequestMajorDimension
+    = BGVBDFRMDDimensionUnspecified
+      -- ^ @DIMENSION_UNSPECIFIED@
+      -- The default value, do not use.
+    | BGVBDFRMDRows
+      -- ^ @ROWS@
+      -- Operates on the rows of a sheet.
+    | BGVBDFRMDColumns
+      -- ^ @COLUMNS@
+      -- Operates on the columns of a sheet.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable BatchGetValuesByDataFilterRequestMajorDimension
+
+instance FromHttpApiData BatchGetValuesByDataFilterRequestMajorDimension where
+    parseQueryParam = \case
+        "DIMENSION_UNSPECIFIED" -> Right BGVBDFRMDDimensionUnspecified
+        "ROWS" -> Right BGVBDFRMDRows
+        "COLUMNS" -> Right BGVBDFRMDColumns
+        x -> Left ("Unable to parse BatchGetValuesByDataFilterRequestMajorDimension from: " <> x)
+
+instance ToHttpApiData BatchGetValuesByDataFilterRequestMajorDimension where
+    toQueryParam = \case
+        BGVBDFRMDDimensionUnspecified -> "DIMENSION_UNSPECIFIED"
+        BGVBDFRMDRows -> "ROWS"
+        BGVBDFRMDColumns -> "COLUMNS"
+
+instance FromJSON BatchGetValuesByDataFilterRequestMajorDimension where
+    parseJSON = parseJSONText "BatchGetValuesByDataFilterRequestMajorDimension"
+
+instance ToJSON BatchGetValuesByDataFilterRequestMajorDimension where
+    toJSON = toJSONText
+
+-- | Whether values should be listed horizontally (as columns) or vertically
+-- (as rows).
+data PivotTableValueLayout
+    = Horizontal
+      -- ^ @HORIZONTAL@
+      -- Values are laid out horizontally (as columns).
+    | Vertical
+      -- ^ @VERTICAL@
+      -- Values are laid out vertically (as rows).
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable PivotTableValueLayout
+
+instance FromHttpApiData PivotTableValueLayout where
+    parseQueryParam = \case
+        "HORIZONTAL" -> Right Horizontal
+        "VERTICAL" -> Right Vertical
+        x -> Left ("Unable to parse PivotTableValueLayout from: " <> x)
+
+instance ToHttpApiData PivotTableValueLayout where
+    toQueryParam = \case
+        Horizontal -> "HORIZONTAL"
+        Vertical -> "VERTICAL"
+
+instance FromJSON PivotTableValueLayout where
+    parseJSON = parseJSONText "PivotTableValueLayout"
+
+instance ToJSON PivotTableValueLayout where
+    toJSON = toJSONText
+
+-- | How the value should be interpreted.
+data InterpolationPointType
+    = IPTInterpolationPointTypeUnspecified
+      -- ^ @INTERPOLATION_POINT_TYPE_UNSPECIFIED@
+      -- The default value, do not use.
+    | IPTMin
+      -- ^ @MIN@
+      -- The interpolation point uses the minimum value in the cells over the
+      -- range of the conditional format.
+    | IPTMax
+      -- ^ @MAX@
+      -- The interpolation point uses the maximum value in the cells over the
+      -- range of the conditional format.
+    | IPTNumber
+      -- ^ @NUMBER@
+      -- The interpolation point uses exactly the value in
+      -- InterpolationPoint.value.
+    | IPTPercent
+      -- ^ @PERCENT@
+      -- The interpolation point is the given percentage over all the cells in
+      -- the range of the conditional format. This is equivalent to NUMBER if the
+      -- value was: \`=(MAX(FLATTEN(range)) * (value \/ 100)) +
+      -- (MIN(FLATTEN(range)) * (1 - (value \/ 100)))\` (where errors in the
+      -- range are ignored when flattening).
+    | IPTPercentile
+      -- ^ @PERCENTILE@
+      -- The interpolation point is the given percentile over all the cells in
+      -- the range of the conditional format. This is equivalent to NUMBER if the
+      -- value was: \`=PERCENTILE(FLATTEN(range), value \/ 100)\` (where errors
+      -- in the range are ignored when flattening).
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable InterpolationPointType
+
+instance FromHttpApiData InterpolationPointType where
+    parseQueryParam = \case
+        "INTERPOLATION_POINT_TYPE_UNSPECIFIED" -> Right IPTInterpolationPointTypeUnspecified
+        "MIN" -> Right IPTMin
+        "MAX" -> Right IPTMax
+        "NUMBER" -> Right IPTNumber
+        "PERCENT" -> Right IPTPercent
+        "PERCENTILE" -> Right IPTPercentile
+        x -> Left ("Unable to parse InterpolationPointType from: " <> x)
+
+instance ToHttpApiData InterpolationPointType where
+    toQueryParam = \case
+        IPTInterpolationPointTypeUnspecified -> "INTERPOLATION_POINT_TYPE_UNSPECIFIED"
+        IPTMin -> "MIN"
+        IPTMax -> "MAX"
+        IPTNumber -> "NUMBER"
+        IPTPercent -> "PERCENT"
+        IPTPercentile -> "PERCENTILE"
+
+instance FromJSON InterpolationPointType where
+    parseJSON = parseJSONText "InterpolationPointType"
+
+instance ToJSON InterpolationPointType where
+    toJSON = toJSONText
+
+-- | The delimiter type to use.
+data TextToColumnsRequestDelimiterType
+    = TTCRDTDelimiterTypeUnspecified
+      -- ^ @DELIMITER_TYPE_UNSPECIFIED@
+      -- Default value. This value must not be used.
+    | TTCRDTComma
+      -- ^ @COMMA@
+      -- \",\"
+    | TTCRDTSemicolon
+      -- ^ @SEMICOLON@
+      -- \";\"
+    | TTCRDTPeriod
+      -- ^ @PERIOD@
+      -- \".\"
+    | TTCRDTSpace
+      -- ^ @SPACE@
+      -- \" \"
+    | TTCRDTCustom
+      -- ^ @CUSTOM@
+      -- A custom value as defined in delimiter.
+    | TTCRDTAutodetect
+      -- ^ @AUTODETECT@
+      -- Automatically detect columns.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable TextToColumnsRequestDelimiterType
+
+instance FromHttpApiData TextToColumnsRequestDelimiterType where
+    parseQueryParam = \case
+        "DELIMITER_TYPE_UNSPECIFIED" -> Right TTCRDTDelimiterTypeUnspecified
+        "COMMA" -> Right TTCRDTComma
+        "SEMICOLON" -> Right TTCRDTSemicolon
+        "PERIOD" -> Right TTCRDTPeriod
+        "SPACE" -> Right TTCRDTSpace
+        "CUSTOM" -> Right TTCRDTCustom
+        "AUTODETECT" -> Right TTCRDTAutodetect
+        x -> Left ("Unable to parse TextToColumnsRequestDelimiterType from: " <> x)
+
+instance ToHttpApiData TextToColumnsRequestDelimiterType where
+    toQueryParam = \case
+        TTCRDTDelimiterTypeUnspecified -> "DELIMITER_TYPE_UNSPECIFIED"
+        TTCRDTComma -> "COMMA"
+        TTCRDTSemicolon -> "SEMICOLON"
+        TTCRDTPeriod -> "PERIOD"
+        TTCRDTSpace -> "SPACE"
+        TTCRDTCustom -> "CUSTOM"
+        TTCRDTAutodetect -> "AUTODETECT"
 
 instance FromJSON TextToColumnsRequestDelimiterType where
     parseJSON = parseJSONText "TextToColumnsRequestDelimiterType"
diff --git a/gogol-sheets.cabal b/gogol-sheets.cabal
--- a/gogol-sheets.cabal
+++ b/gogol-sheets.cabal
@@ -1,5 +1,5 @@
 name:                  gogol-sheets
-version:               0.3.0
+version:               0.4.0
 synopsis:              Google Sheets SDK.
 homepage:              https://github.com/brendanhay/gogol
 bug-reports:           https://github.com/brendanhay/gogol/issues
@@ -35,12 +35,18 @@
     exposed-modules:
           Network.Google.Resource.Sheets.Spreadsheets.BatchUpdate
         , Network.Google.Resource.Sheets.Spreadsheets.Create
+        , Network.Google.Resource.Sheets.Spreadsheets.DeveloperMetadata.Get
+        , Network.Google.Resource.Sheets.Spreadsheets.DeveloperMetadata.Search
         , Network.Google.Resource.Sheets.Spreadsheets.Get
+        , Network.Google.Resource.Sheets.Spreadsheets.GetByDataFilter
         , Network.Google.Resource.Sheets.Spreadsheets.Sheets.CopyTo
         , Network.Google.Resource.Sheets.Spreadsheets.Values.Append
         , Network.Google.Resource.Sheets.Spreadsheets.Values.BatchClear
+        , Network.Google.Resource.Sheets.Spreadsheets.Values.BatchClearByDataFilter
         , Network.Google.Resource.Sheets.Spreadsheets.Values.BatchGet
+        , Network.Google.Resource.Sheets.Spreadsheets.Values.BatchGetByDataFilter
         , Network.Google.Resource.Sheets.Spreadsheets.Values.BatchUpdate
+        , Network.Google.Resource.Sheets.Spreadsheets.Values.BatchUpdateByDataFilter
         , Network.Google.Resource.Sheets.Spreadsheets.Values.Clear
         , Network.Google.Resource.Sheets.Spreadsheets.Values.Get
         , Network.Google.Resource.Sheets.Spreadsheets.Values.Update
@@ -52,5 +58,5 @@
         , Network.Google.Sheets.Types.Sum
 
     build-depends:
-          gogol-core == 0.3.0.*
+          gogol-core == 0.4.0.*
         , base       >= 4.7 && < 5
