diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -8,7 +8,7 @@
 
 ## Version
 
-`0.3.0`
+`0.5.0`
 
 
 ## Description
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
@@ -87,7 +87,8 @@
 -- should reflect your changes.
 --
 -- /See:/ 'spreadsheetsBatchUpdate' smart constructor.
-data SpreadsheetsBatchUpdate = SpreadsheetsBatchUpdate'
+data SpreadsheetsBatchUpdate =
+  SpreadsheetsBatchUpdate'
     { _sbuXgafv          :: !(Maybe Xgafv)
     , _sbuUploadProtocol :: !(Maybe Text)
     , _sbuAccessToken    :: !(Maybe Text)
@@ -95,8 +96,10 @@
     , _sbuUploadType     :: !(Maybe Text)
     , _sbuPayload        :: !BatchUpdateSpreadsheetRequest
     , _sbuCallback       :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'SpreadsheetsBatchUpdate' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -119,7 +122,7 @@
     -> BatchUpdateSpreadsheetRequest -- ^ 'sbuPayload'
     -> SpreadsheetsBatchUpdate
 spreadsheetsBatchUpdate pSbuSpreadsheetId_ pSbuPayload_ =
-    SpreadsheetsBatchUpdate'
+  SpreadsheetsBatchUpdate'
     { _sbuXgafv = Nothing
     , _sbuUploadProtocol = Nothing
     , _sbuAccessToken = Nothing
@@ -128,6 +131,7 @@
     , _sbuPayload = pSbuPayload_
     , _sbuCallback = Nothing
     }
+
 
 -- | V1 error format.
 sbuXgafv :: Lens' SpreadsheetsBatchUpdate (Maybe Xgafv)
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
@@ -61,15 +61,18 @@
 -- | Creates a spreadsheet, returning the newly created spreadsheet.
 --
 -- /See:/ 'spreadsheetsCreate' smart constructor.
-data SpreadsheetsCreate = SpreadsheetsCreate'
+data SpreadsheetsCreate =
+  SpreadsheetsCreate'
     { _scXgafv          :: !(Maybe Xgafv)
     , _scUploadProtocol :: !(Maybe Text)
     , _scAccessToken    :: !(Maybe Text)
     , _scUploadType     :: !(Maybe Text)
     , _scPayload        :: !Spreadsheet
     , _scCallback       :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'SpreadsheetsCreate' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -89,7 +92,7 @@
     :: Spreadsheet -- ^ 'scPayload'
     -> SpreadsheetsCreate
 spreadsheetsCreate pScPayload_ =
-    SpreadsheetsCreate'
+  SpreadsheetsCreate'
     { _scXgafv = Nothing
     , _scUploadProtocol = Nothing
     , _scAccessToken = Nothing
@@ -97,6 +100,7 @@
     , _scPayload = pScPayload_
     , _scCallback = Nothing
     }
+
 
 -- | V1 error format.
 scXgafv :: Lens' SpreadsheetsCreate (Maybe Xgafv)
diff --git a/gen/Network/Google/Resource/Sheets/Spreadsheets/DeveloperMetadata/Get.hs b/gen/Network/Google/Resource/Sheets/Spreadsheets/DeveloperMetadata/Get.hs
--- a/gen/Network/Google/Resource/Sheets/Spreadsheets/DeveloperMetadata/Get.hs
+++ b/gen/Network/Google/Resource/Sheets/Spreadsheets/DeveloperMetadata/Get.hs
@@ -68,7 +68,8 @@
 -- metadataId.
 --
 -- /See:/ 'spreadsheetsDeveloperMetadataGet' smart constructor.
-data SpreadsheetsDeveloperMetadataGet = SpreadsheetsDeveloperMetadataGet'
+data SpreadsheetsDeveloperMetadataGet =
+  SpreadsheetsDeveloperMetadataGet'
     { _sdmgXgafv          :: !(Maybe Xgafv)
     , _sdmgUploadProtocol :: !(Maybe Text)
     , _sdmgMetadataId     :: !(Textual Int32)
@@ -76,8 +77,10 @@
     , _sdmgSpreadsheetId  :: !Text
     , _sdmgUploadType     :: !(Maybe Text)
     , _sdmgCallback       :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
+    }
+  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:
@@ -100,7 +103,7 @@
     -> Text -- ^ 'sdmgSpreadsheetId'
     -> SpreadsheetsDeveloperMetadataGet
 spreadsheetsDeveloperMetadataGet pSdmgMetadataId_ pSdmgSpreadsheetId_ =
-    SpreadsheetsDeveloperMetadataGet'
+  SpreadsheetsDeveloperMetadataGet'
     { _sdmgXgafv = Nothing
     , _sdmgUploadProtocol = Nothing
     , _sdmgMetadataId = _Coerce # pSdmgMetadataId_
@@ -110,6 +113,7 @@
     , _sdmgCallback = Nothing
     }
 
+
 -- | V1 error format.
 sdmgXgafv :: Lens' SpreadsheetsDeveloperMetadataGet (Maybe Xgafv)
 sdmgXgafv
@@ -152,7 +156,8 @@
   = lens _sdmgCallback (\ s a -> s{_sdmgCallback = a})
 
 instance GoogleRequest
-         SpreadsheetsDeveloperMetadataGet where
+           SpreadsheetsDeveloperMetadataGet
+         where
         type Rs SpreadsheetsDeveloperMetadataGet =
              DeveloperMetadata
         type Scopes SpreadsheetsDeveloperMetadataGet =
diff --git a/gen/Network/Google/Resource/Sheets/Spreadsheets/DeveloperMetadata/Search.hs b/gen/Network/Google/Resource/Sheets/Spreadsheets/DeveloperMetadata/Search.hs
--- a/gen/Network/Google/Resource/Sheets/Spreadsheets/DeveloperMetadata/Search.hs
+++ b/gen/Network/Google/Resource/Sheets/Spreadsheets/DeveloperMetadata/Search.hs
@@ -72,7 +72,8 @@
 -- developer metadata associated with locations intersecting that region.
 --
 -- /See:/ 'spreadsheetsDeveloperMetadataSearch' smart constructor.
-data SpreadsheetsDeveloperMetadataSearch = SpreadsheetsDeveloperMetadataSearch'
+data SpreadsheetsDeveloperMetadataSearch =
+  SpreadsheetsDeveloperMetadataSearch'
     { _sdmsXgafv          :: !(Maybe Xgafv)
     , _sdmsUploadProtocol :: !(Maybe Text)
     , _sdmsAccessToken    :: !(Maybe Text)
@@ -80,8 +81,10 @@
     , _sdmsUploadType     :: !(Maybe Text)
     , _sdmsPayload        :: !SearchDeveloperMetadataRequest
     , _sdmsCallback       :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
+    }
+  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:
@@ -104,7 +107,7 @@
     -> SearchDeveloperMetadataRequest -- ^ 'sdmsPayload'
     -> SpreadsheetsDeveloperMetadataSearch
 spreadsheetsDeveloperMetadataSearch pSdmsSpreadsheetId_ pSdmsPayload_ =
-    SpreadsheetsDeveloperMetadataSearch'
+  SpreadsheetsDeveloperMetadataSearch'
     { _sdmsXgafv = Nothing
     , _sdmsUploadProtocol = Nothing
     , _sdmsAccessToken = Nothing
@@ -114,6 +117,7 @@
     , _sdmsCallback = Nothing
     }
 
+
 -- | V1 error format.
 sdmsXgafv :: Lens' SpreadsheetsDeveloperMetadataSearch (Maybe Xgafv)
 sdmsXgafv
@@ -154,7 +158,8 @@
   = lens _sdmsCallback (\ s a -> s{_sdmsCallback = a})
 
 instance GoogleRequest
-         SpreadsheetsDeveloperMetadataSearch where
+           SpreadsheetsDeveloperMetadataSearch
+         where
         type Rs SpreadsheetsDeveloperMetadataSearch =
              SearchDeveloperMetadataResponse
         type Scopes SpreadsheetsDeveloperMetadataSearch =
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
@@ -84,7 +84,8 @@
 -- ranges. Ranges are specified using A1 notation.
 --
 -- /See:/ 'spreadsheetsGet' smart constructor.
-data SpreadsheetsGet = SpreadsheetsGet'
+data SpreadsheetsGet =
+  SpreadsheetsGet'
     { _sgXgafv           :: !(Maybe Xgafv)
     , _sgUploadProtocol  :: !(Maybe Text)
     , _sgAccessToken     :: !(Maybe Text)
@@ -93,8 +94,10 @@
     , _sgRanges          :: !(Maybe [Text])
     , _sgIncludeGridData :: !(Maybe Bool)
     , _sgCallback        :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'SpreadsheetsGet' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -118,7 +121,7 @@
     :: Text -- ^ 'sgSpreadsheetId'
     -> SpreadsheetsGet
 spreadsheetsGet pSgSpreadsheetId_ =
-    SpreadsheetsGet'
+  SpreadsheetsGet'
     { _sgXgafv = Nothing
     , _sgUploadProtocol = Nothing
     , _sgAccessToken = Nothing
@@ -128,6 +131,7 @@
     , _sgIncludeGridData = Nothing
     , _sgCallback = Nothing
     }
+
 
 -- | V1 error format.
 sgXgafv :: Lens' SpreadsheetsGet (Maybe Xgafv)
diff --git a/gen/Network/Google/Resource/Sheets/Spreadsheets/GetByDataFilter.hs b/gen/Network/Google/Resource/Sheets/Spreadsheets/GetByDataFilter.hs
--- a/gen/Network/Google/Resource/Sheets/Spreadsheets/GetByDataFilter.hs
+++ b/gen/Network/Google/Resource/Sheets/Spreadsheets/GetByDataFilter.hs
@@ -85,7 +85,8 @@
 -- retrieve only the specific fields of the spreadsheet that you want.
 --
 -- /See:/ 'spreadsheetsGetByDataFilter' smart constructor.
-data SpreadsheetsGetByDataFilter = SpreadsheetsGetByDataFilter'
+data SpreadsheetsGetByDataFilter =
+  SpreadsheetsGetByDataFilter'
     { _sgbdfXgafv          :: !(Maybe Xgafv)
     , _sgbdfUploadProtocol :: !(Maybe Text)
     , _sgbdfAccessToken    :: !(Maybe Text)
@@ -93,8 +94,10 @@
     , _sgbdfUploadType     :: !(Maybe Text)
     , _sgbdfPayload        :: !GetSpreadsheetByDataFilterRequest
     , _sgbdfCallback       :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
+    }
+  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:
@@ -117,7 +120,7 @@
     -> GetSpreadsheetByDataFilterRequest -- ^ 'sgbdfPayload'
     -> SpreadsheetsGetByDataFilter
 spreadsheetsGetByDataFilter pSgbdfSpreadsheetId_ pSgbdfPayload_ =
-    SpreadsheetsGetByDataFilter'
+  SpreadsheetsGetByDataFilter'
     { _sgbdfXgafv = Nothing
     , _sgbdfUploadProtocol = Nothing
     , _sgbdfAccessToken = Nothing
@@ -126,6 +129,7 @@
     , _sgbdfPayload = pSgbdfPayload_
     , _sgbdfCallback = Nothing
     }
+
 
 -- | V1 error format.
 sgbdfXgafv :: Lens' SpreadsheetsGetByDataFilter (Maybe Xgafv)
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
@@ -68,7 +68,8 @@
 -- the properties of the newly created sheet.
 --
 -- /See:/ 'spreadsheetsSheetsCopyTo' smart constructor.
-data SpreadsheetsSheetsCopyTo = SpreadsheetsSheetsCopyTo'
+data SpreadsheetsSheetsCopyTo =
+  SpreadsheetsSheetsCopyTo'
     { _ssctXgafv          :: !(Maybe Xgafv)
     , _ssctUploadProtocol :: !(Maybe Text)
     , _ssctAccessToken    :: !(Maybe Text)
@@ -77,8 +78,10 @@
     , _ssctPayload        :: !CopySheetToAnotherSpreadsheetRequest
     , _ssctSheetId        :: !(Textual Int32)
     , _ssctCallback       :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'SpreadsheetsSheetsCopyTo' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -104,7 +107,7 @@
     -> Int32 -- ^ 'ssctSheetId'
     -> SpreadsheetsSheetsCopyTo
 spreadsheetsSheetsCopyTo pSsctSpreadsheetId_ pSsctPayload_ pSsctSheetId_ =
-    SpreadsheetsSheetsCopyTo'
+  SpreadsheetsSheetsCopyTo'
     { _ssctXgafv = Nothing
     , _ssctUploadProtocol = Nothing
     , _ssctAccessToken = Nothing
@@ -114,6 +117,7 @@
     , _ssctSheetId = _Coerce # pSsctSheetId_
     , _ssctCallback = Nothing
     }
+
 
 -- | V1 error format.
 ssctXgafv :: Lens' SpreadsheetsSheetsCopyTo (Maybe Xgafv)
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
@@ -96,7 +96,8 @@
 -- data starts being written to.
 --
 -- /See:/ 'spreadsheetsValuesAppend' smart constructor.
-data SpreadsheetsValuesAppend = SpreadsheetsValuesAppend'
+data SpreadsheetsValuesAppend =
+  SpreadsheetsValuesAppend'
     { _svaXgafv                        :: !(Maybe Xgafv)
     , _svaUploadProtocol               :: !(Maybe Text)
     , _svaAccessToken                  :: !(Maybe Text)
@@ -110,8 +111,10 @@
     , _svaResponseDateTimeRenderOption :: !(Maybe Text)
     , _svaCallback                     :: !(Maybe Text)
     , _svaResponseValueRenderOption    :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'SpreadsheetsValuesAppend' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -147,7 +150,7 @@
     -> Text -- ^ 'svaRange'
     -> SpreadsheetsValuesAppend
 spreadsheetsValuesAppend pSvaSpreadsheetId_ pSvaPayload_ pSvaRange_ =
-    SpreadsheetsValuesAppend'
+  SpreadsheetsValuesAppend'
     { _svaXgafv = Nothing
     , _svaUploadProtocol = Nothing
     , _svaAccessToken = Nothing
@@ -162,6 +165,7 @@
     , _svaCallback = Nothing
     , _svaResponseValueRenderOption = Nothing
     }
+
 
 -- | V1 error format.
 svaXgafv :: Lens' SpreadsheetsValuesAppend (Maybe Xgafv)
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
@@ -70,7 +70,8 @@
 -- validation, etc..) are kept.
 --
 -- /See:/ 'spreadsheetsValuesBatchClear' smart constructor.
-data SpreadsheetsValuesBatchClear = SpreadsheetsValuesBatchClear'
+data SpreadsheetsValuesBatchClear =
+  SpreadsheetsValuesBatchClear'
     { _svbcXgafv          :: !(Maybe Xgafv)
     , _svbcUploadProtocol :: !(Maybe Text)
     , _svbcAccessToken    :: !(Maybe Text)
@@ -78,8 +79,10 @@
     , _svbcUploadType     :: !(Maybe Text)
     , _svbcPayload        :: !BatchClearValuesRequest
     , _svbcCallback       :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'SpreadsheetsValuesBatchClear' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -102,7 +105,7 @@
     -> BatchClearValuesRequest -- ^ 'svbcPayload'
     -> SpreadsheetsValuesBatchClear
 spreadsheetsValuesBatchClear pSvbcSpreadsheetId_ pSvbcPayload_ =
-    SpreadsheetsValuesBatchClear'
+  SpreadsheetsValuesBatchClear'
     { _svbcXgafv = Nothing
     , _svbcUploadProtocol = Nothing
     , _svbcAccessToken = Nothing
@@ -111,6 +114,7 @@
     , _svbcPayload = pSvbcPayload_
     , _svbcCallback = Nothing
     }
+
 
 -- | V1 error format.
 svbcXgafv :: Lens' SpreadsheetsValuesBatchClear (Maybe Xgafv)
diff --git a/gen/Network/Google/Resource/Sheets/Spreadsheets/Values/BatchClearByDataFilter.hs b/gen/Network/Google/Resource/Sheets/Spreadsheets/Values/BatchClearByDataFilter.hs
--- a/gen/Network/Google/Resource/Sheets/Spreadsheets/Values/BatchClearByDataFilter.hs
+++ b/gen/Network/Google/Resource/Sheets/Spreadsheets/Values/BatchClearByDataFilter.hs
@@ -73,7 +73,8 @@
 -- validation, etc..) are kept.
 --
 -- /See:/ 'spreadsheetsValuesBatchClearByDataFilter' smart constructor.
-data SpreadsheetsValuesBatchClearByDataFilter = SpreadsheetsValuesBatchClearByDataFilter'
+data SpreadsheetsValuesBatchClearByDataFilter =
+  SpreadsheetsValuesBatchClearByDataFilter'
     { _svbcbdfXgafv          :: !(Maybe Xgafv)
     , _svbcbdfUploadProtocol :: !(Maybe Text)
     , _svbcbdfAccessToken    :: !(Maybe Text)
@@ -81,8 +82,10 @@
     , _svbcbdfUploadType     :: !(Maybe Text)
     , _svbcbdfPayload        :: !BatchClearValuesByDataFilterRequest
     , _svbcbdfCallback       :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
+    }
+  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:
@@ -105,7 +108,7 @@
     -> BatchClearValuesByDataFilterRequest -- ^ 'svbcbdfPayload'
     -> SpreadsheetsValuesBatchClearByDataFilter
 spreadsheetsValuesBatchClearByDataFilter pSvbcbdfSpreadsheetId_ pSvbcbdfPayload_ =
-    SpreadsheetsValuesBatchClearByDataFilter'
+  SpreadsheetsValuesBatchClearByDataFilter'
     { _svbcbdfXgafv = Nothing
     , _svbcbdfUploadProtocol = Nothing
     , _svbcbdfAccessToken = Nothing
@@ -115,6 +118,7 @@
     , _svbcbdfCallback = Nothing
     }
 
+
 -- | V1 error format.
 svbcbdfXgafv :: Lens' SpreadsheetsValuesBatchClearByDataFilter (Maybe Xgafv)
 svbcbdfXgafv
@@ -157,7 +161,8 @@
       (\ s a -> s{_svbcbdfCallback = a})
 
 instance GoogleRequest
-         SpreadsheetsValuesBatchClearByDataFilter where
+           SpreadsheetsValuesBatchClearByDataFilter
+         where
         type Rs SpreadsheetsValuesBatchClearByDataFilter =
              BatchClearValuesByDataFilterResponse
         type Scopes SpreadsheetsValuesBatchClearByDataFilter
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
@@ -72,7 +72,8 @@
 -- specify the spreadsheet ID and one or more ranges.
 --
 -- /See:/ 'spreadsheetsValuesBatchGet' smart constructor.
-data SpreadsheetsValuesBatchGet = SpreadsheetsValuesBatchGet'
+data SpreadsheetsValuesBatchGet =
+  SpreadsheetsValuesBatchGet'
     { _svbgXgafv                :: !(Maybe Xgafv)
     , _svbgValueRenderOption    :: !(Maybe Text)
     , _svbgUploadProtocol       :: !(Maybe Text)
@@ -83,8 +84,10 @@
     , _svbgDateTimeRenderOption :: !(Maybe Text)
     , _svbgMajorDimension       :: !(Maybe Text)
     , _svbgCallback             :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'SpreadsheetsValuesBatchGet' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -112,7 +115,7 @@
     :: Text -- ^ 'svbgSpreadsheetId'
     -> SpreadsheetsValuesBatchGet
 spreadsheetsValuesBatchGet pSvbgSpreadsheetId_ =
-    SpreadsheetsValuesBatchGet'
+  SpreadsheetsValuesBatchGet'
     { _svbgXgafv = Nothing
     , _svbgValueRenderOption = Nothing
     , _svbgUploadProtocol = Nothing
@@ -124,6 +127,7 @@
     , _svbgMajorDimension = Nothing
     , _svbgCallback = Nothing
     }
+
 
 -- | V1 error format.
 svbgXgafv :: Lens' SpreadsheetsValuesBatchGet (Maybe Xgafv)
diff --git a/gen/Network/Google/Resource/Sheets/Spreadsheets/Values/BatchGetByDataFilter.hs b/gen/Network/Google/Resource/Sheets/Spreadsheets/Values/BatchGetByDataFilter.hs
--- a/gen/Network/Google/Resource/Sheets/Spreadsheets/Values/BatchGetByDataFilter.hs
+++ b/gen/Network/Google/Resource/Sheets/Spreadsheets/Values/BatchGetByDataFilter.hs
@@ -70,7 +70,8 @@
 -- will be returned.
 --
 -- /See:/ 'spreadsheetsValuesBatchGetByDataFilter' smart constructor.
-data SpreadsheetsValuesBatchGetByDataFilter = SpreadsheetsValuesBatchGetByDataFilter'
+data SpreadsheetsValuesBatchGetByDataFilter =
+  SpreadsheetsValuesBatchGetByDataFilter'
     { _svbgbdfXgafv          :: !(Maybe Xgafv)
     , _svbgbdfUploadProtocol :: !(Maybe Text)
     , _svbgbdfAccessToken    :: !(Maybe Text)
@@ -78,8 +79,10 @@
     , _svbgbdfUploadType     :: !(Maybe Text)
     , _svbgbdfPayload        :: !BatchGetValuesByDataFilterRequest
     , _svbgbdfCallback       :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
+    }
+  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:
@@ -102,7 +105,7 @@
     -> BatchGetValuesByDataFilterRequest -- ^ 'svbgbdfPayload'
     -> SpreadsheetsValuesBatchGetByDataFilter
 spreadsheetsValuesBatchGetByDataFilter pSvbgbdfSpreadsheetId_ pSvbgbdfPayload_ =
-    SpreadsheetsValuesBatchGetByDataFilter'
+  SpreadsheetsValuesBatchGetByDataFilter'
     { _svbgbdfXgafv = Nothing
     , _svbgbdfUploadProtocol = Nothing
     , _svbgbdfAccessToken = Nothing
@@ -112,6 +115,7 @@
     , _svbgbdfCallback = Nothing
     }
 
+
 -- | V1 error format.
 svbgbdfXgafv :: Lens' SpreadsheetsValuesBatchGetByDataFilter (Maybe Xgafv)
 svbgbdfXgafv
@@ -154,7 +158,8 @@
       (\ s a -> s{_svbgbdfCallback = a})
 
 instance GoogleRequest
-         SpreadsheetsValuesBatchGetByDataFilter where
+           SpreadsheetsValuesBatchGetByDataFilter
+         where
         type Rs SpreadsheetsValuesBatchGetByDataFilter =
              BatchGetValuesByDataFilterResponse
         type Scopes SpreadsheetsValuesBatchGetByDataFilter =
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
@@ -68,7 +68,8 @@
 -- ValueRanges.
 --
 -- /See:/ 'spreadsheetsValuesBatchUpdate' smart constructor.
-data SpreadsheetsValuesBatchUpdate = SpreadsheetsValuesBatchUpdate'
+data SpreadsheetsValuesBatchUpdate =
+  SpreadsheetsValuesBatchUpdate'
     { _svbuXgafv          :: !(Maybe Xgafv)
     , _svbuUploadProtocol :: !(Maybe Text)
     , _svbuAccessToken    :: !(Maybe Text)
@@ -76,8 +77,10 @@
     , _svbuUploadType     :: !(Maybe Text)
     , _svbuPayload        :: !BatchUpdateValuesRequest
     , _svbuCallback       :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'SpreadsheetsValuesBatchUpdate' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -100,7 +103,7 @@
     -> BatchUpdateValuesRequest -- ^ 'svbuPayload'
     -> SpreadsheetsValuesBatchUpdate
 spreadsheetsValuesBatchUpdate pSvbuSpreadsheetId_ pSvbuPayload_ =
-    SpreadsheetsValuesBatchUpdate'
+  SpreadsheetsValuesBatchUpdate'
     { _svbuXgafv = Nothing
     , _svbuUploadProtocol = Nothing
     , _svbuAccessToken = Nothing
@@ -109,6 +112,7 @@
     , _svbuPayload = pSvbuPayload_
     , _svbuCallback = Nothing
     }
+
 
 -- | V1 error format.
 svbuXgafv :: Lens' SpreadsheetsValuesBatchUpdate (Maybe Xgafv)
diff --git a/gen/Network/Google/Resource/Sheets/Spreadsheets/Values/BatchUpdateByDataFilter.hs b/gen/Network/Google/Resource/Sheets/Spreadsheets/Values/BatchUpdateByDataFilter.hs
--- a/gen/Network/Google/Resource/Sheets/Spreadsheets/Values/BatchUpdateByDataFilter.hs
+++ b/gen/Network/Google/Resource/Sheets/Spreadsheets/Values/BatchUpdateByDataFilter.hs
@@ -69,7 +69,8 @@
 -- DataFilterValueRanges.
 --
 -- /See:/ 'spreadsheetsValuesBatchUpdateByDataFilter' smart constructor.
-data SpreadsheetsValuesBatchUpdateByDataFilter = SpreadsheetsValuesBatchUpdateByDataFilter'
+data SpreadsheetsValuesBatchUpdateByDataFilter =
+  SpreadsheetsValuesBatchUpdateByDataFilter'
     { _svbubdfXgafv          :: !(Maybe Xgafv)
     , _svbubdfUploadProtocol :: !(Maybe Text)
     , _svbubdfAccessToken    :: !(Maybe Text)
@@ -77,8 +78,10 @@
     , _svbubdfUploadType     :: !(Maybe Text)
     , _svbubdfPayload        :: !BatchUpdateValuesByDataFilterRequest
     , _svbubdfCallback       :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
+    }
+  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:
@@ -101,7 +104,7 @@
     -> BatchUpdateValuesByDataFilterRequest -- ^ 'svbubdfPayload'
     -> SpreadsheetsValuesBatchUpdateByDataFilter
 spreadsheetsValuesBatchUpdateByDataFilter pSvbubdfSpreadsheetId_ pSvbubdfPayload_ =
-    SpreadsheetsValuesBatchUpdateByDataFilter'
+  SpreadsheetsValuesBatchUpdateByDataFilter'
     { _svbubdfXgafv = Nothing
     , _svbubdfUploadProtocol = Nothing
     , _svbubdfAccessToken = Nothing
@@ -111,6 +114,7 @@
     , _svbubdfCallback = Nothing
     }
 
+
 -- | V1 error format.
 svbubdfXgafv :: Lens' SpreadsheetsValuesBatchUpdateByDataFilter (Maybe Xgafv)
 svbubdfXgafv
@@ -153,7 +157,8 @@
       (\ s a -> s{_svbubdfCallback = a})
 
 instance GoogleRequest
-         SpreadsheetsValuesBatchUpdateByDataFilter where
+           SpreadsheetsValuesBatchUpdateByDataFilter
+         where
         type Rs SpreadsheetsValuesBatchUpdateByDataFilter =
              BatchUpdateValuesByDataFilterResponse
         type Scopes SpreadsheetsValuesBatchUpdateByDataFilter
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
@@ -72,7 +72,8 @@
 -- kept.
 --
 -- /See:/ 'spreadsheetsValuesClear' smart constructor.
-data SpreadsheetsValuesClear = SpreadsheetsValuesClear'
+data SpreadsheetsValuesClear =
+  SpreadsheetsValuesClear'
     { _svcXgafv          :: !(Maybe Xgafv)
     , _svcUploadProtocol :: !(Maybe Text)
     , _svcAccessToken    :: !(Maybe Text)
@@ -81,8 +82,10 @@
     , _svcPayload        :: !ClearValuesRequest
     , _svcRange          :: !Text
     , _svcCallback       :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'SpreadsheetsValuesClear' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -108,7 +111,7 @@
     -> Text -- ^ 'svcRange'
     -> SpreadsheetsValuesClear
 spreadsheetsValuesClear pSvcSpreadsheetId_ pSvcPayload_ pSvcRange_ =
-    SpreadsheetsValuesClear'
+  SpreadsheetsValuesClear'
     { _svcXgafv = Nothing
     , _svcUploadProtocol = Nothing
     , _svcAccessToken = Nothing
@@ -118,6 +121,7 @@
     , _svcRange = pSvcRange_
     , _svcCallback = Nothing
     }
+
 
 -- | V1 error format.
 svcXgafv :: Lens' SpreadsheetsValuesClear (Maybe Xgafv)
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
@@ -72,7 +72,8 @@
 -- the spreadsheet ID and a range.
 --
 -- /See:/ 'spreadsheetsValuesGet' smart constructor.
-data SpreadsheetsValuesGet = SpreadsheetsValuesGet'
+data SpreadsheetsValuesGet =
+  SpreadsheetsValuesGet'
     { _svgXgafv                :: !(Maybe Xgafv)
     , _svgValueRenderOption    :: !(Maybe Text)
     , _svgUploadProtocol       :: !(Maybe Text)
@@ -83,8 +84,10 @@
     , _svgDateTimeRenderOption :: !(Maybe Text)
     , _svgMajorDimension       :: !(Maybe Text)
     , _svgCallback             :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'SpreadsheetsValuesGet' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -113,7 +116,7 @@
     -> Text -- ^ 'svgRange'
     -> SpreadsheetsValuesGet
 spreadsheetsValuesGet pSvgSpreadsheetId_ pSvgRange_ =
-    SpreadsheetsValuesGet'
+  SpreadsheetsValuesGet'
     { _svgXgafv = Nothing
     , _svgValueRenderOption = Nothing
     , _svgUploadProtocol = Nothing
@@ -125,6 +128,7 @@
     , _svgMajorDimension = Nothing
     , _svgCallback = Nothing
     }
+
 
 -- | V1 error format.
 svgXgafv :: Lens' SpreadsheetsValuesGet (Maybe Xgafv)
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
@@ -76,7 +76,8 @@
 -- spreadsheet ID, range, and a valueInputOption.
 --
 -- /See:/ 'spreadsheetsValuesUpdate' smart constructor.
-data SpreadsheetsValuesUpdate = SpreadsheetsValuesUpdate'
+data SpreadsheetsValuesUpdate =
+  SpreadsheetsValuesUpdate'
     { _svuXgafv                        :: !(Maybe Xgafv)
     , _svuUploadProtocol               :: !(Maybe Text)
     , _svuAccessToken                  :: !(Maybe Text)
@@ -89,8 +90,10 @@
     , _svuResponseDateTimeRenderOption :: !(Maybe Text)
     , _svuCallback                     :: !(Maybe Text)
     , _svuResponseValueRenderOption    :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'SpreadsheetsValuesUpdate' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -124,7 +127,7 @@
     -> Text -- ^ 'svuRange'
     -> SpreadsheetsValuesUpdate
 spreadsheetsValuesUpdate pSvuSpreadsheetId_ pSvuPayload_ pSvuRange_ =
-    SpreadsheetsValuesUpdate'
+  SpreadsheetsValuesUpdate'
     { _svuXgafv = Nothing
     , _svuUploadProtocol = Nothing
     , _svuAccessToken = Nothing
@@ -138,6 +141,7 @@
     , _svuCallback = Nothing
     , _svuResponseValueRenderOption = Nothing
     }
+
 
 -- | V1 error format.
 svuXgafv :: Lens' SpreadsheetsValuesUpdate (Maybe Xgafv)
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
@@ -1639,21 +1639,21 @@
 
 -- | View your Google Spreadsheets
 spreadsheetsReadOnlyScope :: Proxy '["https://www.googleapis.com/auth/spreadsheets.readonly"]
-spreadsheetsReadOnlyScope = Proxy;
+spreadsheetsReadOnlyScope = Proxy
 
 -- | See and download all your Google Drive files
 driveReadOnlyScope :: Proxy '["https://www.googleapis.com/auth/drive.readonly"]
-driveReadOnlyScope = Proxy;
+driveReadOnlyScope = Proxy
 
 -- | See, edit, create, and delete all of your Google Drive files
 driveScope :: Proxy '["https://www.googleapis.com/auth/drive"]
-driveScope = Proxy;
+driveScope = Proxy
 
 -- | 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;
+driveFileScope = Proxy
 
 -- | See, edit, create, and delete your spreadsheets in Google Drive
 spreadsheetsScope :: Proxy '["https://www.googleapis.com/auth/spreadsheets"]
-spreadsheetsScope = Proxy;
+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
@@ -24,13272 +24,13703 @@
 -- sorting.
 --
 -- /See:/ 'pivotGroupSortValueBucket' smart constructor.
-data PivotGroupSortValueBucket = PivotGroupSortValueBucket'
-    { _pgsvbBuckets     :: !(Maybe [ExtendedValue])
-    , _pgsvbValuesIndex :: !(Maybe (Textual Int32))
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'PivotGroupSortValueBucket' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'pgsvbBuckets'
---
--- * 'pgsvbValuesIndex'
-pivotGroupSortValueBucket
-    :: PivotGroupSortValueBucket
-pivotGroupSortValueBucket =
-    PivotGroupSortValueBucket'
-    { _pgsvbBuckets = Nothing
-    , _pgsvbValuesIndex = Nothing
-    }
-
--- | Determines the bucket from which values are chosen to sort. For example,
--- in a pivot table with one row group & two column groups, the row group
--- can list up to two values. The first value corresponds to a value within
--- the first column group, and the second value corresponds to a value in
--- the second column group. If no values are listed, this would indicate
--- that the row should be sorted according to the \"Grand Total\" over the
--- column groups. If a single value is listed, this would correspond to
--- using the \"Total\" of that bucket.
-pgsvbBuckets :: Lens' PivotGroupSortValueBucket [ExtendedValue]
-pgsvbBuckets
-  = lens _pgsvbBuckets (\ s a -> s{_pgsvbBuckets = a})
-      . _Default
-      . _Coerce
-
--- | The offset in the PivotTable.values list which the values in this
--- grouping should be sorted by.
-pgsvbValuesIndex :: Lens' PivotGroupSortValueBucket (Maybe Int32)
-pgsvbValuesIndex
-  = lens _pgsvbValuesIndex
-      (\ s a -> s{_pgsvbValuesIndex = a})
-      . mapping _Coerce
-
-instance FromJSON PivotGroupSortValueBucket where
-        parseJSON
-          = withObject "PivotGroupSortValueBucket"
-              (\ o ->
-                 PivotGroupSortValueBucket' <$>
-                   (o .:? "buckets" .!= mempty) <*>
-                     (o .:? "valuesIndex"))
-
-instance ToJSON PivotGroupSortValueBucket where
-        toJSON PivotGroupSortValueBucket'{..}
-          = object
-              (catMaybes
-                 [("buckets" .=) <$> _pgsvbBuckets,
-                  ("valuesIndex" .=) <$> _pgsvbValuesIndex])
-
--- | Data within a range of the spreadsheet.
---
--- /See:/ 'valueRange' smart constructor.
-data ValueRange = ValueRange'
-    { _vrValues         :: !(Maybe [[JSONValue]])
-    , _vrRange          :: !(Maybe Text)
-    , _vrMajorDimension :: !(Maybe ValueRangeMajorDimension)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ValueRange' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vrValues'
---
--- * 'vrRange'
---
--- * 'vrMajorDimension'
-valueRange
-    :: ValueRange
-valueRange =
-    ValueRange'
-    { _vrValues = Nothing
-    , _vrRange = Nothing
-    , _vrMajorDimension = Nothing
-    }
-
--- | The data that was read or to be written. This is an array of arrays, the
--- outer array representing all the data and each inner array representing
--- a major dimension. Each item in the inner array corresponds with one
--- cell. For output, empty trailing rows and columns will not be included.
--- For input, supported value types are: bool, string, and double. Null
--- values will be skipped. To set a cell to an empty value, set the string
--- value to an empty string.
-vrValues :: Lens' ValueRange [[JSONValue]]
-vrValues
-  = lens _vrValues (\ s a -> s{_vrValues = a}) .
-      _Default
-      . _Coerce
-
--- | The range the values cover, in A1 notation. For output, this range
--- indicates the entire requested range, even though the values will
--- exclude trailing rows and columns. When appending values, this field
--- represents the range to search for a table, after which values will be
--- appended.
-vrRange :: Lens' ValueRange (Maybe Text)
-vrRange = lens _vrRange (\ s a -> s{_vrRange = a})
-
--- | 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.
-vrMajorDimension :: Lens' ValueRange (Maybe ValueRangeMajorDimension)
-vrMajorDimension
-  = lens _vrMajorDimension
-      (\ s a -> s{_vrMajorDimension = a})
-
-instance FromJSON ValueRange where
-        parseJSON
-          = withObject "ValueRange"
-              (\ o ->
-                 ValueRange' <$>
-                   (o .:? "values" .!= mempty) <*> (o .:? "range") <*>
-                     (o .:? "majorDimension"))
-
-instance ToJSON ValueRange where
-        toJSON ValueRange'{..}
-          = object
-              (catMaybes
-                 [("values" .=) <$> _vrValues,
-                  ("range" .=) <$> _vrRange,
-                  ("majorDimension" .=) <$> _vrMajorDimension])
-
--- | Sorts data in rows based on a sort order per column.
---
--- /See:/ 'sortRangeRequest' smart constructor.
-data SortRangeRequest = SortRangeRequest'
-    { _srrSortSpecs :: !(Maybe [SortSpec])
-    , _srrRange     :: !(Maybe GridRange)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'SortRangeRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'srrSortSpecs'
---
--- * 'srrRange'
-sortRangeRequest
-    :: SortRangeRequest
-sortRangeRequest =
-    SortRangeRequest'
-    { _srrSortSpecs = Nothing
-    , _srrRange = Nothing
-    }
-
--- | The sort order per column. Later specifications are used when values are
--- equal in the earlier specifications.
-srrSortSpecs :: Lens' SortRangeRequest [SortSpec]
-srrSortSpecs
-  = lens _srrSortSpecs (\ s a -> s{_srrSortSpecs = a})
-      . _Default
-      . _Coerce
-
--- | The range to sort.
-srrRange :: Lens' SortRangeRequest (Maybe GridRange)
-srrRange = lens _srrRange (\ s a -> s{_srrRange = a})
-
-instance FromJSON SortRangeRequest where
-        parseJSON
-          = withObject "SortRangeRequest"
-              (\ o ->
-                 SortRangeRequest' <$>
-                   (o .:? "sortSpecs" .!= mempty) <*> (o .:? "range"))
-
-instance ToJSON SortRangeRequest where
-        toJSON SortRangeRequest'{..}
-          = object
-              (catMaybes
-                 [("sortSpecs" .=) <$> _srrSortSpecs,
-                  ("range" .=) <$> _srrRange])
-
--- | Removes the named range with the given ID from the spreadsheet.
---
--- /See:/ 'deleteNamedRangeRequest' smart constructor.
-newtype DeleteNamedRangeRequest = DeleteNamedRangeRequest'
-    { _dnrrNamedRangeId :: Maybe Text
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeleteNamedRangeRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dnrrNamedRangeId'
-deleteNamedRangeRequest
-    :: DeleteNamedRangeRequest
-deleteNamedRangeRequest =
-    DeleteNamedRangeRequest'
-    { _dnrrNamedRangeId = Nothing
-    }
-
--- | The ID of the named range to delete.
-dnrrNamedRangeId :: Lens' DeleteNamedRangeRequest (Maybe Text)
-dnrrNamedRangeId
-  = lens _dnrrNamedRangeId
-      (\ s a -> s{_dnrrNamedRangeId = a})
-
-instance FromJSON DeleteNamedRangeRequest where
-        parseJSON
-          = withObject "DeleteNamedRangeRequest"
-              (\ o ->
-                 DeleteNamedRangeRequest' <$> (o .:? "namedRangeId"))
-
-instance ToJSON DeleteNamedRangeRequest where
-        toJSON DeleteNamedRangeRequest'{..}
-          = object
-              (catMaybes
-                 [("namedRangeId" .=) <$> _dnrrNamedRangeId])
-
--- | Updates properties of the named range with the specified namedRangeId.
---
--- /See:/ 'updateNamedRangeRequest' smart constructor.
-data UpdateNamedRangeRequest = UpdateNamedRangeRequest'
-    { _unrrNamedRange :: !(Maybe NamedRange)
-    , _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.
---
--- /See:/ 'deleteConditionalFormatRuleResponse' smart constructor.
-newtype DeleteConditionalFormatRuleResponse = DeleteConditionalFormatRuleResponse'
-    { _dcfrrRule :: Maybe ConditionalFormatRule
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeleteConditionalFormatRuleResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dcfrrRule'
-deleteConditionalFormatRuleResponse
-    :: DeleteConditionalFormatRuleResponse
-deleteConditionalFormatRuleResponse =
-    DeleteConditionalFormatRuleResponse'
-    { _dcfrrRule = Nothing
-    }
-
--- | The rule that was deleted.
-dcfrrRule :: Lens' DeleteConditionalFormatRuleResponse (Maybe ConditionalFormatRule)
-dcfrrRule
-  = lens _dcfrrRule (\ s a -> s{_dcfrrRule = a})
-
-instance FromJSON DeleteConditionalFormatRuleResponse
-         where
-        parseJSON
-          = withObject "DeleteConditionalFormatRuleResponse"
-              (\ o ->
-                 DeleteConditionalFormatRuleResponse' <$>
-                   (o .:? "rule"))
-
-instance ToJSON DeleteConditionalFormatRuleResponse
-         where
-        toJSON DeleteConditionalFormatRuleResponse'{..}
-          = object (catMaybes [("rule" .=) <$> _dcfrrRule])
-
--- | The result of updating a conditional format rule.
---
--- /See:/ 'updateConditionalFormatRuleResponse' smart constructor.
-data UpdateConditionalFormatRuleResponse = UpdateConditionalFormatRuleResponse'
-    { _uNewRule  :: !(Maybe ConditionalFormatRule)
-    , _uNewIndex :: !(Maybe (Textual Int32))
-    , _uOldIndex :: !(Maybe (Textual Int32))
-    , _uOldRule  :: !(Maybe ConditionalFormatRule)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'UpdateConditionalFormatRuleResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'uNewRule'
---
--- * 'uNewIndex'
---
--- * 'uOldIndex'
---
--- * 'uOldRule'
-updateConditionalFormatRuleResponse
-    :: UpdateConditionalFormatRuleResponse
-updateConditionalFormatRuleResponse =
-    UpdateConditionalFormatRuleResponse'
-    { _uNewRule = Nothing
-    , _uNewIndex = Nothing
-    , _uOldIndex = Nothing
-    , _uOldRule = Nothing
-    }
+data PivotGroupSortValueBucket =
+  PivotGroupSortValueBucket'
+    { _pgsvbBuckets     :: !(Maybe [ExtendedValue])
+    , _pgsvbValuesIndex :: !(Maybe (Textual Int32))
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'PivotGroupSortValueBucket' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pgsvbBuckets'
+--
+-- * 'pgsvbValuesIndex'
+pivotGroupSortValueBucket
+    :: PivotGroupSortValueBucket
+pivotGroupSortValueBucket =
+  PivotGroupSortValueBucket'
+    {_pgsvbBuckets = Nothing, _pgsvbValuesIndex = Nothing}
+
+
+-- | Determines the bucket from which values are chosen to sort. For example,
+-- in a pivot table with one row group & two column groups, the row group
+-- can list up to two values. The first value corresponds to a value within
+-- the first column group, and the second value corresponds to a value in
+-- the second column group. If no values are listed, this would indicate
+-- that the row should be sorted according to the \"Grand Total\" over the
+-- column groups. If a single value is listed, this would correspond to
+-- using the \"Total\" of that bucket.
+pgsvbBuckets :: Lens' PivotGroupSortValueBucket [ExtendedValue]
+pgsvbBuckets
+  = lens _pgsvbBuckets (\ s a -> s{_pgsvbBuckets = a})
+      . _Default
+      . _Coerce
+
+-- | The offset in the PivotTable.values list which the values in this
+-- grouping should be sorted by.
+pgsvbValuesIndex :: Lens' PivotGroupSortValueBucket (Maybe Int32)
+pgsvbValuesIndex
+  = lens _pgsvbValuesIndex
+      (\ s a -> s{_pgsvbValuesIndex = a})
+      . mapping _Coerce
+
+instance FromJSON PivotGroupSortValueBucket where
+        parseJSON
+          = withObject "PivotGroupSortValueBucket"
+              (\ o ->
+                 PivotGroupSortValueBucket' <$>
+                   (o .:? "buckets" .!= mempty) <*>
+                     (o .:? "valuesIndex"))
+
+instance ToJSON PivotGroupSortValueBucket where
+        toJSON PivotGroupSortValueBucket'{..}
+          = object
+              (catMaybes
+                 [("buckets" .=) <$> _pgsvbBuckets,
+                  ("valuesIndex" .=) <$> _pgsvbValuesIndex])
+
+-- | Data within a range of the spreadsheet.
+--
+-- /See:/ 'valueRange' smart constructor.
+data ValueRange =
+  ValueRange'
+    { _vrValues         :: !(Maybe [[JSONValue]])
+    , _vrRange          :: !(Maybe Text)
+    , _vrMajorDimension :: !(Maybe ValueRangeMajorDimension)
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ValueRange' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vrValues'
+--
+-- * 'vrRange'
+--
+-- * 'vrMajorDimension'
+valueRange
+    :: ValueRange
+valueRange =
+  ValueRange'
+    {_vrValues = Nothing, _vrRange = Nothing, _vrMajorDimension = Nothing}
+
+
+-- | The data that was read or to be written. This is an array of arrays, the
+-- outer array representing all the data and each inner array representing
+-- a major dimension. Each item in the inner array corresponds with one
+-- cell. For output, empty trailing rows and columns will not be included.
+-- For input, supported value types are: bool, string, and double. Null
+-- values will be skipped. To set a cell to an empty value, set the string
+-- value to an empty string.
+vrValues :: Lens' ValueRange [[JSONValue]]
+vrValues
+  = lens _vrValues (\ s a -> s{_vrValues = a}) .
+      _Default
+      . _Coerce
+
+-- | The range the values cover, in A1 notation. For output, this range
+-- indicates the entire requested range, even though the values will
+-- exclude trailing rows and columns. When appending values, this field
+-- represents the range to search for a table, after which values will be
+-- appended.
+vrRange :: Lens' ValueRange (Maybe Text)
+vrRange = lens _vrRange (\ s a -> s{_vrRange = a})
+
+-- | 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.
+vrMajorDimension :: Lens' ValueRange (Maybe ValueRangeMajorDimension)
+vrMajorDimension
+  = lens _vrMajorDimension
+      (\ s a -> s{_vrMajorDimension = a})
+
+instance FromJSON ValueRange where
+        parseJSON
+          = withObject "ValueRange"
+              (\ o ->
+                 ValueRange' <$>
+                   (o .:? "values" .!= mempty) <*> (o .:? "range") <*>
+                     (o .:? "majorDimension"))
+
+instance ToJSON ValueRange where
+        toJSON ValueRange'{..}
+          = object
+              (catMaybes
+                 [("values" .=) <$> _vrValues,
+                  ("range" .=) <$> _vrRange,
+                  ("majorDimension" .=) <$> _vrMajorDimension])
+
+-- | Sorts data in rows based on a sort order per column.
+--
+-- /See:/ 'sortRangeRequest' smart constructor.
+data SortRangeRequest =
+  SortRangeRequest'
+    { _srrSortSpecs :: !(Maybe [SortSpec])
+    , _srrRange     :: !(Maybe GridRange)
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'SortRangeRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'srrSortSpecs'
+--
+-- * 'srrRange'
+sortRangeRequest
+    :: SortRangeRequest
+sortRangeRequest =
+  SortRangeRequest' {_srrSortSpecs = Nothing, _srrRange = Nothing}
+
+
+-- | The sort order per column. Later specifications are used when values are
+-- equal in the earlier specifications.
+srrSortSpecs :: Lens' SortRangeRequest [SortSpec]
+srrSortSpecs
+  = lens _srrSortSpecs (\ s a -> s{_srrSortSpecs = a})
+      . _Default
+      . _Coerce
+
+-- | The range to sort.
+srrRange :: Lens' SortRangeRequest (Maybe GridRange)
+srrRange = lens _srrRange (\ s a -> s{_srrRange = a})
+
+instance FromJSON SortRangeRequest where
+        parseJSON
+          = withObject "SortRangeRequest"
+              (\ o ->
+                 SortRangeRequest' <$>
+                   (o .:? "sortSpecs" .!= mempty) <*> (o .:? "range"))
+
+instance ToJSON SortRangeRequest where
+        toJSON SortRangeRequest'{..}
+          = object
+              (catMaybes
+                 [("sortSpecs" .=) <$> _srrSortSpecs,
+                  ("range" .=) <$> _srrRange])
+
+-- | Removes the named range with the given ID from the spreadsheet.
+--
+-- /See:/ 'deleteNamedRangeRequest' smart constructor.
+newtype DeleteNamedRangeRequest =
+  DeleteNamedRangeRequest'
+    { _dnrrNamedRangeId :: Maybe Text
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteNamedRangeRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dnrrNamedRangeId'
+deleteNamedRangeRequest
+    :: DeleteNamedRangeRequest
+deleteNamedRangeRequest = DeleteNamedRangeRequest' {_dnrrNamedRangeId = Nothing}
+
+
+-- | The ID of the named range to delete.
+dnrrNamedRangeId :: Lens' DeleteNamedRangeRequest (Maybe Text)
+dnrrNamedRangeId
+  = lens _dnrrNamedRangeId
+      (\ s a -> s{_dnrrNamedRangeId = a})
+
+instance FromJSON DeleteNamedRangeRequest where
+        parseJSON
+          = withObject "DeleteNamedRangeRequest"
+              (\ o ->
+                 DeleteNamedRangeRequest' <$> (o .:? "namedRangeId"))
+
+instance ToJSON DeleteNamedRangeRequest where
+        toJSON DeleteNamedRangeRequest'{..}
+          = object
+              (catMaybes
+                 [("namedRangeId" .=) <$> _dnrrNamedRangeId])
+
+-- | Updates properties of the named range with the specified namedRangeId.
+--
+-- /See:/ 'updateNamedRangeRequest' smart constructor.
+data UpdateNamedRangeRequest =
+  UpdateNamedRangeRequest'
+    { _unrrNamedRange :: !(Maybe NamedRange)
+    , _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. Note: this proto does not carry
+-- information about the absolute color space that should be used to
+-- interpret the RGB value (e.g. sRGB, Adobe RGB, DCI-P3, BT.2020, etc.).
+-- By default, applications SHOULD assume the sRGB color space. 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.
+--
+-- /See:/ 'deleteConditionalFormatRuleResponse' smart constructor.
+newtype DeleteConditionalFormatRuleResponse =
+  DeleteConditionalFormatRuleResponse'
+    { _dcfrrRule :: Maybe ConditionalFormatRule
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteConditionalFormatRuleResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dcfrrRule'
+deleteConditionalFormatRuleResponse
+    :: DeleteConditionalFormatRuleResponse
+deleteConditionalFormatRuleResponse =
+  DeleteConditionalFormatRuleResponse' {_dcfrrRule = Nothing}
+
+
+-- | The rule that was deleted.
+dcfrrRule :: Lens' DeleteConditionalFormatRuleResponse (Maybe ConditionalFormatRule)
+dcfrrRule
+  = lens _dcfrrRule (\ s a -> s{_dcfrrRule = a})
+
+instance FromJSON DeleteConditionalFormatRuleResponse
+         where
+        parseJSON
+          = withObject "DeleteConditionalFormatRuleResponse"
+              (\ o ->
+                 DeleteConditionalFormatRuleResponse' <$>
+                   (o .:? "rule"))
+
+instance ToJSON DeleteConditionalFormatRuleResponse
+         where
+        toJSON DeleteConditionalFormatRuleResponse'{..}
+          = object (catMaybes [("rule" .=) <$> _dcfrrRule])
+
+-- | The result of updating a conditional format rule.
+--
+-- /See:/ 'updateConditionalFormatRuleResponse' smart constructor.
+data UpdateConditionalFormatRuleResponse =
+  UpdateConditionalFormatRuleResponse'
+    { _uNewRule  :: !(Maybe ConditionalFormatRule)
+    , _uNewIndex :: !(Maybe (Textual Int32))
+    , _uOldIndex :: !(Maybe (Textual Int32))
+    , _uOldRule  :: !(Maybe ConditionalFormatRule)
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'UpdateConditionalFormatRuleResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uNewRule'
+--
+-- * 'uNewIndex'
+--
+-- * 'uOldIndex'
+--
+-- * 'uOldRule'
+updateConditionalFormatRuleResponse
+    :: UpdateConditionalFormatRuleResponse
+updateConditionalFormatRuleResponse =
+  UpdateConditionalFormatRuleResponse'
+    { _uNewRule = Nothing
+    , _uNewIndex = Nothing
+    , _uOldIndex = Nothing
+    , _uOldRule = Nothing
+    }
+
 
 -- | The new rule that replaced the old rule (if replacing), or the rule that
 -- was moved (if moved)
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.4.0
+version:               0.5.0
 synopsis:              Google Sheets SDK.
 homepage:              https://github.com/brendanhay/gogol
 bug-reports:           https://github.com/brendanhay/gogol/issues
@@ -58,5 +58,5 @@
         , Network.Google.Sheets.Types.Sum
 
     build-depends:
-          gogol-core == 0.4.0.*
+          gogol-core == 0.5.0.*
         , base       >= 4.7 && < 5
