diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -8,7 +8,7 @@
 
 ## Version
 
-`0.0.1`
+`0.1.0`
 
 
 ## Description
@@ -18,9 +18,9 @@
 
 ## Contribute
 
-For any problems, comments, or feedback please create an issue [here on GitHub](https://github.com/brendanhay/amazonka/issues).
+For any problems, comments, or feedback please create an issue [here on GitHub](https://github.com/brendanhay/gogol/issues).
 
-> _Note:_ this library is an auto-generated Haskell package. Please see `amazonka-gen` for more information.
+> _Note:_ this library is an auto-generated Haskell package. Please see `gogol-gen` for more information.
 
 
 ## Licence
diff --git a/gen/Network/Google/Books.hs b/gen/Network/Google/Books.hs
--- a/gen/Network/Google/Books.hs
+++ b/gen/Network/Google/Books.hs
@@ -7,7 +7,7 @@
 
 -- |
 -- Module      : Network.Google.Books
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -21,6 +21,9 @@
     -- * Service Configuration
       booksService
 
+    -- * OAuth Scopes
+    , booksScope
+
     -- * API Declaration
     , BooksAPI
 
@@ -143,6 +146,12 @@
     -- ** books.promooffer.get
     , module Network.Google.Resource.Books.PromoOffer.Get
 
+    -- ** books.series.get
+    , module Network.Google.Resource.Books.Series.Get
+
+    -- ** books.series.membership.get
+    , module Network.Google.Resource.Books.Series.Membership.Get
+
     -- ** books.volumes.associated.list
     , module Network.Google.Resource.Books.Volumes.Associated.List
 
@@ -258,6 +267,12 @@
     , bclrAuthor
     , bclrTitle
 
+    -- ** VolumeseriesInfoVolumeSeriesItemIssueItem
+    , VolumeseriesInfoVolumeSeriesItemIssueItem
+    , volumeseriesInfoVolumeSeriesItemIssueItem
+    , vivsiiiIssueOrderNumber
+    , vivsiiiIssueDisplayNumber
+
     -- ** Annotation
     , Annotation
     , annotation
@@ -293,19 +308,25 @@
     -- ** VolumeUserInfo
     , VolumeUserInfo
     , volumeUserInfo
+    , vuiIsFamilySharingAllowed
+    , vuiIsFamilySharedToUser
     , vuiCopy
     , vuiUserUploadedVolumeInfo
     , vuiIsPurchased
     , vuiEntitlementType
     , vuiAcquisitionType
+    , vuiAcquiredTime
     , vuiRentalState
     , vuiIsPreOrdered
     , vuiReview
+    , vuiIsFamilySharedFromUser
     , vuiRentalPeriod
     , vuiUpdated
     , vuiIsUploaded
     , vuiIsInMyBooks
     , vuiReadingPosition
+    , vuiFamilySharing
+    , vuiIsFamilySharingDisabledByFop
 
     -- ** Layersummary
     , Layersummary
@@ -387,6 +408,14 @@
     , booksVolumesRecommendedRateResponse
     , bvrrrConsistencyToken
 
+    -- ** VolumeseriesInfo
+    , VolumeseriesInfo
+    , volumeseriesInfo
+    , viBookDisplayNumber
+    , viKind
+    , viShortSeriesBookTitle
+    , viVolumeSeries
+
     -- ** Bookshelf
     , Bookshelf
     , bookshelf
@@ -404,9 +433,17 @@
     -- ** Notification
     , Notification
     , notification
+    , nDocType
+    , nTargetURL
+    , nShowNotificationSettingsAction
+    , nDocId
     , nKind
     , nBody
-    , nLinkURL
+    , nCrmExperimentIds
+    , nPcampaignId
+    , nReason
+    , nDontShowNotification
+    , nNotificationType
     , nIconURL
     , nTitle
 
@@ -503,6 +540,12 @@
     , gdgbiiLatitude
     , gdgbiiLongitude
 
+    -- ** Series
+    , Series
+    , series
+    , sKind
+    , sSeries
+
     -- ** OffersItemsItemItemsItem
     , OffersItemsItemItemsItem
     , offersItemsItemItemsItem
@@ -611,6 +654,13 @@
     , dddwisisisURL
     , dddwisisisAttribution
 
+    -- ** Seriesmembership
+    , Seriesmembership
+    , seriesmembership
+    , serNextPageToken
+    , serKind
+    , serMember
+
     -- ** VolumesListFilter
     , VolumesListFilter (..)
 
@@ -731,6 +781,15 @@
     -- ** MyLibraryBookshelvesAddVolumeReason
     , MyLibraryBookshelvesAddVolumeReason (..)
 
+    -- ** SeriesSeriesItem
+    , SeriesSeriesItem
+    , seriesSeriesItem
+    , ssiSeriesId
+    , ssiImageURL
+    , ssiBannerImageURL
+    , ssiTitle
+    , ssiSeriesType
+
     -- ** Metadata
     , Metadata
     , metadata
@@ -873,6 +932,14 @@
     , dTotalClusters
     , dClusters
 
+    -- ** VolumeseriesInfoVolumeSeriesItem
+    , VolumeseriesInfoVolumeSeriesItem
+    , volumeseriesInfoVolumeSeriesItem
+    , vivsiSeriesId
+    , vivsiSeriesBookType
+    , vivsiOrderNumber
+    , vivsiIssue
+
     -- ** UserSettingsNotesExport
     , UserSettingsNotesExport
     , userSettingsNotesExport
@@ -940,6 +1007,7 @@
     , vviCanonicalVolumeLink
     , vviReadingModes
     , vviIndustryIdentifiers
+    , vviSeriesInfo
     , vviPrintedPageCount
     , vviMainCategory
     , vviContentVersion
@@ -981,6 +1049,13 @@
     , vsioirpCurrencyCode
     , vsioirpAmountInMicros
 
+    -- ** VolumeUserInfoFamilySharing
+    , VolumeUserInfoFamilySharing
+    , volumeUserInfoFamilySharing
+    , vuifsFamilyRole
+    , vuifsIsSharingAllowed
+    , vuifsIsSharingDisabledByFop
+
     -- ** VolumeVolumeInfoIndustryIdentifiersItem
     , VolumeVolumeInfoIndustryIdentifiersItem
     , volumeVolumeInfoIndustryIdentifiersItem
@@ -1044,6 +1119,8 @@
 import           Network.Google.Resource.Books.PromoOffer.Accept
 import           Network.Google.Resource.Books.PromoOffer.Dismiss
 import           Network.Google.Resource.Books.PromoOffer.Get
+import           Network.Google.Resource.Books.Series.Get
+import           Network.Google.Resource.Books.Series.Membership.Get
 import           Network.Google.Resource.Books.Volumes.Associated.List
 import           Network.Google.Resource.Books.Volumes.Get
 import           Network.Google.Resource.Books.Volumes.List
@@ -1059,7 +1136,9 @@
 -- | Represents the entirety of the methods and resources available for the Books API service.
 type BooksAPI =
      NotificationGetResource :<|>
-       OnboardingListCategoriesResource
+       SeriesMembershipGetResource
+       :<|> SeriesGetResource
+       :<|> OnboardingListCategoriesResource
        :<|> OnboardingListCategoryVolumesResource
        :<|> MyLibraryAnnotationsSummaryResource
        :<|> MyLibraryAnnotationsInsertResource
diff --git a/gen/Network/Google/Books/Types.hs b/gen/Network/Google/Books/Types.hs
--- a/gen/Network/Google/Books/Types.hs
+++ b/gen/Network/Google/Books/Types.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE DataKinds          #-}
 {-# LANGUAGE DeriveDataTypeable #-}
 {-# LANGUAGE DeriveGeneric      #-}
 {-# LANGUAGE NoImplicitPrelude  #-}
@@ -7,7 +8,7 @@
 
 -- |
 -- Module      : Network.Google.Books.Types
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -113,6 +114,12 @@
     , bclrAuthor
     , bclrTitle
 
+    -- * VolumeseriesInfoVolumeSeriesItemIssueItem
+    , VolumeseriesInfoVolumeSeriesItemIssueItem
+    , volumeseriesInfoVolumeSeriesItemIssueItem
+    , vivsiiiIssueOrderNumber
+    , vivsiiiIssueDisplayNumber
+
     -- * Annotation
     , Annotation
     , annotation
@@ -148,19 +155,25 @@
     -- * VolumeUserInfo
     , VolumeUserInfo
     , volumeUserInfo
+    , vuiIsFamilySharingAllowed
+    , vuiIsFamilySharedToUser
     , vuiCopy
     , vuiUserUploadedVolumeInfo
     , vuiIsPurchased
     , vuiEntitlementType
     , vuiAcquisitionType
+    , vuiAcquiredTime
     , vuiRentalState
     , vuiIsPreOrdered
     , vuiReview
+    , vuiIsFamilySharedFromUser
     , vuiRentalPeriod
     , vuiUpdated
     , vuiIsUploaded
     , vuiIsInMyBooks
     , vuiReadingPosition
+    , vuiFamilySharing
+    , vuiIsFamilySharingDisabledByFop
 
     -- * Layersummary
     , Layersummary
@@ -242,6 +255,14 @@
     , booksVolumesRecommendedRateResponse
     , bvrrrConsistencyToken
 
+    -- * VolumeseriesInfo
+    , VolumeseriesInfo
+    , volumeseriesInfo
+    , viBookDisplayNumber
+    , viKind
+    , viShortSeriesBookTitle
+    , viVolumeSeries
+
     -- * Bookshelf
     , Bookshelf
     , bookshelf
@@ -259,9 +280,17 @@
     -- * Notification
     , Notification
     , notification
+    , nDocType
+    , nTargetURL
+    , nShowNotificationSettingsAction
+    , nDocId
     , nKind
     , nBody
-    , nLinkURL
+    , nCrmExperimentIds
+    , nPcampaignId
+    , nReason
+    , nDontShowNotification
+    , nNotificationType
     , nIconURL
     , nTitle
 
@@ -358,6 +387,12 @@
     , gdgbiiLatitude
     , gdgbiiLongitude
 
+    -- * Series
+    , Series
+    , series
+    , sKind
+    , sSeries
+
     -- * OffersItemsItemItemsItem
     , OffersItemsItemItemsItem
     , offersItemsItemItemsItem
@@ -466,6 +501,13 @@
     , dddwisisisURL
     , dddwisisisAttribution
 
+    -- * Seriesmembership
+    , Seriesmembership
+    , seriesmembership
+    , serNextPageToken
+    , serKind
+    , serMember
+
     -- * VolumesListFilter
     , VolumesListFilter (..)
 
@@ -586,6 +628,15 @@
     -- * MyLibraryBookshelvesAddVolumeReason
     , MyLibraryBookshelvesAddVolumeReason (..)
 
+    -- * SeriesSeriesItem
+    , SeriesSeriesItem
+    , seriesSeriesItem
+    , ssiSeriesId
+    , ssiImageURL
+    , ssiBannerImageURL
+    , ssiTitle
+    , ssiSeriesType
+
     -- * Metadata
     , Metadata
     , metadata
@@ -728,6 +779,14 @@
     , dTotalClusters
     , dClusters
 
+    -- * VolumeseriesInfoVolumeSeriesItem
+    , VolumeseriesInfoVolumeSeriesItem
+    , volumeseriesInfoVolumeSeriesItem
+    , vivsiSeriesId
+    , vivsiSeriesBookType
+    , vivsiOrderNumber
+    , vivsiIssue
+
     -- * UserSettingsNotesExport
     , UserSettingsNotesExport
     , userSettingsNotesExport
@@ -795,6 +854,7 @@
     , vviCanonicalVolumeLink
     , vviReadingModes
     , vviIndustryIdentifiers
+    , vviSeriesInfo
     , vviPrintedPageCount
     , vviMainCategory
     , vviContentVersion
@@ -836,6 +896,13 @@
     , vsioirpCurrencyCode
     , vsioirpAmountInMicros
 
+    -- * VolumeUserInfoFamilySharing
+    , VolumeUserInfoFamilySharing
+    , volumeUserInfoFamilySharing
+    , vuifsFamilyRole
+    , vuifsIsSharingAllowed
+    , vuifsIsSharingDisabledByFop
+
     -- * VolumeVolumeInfoIndustryIdentifiersItem
     , VolumeVolumeInfoIndustryIdentifiersItem
     , volumeVolumeInfoIndustryIdentifiersItem
@@ -863,11 +930,11 @@
 import           Network.Google.Prelude
 
 -- | Default request referring to version 'v1' of the Books API. This contains the host and root path used as a starting point for constructing service requests.
-booksService :: Service
+booksService :: ServiceConfig
 booksService
   = defaultService (ServiceId "books:v1")
       "www.googleapis.com"
 
 -- | Manage your books
-booksScope :: OAuthScope
-booksScope = "https://www.googleapis.com/auth/books";
+booksScope :: Proxy '["https://www.googleapis.com/auth/books"]
+booksScope = Proxy;
diff --git a/gen/Network/Google/Books/Types/Product.hs b/gen/Network/Google/Books/Types/Product.hs
--- a/gen/Network/Google/Books/Types/Product.hs
+++ b/gen/Network/Google/Books/Types/Product.hs
@@ -9,7002 +9,7628 @@
 
 -- |
 -- Module      : Network.Google.Books.Types.Product
--- Copyright   : (c) 2015 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
-module Network.Google.Books.Types.Product where
-
-import           Network.Google.Books.Types.Sum
-import           Network.Google.Prelude
-
---
--- /See:/ 'userSettings' smart constructor.
-data UserSettings = UserSettings
-    { _usNotification :: !(Maybe UserSettingsNotification)
-    , _usKind         :: !Text
-    , _usNotesExport  :: !(Maybe UserSettingsNotesExport)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'UserSettings' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'usNotification'
---
--- * 'usKind'
---
--- * 'usNotesExport'
-userSettings
-    :: UserSettings
-userSettings =
-    UserSettings
-    { _usNotification = Nothing
-    , _usKind = "books#usersettings"
-    , _usNotesExport = Nothing
-    }
-
-usNotification :: Lens' UserSettings (Maybe UserSettingsNotification)
-usNotification
-  = lens _usNotification
-      (\ s a -> s{_usNotification = a})
-
--- | Resource type.
-usKind :: Lens' UserSettings Text
-usKind = lens _usKind (\ s a -> s{_usKind = a})
-
--- | User settings in sub-objects, each for different purposes.
-usNotesExport :: Lens' UserSettings (Maybe UserSettingsNotesExport)
-usNotesExport
-  = lens _usNotesExport
-      (\ s a -> s{_usNotesExport = a})
-
-instance FromJSON UserSettings where
-        parseJSON
-          = withObject "UserSettings"
-              (\ o ->
-                 UserSettings <$>
-                   (o .:? "notification") <*>
-                     (o .:? "kind" .!= "books#usersettings")
-                     <*> (o .:? "notesExport"))
-
-instance ToJSON UserSettings where
-        toJSON UserSettings{..}
-          = object
-              (catMaybes
-                 [("notification" .=) <$> _usNotification,
-                  Just ("kind" .= _usKind),
-                  ("notesExport" .=) <$> _usNotesExport])
-
---
--- /See:/ 'annotations' smart constructor.
-data Annotations = Annotations
-    { _aTotalItems    :: !(Maybe (Textual Int32))
-    , _aNextPageToken :: !(Maybe Text)
-    , _aKind          :: !Text
-    , _aItems         :: !(Maybe [Annotation])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Annotations' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'aTotalItems'
---
--- * 'aNextPageToken'
---
--- * 'aKind'
---
--- * 'aItems'
-annotations
-    :: Annotations
-annotations =
-    Annotations
-    { _aTotalItems = Nothing
-    , _aNextPageToken = Nothing
-    , _aKind = "books#annotations"
-    , _aItems = Nothing
-    }
-
--- | Total number of annotations found. This may be greater than the number
--- of notes returned in this response if results have been paginated.
-aTotalItems :: Lens' Annotations (Maybe Int32)
-aTotalItems
-  = lens _aTotalItems (\ s a -> s{_aTotalItems = a}) .
-      mapping _Coerce
-
--- | Token to pass in for pagination for the next page. This will not be
--- present if this request does not have more results.
-aNextPageToken :: Lens' Annotations (Maybe Text)
-aNextPageToken
-  = lens _aNextPageToken
-      (\ s a -> s{_aNextPageToken = a})
-
--- | Resource type.
-aKind :: Lens' Annotations Text
-aKind = lens _aKind (\ s a -> s{_aKind = a})
-
--- | A list of annotations.
-aItems :: Lens' Annotations [Annotation]
-aItems
-  = lens _aItems (\ s a -> s{_aItems = a}) . _Default .
-      _Coerce
-
-instance FromJSON Annotations where
-        parseJSON
-          = withObject "Annotations"
-              (\ o ->
-                 Annotations <$>
-                   (o .:? "totalItems") <*> (o .:? "nextPageToken") <*>
-                     (o .:? "kind" .!= "books#annotations")
-                     <*> (o .:? "items" .!= mempty))
-
-instance ToJSON Annotations where
-        toJSON Annotations{..}
-          = object
-              (catMaybes
-                 [("totalItems" .=) <$> _aTotalItems,
-                  ("nextPageToken" .=) <$> _aNextPageToken,
-                  Just ("kind" .= _aKind), ("items" .=) <$> _aItems])
-
---
--- /See:/ 'annotationsData' smart constructor.
-data AnnotationsData = AnnotationsData
-    { _adTotalItems    :: !(Maybe (Textual Int32))
-    , _adNextPageToken :: !(Maybe Text)
-    , _adKind          :: !Text
-    , _adItems         :: !(Maybe [AnnotationData])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AnnotationsData' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'adTotalItems'
---
--- * 'adNextPageToken'
---
--- * 'adKind'
---
--- * 'adItems'
-annotationsData
-    :: AnnotationsData
-annotationsData =
-    AnnotationsData
-    { _adTotalItems = Nothing
-    , _adNextPageToken = Nothing
-    , _adKind = "books#annotationsdata"
-    , _adItems = Nothing
-    }
-
--- | The total number of volume annotations found.
-adTotalItems :: Lens' AnnotationsData (Maybe Int32)
-adTotalItems
-  = lens _adTotalItems (\ s a -> s{_adTotalItems = a})
-      . mapping _Coerce
-
--- | Token to pass in for pagination for the next page. This will not be
--- present if this request does not have more results.
-adNextPageToken :: Lens' AnnotationsData (Maybe Text)
-adNextPageToken
-  = lens _adNextPageToken
-      (\ s a -> s{_adNextPageToken = a})
-
--- | Resource type
-adKind :: Lens' AnnotationsData Text
-adKind = lens _adKind (\ s a -> s{_adKind = a})
-
--- | A list of Annotation Data.
-adItems :: Lens' AnnotationsData [AnnotationData]
-adItems
-  = lens _adItems (\ s a -> s{_adItems = a}) . _Default
-      . _Coerce
-
-instance FromJSON AnnotationsData where
-        parseJSON
-          = withObject "AnnotationsData"
-              (\ o ->
-                 AnnotationsData <$>
-                   (o .:? "totalItems") <*> (o .:? "nextPageToken") <*>
-                     (o .:? "kind" .!= "books#annotationsdata")
-                     <*> (o .:? "items" .!= mempty))
-
-instance ToJSON AnnotationsData where
-        toJSON AnnotationsData{..}
-          = object
-              (catMaybes
-                 [("totalItems" .=) <$> _adTotalItems,
-                  ("nextPageToken" .=) <$> _adNextPageToken,
-                  Just ("kind" .= _adKind), ("items" .=) <$> _adItems])
-
---
--- /See:/ 'userSettingsNotificationMoreFromAuthors' smart constructor.
-newtype UserSettingsNotificationMoreFromAuthors = UserSettingsNotificationMoreFromAuthors
-    { _usnmfaOptedState :: Maybe Text
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'UserSettingsNotificationMoreFromAuthors' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'usnmfaOptedState'
-userSettingsNotificationMoreFromAuthors
-    :: UserSettingsNotificationMoreFromAuthors
-userSettingsNotificationMoreFromAuthors =
-    UserSettingsNotificationMoreFromAuthors
-    { _usnmfaOptedState = Nothing
-    }
-
-usnmfaOptedState :: Lens' UserSettingsNotificationMoreFromAuthors (Maybe Text)
-usnmfaOptedState
-  = lens _usnmfaOptedState
-      (\ s a -> s{_usnmfaOptedState = a})
-
-instance FromJSON
-         UserSettingsNotificationMoreFromAuthors where
-        parseJSON
-          = withObject
-              "UserSettingsNotificationMoreFromAuthors"
-              (\ o ->
-                 UserSettingsNotificationMoreFromAuthors <$>
-                   (o .:? "opted_state"))
-
-instance ToJSON
-         UserSettingsNotificationMoreFromAuthors where
-        toJSON UserSettingsNotificationMoreFromAuthors{..}
-          = object
-              (catMaybes
-                 [("opted_state" .=) <$> _usnmfaOptedState])
-
---
--- /See:/ 'volumeannotations' smart constructor.
-data Volumeannotations = Volumeannotations
-    { _vTotalItems    :: !(Maybe (Textual Int32))
-    , _vNextPageToken :: !(Maybe Text)
-    , _vKind          :: !Text
-    , _vItems         :: !(Maybe [Volumeannotation])
-    , _vVersion       :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Volumeannotations' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vTotalItems'
---
--- * 'vNextPageToken'
---
--- * 'vKind'
---
--- * 'vItems'
---
--- * 'vVersion'
-volumeannotations
-    :: Volumeannotations
-volumeannotations =
-    Volumeannotations
-    { _vTotalItems = Nothing
-    , _vNextPageToken = Nothing
-    , _vKind = "books#volumeannotations"
-    , _vItems = Nothing
-    , _vVersion = Nothing
-    }
-
--- | The total number of volume annotations found.
-vTotalItems :: Lens' Volumeannotations (Maybe Int32)
-vTotalItems
-  = lens _vTotalItems (\ s a -> s{_vTotalItems = a}) .
-      mapping _Coerce
-
--- | Token to pass in for pagination for the next page. This will not be
--- present if this request does not have more results.
-vNextPageToken :: Lens' Volumeannotations (Maybe Text)
-vNextPageToken
-  = lens _vNextPageToken
-      (\ s a -> s{_vNextPageToken = a})
-
--- | Resource type
-vKind :: Lens' Volumeannotations Text
-vKind = lens _vKind (\ s a -> s{_vKind = a})
-
--- | A list of volume annotations.
-vItems :: Lens' Volumeannotations [Volumeannotation]
-vItems
-  = lens _vItems (\ s a -> s{_vItems = a}) . _Default .
-      _Coerce
-
--- | The version string for all of the volume annotations in this layer (not
--- just the ones in this response). Note: the version string doesn\'t apply
--- to the annotation data, just the information in this response (e.g. the
--- location of annotations in the book).
-vVersion :: Lens' Volumeannotations (Maybe Text)
-vVersion = lens _vVersion (\ s a -> s{_vVersion = a})
-
-instance FromJSON Volumeannotations where
-        parseJSON
-          = withObject "Volumeannotations"
-              (\ o ->
-                 Volumeannotations <$>
-                   (o .:? "totalItems") <*> (o .:? "nextPageToken") <*>
-                     (o .:? "kind" .!= "books#volumeannotations")
-                     <*> (o .:? "items" .!= mempty)
-                     <*> (o .:? "version"))
-
-instance ToJSON Volumeannotations where
-        toJSON Volumeannotations{..}
-          = object
-              (catMaybes
-                 [("totalItems" .=) <$> _vTotalItems,
-                  ("nextPageToken" .=) <$> _vNextPageToken,
-                  Just ("kind" .= _vKind), ("items" .=) <$> _vItems,
-                  ("version" .=) <$> _vVersion])
-
--- | Information regarding the source of this review, when the review is not
--- from a Google Books user.
---
--- /See:/ 'reviewSource' smart constructor.
-data ReviewSource = ReviewSource
-    { _rsExtraDescription :: !(Maybe Text)
-    , _rsURL              :: !(Maybe Text)
-    , _rsDescription      :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ReviewSource' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rsExtraDescription'
---
--- * 'rsURL'
---
--- * 'rsDescription'
-reviewSource
-    :: ReviewSource
-reviewSource =
-    ReviewSource
-    { _rsExtraDescription = Nothing
-    , _rsURL = Nothing
-    , _rsDescription = Nothing
-    }
-
--- | Extra text about the source of the review.
-rsExtraDescription :: Lens' ReviewSource (Maybe Text)
-rsExtraDescription
-  = lens _rsExtraDescription
-      (\ s a -> s{_rsExtraDescription = a})
-
--- | URL of the source of the review.
-rsURL :: Lens' ReviewSource (Maybe Text)
-rsURL = lens _rsURL (\ s a -> s{_rsURL = a})
-
--- | Name of the source.
-rsDescription :: Lens' ReviewSource (Maybe Text)
-rsDescription
-  = lens _rsDescription
-      (\ s a -> s{_rsDescription = a})
-
-instance FromJSON ReviewSource where
-        parseJSON
-          = withObject "ReviewSource"
-              (\ o ->
-                 ReviewSource <$>
-                   (o .:? "extraDescription") <*> (o .:? "url") <*>
-                     (o .:? "description"))
-
-instance ToJSON ReviewSource where
-        toJSON ReviewSource{..}
-          = object
-              (catMaybes
-                 [("extraDescription" .=) <$> _rsExtraDescription,
-                  ("url" .=) <$> _rsURL,
-                  ("description" .=) <$> _rsDescription])
-
---
--- /See:/ 'annotationData' smart constructor.
-data AnnotationData = AnnotationData
-    { _annEncodedData    :: !(Maybe (Textual Word8))
-    , _annKind           :: !Text
-    , _annData           :: !(Maybe JSONValue)
-    , _annSelfLink       :: !(Maybe Text)
-    , _annAnnotationType :: !(Maybe Text)
-    , _annVolumeId       :: !(Maybe Text)
-    , _annId             :: !(Maybe Text)
-    , _annUpdated        :: !(Maybe DateTime')
-    , _annLayerId        :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AnnotationData' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'annEncodedData'
---
--- * 'annKind'
---
--- * 'annData'
---
--- * 'annSelfLink'
---
--- * 'annAnnotationType'
---
--- * 'annVolumeId'
---
--- * 'annId'
---
--- * 'annUpdated'
---
--- * 'annLayerId'
-annotationData
-    :: AnnotationData
-annotationData =
-    AnnotationData
-    { _annEncodedData = Nothing
-    , _annKind = "books#annotationdata"
-    , _annData = Nothing
-    , _annSelfLink = Nothing
-    , _annAnnotationType = Nothing
-    , _annVolumeId = Nothing
-    , _annId = Nothing
-    , _annUpdated = Nothing
-    , _annLayerId = Nothing
-    }
-
--- | Base64 encoded data for this annotation data.
-annEncodedData :: Lens' AnnotationData (Maybe Word8)
-annEncodedData
-  = lens _annEncodedData
-      (\ s a -> s{_annEncodedData = a})
-      . mapping _Coerce
-
--- | Resource Type
-annKind :: Lens' AnnotationData Text
-annKind = lens _annKind (\ s a -> s{_annKind = a})
-
-annData :: Lens' AnnotationData (Maybe JSONValue)
-annData = lens _annData (\ s a -> s{_annData = a})
-
--- | URL for this resource. *
-annSelfLink :: Lens' AnnotationData (Maybe Text)
-annSelfLink
-  = lens _annSelfLink (\ s a -> s{_annSelfLink = a})
-
--- | The type of annotation this data is for.
-annAnnotationType :: Lens' AnnotationData (Maybe Text)
-annAnnotationType
-  = lens _annAnnotationType
-      (\ s a -> s{_annAnnotationType = a})
-
--- | The volume id for this data. *
-annVolumeId :: Lens' AnnotationData (Maybe Text)
-annVolumeId
-  = lens _annVolumeId (\ s a -> s{_annVolumeId = a})
-
--- | Unique id for this annotation data.
-annId :: Lens' AnnotationData (Maybe Text)
-annId = lens _annId (\ s a -> s{_annId = a})
-
--- | Timestamp for the last time this data was updated. (RFC 3339 UTC
--- date-time format).
-annUpdated :: Lens' AnnotationData (Maybe UTCTime)
-annUpdated
-  = lens _annUpdated (\ s a -> s{_annUpdated = a}) .
-      mapping _DateTime
-
--- | The Layer id for this data. *
-annLayerId :: Lens' AnnotationData (Maybe Text)
-annLayerId
-  = lens _annLayerId (\ s a -> s{_annLayerId = a})
-
-instance FromJSON AnnotationData where
-        parseJSON
-          = withObject "AnnotationData"
-              (\ o ->
-                 AnnotationData <$>
-                   (o .:? "encoded_data") <*>
-                     (o .:? "kind" .!= "books#annotationdata")
-                     <*> (o .:? "data")
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "annotationType")
-                     <*> (o .:? "volumeId")
-                     <*> (o .:? "id")
-                     <*> (o .:? "updated")
-                     <*> (o .:? "layerId"))
-
-instance ToJSON AnnotationData where
-        toJSON AnnotationData{..}
-          = object
-              (catMaybes
-                 [("encoded_data" .=) <$> _annEncodedData,
-                  Just ("kind" .= _annKind), ("data" .=) <$> _annData,
-                  ("selfLink" .=) <$> _annSelfLink,
-                  ("annotationType" .=) <$> _annAnnotationType,
-                  ("volumeId" .=) <$> _annVolumeId,
-                  ("id" .=) <$> _annId, ("updated" .=) <$> _annUpdated,
-                  ("layerId" .=) <$> _annLayerId])
-
---
--- /See:/ 'volumeannotation' smart constructor.
-data Volumeannotation = Volumeannotation
-    { _volSelectedText       :: !(Maybe Text)
-    , _volAnnotationDataLink :: !(Maybe Text)
-    , _volPageIds            :: !(Maybe [Text])
-    , _volKind               :: !Text
-    , _volData               :: !(Maybe Text)
-    , _volSelfLink           :: !(Maybe Text)
-    , _volAnnotationType     :: !(Maybe Text)
-    , _volAnnotationDataId   :: !(Maybe Text)
-    , _volContentRanges      :: !(Maybe VolumeannotationContentRanges)
-    , _volVolumeId           :: !(Maybe Text)
-    , _volId                 :: !(Maybe Text)
-    , _volDeleted            :: !(Maybe Bool)
-    , _volUpdated            :: !(Maybe DateTime')
-    , _volLayerId            :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Volumeannotation' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'volSelectedText'
---
--- * 'volAnnotationDataLink'
---
--- * 'volPageIds'
---
--- * 'volKind'
---
--- * 'volData'
---
--- * 'volSelfLink'
---
--- * 'volAnnotationType'
---
--- * 'volAnnotationDataId'
---
--- * 'volContentRanges'
---
--- * 'volVolumeId'
---
--- * 'volId'
---
--- * 'volDeleted'
---
--- * 'volUpdated'
---
--- * 'volLayerId'
-volumeannotation
-    :: Volumeannotation
-volumeannotation =
-    Volumeannotation
-    { _volSelectedText = Nothing
-    , _volAnnotationDataLink = Nothing
-    , _volPageIds = Nothing
-    , _volKind = "books#volumeannotation"
-    , _volData = Nothing
-    , _volSelfLink = Nothing
-    , _volAnnotationType = Nothing
-    , _volAnnotationDataId = Nothing
-    , _volContentRanges = Nothing
-    , _volVolumeId = Nothing
-    , _volId = Nothing
-    , _volDeleted = Nothing
-    , _volUpdated = Nothing
-    , _volLayerId = Nothing
-    }
-
--- | Excerpt from the volume.
-volSelectedText :: Lens' Volumeannotation (Maybe Text)
-volSelectedText
-  = lens _volSelectedText
-      (\ s a -> s{_volSelectedText = a})
-
--- | Link to get data for this annotation.
-volAnnotationDataLink :: Lens' Volumeannotation (Maybe Text)
-volAnnotationDataLink
-  = lens _volAnnotationDataLink
-      (\ s a -> s{_volAnnotationDataLink = a})
-
--- | Pages the annotation spans.
-volPageIds :: Lens' Volumeannotation [Text]
-volPageIds
-  = lens _volPageIds (\ s a -> s{_volPageIds = a}) .
-      _Default
-      . _Coerce
-
--- | Resource Type
-volKind :: Lens' Volumeannotation Text
-volKind = lens _volKind (\ s a -> s{_volKind = a})
-
--- | Data for this annotation.
-volData :: Lens' Volumeannotation (Maybe Text)
-volData = lens _volData (\ s a -> s{_volData = a})
-
--- | URL to this resource.
-volSelfLink :: Lens' Volumeannotation (Maybe Text)
-volSelfLink
-  = lens _volSelfLink (\ s a -> s{_volSelfLink = a})
-
--- | The type of annotation this is.
-volAnnotationType :: Lens' Volumeannotation (Maybe Text)
-volAnnotationType
-  = lens _volAnnotationType
-      (\ s a -> s{_volAnnotationType = a})
-
--- | The annotation data id for this volume annotation.
-volAnnotationDataId :: Lens' Volumeannotation (Maybe Text)
-volAnnotationDataId
-  = lens _volAnnotationDataId
-      (\ s a -> s{_volAnnotationDataId = a})
-
--- | The content ranges to identify the selected text.
-volContentRanges :: Lens' Volumeannotation (Maybe VolumeannotationContentRanges)
-volContentRanges
-  = lens _volContentRanges
-      (\ s a -> s{_volContentRanges = a})
-
--- | The Volume this annotation is for.
-volVolumeId :: Lens' Volumeannotation (Maybe Text)
-volVolumeId
-  = lens _volVolumeId (\ s a -> s{_volVolumeId = a})
-
--- | Unique id of this volume annotation.
-volId :: Lens' Volumeannotation (Maybe Text)
-volId = lens _volId (\ s a -> s{_volId = a})
-
--- | Indicates that this annotation is deleted.
-volDeleted :: Lens' Volumeannotation (Maybe Bool)
-volDeleted
-  = lens _volDeleted (\ s a -> s{_volDeleted = a})
-
--- | Timestamp for the last time this anntoation was updated. (RFC 3339 UTC
--- date-time format).
-volUpdated :: Lens' Volumeannotation (Maybe UTCTime)
-volUpdated
-  = lens _volUpdated (\ s a -> s{_volUpdated = a}) .
-      mapping _DateTime
-
--- | The Layer this annotation is for.
-volLayerId :: Lens' Volumeannotation (Maybe Text)
-volLayerId
-  = lens _volLayerId (\ s a -> s{_volLayerId = a})
-
-instance FromJSON Volumeannotation where
-        parseJSON
-          = withObject "Volumeannotation"
-              (\ o ->
-                 Volumeannotation <$>
-                   (o .:? "selectedText") <*>
-                     (o .:? "annotationDataLink")
-                     <*> (o .:? "pageIds" .!= mempty)
-                     <*> (o .:? "kind" .!= "books#volumeannotation")
-                     <*> (o .:? "data")
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "annotationType")
-                     <*> (o .:? "annotationDataId")
-                     <*> (o .:? "contentRanges")
-                     <*> (o .:? "volumeId")
-                     <*> (o .:? "id")
-                     <*> (o .:? "deleted")
-                     <*> (o .:? "updated")
-                     <*> (o .:? "layerId"))
-
-instance ToJSON Volumeannotation where
-        toJSON Volumeannotation{..}
-          = object
-              (catMaybes
-                 [("selectedText" .=) <$> _volSelectedText,
-                  ("annotationDataLink" .=) <$> _volAnnotationDataLink,
-                  ("pageIds" .=) <$> _volPageIds,
-                  Just ("kind" .= _volKind), ("data" .=) <$> _volData,
-                  ("selfLink" .=) <$> _volSelfLink,
-                  ("annotationType" .=) <$> _volAnnotationType,
-                  ("annotationDataId" .=) <$> _volAnnotationDataId,
-                  ("contentRanges" .=) <$> _volContentRanges,
-                  ("volumeId" .=) <$> _volVolumeId,
-                  ("id" .=) <$> _volId, ("deleted" .=) <$> _volDeleted,
-                  ("updated" .=) <$> _volUpdated,
-                  ("layerId" .=) <$> _volLayerId])
-
---
--- /See:/ 'booksCloudLoadingResource' smart constructor.
-data BooksCloudLoadingResource = BooksCloudLoadingResource
-    { _bclrProcessingState :: !(Maybe Text)
-    , _bclrVolumeId        :: !(Maybe Text)
-    , _bclrAuthor          :: !(Maybe Text)
-    , _bclrTitle           :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'BooksCloudLoadingResource' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'bclrProcessingState'
---
--- * 'bclrVolumeId'
---
--- * 'bclrAuthor'
---
--- * 'bclrTitle'
-booksCloudLoadingResource
-    :: BooksCloudLoadingResource
-booksCloudLoadingResource =
-    BooksCloudLoadingResource
-    { _bclrProcessingState = Nothing
-    , _bclrVolumeId = Nothing
-    , _bclrAuthor = Nothing
-    , _bclrTitle = Nothing
-    }
-
-bclrProcessingState :: Lens' BooksCloudLoadingResource (Maybe Text)
-bclrProcessingState
-  = lens _bclrProcessingState
-      (\ s a -> s{_bclrProcessingState = a})
-
-bclrVolumeId :: Lens' BooksCloudLoadingResource (Maybe Text)
-bclrVolumeId
-  = lens _bclrVolumeId (\ s a -> s{_bclrVolumeId = a})
-
-bclrAuthor :: Lens' BooksCloudLoadingResource (Maybe Text)
-bclrAuthor
-  = lens _bclrAuthor (\ s a -> s{_bclrAuthor = a})
-
-bclrTitle :: Lens' BooksCloudLoadingResource (Maybe Text)
-bclrTitle
-  = lens _bclrTitle (\ s a -> s{_bclrTitle = a})
-
-instance FromJSON BooksCloudLoadingResource where
-        parseJSON
-          = withObject "BooksCloudLoadingResource"
-              (\ o ->
-                 BooksCloudLoadingResource <$>
-                   (o .:? "processingState") <*> (o .:? "volumeId") <*>
-                     (o .:? "author")
-                     <*> (o .:? "title"))
-
-instance ToJSON BooksCloudLoadingResource where
-        toJSON BooksCloudLoadingResource{..}
-          = object
-              (catMaybes
-                 [("processingState" .=) <$> _bclrProcessingState,
-                  ("volumeId" .=) <$> _bclrVolumeId,
-                  ("author" .=) <$> _bclrAuthor,
-                  ("title" .=) <$> _bclrTitle])
-
---
--- /See:/ 'annotation' smart constructor.
-data Annotation = Annotation
-    { _aaSelectedText         :: !(Maybe Text)
-    , _aaLayerSummary         :: !(Maybe AnnotationLayerSummary)
-    , _aaHighlightStyle       :: !(Maybe Text)
-    , _aaClientVersionRanges  :: !(Maybe AnnotationClientVersionRanges)
-    , _aaPageIds              :: !(Maybe [Text])
-    , _aaKind                 :: !Text
-    , _aaData                 :: !(Maybe Text)
-    , _aaCreated              :: !(Maybe DateTime')
-    , _aaAfterSelectedText    :: !(Maybe Text)
-    , _aaSelfLink             :: !(Maybe Text)
-    , _aaCurrentVersionRanges :: !(Maybe AnnotationCurrentVersionRanges)
-    , _aaVolumeId             :: !(Maybe Text)
-    , _aaBeforeSelectedText   :: !(Maybe Text)
-    , _aaId                   :: !(Maybe Text)
-    , _aaDeleted              :: !(Maybe Bool)
-    , _aaUpdated              :: !(Maybe DateTime')
-    , _aaLayerId              :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Annotation' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'aaSelectedText'
---
--- * 'aaLayerSummary'
---
--- * 'aaHighlightStyle'
---
--- * 'aaClientVersionRanges'
---
--- * 'aaPageIds'
---
--- * 'aaKind'
---
--- * 'aaData'
---
--- * 'aaCreated'
---
--- * 'aaAfterSelectedText'
---
--- * 'aaSelfLink'
---
--- * 'aaCurrentVersionRanges'
---
--- * 'aaVolumeId'
---
--- * 'aaBeforeSelectedText'
---
--- * 'aaId'
---
--- * 'aaDeleted'
---
--- * 'aaUpdated'
---
--- * 'aaLayerId'
-annotation
-    :: Annotation
-annotation =
-    Annotation
-    { _aaSelectedText = Nothing
-    , _aaLayerSummary = Nothing
-    , _aaHighlightStyle = Nothing
-    , _aaClientVersionRanges = Nothing
-    , _aaPageIds = Nothing
-    , _aaKind = "books#annotation"
-    , _aaData = Nothing
-    , _aaCreated = Nothing
-    , _aaAfterSelectedText = Nothing
-    , _aaSelfLink = Nothing
-    , _aaCurrentVersionRanges = Nothing
-    , _aaVolumeId = Nothing
-    , _aaBeforeSelectedText = Nothing
-    , _aaId = Nothing
-    , _aaDeleted = Nothing
-    , _aaUpdated = Nothing
-    , _aaLayerId = Nothing
-    }
-
--- | Excerpt from the volume.
-aaSelectedText :: Lens' Annotation (Maybe Text)
-aaSelectedText
-  = lens _aaSelectedText
-      (\ s a -> s{_aaSelectedText = a})
-
-aaLayerSummary :: Lens' Annotation (Maybe AnnotationLayerSummary)
-aaLayerSummary
-  = lens _aaLayerSummary
-      (\ s a -> s{_aaLayerSummary = a})
-
--- | The highlight style for this annotation.
-aaHighlightStyle :: Lens' Annotation (Maybe Text)
-aaHighlightStyle
-  = lens _aaHighlightStyle
-      (\ s a -> s{_aaHighlightStyle = a})
-
--- | Selection ranges sent from the client.
-aaClientVersionRanges :: Lens' Annotation (Maybe AnnotationClientVersionRanges)
-aaClientVersionRanges
-  = lens _aaClientVersionRanges
-      (\ s a -> s{_aaClientVersionRanges = a})
-
--- | Pages that this annotation spans.
-aaPageIds :: Lens' Annotation [Text]
-aaPageIds
-  = lens _aaPageIds (\ s a -> s{_aaPageIds = a}) .
-      _Default
-      . _Coerce
-
--- | Resource type.
-aaKind :: Lens' Annotation Text
-aaKind = lens _aaKind (\ s a -> s{_aaKind = a})
-
--- | User-created data for this annotation.
-aaData :: Lens' Annotation (Maybe Text)
-aaData = lens _aaData (\ s a -> s{_aaData = a})
-
--- | Timestamp for the created time of this annotation.
-aaCreated :: Lens' Annotation (Maybe UTCTime)
-aaCreated
-  = lens _aaCreated (\ s a -> s{_aaCreated = a}) .
-      mapping _DateTime
-
--- | Anchor text after excerpt. For requests, if the user bookmarked a screen
--- that has no flowing text on it, then this field should be empty.
-aaAfterSelectedText :: Lens' Annotation (Maybe Text)
-aaAfterSelectedText
-  = lens _aaAfterSelectedText
-      (\ s a -> s{_aaAfterSelectedText = a})
-
--- | URL to this resource.
-aaSelfLink :: Lens' Annotation (Maybe Text)
-aaSelfLink
-  = lens _aaSelfLink (\ s a -> s{_aaSelfLink = a})
-
--- | Selection ranges for the most recent content version.
-aaCurrentVersionRanges :: Lens' Annotation (Maybe AnnotationCurrentVersionRanges)
-aaCurrentVersionRanges
-  = lens _aaCurrentVersionRanges
-      (\ s a -> s{_aaCurrentVersionRanges = a})
-
--- | The volume that this annotation belongs to.
-aaVolumeId :: Lens' Annotation (Maybe Text)
-aaVolumeId
-  = lens _aaVolumeId (\ s a -> s{_aaVolumeId = a})
-
--- | Anchor text before excerpt. For requests, if the user bookmarked a
--- screen that has no flowing text on it, then this field should be empty.
-aaBeforeSelectedText :: Lens' Annotation (Maybe Text)
-aaBeforeSelectedText
-  = lens _aaBeforeSelectedText
-      (\ s a -> s{_aaBeforeSelectedText = a})
-
--- | Id of this annotation, in the form of a GUID.
-aaId :: Lens' Annotation (Maybe Text)
-aaId = lens _aaId (\ s a -> s{_aaId = a})
-
--- | Indicates that this annotation is deleted.
-aaDeleted :: Lens' Annotation (Maybe Bool)
-aaDeleted
-  = lens _aaDeleted (\ s a -> s{_aaDeleted = a})
-
--- | Timestamp for the last time this annotation was modified.
-aaUpdated :: Lens' Annotation (Maybe UTCTime)
-aaUpdated
-  = lens _aaUpdated (\ s a -> s{_aaUpdated = a}) .
-      mapping _DateTime
-
--- | The layer this annotation is for.
-aaLayerId :: Lens' Annotation (Maybe Text)
-aaLayerId
-  = lens _aaLayerId (\ s a -> s{_aaLayerId = a})
-
-instance FromJSON Annotation where
-        parseJSON
-          = withObject "Annotation"
-              (\ o ->
-                 Annotation <$>
-                   (o .:? "selectedText") <*> (o .:? "layerSummary") <*>
-                     (o .:? "highlightStyle")
-                     <*> (o .:? "clientVersionRanges")
-                     <*> (o .:? "pageIds" .!= mempty)
-                     <*> (o .:? "kind" .!= "books#annotation")
-                     <*> (o .:? "data")
-                     <*> (o .:? "created")
-                     <*> (o .:? "afterSelectedText")
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "currentVersionRanges")
-                     <*> (o .:? "volumeId")
-                     <*> (o .:? "beforeSelectedText")
-                     <*> (o .:? "id")
-                     <*> (o .:? "deleted")
-                     <*> (o .:? "updated")
-                     <*> (o .:? "layerId"))
-
-instance ToJSON Annotation where
-        toJSON Annotation{..}
-          = object
-              (catMaybes
-                 [("selectedText" .=) <$> _aaSelectedText,
-                  ("layerSummary" .=) <$> _aaLayerSummary,
-                  ("highlightStyle" .=) <$> _aaHighlightStyle,
-                  ("clientVersionRanges" .=) <$>
-                    _aaClientVersionRanges,
-                  ("pageIds" .=) <$> _aaPageIds,
-                  Just ("kind" .= _aaKind), ("data" .=) <$> _aaData,
-                  ("created" .=) <$> _aaCreated,
-                  ("afterSelectedText" .=) <$> _aaAfterSelectedText,
-                  ("selfLink" .=) <$> _aaSelfLink,
-                  ("currentVersionRanges" .=) <$>
-                    _aaCurrentVersionRanges,
-                  ("volumeId" .=) <$> _aaVolumeId,
-                  ("beforeSelectedText" .=) <$> _aaBeforeSelectedText,
-                  ("id" .=) <$> _aaId, ("deleted" .=) <$> _aaDeleted,
-                  ("updated" .=) <$> _aaUpdated,
-                  ("layerId" .=) <$> _aaLayerId])
-
--- | Author of this review.
---
--- /See:/ 'reviewAuthor' smart constructor.
-newtype ReviewAuthor = ReviewAuthor
-    { _raDisplayName :: Maybe Text
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ReviewAuthor' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'raDisplayName'
-reviewAuthor
-    :: ReviewAuthor
-reviewAuthor =
-    ReviewAuthor
-    { _raDisplayName = Nothing
-    }
-
--- | Name of this person.
-raDisplayName :: Lens' ReviewAuthor (Maybe Text)
-raDisplayName
-  = lens _raDisplayName
-      (\ s a -> s{_raDisplayName = a})
-
-instance FromJSON ReviewAuthor where
-        parseJSON
-          = withObject "ReviewAuthor"
-              (\ o -> ReviewAuthor <$> (o .:? "displayName"))
-
-instance ToJSON ReviewAuthor where
-        toJSON ReviewAuthor{..}
-          = object
-              (catMaybes [("displayName" .=) <$> _raDisplayName])
-
--- | The viewport for showing this location. This is a latitude, longitude
--- rectangle.
---
--- /See:/ 'geolayerDataGeoViewport' smart constructor.
-data GeolayerDataGeoViewport = GeolayerDataGeoViewport
-    { _gdgvHi :: !(Maybe GeolayerDataGeoViewportHi)
-    , _gdgvLo :: !(Maybe GeolayerDataGeoViewportLo)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'GeolayerDataGeoViewport' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gdgvHi'
---
--- * 'gdgvLo'
-geolayerDataGeoViewport
-    :: GeolayerDataGeoViewport
-geolayerDataGeoViewport =
-    GeolayerDataGeoViewport
-    { _gdgvHi = Nothing
-    , _gdgvLo = Nothing
-    }
-
-gdgvHi :: Lens' GeolayerDataGeoViewport (Maybe GeolayerDataGeoViewportHi)
-gdgvHi = lens _gdgvHi (\ s a -> s{_gdgvHi = a})
-
-gdgvLo :: Lens' GeolayerDataGeoViewport (Maybe GeolayerDataGeoViewportLo)
-gdgvLo = lens _gdgvLo (\ s a -> s{_gdgvLo = a})
-
-instance FromJSON GeolayerDataGeoViewport where
-        parseJSON
-          = withObject "GeolayerDataGeoViewport"
-              (\ o ->
-                 GeolayerDataGeoViewport <$>
-                   (o .:? "hi") <*> (o .:? "lo"))
-
-instance ToJSON GeolayerDataGeoViewport where
-        toJSON GeolayerDataGeoViewport{..}
-          = object
-              (catMaybes
-                 [("hi" .=) <$> _gdgvHi, ("lo" .=) <$> _gdgvLo])
-
--- | User specific information related to this volume. (e.g. page this user
--- last read or whether they purchased this book)
---
--- /See:/ 'volumeUserInfo' smart constructor.
-data VolumeUserInfo = VolumeUserInfo
-    { _vuiCopy                   :: !(Maybe VolumeUserInfoCopy)
-    , _vuiUserUploadedVolumeInfo :: !(Maybe VolumeUserInfoUserUploadedVolumeInfo)
-    , _vuiIsPurchased            :: !(Maybe Bool)
-    , _vuiEntitlementType        :: !(Maybe (Textual Int32))
-    , _vuiAcquisitionType        :: !(Maybe (Textual Int32))
-    , _vuiRentalState            :: !(Maybe Text)
-    , _vuiIsPreOrdered           :: !(Maybe Bool)
-    , _vuiReview                 :: !(Maybe Review)
-    , _vuiRentalPeriod           :: !(Maybe VolumeUserInfoRentalPeriod)
-    , _vuiUpdated                :: !(Maybe DateTime')
-    , _vuiIsUploaded             :: !(Maybe Bool)
-    , _vuiIsInMyBooks            :: !(Maybe Bool)
-    , _vuiReadingPosition        :: !(Maybe ReadingPosition)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VolumeUserInfo' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vuiCopy'
---
--- * 'vuiUserUploadedVolumeInfo'
---
--- * 'vuiIsPurchased'
---
--- * 'vuiEntitlementType'
---
--- * 'vuiAcquisitionType'
---
--- * 'vuiRentalState'
---
--- * 'vuiIsPreOrdered'
---
--- * 'vuiReview'
---
--- * 'vuiRentalPeriod'
---
--- * 'vuiUpdated'
---
--- * 'vuiIsUploaded'
---
--- * 'vuiIsInMyBooks'
---
--- * 'vuiReadingPosition'
-volumeUserInfo
-    :: VolumeUserInfo
-volumeUserInfo =
-    VolumeUserInfo
-    { _vuiCopy = Nothing
-    , _vuiUserUploadedVolumeInfo = Nothing
-    , _vuiIsPurchased = Nothing
-    , _vuiEntitlementType = Nothing
-    , _vuiAcquisitionType = Nothing
-    , _vuiRentalState = Nothing
-    , _vuiIsPreOrdered = Nothing
-    , _vuiReview = Nothing
-    , _vuiRentalPeriod = Nothing
-    , _vuiUpdated = Nothing
-    , _vuiIsUploaded = Nothing
-    , _vuiIsInMyBooks = Nothing
-    , _vuiReadingPosition = Nothing
-    }
-
--- | Copy\/Paste accounting information.
-vuiCopy :: Lens' VolumeUserInfo (Maybe VolumeUserInfoCopy)
-vuiCopy = lens _vuiCopy (\ s a -> s{_vuiCopy = a})
-
-vuiUserUploadedVolumeInfo :: Lens' VolumeUserInfo (Maybe VolumeUserInfoUserUploadedVolumeInfo)
-vuiUserUploadedVolumeInfo
-  = lens _vuiUserUploadedVolumeInfo
-      (\ s a -> s{_vuiUserUploadedVolumeInfo = a})
-
--- | Whether or not this volume was purchased by the authenticated user
--- making the request. (In LITE projection.)
-vuiIsPurchased :: Lens' VolumeUserInfo (Maybe Bool)
-vuiIsPurchased
-  = lens _vuiIsPurchased
-      (\ s a -> s{_vuiIsPurchased = a})
-
--- | Whether this volume is purchased, sample, pd download etc.
-vuiEntitlementType :: Lens' VolumeUserInfo (Maybe Int32)
-vuiEntitlementType
-  = lens _vuiEntitlementType
-      (\ s a -> s{_vuiEntitlementType = a})
-      . mapping _Coerce
-
--- | How this volume was acquired.
-vuiAcquisitionType :: Lens' VolumeUserInfo (Maybe Int32)
-vuiAcquisitionType
-  = lens _vuiAcquisitionType
-      (\ s a -> s{_vuiAcquisitionType = a})
-      . mapping _Coerce
-
--- | Whether this book is an active or an expired rental.
-vuiRentalState :: Lens' VolumeUserInfo (Maybe Text)
-vuiRentalState
-  = lens _vuiRentalState
-      (\ s a -> s{_vuiRentalState = a})
-
--- | Whether or not this volume was pre-ordered by the authenticated user
--- making the request. (In LITE projection.)
-vuiIsPreOrdered :: Lens' VolumeUserInfo (Maybe Bool)
-vuiIsPreOrdered
-  = lens _vuiIsPreOrdered
-      (\ s a -> s{_vuiIsPreOrdered = a})
-
--- | This user\'s review of this volume, if one exists.
-vuiReview :: Lens' VolumeUserInfo (Maybe Review)
-vuiReview
-  = lens _vuiReview (\ s a -> s{_vuiReview = a})
-
--- | Period during this book is\/was a valid rental.
-vuiRentalPeriod :: Lens' VolumeUserInfo (Maybe VolumeUserInfoRentalPeriod)
-vuiRentalPeriod
-  = lens _vuiRentalPeriod
-      (\ s a -> s{_vuiRentalPeriod = a})
-
--- | Timestamp when this volume was last modified by a user action, such as a
--- reading position update, volume purchase or writing a review. (RFC 3339
--- UTC date-time format).
-vuiUpdated :: Lens' VolumeUserInfo (Maybe UTCTime)
-vuiUpdated
-  = lens _vuiUpdated (\ s a -> s{_vuiUpdated = a}) .
-      mapping _DateTime
-
--- | Whether or not this volume was user uploaded.
-vuiIsUploaded :: Lens' VolumeUserInfo (Maybe Bool)
-vuiIsUploaded
-  = lens _vuiIsUploaded
-      (\ s a -> s{_vuiIsUploaded = a})
-
--- | Whether or not this volume is currently in \"my books.\"
-vuiIsInMyBooks :: Lens' VolumeUserInfo (Maybe Bool)
-vuiIsInMyBooks
-  = lens _vuiIsInMyBooks
-      (\ s a -> s{_vuiIsInMyBooks = a})
-
--- | The user\'s current reading position in the volume, if one is available.
--- (In LITE projection.)
-vuiReadingPosition :: Lens' VolumeUserInfo (Maybe ReadingPosition)
-vuiReadingPosition
-  = lens _vuiReadingPosition
-      (\ s a -> s{_vuiReadingPosition = a})
-
-instance FromJSON VolumeUserInfo where
-        parseJSON
-          = withObject "VolumeUserInfo"
-              (\ o ->
-                 VolumeUserInfo <$>
-                   (o .:? "copy") <*> (o .:? "userUploadedVolumeInfo")
-                     <*> (o .:? "isPurchased")
-                     <*> (o .:? "entitlementType")
-                     <*> (o .:? "acquisitionType")
-                     <*> (o .:? "rentalState")
-                     <*> (o .:? "isPreordered")
-                     <*> (o .:? "review")
-                     <*> (o .:? "rentalPeriod")
-                     <*> (o .:? "updated")
-                     <*> (o .:? "isUploaded")
-                     <*> (o .:? "isInMyBooks")
-                     <*> (o .:? "readingPosition"))
-
-instance ToJSON VolumeUserInfo where
-        toJSON VolumeUserInfo{..}
-          = object
-              (catMaybes
-                 [("copy" .=) <$> _vuiCopy,
-                  ("userUploadedVolumeInfo" .=) <$>
-                    _vuiUserUploadedVolumeInfo,
-                  ("isPurchased" .=) <$> _vuiIsPurchased,
-                  ("entitlementType" .=) <$> _vuiEntitlementType,
-                  ("acquisitionType" .=) <$> _vuiAcquisitionType,
-                  ("rentalState" .=) <$> _vuiRentalState,
-                  ("isPreordered" .=) <$> _vuiIsPreOrdered,
-                  ("review" .=) <$> _vuiReview,
-                  ("rentalPeriod" .=) <$> _vuiRentalPeriod,
-                  ("updated" .=) <$> _vuiUpdated,
-                  ("isUploaded" .=) <$> _vuiIsUploaded,
-                  ("isInMyBooks" .=) <$> _vuiIsInMyBooks,
-                  ("readingPosition" .=) <$> _vuiReadingPosition])
-
---
--- /See:/ 'layersummary' smart constructor.
-data Layersummary = Layersummary
-    { _lAnnotationsDataLink      :: !(Maybe Text)
-    , _lAnnotationsLink          :: !(Maybe Text)
-    , _lKind                     :: !Text
-    , _lDataCount                :: !(Maybe (Textual Int32))
-    , _lContentVersion           :: !(Maybe Text)
-    , _lVolumeAnnotationsVersion :: !(Maybe Text)
-    , _lAnnotationCount          :: !(Maybe (Textual Int32))
-    , _lAnnotationTypes          :: !(Maybe [Text])
-    , _lSelfLink                 :: !(Maybe Text)
-    , _lVolumeId                 :: !(Maybe Text)
-    , _lId                       :: !(Maybe Text)
-    , _lUpdated                  :: !(Maybe DateTime')
-    , _lLayerId                  :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Layersummary' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'lAnnotationsDataLink'
---
--- * 'lAnnotationsLink'
---
--- * 'lKind'
---
--- * 'lDataCount'
---
--- * 'lContentVersion'
---
--- * 'lVolumeAnnotationsVersion'
---
--- * 'lAnnotationCount'
---
--- * 'lAnnotationTypes'
---
--- * 'lSelfLink'
---
--- * 'lVolumeId'
---
--- * 'lId'
---
--- * 'lUpdated'
---
--- * 'lLayerId'
-layersummary
-    :: Layersummary
-layersummary =
-    Layersummary
-    { _lAnnotationsDataLink = Nothing
-    , _lAnnotationsLink = Nothing
-    , _lKind = "books#layersummary"
-    , _lDataCount = Nothing
-    , _lContentVersion = Nothing
-    , _lVolumeAnnotationsVersion = Nothing
-    , _lAnnotationCount = Nothing
-    , _lAnnotationTypes = Nothing
-    , _lSelfLink = Nothing
-    , _lVolumeId = Nothing
-    , _lId = Nothing
-    , _lUpdated = Nothing
-    , _lLayerId = Nothing
-    }
-
--- | Link to get data for this annotation.
-lAnnotationsDataLink :: Lens' Layersummary (Maybe Text)
-lAnnotationsDataLink
-  = lens _lAnnotationsDataLink
-      (\ s a -> s{_lAnnotationsDataLink = a})
-
--- | The link to get the annotations for this layer.
-lAnnotationsLink :: Lens' Layersummary (Maybe Text)
-lAnnotationsLink
-  = lens _lAnnotationsLink
-      (\ s a -> s{_lAnnotationsLink = a})
-
--- | Resource Type
-lKind :: Lens' Layersummary Text
-lKind = lens _lKind (\ s a -> s{_lKind = a})
-
--- | The number of data items for this layer.
-lDataCount :: Lens' Layersummary (Maybe Int32)
-lDataCount
-  = lens _lDataCount (\ s a -> s{_lDataCount = a}) .
-      mapping _Coerce
-
--- | The content version this resource is for.
-lContentVersion :: Lens' Layersummary (Maybe Text)
-lContentVersion
-  = lens _lContentVersion
-      (\ s a -> s{_lContentVersion = a})
-
--- | The current version of this layer\'s volume annotations. Note that this
--- version applies only to the data in the books.layers.volumeAnnotations.*
--- responses. The actual annotation data is versioned separately.
-lVolumeAnnotationsVersion :: Lens' Layersummary (Maybe Text)
-lVolumeAnnotationsVersion
-  = lens _lVolumeAnnotationsVersion
-      (\ s a -> s{_lVolumeAnnotationsVersion = a})
-
--- | The number of annotations for this layer.
-lAnnotationCount :: Lens' Layersummary (Maybe Int32)
-lAnnotationCount
-  = lens _lAnnotationCount
-      (\ s a -> s{_lAnnotationCount = a})
-      . mapping _Coerce
-
--- | The list of annotation types contained for this layer.
-lAnnotationTypes :: Lens' Layersummary [Text]
-lAnnotationTypes
-  = lens _lAnnotationTypes
-      (\ s a -> s{_lAnnotationTypes = a})
-      . _Default
-      . _Coerce
-
--- | URL to this resource.
-lSelfLink :: Lens' Layersummary (Maybe Text)
-lSelfLink
-  = lens _lSelfLink (\ s a -> s{_lSelfLink = a})
-
--- | The volume id this resource is for.
-lVolumeId :: Lens' Layersummary (Maybe Text)
-lVolumeId
-  = lens _lVolumeId (\ s a -> s{_lVolumeId = a})
-
--- | Unique id of this layer summary.
-lId :: Lens' Layersummary (Maybe Text)
-lId = lens _lId (\ s a -> s{_lId = a})
-
--- | Timestamp for the last time an item in this layer was updated. (RFC 3339
--- UTC date-time format).
-lUpdated :: Lens' Layersummary (Maybe UTCTime)
-lUpdated
-  = lens _lUpdated (\ s a -> s{_lUpdated = a}) .
-      mapping _DateTime
-
--- | The layer id for this summary.
-lLayerId :: Lens' Layersummary (Maybe Text)
-lLayerId = lens _lLayerId (\ s a -> s{_lLayerId = a})
-
-instance FromJSON Layersummary where
-        parseJSON
-          = withObject "Layersummary"
-              (\ o ->
-                 Layersummary <$>
-                   (o .:? "annotationsDataLink") <*>
-                     (o .:? "annotationsLink")
-                     <*> (o .:? "kind" .!= "books#layersummary")
-                     <*> (o .:? "dataCount")
-                     <*> (o .:? "contentVersion")
-                     <*> (o .:? "volumeAnnotationsVersion")
-                     <*> (o .:? "annotationCount")
-                     <*> (o .:? "annotationTypes" .!= mempty)
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "volumeId")
-                     <*> (o .:? "id")
-                     <*> (o .:? "updated")
-                     <*> (o .:? "layerId"))
-
-instance ToJSON Layersummary where
-        toJSON Layersummary{..}
-          = object
-              (catMaybes
-                 [("annotationsDataLink" .=) <$>
-                    _lAnnotationsDataLink,
-                  ("annotationsLink" .=) <$> _lAnnotationsLink,
-                  Just ("kind" .= _lKind),
-                  ("dataCount" .=) <$> _lDataCount,
-                  ("contentVersion" .=) <$> _lContentVersion,
-                  ("volumeAnnotationsVersion" .=) <$>
-                    _lVolumeAnnotationsVersion,
-                  ("annotationCount" .=) <$> _lAnnotationCount,
-                  ("annotationTypes" .=) <$> _lAnnotationTypes,
-                  ("selfLink" .=) <$> _lSelfLink,
-                  ("volumeId" .=) <$> _lVolumeId, ("id" .=) <$> _lId,
-                  ("updated" .=) <$> _lUpdated,
-                  ("layerId" .=) <$> _lLayerId])
-
--- | The content ranges to identify the selected text.
---
--- /See:/ 'volumeannotationContentRanges' smart constructor.
-data VolumeannotationContentRanges = VolumeannotationContentRanges
-    { _vcrGbImageRange   :: !(Maybe BooksAnnotationsRange)
-    , _vcrContentVersion :: !(Maybe Text)
-    , _vcrGbTextRange    :: !(Maybe BooksAnnotationsRange)
-    , _vcrCfiRange       :: !(Maybe BooksAnnotationsRange)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VolumeannotationContentRanges' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vcrGbImageRange'
---
--- * 'vcrContentVersion'
---
--- * 'vcrGbTextRange'
---
--- * 'vcrCfiRange'
-volumeannotationContentRanges
-    :: VolumeannotationContentRanges
-volumeannotationContentRanges =
-    VolumeannotationContentRanges
-    { _vcrGbImageRange = Nothing
-    , _vcrContentVersion = Nothing
-    , _vcrGbTextRange = Nothing
-    , _vcrCfiRange = Nothing
-    }
-
--- | Range in GB image format for this annotation for version above.
-vcrGbImageRange :: Lens' VolumeannotationContentRanges (Maybe BooksAnnotationsRange)
-vcrGbImageRange
-  = lens _vcrGbImageRange
-      (\ s a -> s{_vcrGbImageRange = a})
-
--- | Content version applicable to ranges below.
-vcrContentVersion :: Lens' VolumeannotationContentRanges (Maybe Text)
-vcrContentVersion
-  = lens _vcrContentVersion
-      (\ s a -> s{_vcrContentVersion = a})
-
--- | Range in GB text format for this annotation for version above.
-vcrGbTextRange :: Lens' VolumeannotationContentRanges (Maybe BooksAnnotationsRange)
-vcrGbTextRange
-  = lens _vcrGbTextRange
-      (\ s a -> s{_vcrGbTextRange = a})
-
--- | Range in CFI format for this annotation for version above.
-vcrCfiRange :: Lens' VolumeannotationContentRanges (Maybe BooksAnnotationsRange)
-vcrCfiRange
-  = lens _vcrCfiRange (\ s a -> s{_vcrCfiRange = a})
-
-instance FromJSON VolumeannotationContentRanges where
-        parseJSON
-          = withObject "VolumeannotationContentRanges"
-              (\ o ->
-                 VolumeannotationContentRanges <$>
-                   (o .:? "gbImageRange") <*> (o .:? "contentVersion")
-                     <*> (o .:? "gbTextRange")
-                     <*> (o .:? "cfiRange"))
-
-instance ToJSON VolumeannotationContentRanges where
-        toJSON VolumeannotationContentRanges{..}
-          = object
-              (catMaybes
-                 [("gbImageRange" .=) <$> _vcrGbImageRange,
-                  ("contentVersion" .=) <$> _vcrContentVersion,
-                  ("gbTextRange" .=) <$> _vcrGbTextRange,
-                  ("cfiRange" .=) <$> _vcrCfiRange])
-
--- | Any information about a volume related to reading or obtaining that
--- volume text. This information can depend on country (books may be public
--- domain in one country but not in another, e.g.).
---
--- /See:/ 'volumeAccessInfo' smart constructor.
-data VolumeAccessInfo = VolumeAccessInfo
-    { _vaiWebReaderLink                    :: !(Maybe Text)
-    , _vaiCountry                          :: !(Maybe Text)
-    , _vaiDriveImportedContentLink         :: !(Maybe Text)
-    , _vaiExplicitOfflineLicenseManagement :: !(Maybe Bool)
-    , _vaiViewability                      :: !(Maybe Text)
-    , _vaiQuoteSharingAllowed              :: !(Maybe Bool)
-    , _vaiEpub                             :: !(Maybe VolumeAccessInfoEpub)
-    , _vaiPdf                              :: !(Maybe VolumeAccessInfoPdf)
-    , _vaiTextToSpeechPermission           :: !(Maybe Text)
-    , _vaiEmbeddable                       :: !(Maybe Bool)
-    , _vaiAccessViewStatus                 :: !(Maybe Text)
-    , _vaiDownloadAccess                   :: !(Maybe DownloadAccessRestriction)
-    , _vaiViewOrderURL                     :: !(Maybe Text)
-    , _vaiPublicDomain                     :: !(Maybe Bool)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VolumeAccessInfo' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vaiWebReaderLink'
---
--- * 'vaiCountry'
---
--- * 'vaiDriveImportedContentLink'
---
--- * 'vaiExplicitOfflineLicenseManagement'
---
--- * 'vaiViewability'
---
--- * 'vaiQuoteSharingAllowed'
---
--- * 'vaiEpub'
---
--- * 'vaiPdf'
---
--- * 'vaiTextToSpeechPermission'
---
--- * 'vaiEmbeddable'
---
--- * 'vaiAccessViewStatus'
---
--- * 'vaiDownloadAccess'
---
--- * 'vaiViewOrderURL'
---
--- * 'vaiPublicDomain'
-volumeAccessInfo
-    :: VolumeAccessInfo
-volumeAccessInfo =
-    VolumeAccessInfo
-    { _vaiWebReaderLink = Nothing
-    , _vaiCountry = Nothing
-    , _vaiDriveImportedContentLink = Nothing
-    , _vaiExplicitOfflineLicenseManagement = Nothing
-    , _vaiViewability = Nothing
-    , _vaiQuoteSharingAllowed = Nothing
-    , _vaiEpub = Nothing
-    , _vaiPdf = Nothing
-    , _vaiTextToSpeechPermission = Nothing
-    , _vaiEmbeddable = Nothing
-    , _vaiAccessViewStatus = Nothing
-    , _vaiDownloadAccess = Nothing
-    , _vaiViewOrderURL = Nothing
-    , _vaiPublicDomain = Nothing
-    }
-
--- | URL to read this volume on the Google Books site. Link will not allow
--- users to read non-viewable volumes.
-vaiWebReaderLink :: Lens' VolumeAccessInfo (Maybe Text)
-vaiWebReaderLink
-  = lens _vaiWebReaderLink
-      (\ s a -> s{_vaiWebReaderLink = a})
-
--- | The two-letter ISO_3166-1 country code for which this access information
--- is valid. (In LITE projection.)
-vaiCountry :: Lens' VolumeAccessInfo (Maybe Text)
-vaiCountry
-  = lens _vaiCountry (\ s a -> s{_vaiCountry = a})
-
--- | URL to the Google Drive viewer if this volume is uploaded by the user by
--- selecting the file from Google Drive.
-vaiDriveImportedContentLink :: Lens' VolumeAccessInfo (Maybe Text)
-vaiDriveImportedContentLink
-  = lens _vaiDriveImportedContentLink
-      (\ s a -> s{_vaiDriveImportedContentLink = a})
-
--- | Whether this volume requires that the client explicitly request offline
--- download license rather than have it done automatically when loading the
--- content, if the client supports it.
-vaiExplicitOfflineLicenseManagement :: Lens' VolumeAccessInfo (Maybe Bool)
-vaiExplicitOfflineLicenseManagement
-  = lens _vaiExplicitOfflineLicenseManagement
-      (\ s a ->
-         s{_vaiExplicitOfflineLicenseManagement = a})
-
--- | The read access of a volume. Possible values are PARTIAL, ALL_PAGES,
--- NO_PAGES or UNKNOWN. This value depends on the country listed above. A
--- value of PARTIAL means that the publisher has allowed some portion of
--- the volume to be viewed publicly, without purchase. This can apply to
--- eBooks as well as non-eBooks. Public domain books will always have a
--- value of ALL_PAGES.
-vaiViewability :: Lens' VolumeAccessInfo (Maybe Text)
-vaiViewability
-  = lens _vaiViewability
-      (\ s a -> s{_vaiViewability = a})
-
--- | Whether quote sharing is allowed for this volume.
-vaiQuoteSharingAllowed :: Lens' VolumeAccessInfo (Maybe Bool)
-vaiQuoteSharingAllowed
-  = lens _vaiQuoteSharingAllowed
-      (\ s a -> s{_vaiQuoteSharingAllowed = a})
-
--- | Information about epub content. (In LITE projection.)
-vaiEpub :: Lens' VolumeAccessInfo (Maybe VolumeAccessInfoEpub)
-vaiEpub = lens _vaiEpub (\ s a -> s{_vaiEpub = a})
-
--- | Information about pdf content. (In LITE projection.)
-vaiPdf :: Lens' VolumeAccessInfo (Maybe VolumeAccessInfoPdf)
-vaiPdf = lens _vaiPdf (\ s a -> s{_vaiPdf = a})
-
--- | Whether text-to-speech is permitted for this volume. Values can be
--- ALLOWED, ALLOWED_FOR_ACCESSIBILITY, or NOT_ALLOWED.
-vaiTextToSpeechPermission :: Lens' VolumeAccessInfo (Maybe Text)
-vaiTextToSpeechPermission
-  = lens _vaiTextToSpeechPermission
-      (\ s a -> s{_vaiTextToSpeechPermission = a})
-
--- | Whether this volume can be embedded in a viewport using the Embedded
--- Viewer API.
-vaiEmbeddable :: Lens' VolumeAccessInfo (Maybe Bool)
-vaiEmbeddable
-  = lens _vaiEmbeddable
-      (\ s a -> s{_vaiEmbeddable = a})
-
--- | Combines the access and viewability of this volume into a single status
--- field for this user. Values can be FULL_PURCHASED, FULL_PUBLIC_DOMAIN,
--- SAMPLE or NONE. (In LITE projection.)
-vaiAccessViewStatus :: Lens' VolumeAccessInfo (Maybe Text)
-vaiAccessViewStatus
-  = lens _vaiAccessViewStatus
-      (\ s a -> s{_vaiAccessViewStatus = a})
-
--- | Information about a volume\'s download license access restrictions.
-vaiDownloadAccess :: Lens' VolumeAccessInfo (Maybe DownloadAccessRestriction)
-vaiDownloadAccess
-  = lens _vaiDownloadAccess
-      (\ s a -> s{_vaiDownloadAccess = a})
-
--- | For ordered but not yet processed orders, we give a URL that can be used
--- to go to the appropriate Google Wallet page.
-vaiViewOrderURL :: Lens' VolumeAccessInfo (Maybe Text)
-vaiViewOrderURL
-  = lens _vaiViewOrderURL
-      (\ s a -> s{_vaiViewOrderURL = a})
-
--- | Whether or not this book is public domain in the country listed above.
-vaiPublicDomain :: Lens' VolumeAccessInfo (Maybe Bool)
-vaiPublicDomain
-  = lens _vaiPublicDomain
-      (\ s a -> s{_vaiPublicDomain = a})
-
-instance FromJSON VolumeAccessInfo where
-        parseJSON
-          = withObject "VolumeAccessInfo"
-              (\ o ->
-                 VolumeAccessInfo <$>
-                   (o .:? "webReaderLink") <*> (o .:? "country") <*>
-                     (o .:? "driveImportedContentLink")
-                     <*> (o .:? "explicitOfflineLicenseManagement")
-                     <*> (o .:? "viewability")
-                     <*> (o .:? "quoteSharingAllowed")
-                     <*> (o .:? "epub")
-                     <*> (o .:? "pdf")
-                     <*> (o .:? "textToSpeechPermission")
-                     <*> (o .:? "embeddable")
-                     <*> (o .:? "accessViewStatus")
-                     <*> (o .:? "downloadAccess")
-                     <*> (o .:? "viewOrderUrl")
-                     <*> (o .:? "publicDomain"))
-
-instance ToJSON VolumeAccessInfo where
-        toJSON VolumeAccessInfo{..}
-          = object
-              (catMaybes
-                 [("webReaderLink" .=) <$> _vaiWebReaderLink,
-                  ("country" .=) <$> _vaiCountry,
-                  ("driveImportedContentLink" .=) <$>
-                    _vaiDriveImportedContentLink,
-                  ("explicitOfflineLicenseManagement" .=) <$>
-                    _vaiExplicitOfflineLicenseManagement,
-                  ("viewability" .=) <$> _vaiViewability,
-                  ("quoteSharingAllowed" .=) <$>
-                    _vaiQuoteSharingAllowed,
-                  ("epub" .=) <$> _vaiEpub, ("pdf" .=) <$> _vaiPdf,
-                  ("textToSpeechPermission" .=) <$>
-                    _vaiTextToSpeechPermission,
-                  ("embeddable" .=) <$> _vaiEmbeddable,
-                  ("accessViewStatus" .=) <$> _vaiAccessViewStatus,
-                  ("downloadAccess" .=) <$> _vaiDownloadAccess,
-                  ("viewOrderUrl" .=) <$> _vaiViewOrderURL,
-                  ("publicDomain" .=) <$> _vaiPublicDomain])
-
--- | A list of image links for all the sizes that are available. (In LITE
--- projection.)
---
--- /See:/ 'volumeVolumeInfoImageLinks' smart constructor.
-data VolumeVolumeInfoImageLinks = VolumeVolumeInfoImageLinks
-    { _vviilThumbnail      :: !(Maybe Text)
-    , _vviilSmall          :: !(Maybe Text)
-    , _vviilExtraLarge     :: !(Maybe Text)
-    , _vviilLarge          :: !(Maybe Text)
-    , _vviilMedium         :: !(Maybe Text)
-    , _vviilSmallThumbnail :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VolumeVolumeInfoImageLinks' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vviilThumbnail'
---
--- * 'vviilSmall'
---
--- * 'vviilExtraLarge'
---
--- * 'vviilLarge'
---
--- * 'vviilMedium'
---
--- * 'vviilSmallThumbnail'
-volumeVolumeInfoImageLinks
-    :: VolumeVolumeInfoImageLinks
-volumeVolumeInfoImageLinks =
-    VolumeVolumeInfoImageLinks
-    { _vviilThumbnail = Nothing
-    , _vviilSmall = Nothing
-    , _vviilExtraLarge = Nothing
-    , _vviilLarge = Nothing
-    , _vviilMedium = Nothing
-    , _vviilSmallThumbnail = Nothing
-    }
-
--- | Image link for thumbnail size (width of ~128 pixels). (In LITE
--- projection)
-vviilThumbnail :: Lens' VolumeVolumeInfoImageLinks (Maybe Text)
-vviilThumbnail
-  = lens _vviilThumbnail
-      (\ s a -> s{_vviilThumbnail = a})
-
--- | Image link for small size (width of ~300 pixels). (In LITE projection)
-vviilSmall :: Lens' VolumeVolumeInfoImageLinks (Maybe Text)
-vviilSmall
-  = lens _vviilSmall (\ s a -> s{_vviilSmall = a})
-
--- | Image link for extra large size (width of ~1280 pixels). (In LITE
--- projection)
-vviilExtraLarge :: Lens' VolumeVolumeInfoImageLinks (Maybe Text)
-vviilExtraLarge
-  = lens _vviilExtraLarge
-      (\ s a -> s{_vviilExtraLarge = a})
-
--- | Image link for large size (width of ~800 pixels). (In LITE projection)
-vviilLarge :: Lens' VolumeVolumeInfoImageLinks (Maybe Text)
-vviilLarge
-  = lens _vviilLarge (\ s a -> s{_vviilLarge = a})
-
--- | Image link for medium size (width of ~575 pixels). (In LITE projection)
-vviilMedium :: Lens' VolumeVolumeInfoImageLinks (Maybe Text)
-vviilMedium
-  = lens _vviilMedium (\ s a -> s{_vviilMedium = a})
-
--- | Image link for small thumbnail size (width of ~80 pixels). (In LITE
--- projection)
-vviilSmallThumbnail :: Lens' VolumeVolumeInfoImageLinks (Maybe Text)
-vviilSmallThumbnail
-  = lens _vviilSmallThumbnail
-      (\ s a -> s{_vviilSmallThumbnail = a})
-
-instance FromJSON VolumeVolumeInfoImageLinks where
-        parseJSON
-          = withObject "VolumeVolumeInfoImageLinks"
-              (\ o ->
-                 VolumeVolumeInfoImageLinks <$>
-                   (o .:? "thumbnail") <*> (o .:? "small") <*>
-                     (o .:? "extraLarge")
-                     <*> (o .:? "large")
-                     <*> (o .:? "medium")
-                     <*> (o .:? "smallThumbnail"))
-
-instance ToJSON VolumeVolumeInfoImageLinks where
-        toJSON VolumeVolumeInfoImageLinks{..}
-          = object
-              (catMaybes
-                 [("thumbnail" .=) <$> _vviilThumbnail,
-                  ("small" .=) <$> _vviilSmall,
-                  ("extraLarge" .=) <$> _vviilExtraLarge,
-                  ("large" .=) <$> _vviilLarge,
-                  ("medium" .=) <$> _vviilMedium,
-                  ("smallThumbnail" .=) <$> _vviilSmallThumbnail])
-
---
--- /See:/ 'volumeUserInfoUserUploadedVolumeInfo' smart constructor.
-newtype VolumeUserInfoUserUploadedVolumeInfo = VolumeUserInfoUserUploadedVolumeInfo
-    { _vuiuuviProcessingState :: Maybe Text
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VolumeUserInfoUserUploadedVolumeInfo' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vuiuuviProcessingState'
-volumeUserInfoUserUploadedVolumeInfo
-    :: VolumeUserInfoUserUploadedVolumeInfo
-volumeUserInfoUserUploadedVolumeInfo =
-    VolumeUserInfoUserUploadedVolumeInfo
-    { _vuiuuviProcessingState = Nothing
-    }
-
-vuiuuviProcessingState :: Lens' VolumeUserInfoUserUploadedVolumeInfo (Maybe Text)
-vuiuuviProcessingState
-  = lens _vuiuuviProcessingState
-      (\ s a -> s{_vuiuuviProcessingState = a})
-
-instance FromJSON
-         VolumeUserInfoUserUploadedVolumeInfo where
-        parseJSON
-          = withObject "VolumeUserInfoUserUploadedVolumeInfo"
-              (\ o ->
-                 VolumeUserInfoUserUploadedVolumeInfo <$>
-                   (o .:? "processingState"))
-
-instance ToJSON VolumeUserInfoUserUploadedVolumeInfo
-         where
-        toJSON VolumeUserInfoUserUploadedVolumeInfo{..}
-          = object
-              (catMaybes
-                 [("processingState" .=) <$> _vuiuuviProcessingState])
-
--- | Copy\/Paste accounting information.
---
--- /See:/ 'volumeUserInfoCopy' smart constructor.
-data VolumeUserInfoCopy = VolumeUserInfoCopy
-    { _vuicLimitType               :: !(Maybe Text)
-    , _vuicAllowedCharacterCount   :: !(Maybe (Textual Int32))
-    , _vuicUpdated                 :: !(Maybe DateTime')
-    , _vuicRemainingCharacterCount :: !(Maybe (Textual Int32))
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VolumeUserInfoCopy' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vuicLimitType'
---
--- * 'vuicAllowedCharacterCount'
---
--- * 'vuicUpdated'
---
--- * 'vuicRemainingCharacterCount'
-volumeUserInfoCopy
-    :: VolumeUserInfoCopy
-volumeUserInfoCopy =
-    VolumeUserInfoCopy
-    { _vuicLimitType = Nothing
-    , _vuicAllowedCharacterCount = Nothing
-    , _vuicUpdated = Nothing
-    , _vuicRemainingCharacterCount = Nothing
-    }
-
-vuicLimitType :: Lens' VolumeUserInfoCopy (Maybe Text)
-vuicLimitType
-  = lens _vuicLimitType
-      (\ s a -> s{_vuicLimitType = a})
-
-vuicAllowedCharacterCount :: Lens' VolumeUserInfoCopy (Maybe Int32)
-vuicAllowedCharacterCount
-  = lens _vuicAllowedCharacterCount
-      (\ s a -> s{_vuicAllowedCharacterCount = a})
-      . mapping _Coerce
-
-vuicUpdated :: Lens' VolumeUserInfoCopy (Maybe UTCTime)
-vuicUpdated
-  = lens _vuicUpdated (\ s a -> s{_vuicUpdated = a}) .
-      mapping _DateTime
-
-vuicRemainingCharacterCount :: Lens' VolumeUserInfoCopy (Maybe Int32)
-vuicRemainingCharacterCount
-  = lens _vuicRemainingCharacterCount
-      (\ s a -> s{_vuicRemainingCharacterCount = a})
-      . mapping _Coerce
-
-instance FromJSON VolumeUserInfoCopy where
-        parseJSON
-          = withObject "VolumeUserInfoCopy"
-              (\ o ->
-                 VolumeUserInfoCopy <$>
-                   (o .:? "limitType") <*>
-                     (o .:? "allowedCharacterCount")
-                     <*> (o .:? "updated")
-                     <*> (o .:? "remainingCharacterCount"))
-
-instance ToJSON VolumeUserInfoCopy where
-        toJSON VolumeUserInfoCopy{..}
-          = object
-              (catMaybes
-                 [("limitType" .=) <$> _vuicLimitType,
-                  ("allowedCharacterCount" .=) <$>
-                    _vuicAllowedCharacterCount,
-                  ("updated" .=) <$> _vuicUpdated,
-                  ("remainingCharacterCount" .=) <$>
-                    _vuicRemainingCharacterCount])
-
---
--- /See:/ 'booksVolumesRecommendedRateResponse' smart constructor.
-newtype BooksVolumesRecommendedRateResponse = BooksVolumesRecommendedRateResponse
-    { _bvrrrConsistencyToken :: Maybe Text
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'BooksVolumesRecommendedRateResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'bvrrrConsistencyToken'
-booksVolumesRecommendedRateResponse
-    :: BooksVolumesRecommendedRateResponse
-booksVolumesRecommendedRateResponse =
-    BooksVolumesRecommendedRateResponse
-    { _bvrrrConsistencyToken = Nothing
-    }
-
-bvrrrConsistencyToken :: Lens' BooksVolumesRecommendedRateResponse (Maybe Text)
-bvrrrConsistencyToken
-  = lens _bvrrrConsistencyToken
-      (\ s a -> s{_bvrrrConsistencyToken = a})
-
-instance FromJSON BooksVolumesRecommendedRateResponse
-         where
-        parseJSON
-          = withObject "BooksVolumesRecommendedRateResponse"
-              (\ o ->
-                 BooksVolumesRecommendedRateResponse <$>
-                   (o .:? "consistency_token"))
-
-instance ToJSON BooksVolumesRecommendedRateResponse
-         where
-        toJSON BooksVolumesRecommendedRateResponse{..}
-          = object
-              (catMaybes
-                 [("consistency_token" .=) <$>
-                    _bvrrrConsistencyToken])
-
---
--- /See:/ 'bookshelf' smart constructor.
-data Bookshelf = Bookshelf
-    { _bAccess             :: !(Maybe Text)
-    , _bVolumesLastUpdated :: !(Maybe DateTime')
-    , _bKind               :: !Text
-    , _bCreated            :: !(Maybe DateTime')
-    , _bVolumeCount        :: !(Maybe (Textual Int32))
-    , _bSelfLink           :: !(Maybe Text)
-    , _bId                 :: !(Maybe (Textual Int32))
-    , _bUpdated            :: !(Maybe DateTime')
-    , _bTitle              :: !(Maybe Text)
-    , _bDescription        :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Bookshelf' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'bAccess'
---
--- * 'bVolumesLastUpdated'
---
--- * 'bKind'
---
--- * 'bCreated'
---
--- * 'bVolumeCount'
---
--- * 'bSelfLink'
---
--- * 'bId'
---
--- * 'bUpdated'
---
--- * 'bTitle'
---
--- * 'bDescription'
-bookshelf
-    :: Bookshelf
-bookshelf =
-    Bookshelf
-    { _bAccess = Nothing
-    , _bVolumesLastUpdated = Nothing
-    , _bKind = "books#bookshelf"
-    , _bCreated = Nothing
-    , _bVolumeCount = Nothing
-    , _bSelfLink = Nothing
-    , _bId = Nothing
-    , _bUpdated = Nothing
-    , _bTitle = Nothing
-    , _bDescription = Nothing
-    }
-
--- | Whether this bookshelf is PUBLIC or PRIVATE.
-bAccess :: Lens' Bookshelf (Maybe Text)
-bAccess = lens _bAccess (\ s a -> s{_bAccess = a})
-
--- | Last time a volume was added or removed from this bookshelf (formatted
--- UTC timestamp with millisecond resolution).
-bVolumesLastUpdated :: Lens' Bookshelf (Maybe UTCTime)
-bVolumesLastUpdated
-  = lens _bVolumesLastUpdated
-      (\ s a -> s{_bVolumesLastUpdated = a})
-      . mapping _DateTime
-
--- | Resource type for bookshelf metadata.
-bKind :: Lens' Bookshelf Text
-bKind = lens _bKind (\ s a -> s{_bKind = a})
-
--- | Created time for this bookshelf (formatted UTC timestamp with
--- millisecond resolution).
-bCreated :: Lens' Bookshelf (Maybe UTCTime)
-bCreated
-  = lens _bCreated (\ s a -> s{_bCreated = a}) .
-      mapping _DateTime
-
--- | Number of volumes in this bookshelf.
-bVolumeCount :: Lens' Bookshelf (Maybe Int32)
-bVolumeCount
-  = lens _bVolumeCount (\ s a -> s{_bVolumeCount = a})
-      . mapping _Coerce
-
--- | URL to this resource.
-bSelfLink :: Lens' Bookshelf (Maybe Text)
-bSelfLink
-  = lens _bSelfLink (\ s a -> s{_bSelfLink = a})
-
--- | Id of this bookshelf, only unique by user.
-bId :: Lens' Bookshelf (Maybe Int32)
-bId
-  = lens _bId (\ s a -> s{_bId = a}) . mapping _Coerce
-
--- | Last modified time of this bookshelf (formatted UTC timestamp with
--- millisecond resolution).
-bUpdated :: Lens' Bookshelf (Maybe UTCTime)
-bUpdated
-  = lens _bUpdated (\ s a -> s{_bUpdated = a}) .
-      mapping _DateTime
-
--- | Title of this bookshelf.
-bTitle :: Lens' Bookshelf (Maybe Text)
-bTitle = lens _bTitle (\ s a -> s{_bTitle = a})
-
--- | Description of this bookshelf.
-bDescription :: Lens' Bookshelf (Maybe Text)
-bDescription
-  = lens _bDescription (\ s a -> s{_bDescription = a})
-
-instance FromJSON Bookshelf where
-        parseJSON
-          = withObject "Bookshelf"
-              (\ o ->
-                 Bookshelf <$>
-                   (o .:? "access") <*> (o .:? "volumesLastUpdated") <*>
-                     (o .:? "kind" .!= "books#bookshelf")
-                     <*> (o .:? "created")
-                     <*> (o .:? "volumeCount")
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "id")
-                     <*> (o .:? "updated")
-                     <*> (o .:? "title")
-                     <*> (o .:? "description"))
-
-instance ToJSON Bookshelf where
-        toJSON Bookshelf{..}
-          = object
-              (catMaybes
-                 [("access" .=) <$> _bAccess,
-                  ("volumesLastUpdated" .=) <$> _bVolumesLastUpdated,
-                  Just ("kind" .= _bKind),
-                  ("created" .=) <$> _bCreated,
-                  ("volumeCount" .=) <$> _bVolumeCount,
-                  ("selfLink" .=) <$> _bSelfLink, ("id" .=) <$> _bId,
-                  ("updated" .=) <$> _bUpdated,
-                  ("title" .=) <$> _bTitle,
-                  ("description" .=) <$> _bDescription])
-
---
--- /See:/ 'notification' smart constructor.
-data Notification = Notification
-    { _nKind    :: !Text
-    , _nBody    :: !(Maybe Text)
-    , _nLinkURL :: !(Maybe Text)
-    , _nIconURL :: !(Maybe Text)
-    , _nTitle   :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Notification' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'nKind'
---
--- * 'nBody'
---
--- * 'nLinkURL'
---
--- * 'nIconURL'
---
--- * 'nTitle'
-notification
-    :: Notification
-notification =
-    Notification
-    { _nKind = "books#notification"
-    , _nBody = Nothing
-    , _nLinkURL = Nothing
-    , _nIconURL = Nothing
-    , _nTitle = Nothing
-    }
-
--- | Resource type.
-nKind :: Lens' Notification Text
-nKind = lens _nKind (\ s a -> s{_nKind = a})
-
-nBody :: Lens' Notification (Maybe Text)
-nBody = lens _nBody (\ s a -> s{_nBody = a})
-
-nLinkURL :: Lens' Notification (Maybe Text)
-nLinkURL = lens _nLinkURL (\ s a -> s{_nLinkURL = a})
-
-nIconURL :: Lens' Notification (Maybe Text)
-nIconURL = lens _nIconURL (\ s a -> s{_nIconURL = a})
-
-nTitle :: Lens' Notification (Maybe Text)
-nTitle = lens _nTitle (\ s a -> s{_nTitle = a})
-
-instance FromJSON Notification where
-        parseJSON
-          = withObject "Notification"
-              (\ o ->
-                 Notification <$>
-                   (o .:? "kind" .!= "books#notification") <*>
-                     (o .:? "body")
-                     <*> (o .:? "linkUrl")
-                     <*> (o .:? "iconUrl")
-                     <*> (o .:? "title"))
-
-instance ToJSON Notification where
-        toJSON Notification{..}
-          = object
-              (catMaybes
-                 [Just ("kind" .= _nKind), ("body" .=) <$> _nBody,
-                  ("linkUrl" .=) <$> _nLinkURL,
-                  ("iconUrl" .=) <$> _nIconURL,
-                  ("title" .=) <$> _nTitle])
-
---
--- /See:/ 'annotationsSummaryLayersItem' smart constructor.
-data AnnotationsSummaryLayersItem = AnnotationsSummaryLayersItem
-    { _asliLimitType               :: !(Maybe Text)
-    , _asliAllowedCharacterCount   :: !(Maybe (Textual Int32))
-    , _asliUpdated                 :: !(Maybe DateTime')
-    , _asliLayerId                 :: !(Maybe Text)
-    , _asliRemainingCharacterCount :: !(Maybe (Textual Int32))
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AnnotationsSummaryLayersItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'asliLimitType'
---
--- * 'asliAllowedCharacterCount'
---
--- * 'asliUpdated'
---
--- * 'asliLayerId'
---
--- * 'asliRemainingCharacterCount'
-annotationsSummaryLayersItem
-    :: AnnotationsSummaryLayersItem
-annotationsSummaryLayersItem =
-    AnnotationsSummaryLayersItem
-    { _asliLimitType = Nothing
-    , _asliAllowedCharacterCount = Nothing
-    , _asliUpdated = Nothing
-    , _asliLayerId = Nothing
-    , _asliRemainingCharacterCount = Nothing
-    }
-
-asliLimitType :: Lens' AnnotationsSummaryLayersItem (Maybe Text)
-asliLimitType
-  = lens _asliLimitType
-      (\ s a -> s{_asliLimitType = a})
-
-asliAllowedCharacterCount :: Lens' AnnotationsSummaryLayersItem (Maybe Int32)
-asliAllowedCharacterCount
-  = lens _asliAllowedCharacterCount
-      (\ s a -> s{_asliAllowedCharacterCount = a})
-      . mapping _Coerce
-
-asliUpdated :: Lens' AnnotationsSummaryLayersItem (Maybe UTCTime)
-asliUpdated
-  = lens _asliUpdated (\ s a -> s{_asliUpdated = a}) .
-      mapping _DateTime
-
-asliLayerId :: Lens' AnnotationsSummaryLayersItem (Maybe Text)
-asliLayerId
-  = lens _asliLayerId (\ s a -> s{_asliLayerId = a})
-
-asliRemainingCharacterCount :: Lens' AnnotationsSummaryLayersItem (Maybe Int32)
-asliRemainingCharacterCount
-  = lens _asliRemainingCharacterCount
-      (\ s a -> s{_asliRemainingCharacterCount = a})
-      . mapping _Coerce
-
-instance FromJSON AnnotationsSummaryLayersItem where
-        parseJSON
-          = withObject "AnnotationsSummaryLayersItem"
-              (\ o ->
-                 AnnotationsSummaryLayersItem <$>
-                   (o .:? "limitType") <*>
-                     (o .:? "allowedCharacterCount")
-                     <*> (o .:? "updated")
-                     <*> (o .:? "layerId")
-                     <*> (o .:? "remainingCharacterCount"))
-
-instance ToJSON AnnotationsSummaryLayersItem where
-        toJSON AnnotationsSummaryLayersItem{..}
-          = object
-              (catMaybes
-                 [("limitType" .=) <$> _asliLimitType,
-                  ("allowedCharacterCount" .=) <$>
-                    _asliAllowedCharacterCount,
-                  ("updated" .=) <$> _asliUpdated,
-                  ("layerId" .=) <$> _asliLayerId,
-                  ("remainingCharacterCount" .=) <$>
-                    _asliRemainingCharacterCount])
-
--- | The rental duration (for rental offers only).
---
--- /See:/ 'volumeSaleInfoOffersItemRentalDuration' smart constructor.
-data VolumeSaleInfoOffersItemRentalDuration = VolumeSaleInfoOffersItemRentalDuration
-    { _vsioirdCount :: !(Maybe (Textual Double))
-    , _vsioirdUnit  :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VolumeSaleInfoOffersItemRentalDuration' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vsioirdCount'
---
--- * 'vsioirdUnit'
-volumeSaleInfoOffersItemRentalDuration
-    :: VolumeSaleInfoOffersItemRentalDuration
-volumeSaleInfoOffersItemRentalDuration =
-    VolumeSaleInfoOffersItemRentalDuration
-    { _vsioirdCount = Nothing
-    , _vsioirdUnit = Nothing
-    }
-
-vsioirdCount :: Lens' VolumeSaleInfoOffersItemRentalDuration (Maybe Double)
-vsioirdCount
-  = lens _vsioirdCount (\ s a -> s{_vsioirdCount = a})
-      . mapping _Coerce
-
-vsioirdUnit :: Lens' VolumeSaleInfoOffersItemRentalDuration (Maybe Text)
-vsioirdUnit
-  = lens _vsioirdUnit (\ s a -> s{_vsioirdUnit = a})
-
-instance FromJSON
-         VolumeSaleInfoOffersItemRentalDuration where
-        parseJSON
-          = withObject "VolumeSaleInfoOffersItemRentalDuration"
-              (\ o ->
-                 VolumeSaleInfoOffersItemRentalDuration <$>
-                   (o .:? "count") <*> (o .:? "unit"))
-
-instance ToJSON
-         VolumeSaleInfoOffersItemRentalDuration where
-        toJSON VolumeSaleInfoOffersItemRentalDuration{..}
-          = object
-              (catMaybes
-                 [("count" .=) <$> _vsioirdCount,
-                  ("unit" .=) <$> _vsioirdUnit])
-
---
--- /See:/ 'dictlayerDataDictWordsItemExamplesItem' smart constructor.
-data DictlayerDataDictWordsItemExamplesItem = DictlayerDataDictWordsItemExamplesItem
-    { _dddwieiText   :: !(Maybe Text)
-    , _dddwieiSource :: !(Maybe DictlayerDataDictWordsItemExamplesItemSource)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DictlayerDataDictWordsItemExamplesItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dddwieiText'
---
--- * 'dddwieiSource'
-dictlayerDataDictWordsItemExamplesItem
-    :: DictlayerDataDictWordsItemExamplesItem
-dictlayerDataDictWordsItemExamplesItem =
-    DictlayerDataDictWordsItemExamplesItem
-    { _dddwieiText = Nothing
-    , _dddwieiSource = Nothing
-    }
-
-dddwieiText :: Lens' DictlayerDataDictWordsItemExamplesItem (Maybe Text)
-dddwieiText
-  = lens _dddwieiText (\ s a -> s{_dddwieiText = a})
-
-dddwieiSource :: Lens' DictlayerDataDictWordsItemExamplesItem (Maybe DictlayerDataDictWordsItemExamplesItemSource)
-dddwieiSource
-  = lens _dddwieiSource
-      (\ s a -> s{_dddwieiSource = a})
-
-instance FromJSON
-         DictlayerDataDictWordsItemExamplesItem where
-        parseJSON
-          = withObject "DictlayerDataDictWordsItemExamplesItem"
-              (\ o ->
-                 DictlayerDataDictWordsItemExamplesItem <$>
-                   (o .:? "text") <*> (o .:? "source"))
-
-instance ToJSON
-         DictlayerDataDictWordsItemExamplesItem where
-        toJSON DictlayerDataDictWordsItemExamplesItem{..}
-          = object
-              (catMaybes
-                 [("text" .=) <$> _dddwieiText,
-                  ("source" .=) <$> _dddwieiSource])
-
---
--- /See:/ 'offersItemsItem' smart constructor.
-data OffersItemsItem = OffersItemsItem
-    { _oiiItems        :: !(Maybe [OffersItemsItemItemsItem])
-    , _oiiArtURL       :: !(Maybe Text)
-    , _oiiId           :: !(Maybe Text)
-    , _oiiGServicesKey :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'OffersItemsItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'oiiItems'
---
--- * 'oiiArtURL'
---
--- * 'oiiId'
---
--- * 'oiiGServicesKey'
-offersItemsItem
-    :: OffersItemsItem
-offersItemsItem =
-    OffersItemsItem
-    { _oiiItems = Nothing
-    , _oiiArtURL = Nothing
-    , _oiiId = Nothing
-    , _oiiGServicesKey = Nothing
-    }
-
-oiiItems :: Lens' OffersItemsItem [OffersItemsItemItemsItem]
-oiiItems
-  = lens _oiiItems (\ s a -> s{_oiiItems = a}) .
-      _Default
-      . _Coerce
-
-oiiArtURL :: Lens' OffersItemsItem (Maybe Text)
-oiiArtURL
-  = lens _oiiArtURL (\ s a -> s{_oiiArtURL = a})
-
-oiiId :: Lens' OffersItemsItem (Maybe Text)
-oiiId = lens _oiiId (\ s a -> s{_oiiId = a})
-
-oiiGServicesKey :: Lens' OffersItemsItem (Maybe Text)
-oiiGServicesKey
-  = lens _oiiGServicesKey
-      (\ s a -> s{_oiiGServicesKey = a})
-
-instance FromJSON OffersItemsItem where
-        parseJSON
-          = withObject "OffersItemsItem"
-              (\ o ->
-                 OffersItemsItem <$>
-                   (o .:? "items" .!= mempty) <*> (o .:? "artUrl") <*>
-                     (o .:? "id")
-                     <*> (o .:? "gservicesKey"))
-
-instance ToJSON OffersItemsItem where
-        toJSON OffersItemsItem{..}
-          = object
-              (catMaybes
-                 [("items" .=) <$> _oiiItems,
-                  ("artUrl" .=) <$> _oiiArtURL, ("id" .=) <$> _oiiId,
-                  ("gservicesKey" .=) <$> _oiiGServicesKey])
-
---
--- /See:/ 'annotationLayerSummary' smart constructor.
-data AnnotationLayerSummary = AnnotationLayerSummary
-    { _alsLimitType               :: !(Maybe Text)
-    , _alsAllowedCharacterCount   :: !(Maybe (Textual Int32))
-    , _alsRemainingCharacterCount :: !(Maybe (Textual Int32))
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AnnotationLayerSummary' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'alsLimitType'
---
--- * 'alsAllowedCharacterCount'
---
--- * 'alsRemainingCharacterCount'
-annotationLayerSummary
-    :: AnnotationLayerSummary
-annotationLayerSummary =
-    AnnotationLayerSummary
-    { _alsLimitType = Nothing
-    , _alsAllowedCharacterCount = Nothing
-    , _alsRemainingCharacterCount = Nothing
-    }
-
--- | Type of limitation on this layer. \"limited\" or \"unlimited\" for the
--- \"copy\" layer.
-alsLimitType :: Lens' AnnotationLayerSummary (Maybe Text)
-alsLimitType
-  = lens _alsLimitType (\ s a -> s{_alsLimitType = a})
-
--- | Maximum allowed characters on this layer, especially for the \"copy\"
--- layer.
-alsAllowedCharacterCount :: Lens' AnnotationLayerSummary (Maybe Int32)
-alsAllowedCharacterCount
-  = lens _alsAllowedCharacterCount
-      (\ s a -> s{_alsAllowedCharacterCount = a})
-      . mapping _Coerce
-
--- | Remaining allowed characters on this layer, especially for the \"copy\"
--- layer.
-alsRemainingCharacterCount :: Lens' AnnotationLayerSummary (Maybe Int32)
-alsRemainingCharacterCount
-  = lens _alsRemainingCharacterCount
-      (\ s a -> s{_alsRemainingCharacterCount = a})
-      . mapping _Coerce
-
-instance FromJSON AnnotationLayerSummary where
-        parseJSON
-          = withObject "AnnotationLayerSummary"
-              (\ o ->
-                 AnnotationLayerSummary <$>
-                   (o .:? "limitType") <*>
-                     (o .:? "allowedCharacterCount")
-                     <*> (o .:? "remainingCharacterCount"))
-
-instance ToJSON AnnotationLayerSummary where
-        toJSON AnnotationLayerSummary{..}
-          = object
-              (catMaybes
-                 [("limitType" .=) <$> _alsLimitType,
-                  ("allowedCharacterCount" .=) <$>
-                    _alsAllowedCharacterCount,
-                  ("remainingCharacterCount" .=) <$>
-                    _alsRemainingCharacterCount])
-
--- | Search result information related to this volume.
---
--- /See:/ 'volumeSearchInfo' smart constructor.
-newtype VolumeSearchInfo = VolumeSearchInfo
-    { _vsiTextSnippet :: Maybe Text
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VolumeSearchInfo' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vsiTextSnippet'
-volumeSearchInfo
-    :: VolumeSearchInfo
-volumeSearchInfo =
-    VolumeSearchInfo
-    { _vsiTextSnippet = Nothing
-    }
-
--- | A text snippet containing the search query.
-vsiTextSnippet :: Lens' VolumeSearchInfo (Maybe Text)
-vsiTextSnippet
-  = lens _vsiTextSnippet
-      (\ s a -> s{_vsiTextSnippet = a})
-
-instance FromJSON VolumeSearchInfo where
-        parseJSON
-          = withObject "VolumeSearchInfo"
-              (\ o -> VolumeSearchInfo <$> (o .:? "textSnippet"))
-
-instance ToJSON VolumeSearchInfo where
-        toJSON VolumeSearchInfo{..}
-          = object
-              (catMaybes [("textSnippet" .=) <$> _vsiTextSnippet])
-
---
--- /See:/ 'annotationsSummary' smart constructor.
-data AnnotationsSummary = AnnotationsSummary
-    { _asKind   :: !Text
-    , _asLayers :: !(Maybe [AnnotationsSummaryLayersItem])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AnnotationsSummary' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'asKind'
---
--- * 'asLayers'
-annotationsSummary
-    :: AnnotationsSummary
-annotationsSummary =
-    AnnotationsSummary
-    { _asKind = "books#annotationsSummary"
-    , _asLayers = Nothing
-    }
-
-asKind :: Lens' AnnotationsSummary Text
-asKind = lens _asKind (\ s a -> s{_asKind = a})
-
-asLayers :: Lens' AnnotationsSummary [AnnotationsSummaryLayersItem]
-asLayers
-  = lens _asLayers (\ s a -> s{_asLayers = a}) .
-      _Default
-      . _Coerce
-
-instance FromJSON AnnotationsSummary where
-        parseJSON
-          = withObject "AnnotationsSummary"
-              (\ o ->
-                 AnnotationsSummary <$>
-                   (o .:? "kind" .!= "books#annotationsSummary") <*>
-                     (o .:? "layers" .!= mempty))
-
-instance ToJSON AnnotationsSummary where
-        toJSON AnnotationsSummary{..}
-          = object
-              (catMaybes
-                 [Just ("kind" .= _asKind),
-                  ("layers" .=) <$> _asLayers])
-
---
--- /See:/ 'category' smart constructor.
-data Category = Category
-    { _cKind  :: !Text
-    , _cItems :: !(Maybe [CategoryItemsItem])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Category' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cKind'
---
--- * 'cItems'
-category
-    :: Category
-category =
-    Category
-    { _cKind = "onboarding#category"
-    , _cItems = Nothing
-    }
-
--- | Resource type.
-cKind :: Lens' Category Text
-cKind = lens _cKind (\ s a -> s{_cKind = a})
-
--- | A list of onboarding categories.
-cItems :: Lens' Category [CategoryItemsItem]
-cItems
-  = lens _cItems (\ s a -> s{_cItems = a}) . _Default .
-      _Coerce
-
-instance FromJSON Category where
-        parseJSON
-          = withObject "Category"
-              (\ o ->
-                 Category <$>
-                   (o .:? "kind" .!= "onboarding#category") <*>
-                     (o .:? "items" .!= mempty))
-
-instance ToJSON Category where
-        toJSON Category{..}
-          = object
-              (catMaybes
-                 [Just ("kind" .= _cKind), ("items" .=) <$> _cItems])
-
---
--- /See:/ 'discoveryclustersClustersItemBanner_with_content_container' smart constructor.
-data DiscoveryclustersClustersItemBanner_with_content_container = DiscoveryclustersClustersItemBanner_with_content_container
-    { _dcibFillColorArgb  :: !(Maybe Text)
-    , _dcibMoreButtonURL  :: !(Maybe Text)
-    , _dcibTextColorArgb  :: !(Maybe Text)
-    , _dcibMoreButtonText :: !(Maybe Text)
-    , _dcibImageURL       :: !(Maybe Text)
-    , _dcibMaskColorArgb  :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DiscoveryclustersClustersItemBanner_with_content_container' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dcibFillColorArgb'
---
--- * 'dcibMoreButtonURL'
---
--- * 'dcibTextColorArgb'
---
--- * 'dcibMoreButtonText'
---
--- * 'dcibImageURL'
---
--- * 'dcibMaskColorArgb'
-discoveryclustersClustersItemBanner_with_content_container
-    :: DiscoveryclustersClustersItemBanner_with_content_container
-discoveryclustersClustersItemBanner_with_content_container =
-    DiscoveryclustersClustersItemBanner_with_content_container
-    { _dcibFillColorArgb = Nothing
-    , _dcibMoreButtonURL = Nothing
-    , _dcibTextColorArgb = Nothing
-    , _dcibMoreButtonText = Nothing
-    , _dcibImageURL = Nothing
-    , _dcibMaskColorArgb = Nothing
-    }
-
-dcibFillColorArgb :: Lens' DiscoveryclustersClustersItemBanner_with_content_container (Maybe Text)
-dcibFillColorArgb
-  = lens _dcibFillColorArgb
-      (\ s a -> s{_dcibFillColorArgb = a})
-
-dcibMoreButtonURL :: Lens' DiscoveryclustersClustersItemBanner_with_content_container (Maybe Text)
-dcibMoreButtonURL
-  = lens _dcibMoreButtonURL
-      (\ s a -> s{_dcibMoreButtonURL = a})
-
-dcibTextColorArgb :: Lens' DiscoveryclustersClustersItemBanner_with_content_container (Maybe Text)
-dcibTextColorArgb
-  = lens _dcibTextColorArgb
-      (\ s a -> s{_dcibTextColorArgb = a})
-
-dcibMoreButtonText :: Lens' DiscoveryclustersClustersItemBanner_with_content_container (Maybe Text)
-dcibMoreButtonText
-  = lens _dcibMoreButtonText
-      (\ s a -> s{_dcibMoreButtonText = a})
-
-dcibImageURL :: Lens' DiscoveryclustersClustersItemBanner_with_content_container (Maybe Text)
-dcibImageURL
-  = lens _dcibImageURL (\ s a -> s{_dcibImageURL = a})
-
-dcibMaskColorArgb :: Lens' DiscoveryclustersClustersItemBanner_with_content_container (Maybe Text)
-dcibMaskColorArgb
-  = lens _dcibMaskColorArgb
-      (\ s a -> s{_dcibMaskColorArgb = a})
-
-instance FromJSON
-         DiscoveryclustersClustersItemBanner_with_content_container
-         where
-        parseJSON
-          = withObject
-              "DiscoveryclustersClustersItemBannerWithContentContainer"
-              (\ o ->
-                 DiscoveryclustersClustersItemBanner_with_content_container
-                   <$>
-                   (o .:? "fillColorArgb") <*> (o .:? "moreButtonUrl")
-                     <*> (o .:? "textColorArgb")
-                     <*> (o .:? "moreButtonText")
-                     <*> (o .:? "imageUrl")
-                     <*> (o .:? "maskColorArgb"))
-
-instance ToJSON
-         DiscoveryclustersClustersItemBanner_with_content_container
-         where
-        toJSON
-          DiscoveryclustersClustersItemBanner_with_content_container{..}
-          = object
-              (catMaybes
-                 [("fillColorArgb" .=) <$> _dcibFillColorArgb,
-                  ("moreButtonUrl" .=) <$> _dcibMoreButtonURL,
-                  ("textColorArgb" .=) <$> _dcibTextColorArgb,
-                  ("moreButtonText" .=) <$> _dcibMoreButtonText,
-                  ("imageUrl" .=) <$> _dcibImageURL,
-                  ("maskColorArgb" .=) <$> _dcibMaskColorArgb])
-
---
--- /See:/ 'volume' smart constructor.
-data Volume = Volume
-    { _vvUserInfo        :: !(Maybe VolumeUserInfo)
-    , _vvEtag            :: !(Maybe Text)
-    , _vvAccessInfo      :: !(Maybe VolumeAccessInfo)
-    , _vvKind            :: !Text
-    , _vvSearchInfo      :: !(Maybe VolumeSearchInfo)
-    , _vvSelfLink        :: !(Maybe Text)
-    , _vvLayerInfo       :: !(Maybe VolumeLayerInfo)
-    , _vvSaleInfo        :: !(Maybe VolumeSaleInfo)
-    , _vvId              :: !(Maybe Text)
-    , _vvRecommendedInfo :: !(Maybe VolumeRecommendedInfo)
-    , _vvVolumeInfo      :: !(Maybe VolumeVolumeInfo)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Volume' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vvUserInfo'
---
--- * 'vvEtag'
---
--- * 'vvAccessInfo'
---
--- * 'vvKind'
---
--- * 'vvSearchInfo'
---
--- * 'vvSelfLink'
---
--- * 'vvLayerInfo'
---
--- * 'vvSaleInfo'
---
--- * 'vvId'
---
--- * 'vvRecommendedInfo'
---
--- * 'vvVolumeInfo'
-volume
-    :: Volume
-volume =
-    Volume
-    { _vvUserInfo = Nothing
-    , _vvEtag = Nothing
-    , _vvAccessInfo = Nothing
-    , _vvKind = "books#volume"
-    , _vvSearchInfo = Nothing
-    , _vvSelfLink = Nothing
-    , _vvLayerInfo = Nothing
-    , _vvSaleInfo = Nothing
-    , _vvId = Nothing
-    , _vvRecommendedInfo = Nothing
-    , _vvVolumeInfo = Nothing
-    }
-
--- | User specific information related to this volume. (e.g. page this user
--- last read or whether they purchased this book)
-vvUserInfo :: Lens' Volume (Maybe VolumeUserInfo)
-vvUserInfo
-  = lens _vvUserInfo (\ s a -> s{_vvUserInfo = a})
-
--- | Opaque identifier for a specific version of a volume resource. (In LITE
--- projection)
-vvEtag :: Lens' Volume (Maybe Text)
-vvEtag = lens _vvEtag (\ s a -> s{_vvEtag = a})
-
--- | Any information about a volume related to reading or obtaining that
--- volume text. This information can depend on country (books may be public
--- domain in one country but not in another, e.g.).
-vvAccessInfo :: Lens' Volume (Maybe VolumeAccessInfo)
-vvAccessInfo
-  = lens _vvAccessInfo (\ s a -> s{_vvAccessInfo = a})
-
--- | Resource type for a volume. (In LITE projection.)
-vvKind :: Lens' Volume Text
-vvKind = lens _vvKind (\ s a -> s{_vvKind = a})
-
--- | Search result information related to this volume.
-vvSearchInfo :: Lens' Volume (Maybe VolumeSearchInfo)
-vvSearchInfo
-  = lens _vvSearchInfo (\ s a -> s{_vvSearchInfo = a})
-
--- | URL to this resource. (In LITE projection.)
-vvSelfLink :: Lens' Volume (Maybe Text)
-vvSelfLink
-  = lens _vvSelfLink (\ s a -> s{_vvSelfLink = a})
-
--- | What layers exist in this volume and high level information about them.
-vvLayerInfo :: Lens' Volume (Maybe VolumeLayerInfo)
-vvLayerInfo
-  = lens _vvLayerInfo (\ s a -> s{_vvLayerInfo = a})
-
--- | Any information about a volume related to the eBookstore and\/or
--- purchaseability. This information can depend on the country where the
--- request originates from (i.e. books may not be for sale in certain
--- countries).
-vvSaleInfo :: Lens' Volume (Maybe VolumeSaleInfo)
-vvSaleInfo
-  = lens _vvSaleInfo (\ s a -> s{_vvSaleInfo = a})
-
--- | Unique identifier for a volume. (In LITE projection.)
-vvId :: Lens' Volume (Maybe Text)
-vvId = lens _vvId (\ s a -> s{_vvId = a})
-
--- | Recommendation related information for this volume.
-vvRecommendedInfo :: Lens' Volume (Maybe VolumeRecommendedInfo)
-vvRecommendedInfo
-  = lens _vvRecommendedInfo
-      (\ s a -> s{_vvRecommendedInfo = a})
-
--- | General volume information.
-vvVolumeInfo :: Lens' Volume (Maybe VolumeVolumeInfo)
-vvVolumeInfo
-  = lens _vvVolumeInfo (\ s a -> s{_vvVolumeInfo = a})
-
-instance FromJSON Volume where
-        parseJSON
-          = withObject "Volume"
-              (\ o ->
-                 Volume <$>
-                   (o .:? "userInfo") <*> (o .:? "etag") <*>
-                     (o .:? "accessInfo")
-                     <*> (o .:? "kind" .!= "books#volume")
-                     <*> (o .:? "searchInfo")
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "layerInfo")
-                     <*> (o .:? "saleInfo")
-                     <*> (o .:? "id")
-                     <*> (o .:? "recommendedInfo")
-                     <*> (o .:? "volumeInfo"))
-
-instance ToJSON Volume where
-        toJSON Volume{..}
-          = object
-              (catMaybes
-                 [("userInfo" .=) <$> _vvUserInfo,
-                  ("etag" .=) <$> _vvEtag,
-                  ("accessInfo" .=) <$> _vvAccessInfo,
-                  Just ("kind" .= _vvKind),
-                  ("searchInfo" .=) <$> _vvSearchInfo,
-                  ("selfLink" .=) <$> _vvSelfLink,
-                  ("layerInfo" .=) <$> _vvLayerInfo,
-                  ("saleInfo" .=) <$> _vvSaleInfo, ("id" .=) <$> _vvId,
-                  ("recommendedInfo" .=) <$> _vvRecommendedInfo,
-                  ("volumeInfo" .=) <$> _vvVolumeInfo])
-
---
--- /See:/ 'geolayerDataGeoBoundaryItemItem' smart constructor.
-data GeolayerDataGeoBoundaryItemItem = GeolayerDataGeoBoundaryItemItem
-    { _gdgbiiLatitude  :: !(Maybe (Textual Word32))
-    , _gdgbiiLongitude :: !(Maybe (Textual Word32))
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'GeolayerDataGeoBoundaryItemItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gdgbiiLatitude'
---
--- * 'gdgbiiLongitude'
-geolayerDataGeoBoundaryItemItem
-    :: GeolayerDataGeoBoundaryItemItem
-geolayerDataGeoBoundaryItemItem =
-    GeolayerDataGeoBoundaryItemItem
-    { _gdgbiiLatitude = Nothing
-    , _gdgbiiLongitude = Nothing
-    }
-
-gdgbiiLatitude :: Lens' GeolayerDataGeoBoundaryItemItem (Maybe Word32)
-gdgbiiLatitude
-  = lens _gdgbiiLatitude
-      (\ s a -> s{_gdgbiiLatitude = a})
-      . mapping _Coerce
-
-gdgbiiLongitude :: Lens' GeolayerDataGeoBoundaryItemItem (Maybe Word32)
-gdgbiiLongitude
-  = lens _gdgbiiLongitude
-      (\ s a -> s{_gdgbiiLongitude = a})
-      . mapping _Coerce
-
-instance FromJSON GeolayerDataGeoBoundaryItemItem
-         where
-        parseJSON
-          = withObject "GeolayerDataGeoBoundaryItemItem"
-              (\ o ->
-                 GeolayerDataGeoBoundaryItemItem <$>
-                   (o .:? "latitude") <*> (o .:? "longitude"))
-
-instance ToJSON GeolayerDataGeoBoundaryItemItem where
-        toJSON GeolayerDataGeoBoundaryItemItem{..}
-          = object
-              (catMaybes
-                 [("latitude" .=) <$> _gdgbiiLatitude,
-                  ("longitude" .=) <$> _gdgbiiLongitude])
-
---
--- /See:/ 'offersItemsItemItemsItem' smart constructor.
-data OffersItemsItemItemsItem = OffersItemsItemItemsItem
-    { _oiiiiCanonicalVolumeLink :: !(Maybe Text)
-    , _oiiiiCoverURL            :: !(Maybe Text)
-    , _oiiiiVolumeId            :: !(Maybe Text)
-    , _oiiiiAuthor              :: !(Maybe Text)
-    , _oiiiiTitle               :: !(Maybe Text)
-    , _oiiiiDescription         :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'OffersItemsItemItemsItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'oiiiiCanonicalVolumeLink'
---
--- * 'oiiiiCoverURL'
---
--- * 'oiiiiVolumeId'
---
--- * 'oiiiiAuthor'
---
--- * 'oiiiiTitle'
---
--- * 'oiiiiDescription'
-offersItemsItemItemsItem
-    :: OffersItemsItemItemsItem
-offersItemsItemItemsItem =
-    OffersItemsItemItemsItem
-    { _oiiiiCanonicalVolumeLink = Nothing
-    , _oiiiiCoverURL = Nothing
-    , _oiiiiVolumeId = Nothing
-    , _oiiiiAuthor = Nothing
-    , _oiiiiTitle = Nothing
-    , _oiiiiDescription = Nothing
-    }
-
-oiiiiCanonicalVolumeLink :: Lens' OffersItemsItemItemsItem (Maybe Text)
-oiiiiCanonicalVolumeLink
-  = lens _oiiiiCanonicalVolumeLink
-      (\ s a -> s{_oiiiiCanonicalVolumeLink = a})
-
-oiiiiCoverURL :: Lens' OffersItemsItemItemsItem (Maybe Text)
-oiiiiCoverURL
-  = lens _oiiiiCoverURL
-      (\ s a -> s{_oiiiiCoverURL = a})
-
-oiiiiVolumeId :: Lens' OffersItemsItemItemsItem (Maybe Text)
-oiiiiVolumeId
-  = lens _oiiiiVolumeId
-      (\ s a -> s{_oiiiiVolumeId = a})
-
-oiiiiAuthor :: Lens' OffersItemsItemItemsItem (Maybe Text)
-oiiiiAuthor
-  = lens _oiiiiAuthor (\ s a -> s{_oiiiiAuthor = a})
-
-oiiiiTitle :: Lens' OffersItemsItemItemsItem (Maybe Text)
-oiiiiTitle
-  = lens _oiiiiTitle (\ s a -> s{_oiiiiTitle = a})
-
-oiiiiDescription :: Lens' OffersItemsItemItemsItem (Maybe Text)
-oiiiiDescription
-  = lens _oiiiiDescription
-      (\ s a -> s{_oiiiiDescription = a})
-
-instance FromJSON OffersItemsItemItemsItem where
-        parseJSON
-          = withObject "OffersItemsItemItemsItem"
-              (\ o ->
-                 OffersItemsItemItemsItem <$>
-                   (o .:? "canonicalVolumeLink") <*> (o .:? "coverUrl")
-                     <*> (o .:? "volumeId")
-                     <*> (o .:? "author")
-                     <*> (o .:? "title")
-                     <*> (o .:? "description"))
-
-instance ToJSON OffersItemsItemItemsItem where
-        toJSON OffersItemsItemItemsItem{..}
-          = object
-              (catMaybes
-                 [("canonicalVolumeLink" .=) <$>
-                    _oiiiiCanonicalVolumeLink,
-                  ("coverUrl" .=) <$> _oiiiiCoverURL,
-                  ("volumeId" .=) <$> _oiiiiVolumeId,
-                  ("author" .=) <$> _oiiiiAuthor,
-                  ("title" .=) <$> _oiiiiTitle,
-                  ("description" .=) <$> _oiiiiDescription])
-
---
--- /See:/ 'dictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItemSource' smart constructor.
-data DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItemSource = DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItemSource
-    { _dddwisidieisURL         :: !(Maybe Text)
-    , _dddwisidieisAttribution :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItemSource' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dddwisidieisURL'
---
--- * 'dddwisidieisAttribution'
-dictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItemSource
-    :: DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItemSource
-dictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItemSource =
-    DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItemSource
-    { _dddwisidieisURL = Nothing
-    , _dddwisidieisAttribution = Nothing
-    }
-
-dddwisidieisURL :: Lens' DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItemSource (Maybe Text)
-dddwisidieisURL
-  = lens _dddwisidieisURL
-      (\ s a -> s{_dddwisidieisURL = a})
-
-dddwisidieisAttribution :: Lens' DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItemSource (Maybe Text)
-dddwisidieisAttribution
-  = lens _dddwisidieisAttribution
-      (\ s a -> s{_dddwisidieisAttribution = a})
-
-instance FromJSON
-         DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItemSource
-         where
-        parseJSON
-          = withObject
-              "DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItemSource"
-              (\ o ->
-                 DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItemSource
-                   <$> (o .:? "url") <*> (o .:? "attribution"))
-
-instance ToJSON
-         DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItemSource
-         where
-        toJSON
-          DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItemSource{..}
-          = object
-              (catMaybes
-                 [("url" .=) <$> _dddwisidieisURL,
-                  ("attribution" .=) <$> _dddwisidieisAttribution])
-
---
--- /See:/ 'geolayerDataCommon' smart constructor.
-data GeolayerDataCommon = GeolayerDataCommon
-    { _gdcSnippet         :: !(Maybe Text)
-    , _gdcSnippetURL      :: !(Maybe Text)
-    , _gdcLang            :: !(Maybe Text)
-    , _gdcTitle           :: !(Maybe Text)
-    , _gdcPreviewImageURL :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'GeolayerDataCommon' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gdcSnippet'
---
--- * 'gdcSnippetURL'
---
--- * 'gdcLang'
---
--- * 'gdcTitle'
---
--- * 'gdcPreviewImageURL'
-geolayerDataCommon
-    :: GeolayerDataCommon
-geolayerDataCommon =
-    GeolayerDataCommon
-    { _gdcSnippet = Nothing
-    , _gdcSnippetURL = Nothing
-    , _gdcLang = Nothing
-    , _gdcTitle = Nothing
-    , _gdcPreviewImageURL = Nothing
-    }
-
--- | The description for this location.
-gdcSnippet :: Lens' GeolayerDataCommon (Maybe Text)
-gdcSnippet
-  = lens _gdcSnippet (\ s a -> s{_gdcSnippet = a})
-
--- | The URL for information for this location. Ex: wikipedia link.
-gdcSnippetURL :: Lens' GeolayerDataCommon (Maybe Text)
-gdcSnippetURL
-  = lens _gdcSnippetURL
-      (\ s a -> s{_gdcSnippetURL = a})
-
--- | The language of the information url and description.
-gdcLang :: Lens' GeolayerDataCommon (Maybe Text)
-gdcLang = lens _gdcLang (\ s a -> s{_gdcLang = a})
-
--- | The display title and localized canonical name to use when searching for
--- this entity on Google search.
-gdcTitle :: Lens' GeolayerDataCommon (Maybe Text)
-gdcTitle = lens _gdcTitle (\ s a -> s{_gdcTitle = a})
-
--- | The URL for the preview image information.
-gdcPreviewImageURL :: Lens' GeolayerDataCommon (Maybe Text)
-gdcPreviewImageURL
-  = lens _gdcPreviewImageURL
-      (\ s a -> s{_gdcPreviewImageURL = a})
-
-instance FromJSON GeolayerDataCommon where
-        parseJSON
-          = withObject "GeolayerDataCommon"
-              (\ o ->
-                 GeolayerDataCommon <$>
-                   (o .:? "snippet") <*> (o .:? "snippetUrl") <*>
-                     (o .:? "lang")
-                     <*> (o .:? "title")
-                     <*> (o .:? "previewImageUrl"))
-
-instance ToJSON GeolayerDataCommon where
-        toJSON GeolayerDataCommon{..}
-          = object
-              (catMaybes
-                 [("snippet" .=) <$> _gdcSnippet,
-                  ("snippetUrl" .=) <$> _gdcSnippetURL,
-                  ("lang" .=) <$> _gdcLang, ("title" .=) <$> _gdcTitle,
-                  ("previewImageUrl" .=) <$> _gdcPreviewImageURL])
-
---
--- /See:/ 'geolayerDataGeo' smart constructor.
-data GeolayerDataGeo = GeolayerDataGeo
-    { _gdgMapType     :: !(Maybe Text)
-    , _gdgCachePolicy :: !(Maybe Text)
-    , _gdgViewport    :: !(Maybe GeolayerDataGeoViewport)
-    , _gdgBoundary    :: !(Maybe [[GeolayerDataGeoBoundaryItemItem]])
-    , _gdgLatitude    :: !(Maybe (Textual Double))
-    , _gdgZoom        :: !(Maybe (Textual Int32))
-    , _gdgCountryCode :: !(Maybe Text)
-    , _gdgLongitude   :: !(Maybe (Textual Double))
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'GeolayerDataGeo' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gdgMapType'
---
--- * 'gdgCachePolicy'
---
--- * 'gdgViewport'
---
--- * 'gdgBoundary'
---
--- * 'gdgLatitude'
---
--- * 'gdgZoom'
---
--- * 'gdgCountryCode'
---
--- * 'gdgLongitude'
-geolayerDataGeo
-    :: GeolayerDataGeo
-geolayerDataGeo =
-    GeolayerDataGeo
-    { _gdgMapType = Nothing
-    , _gdgCachePolicy = Nothing
-    , _gdgViewport = Nothing
-    , _gdgBoundary = Nothing
-    , _gdgLatitude = Nothing
-    , _gdgZoom = Nothing
-    , _gdgCountryCode = Nothing
-    , _gdgLongitude = Nothing
-    }
-
--- | The type of map that should be used for this location. EX: HYBRID,
--- ROADMAP, SATELLITE, TERRAIN
-gdgMapType :: Lens' GeolayerDataGeo (Maybe Text)
-gdgMapType
-  = lens _gdgMapType (\ s a -> s{_gdgMapType = a})
-
--- | The cache policy active for this data. EX: UNRESTRICTED, RESTRICTED,
--- NEVER
-gdgCachePolicy :: Lens' GeolayerDataGeo (Maybe Text)
-gdgCachePolicy
-  = lens _gdgCachePolicy
-      (\ s a -> s{_gdgCachePolicy = a})
-
--- | The viewport for showing this location. This is a latitude, longitude
--- rectangle.
-gdgViewport :: Lens' GeolayerDataGeo (Maybe GeolayerDataGeoViewport)
-gdgViewport
-  = lens _gdgViewport (\ s a -> s{_gdgViewport = a})
-
--- | The boundary of the location as a set of loops containing pairs of
--- latitude, longitude coordinates.
-gdgBoundary :: Lens' GeolayerDataGeo [[GeolayerDataGeoBoundaryItemItem]]
-gdgBoundary
-  = lens _gdgBoundary (\ s a -> s{_gdgBoundary = a}) .
-      _Default
-      . _Coerce
-
--- | The latitude of the location.
-gdgLatitude :: Lens' GeolayerDataGeo (Maybe Double)
-gdgLatitude
-  = lens _gdgLatitude (\ s a -> s{_gdgLatitude = a}) .
-      mapping _Coerce
-
--- | The Zoom level to use for the map. Zoom levels between 0 (the lowest
--- zoom level, in which the entire world can be seen on one map) to 21+
--- (down to individual buildings). See:
--- https:\/\/developers.google.com\/maps\/documentation\/staticmaps\/#Zoomlevels
-gdgZoom :: Lens' GeolayerDataGeo (Maybe Int32)
-gdgZoom
-  = lens _gdgZoom (\ s a -> s{_gdgZoom = a}) .
-      mapping _Coerce
-
--- | The country code of the location.
-gdgCountryCode :: Lens' GeolayerDataGeo (Maybe Text)
-gdgCountryCode
-  = lens _gdgCountryCode
-      (\ s a -> s{_gdgCountryCode = a})
-
--- | The longitude of the location.
-gdgLongitude :: Lens' GeolayerDataGeo (Maybe Double)
-gdgLongitude
-  = lens _gdgLongitude (\ s a -> s{_gdgLongitude = a})
-      . mapping _Coerce
-
-instance FromJSON GeolayerDataGeo where
-        parseJSON
-          = withObject "GeolayerDataGeo"
-              (\ o ->
-                 GeolayerDataGeo <$>
-                   (o .:? "mapType") <*> (o .:? "cachePolicy") <*>
-                     (o .:? "viewport")
-                     <*> (o .:? "boundary" .!= mempty)
-                     <*> (o .:? "latitude")
-                     <*> (o .:? "zoom")
-                     <*> (o .:? "countryCode")
-                     <*> (o .:? "longitude"))
-
-instance ToJSON GeolayerDataGeo where
-        toJSON GeolayerDataGeo{..}
-          = object
-              (catMaybes
-                 [("mapType" .=) <$> _gdgMapType,
-                  ("cachePolicy" .=) <$> _gdgCachePolicy,
-                  ("viewport" .=) <$> _gdgViewport,
-                  ("boundary" .=) <$> _gdgBoundary,
-                  ("latitude" .=) <$> _gdgLatitude,
-                  ("zoom" .=) <$> _gdgZoom,
-                  ("countryCode" .=) <$> _gdgCountryCode,
-                  ("longitude" .=) <$> _gdgLongitude])
-
---
--- /See:/ 'dictlayerDataDictWordsItem' smart constructor.
-data DictlayerDataDictWordsItem = DictlayerDataDictWordsItem
-    { _dddwiSenses      :: !(Maybe [DictlayerDataDictWordsItemSensesItem])
-    , _dddwiSource      :: !(Maybe DictlayerDataDictWordsItemSource)
-    , _dddwiDerivatives :: !(Maybe [DictlayerDataDictWordsItemDerivativesItem])
-    , _dddwiExamples    :: !(Maybe [DictlayerDataDictWordsItemExamplesItem])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DictlayerDataDictWordsItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dddwiSenses'
---
--- * 'dddwiSource'
---
--- * 'dddwiDerivatives'
---
--- * 'dddwiExamples'
-dictlayerDataDictWordsItem
-    :: DictlayerDataDictWordsItem
-dictlayerDataDictWordsItem =
-    DictlayerDataDictWordsItem
-    { _dddwiSenses = Nothing
-    , _dddwiSource = Nothing
-    , _dddwiDerivatives = Nothing
-    , _dddwiExamples = Nothing
-    }
-
-dddwiSenses :: Lens' DictlayerDataDictWordsItem [DictlayerDataDictWordsItemSensesItem]
-dddwiSenses
-  = lens _dddwiSenses (\ s a -> s{_dddwiSenses = a}) .
-      _Default
-      . _Coerce
-
--- | The words with different meanings but not related words, e.g. \"go\"
--- (game) and \"go\" (verb).
-dddwiSource :: Lens' DictlayerDataDictWordsItem (Maybe DictlayerDataDictWordsItemSource)
-dddwiSource
-  = lens _dddwiSource (\ s a -> s{_dddwiSource = a})
-
-dddwiDerivatives :: Lens' DictlayerDataDictWordsItem [DictlayerDataDictWordsItemDerivativesItem]
-dddwiDerivatives
-  = lens _dddwiDerivatives
-      (\ s a -> s{_dddwiDerivatives = a})
-      . _Default
-      . _Coerce
-
-dddwiExamples :: Lens' DictlayerDataDictWordsItem [DictlayerDataDictWordsItemExamplesItem]
-dddwiExamples
-  = lens _dddwiExamples
-      (\ s a -> s{_dddwiExamples = a})
-      . _Default
-      . _Coerce
-
-instance FromJSON DictlayerDataDictWordsItem where
-        parseJSON
-          = withObject "DictlayerDataDictWordsItem"
-              (\ o ->
-                 DictlayerDataDictWordsItem <$>
-                   (o .:? "senses" .!= mempty) <*> (o .:? "source") <*>
-                     (o .:? "derivatives" .!= mempty)
-                     <*> (o .:? "examples" .!= mempty))
-
-instance ToJSON DictlayerDataDictWordsItem where
-        toJSON DictlayerDataDictWordsItem{..}
-          = object
-              (catMaybes
-                 [("senses" .=) <$> _dddwiSenses,
-                  ("source" .=) <$> _dddwiSource,
-                  ("derivatives" .=) <$> _dddwiDerivatives,
-                  ("examples" .=) <$> _dddwiExamples])
-
---
--- /See:/ 'categoryItemsItem' smart constructor.
-data CategoryItemsItem = CategoryItemsItem
-    { _ciiName       :: !(Maybe Text)
-    , _ciiCategoryId :: !(Maybe Text)
-    , _ciiBadgeURL   :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CategoryItemsItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ciiName'
---
--- * 'ciiCategoryId'
---
--- * 'ciiBadgeURL'
-categoryItemsItem
-    :: CategoryItemsItem
-categoryItemsItem =
-    CategoryItemsItem
-    { _ciiName = Nothing
-    , _ciiCategoryId = Nothing
-    , _ciiBadgeURL = Nothing
-    }
-
-ciiName :: Lens' CategoryItemsItem (Maybe Text)
-ciiName = lens _ciiName (\ s a -> s{_ciiName = a})
-
-ciiCategoryId :: Lens' CategoryItemsItem (Maybe Text)
-ciiCategoryId
-  = lens _ciiCategoryId
-      (\ s a -> s{_ciiCategoryId = a})
-
-ciiBadgeURL :: Lens' CategoryItemsItem (Maybe Text)
-ciiBadgeURL
-  = lens _ciiBadgeURL (\ s a -> s{_ciiBadgeURL = a})
-
-instance FromJSON CategoryItemsItem where
-        parseJSON
-          = withObject "CategoryItemsItem"
-              (\ o ->
-                 CategoryItemsItem <$>
-                   (o .:? "name") <*> (o .:? "categoryId") <*>
-                     (o .:? "badgeUrl"))
-
-instance ToJSON CategoryItemsItem where
-        toJSON CategoryItemsItem{..}
-          = object
-              (catMaybes
-                 [("name" .=) <$> _ciiName,
-                  ("categoryId" .=) <$> _ciiCategoryId,
-                  ("badgeUrl" .=) <$> _ciiBadgeURL])
-
---
--- /See:/ 'dictlayerDataDictWordsItemDerivativesItemSource' smart constructor.
-data DictlayerDataDictWordsItemDerivativesItemSource = DictlayerDataDictWordsItemDerivativesItemSource
-    { _dddwidisURL         :: !(Maybe Text)
-    , _dddwidisAttribution :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DictlayerDataDictWordsItemDerivativesItemSource' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dddwidisURL'
---
--- * 'dddwidisAttribution'
-dictlayerDataDictWordsItemDerivativesItemSource
-    :: DictlayerDataDictWordsItemDerivativesItemSource
-dictlayerDataDictWordsItemDerivativesItemSource =
-    DictlayerDataDictWordsItemDerivativesItemSource
-    { _dddwidisURL = Nothing
-    , _dddwidisAttribution = Nothing
-    }
-
-dddwidisURL :: Lens' DictlayerDataDictWordsItemDerivativesItemSource (Maybe Text)
-dddwidisURL
-  = lens _dddwidisURL (\ s a -> s{_dddwidisURL = a})
-
-dddwidisAttribution :: Lens' DictlayerDataDictWordsItemDerivativesItemSource (Maybe Text)
-dddwidisAttribution
-  = lens _dddwidisAttribution
-      (\ s a -> s{_dddwidisAttribution = a})
-
-instance FromJSON
-         DictlayerDataDictWordsItemDerivativesItemSource where
-        parseJSON
-          = withObject
-              "DictlayerDataDictWordsItemDerivativesItemSource"
-              (\ o ->
-                 DictlayerDataDictWordsItemDerivativesItemSource <$>
-                   (o .:? "url") <*> (o .:? "attribution"))
-
-instance ToJSON
-         DictlayerDataDictWordsItemDerivativesItemSource where
-        toJSON
-          DictlayerDataDictWordsItemDerivativesItemSource{..}
-          = object
-              (catMaybes
-                 [("url" .=) <$> _dddwidisURL,
-                  ("attribution" .=) <$> _dddwidisAttribution])
-
---
--- /See:/ 'geolayerData' smart constructor.
-data GeolayerData = GeolayerData
-    { _gdKind   :: !Text
-    , _gdGeo    :: !(Maybe GeolayerDataGeo)
-    , _gdCommon :: !(Maybe GeolayerDataCommon)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'GeolayerData' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gdKind'
---
--- * 'gdGeo'
---
--- * 'gdCommon'
-geolayerData
-    :: GeolayerData
-geolayerData =
-    GeolayerData
-    { _gdKind = "books#geolayerdata"
-    , _gdGeo = Nothing
-    , _gdCommon = Nothing
-    }
-
-gdKind :: Lens' GeolayerData Text
-gdKind = lens _gdKind (\ s a -> s{_gdKind = a})
-
-gdGeo :: Lens' GeolayerData (Maybe GeolayerDataGeo)
-gdGeo = lens _gdGeo (\ s a -> s{_gdGeo = a})
-
-gdCommon :: Lens' GeolayerData (Maybe GeolayerDataCommon)
-gdCommon = lens _gdCommon (\ s a -> s{_gdCommon = a})
-
-instance FromJSON GeolayerData where
-        parseJSON
-          = withObject "GeolayerData"
-              (\ o ->
-                 GeolayerData <$>
-                   (o .:? "kind" .!= "books#geolayerdata") <*>
-                     (o .:? "geo")
-                     <*> (o .:? "common"))
-
-instance ToJSON GeolayerData where
-        toJSON GeolayerData{..}
-          = object
-              (catMaybes
-                 [Just ("kind" .= _gdKind), ("geo" .=) <$> _gdGeo,
-                  ("common" .=) <$> _gdCommon])
-
--- | The words with different meanings but not related words, e.g. \"go\"
--- (game) and \"go\" (verb).
---
--- /See:/ 'dictlayerDataDictWordsItemSource' smart constructor.
-data DictlayerDataDictWordsItemSource = DictlayerDataDictWordsItemSource
-    { _dddwisURL         :: !(Maybe Text)
-    , _dddwisAttribution :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DictlayerDataDictWordsItemSource' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dddwisURL'
---
--- * 'dddwisAttribution'
-dictlayerDataDictWordsItemSource
-    :: DictlayerDataDictWordsItemSource
-dictlayerDataDictWordsItemSource =
-    DictlayerDataDictWordsItemSource
-    { _dddwisURL = Nothing
-    , _dddwisAttribution = Nothing
-    }
-
-dddwisURL :: Lens' DictlayerDataDictWordsItemSource (Maybe Text)
-dddwisURL
-  = lens _dddwisURL (\ s a -> s{_dddwisURL = a})
-
-dddwisAttribution :: Lens' DictlayerDataDictWordsItemSource (Maybe Text)
-dddwisAttribution
-  = lens _dddwisAttribution
-      (\ s a -> s{_dddwisAttribution = a})
-
-instance FromJSON DictlayerDataDictWordsItemSource
-         where
-        parseJSON
-          = withObject "DictlayerDataDictWordsItemSource"
-              (\ o ->
-                 DictlayerDataDictWordsItemSource <$>
-                   (o .:? "url") <*> (o .:? "attribution"))
-
-instance ToJSON DictlayerDataDictWordsItemSource
-         where
-        toJSON DictlayerDataDictWordsItemSource{..}
-          = object
-              (catMaybes
-                 [("url" .=) <$> _dddwisURL,
-                  ("attribution" .=) <$> _dddwisAttribution])
-
---
--- /See:/ 'dictlayerDataDictWordsItemDerivativesItem' smart constructor.
-data DictlayerDataDictWordsItemDerivativesItem = DictlayerDataDictWordsItemDerivativesItem
-    { _dddwidiText   :: !(Maybe Text)
-    , _dddwidiSource :: !(Maybe DictlayerDataDictWordsItemDerivativesItemSource)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DictlayerDataDictWordsItemDerivativesItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dddwidiText'
---
--- * 'dddwidiSource'
-dictlayerDataDictWordsItemDerivativesItem
-    :: DictlayerDataDictWordsItemDerivativesItem
-dictlayerDataDictWordsItemDerivativesItem =
-    DictlayerDataDictWordsItemDerivativesItem
-    { _dddwidiText = Nothing
-    , _dddwidiSource = Nothing
-    }
-
-dddwidiText :: Lens' DictlayerDataDictWordsItemDerivativesItem (Maybe Text)
-dddwidiText
-  = lens _dddwidiText (\ s a -> s{_dddwidiText = a})
-
-dddwidiSource :: Lens' DictlayerDataDictWordsItemDerivativesItem (Maybe DictlayerDataDictWordsItemDerivativesItemSource)
-dddwidiSource
-  = lens _dddwidiSource
-      (\ s a -> s{_dddwidiSource = a})
-
-instance FromJSON
-         DictlayerDataDictWordsItemDerivativesItem where
-        parseJSON
-          = withObject
-              "DictlayerDataDictWordsItemDerivativesItem"
-              (\ o ->
-                 DictlayerDataDictWordsItemDerivativesItem <$>
-                   (o .:? "text") <*> (o .:? "source"))
-
-instance ToJSON
-         DictlayerDataDictWordsItemDerivativesItem where
-        toJSON DictlayerDataDictWordsItemDerivativesItem{..}
-          = object
-              (catMaybes
-                 [("text" .=) <$> _dddwidiText,
-                  ("source" .=) <$> _dddwidiSource])
-
---
--- /See:/ 'dictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItem' smart constructor.
-data DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItem = DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItem
-    { _dddwisidieiText   :: !(Maybe Text)
-    , _dddwisidieiSource :: !(Maybe DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItemSource)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dddwisidieiText'
---
--- * 'dddwisidieiSource'
-dictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItem
-    :: DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItem
-dictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItem =
-    DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItem
-    { _dddwisidieiText = Nothing
-    , _dddwisidieiSource = Nothing
-    }
-
-dddwisidieiText :: Lens' DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItem (Maybe Text)
-dddwisidieiText
-  = lens _dddwisidieiText
-      (\ s a -> s{_dddwisidieiText = a})
-
-dddwisidieiSource :: Lens' DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItem (Maybe DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItemSource)
-dddwisidieiSource
-  = lens _dddwisidieiSource
-      (\ s a -> s{_dddwisidieiSource = a})
-
-instance FromJSON
-         DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItem
-         where
-        parseJSON
-          = withObject
-              "DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItem"
-              (\ o ->
-                 DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItem
-                   <$> (o .:? "text") <*> (o .:? "source"))
-
-instance ToJSON
-         DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItem
-         where
-        toJSON
-          DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItem{..}
-          = object
-              (catMaybes
-                 [("text" .=) <$> _dddwisidieiText,
-                  ("source" .=) <$> _dddwisidieiSource])
-
---
--- /See:/ 'dictlayerData' smart constructor.
-data DictlayerData = DictlayerData
-    { _ddKind   :: !Text
-    , _ddDict   :: !(Maybe DictlayerDataDict)
-    , _ddCommon :: !(Maybe DictlayerDataCommon)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DictlayerData' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ddKind'
---
--- * 'ddDict'
---
--- * 'ddCommon'
-dictlayerData
-    :: DictlayerData
-dictlayerData =
-    DictlayerData
-    { _ddKind = "books#dictlayerdata"
-    , _ddDict = Nothing
-    , _ddCommon = Nothing
-    }
-
-ddKind :: Lens' DictlayerData Text
-ddKind = lens _ddKind (\ s a -> s{_ddKind = a})
-
-ddDict :: Lens' DictlayerData (Maybe DictlayerDataDict)
-ddDict = lens _ddDict (\ s a -> s{_ddDict = a})
-
-ddCommon :: Lens' DictlayerData (Maybe DictlayerDataCommon)
-ddCommon = lens _ddCommon (\ s a -> s{_ddCommon = a})
-
-instance FromJSON DictlayerData where
-        parseJSON
-          = withObject "DictlayerData"
-              (\ o ->
-                 DictlayerData <$>
-                   (o .:? "kind" .!= "books#dictlayerdata") <*>
-                     (o .:? "dict")
-                     <*> (o .:? "common"))
-
-instance ToJSON DictlayerData where
-        toJSON DictlayerData{..}
-          = object
-              (catMaybes
-                 [Just ("kind" .= _ddKind), ("dict" .=) <$> _ddDict,
-                  ("common" .=) <$> _ddCommon])
-
---
--- /See:/ 'dictlayerDataDictWordsItemSensesItemSynonymsItemSource' smart constructor.
-data DictlayerDataDictWordsItemSensesItemSynonymsItemSource = DictlayerDataDictWordsItemSensesItemSynonymsItemSource
-    { _dddwisisisURL         :: !(Maybe Text)
-    , _dddwisisisAttribution :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DictlayerDataDictWordsItemSensesItemSynonymsItemSource' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dddwisisisURL'
---
--- * 'dddwisisisAttribution'
-dictlayerDataDictWordsItemSensesItemSynonymsItemSource
-    :: DictlayerDataDictWordsItemSensesItemSynonymsItemSource
-dictlayerDataDictWordsItemSensesItemSynonymsItemSource =
-    DictlayerDataDictWordsItemSensesItemSynonymsItemSource
-    { _dddwisisisURL = Nothing
-    , _dddwisisisAttribution = Nothing
-    }
-
-dddwisisisURL :: Lens' DictlayerDataDictWordsItemSensesItemSynonymsItemSource (Maybe Text)
-dddwisisisURL
-  = lens _dddwisisisURL
-      (\ s a -> s{_dddwisisisURL = a})
-
-dddwisisisAttribution :: Lens' DictlayerDataDictWordsItemSensesItemSynonymsItemSource (Maybe Text)
-dddwisisisAttribution
-  = lens _dddwisisisAttribution
-      (\ s a -> s{_dddwisisisAttribution = a})
-
-instance FromJSON
-         DictlayerDataDictWordsItemSensesItemSynonymsItemSource
-         where
-        parseJSON
-          = withObject
-              "DictlayerDataDictWordsItemSensesItemSynonymsItemSource"
-              (\ o ->
-                 DictlayerDataDictWordsItemSensesItemSynonymsItemSource
-                   <$> (o .:? "url") <*> (o .:? "attribution"))
-
-instance ToJSON
-         DictlayerDataDictWordsItemSensesItemSynonymsItemSource
-         where
-        toJSON
-          DictlayerDataDictWordsItemSensesItemSynonymsItemSource{..}
-          = object
-              (catMaybes
-                 [("url" .=) <$> _dddwisisisURL,
-                  ("attribution" .=) <$> _dddwisisisAttribution])
-
---
--- /See:/ 'userSettingsNotification' smart constructor.
-newtype UserSettingsNotification = UserSettingsNotification
-    { _usnMoreFromAuthors :: Maybe UserSettingsNotificationMoreFromAuthors
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'UserSettingsNotification' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'usnMoreFromAuthors'
-userSettingsNotification
-    :: UserSettingsNotification
-userSettingsNotification =
-    UserSettingsNotification
-    { _usnMoreFromAuthors = Nothing
-    }
-
-usnMoreFromAuthors :: Lens' UserSettingsNotification (Maybe UserSettingsNotificationMoreFromAuthors)
-usnMoreFromAuthors
-  = lens _usnMoreFromAuthors
-      (\ s a -> s{_usnMoreFromAuthors = a})
-
-instance FromJSON UserSettingsNotification where
-        parseJSON
-          = withObject "UserSettingsNotification"
-              (\ o ->
-                 UserSettingsNotification <$>
-                   (o .:? "moreFromAuthors"))
-
-instance ToJSON UserSettingsNotification where
-        toJSON UserSettingsNotification{..}
-          = object
-              (catMaybes
-                 [("moreFromAuthors" .=) <$> _usnMoreFromAuthors])
-
---
--- /See:/ 'dictlayerDataDictWordsItemSensesItemSynonymsItem' smart constructor.
-data DictlayerDataDictWordsItemSensesItemSynonymsItem = DictlayerDataDictWordsItemSensesItemSynonymsItem
-    { _dddwisisiText   :: !(Maybe Text)
-    , _dddwisisiSource :: !(Maybe DictlayerDataDictWordsItemSensesItemSynonymsItemSource)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DictlayerDataDictWordsItemSensesItemSynonymsItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dddwisisiText'
---
--- * 'dddwisisiSource'
-dictlayerDataDictWordsItemSensesItemSynonymsItem
-    :: DictlayerDataDictWordsItemSensesItemSynonymsItem
-dictlayerDataDictWordsItemSensesItemSynonymsItem =
-    DictlayerDataDictWordsItemSensesItemSynonymsItem
-    { _dddwisisiText = Nothing
-    , _dddwisisiSource = Nothing
-    }
-
-dddwisisiText :: Lens' DictlayerDataDictWordsItemSensesItemSynonymsItem (Maybe Text)
-dddwisisiText
-  = lens _dddwisisiText
-      (\ s a -> s{_dddwisisiText = a})
-
-dddwisisiSource :: Lens' DictlayerDataDictWordsItemSensesItemSynonymsItem (Maybe DictlayerDataDictWordsItemSensesItemSynonymsItemSource)
-dddwisisiSource
-  = lens _dddwisisiSource
-      (\ s a -> s{_dddwisisiSource = a})
-
-instance FromJSON
-         DictlayerDataDictWordsItemSensesItemSynonymsItem
-         where
-        parseJSON
-          = withObject
-              "DictlayerDataDictWordsItemSensesItemSynonymsItem"
-              (\ o ->
-                 DictlayerDataDictWordsItemSensesItemSynonymsItem <$>
-                   (o .:? "text") <*> (o .:? "source"))
-
-instance ToJSON
-         DictlayerDataDictWordsItemSensesItemSynonymsItem
-         where
-        toJSON
-          DictlayerDataDictWordsItemSensesItemSynonymsItem{..}
-          = object
-              (catMaybes
-                 [("text" .=) <$> _dddwisisiText,
-                  ("source" .=) <$> _dddwisisiSource])
-
---
--- /See:/ 'geolayerDataGeoViewportLo' smart constructor.
-data GeolayerDataGeoViewportLo = GeolayerDataGeoViewportLo
-    { _gdgvlLatitude  :: !(Maybe (Textual Double))
-    , _gdgvlLongitude :: !(Maybe (Textual Double))
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'GeolayerDataGeoViewportLo' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gdgvlLatitude'
---
--- * 'gdgvlLongitude'
-geolayerDataGeoViewportLo
-    :: GeolayerDataGeoViewportLo
-geolayerDataGeoViewportLo =
-    GeolayerDataGeoViewportLo
-    { _gdgvlLatitude = Nothing
-    , _gdgvlLongitude = Nothing
-    }
-
-gdgvlLatitude :: Lens' GeolayerDataGeoViewportLo (Maybe Double)
-gdgvlLatitude
-  = lens _gdgvlLatitude
-      (\ s a -> s{_gdgvlLatitude = a})
-      . mapping _Coerce
-
-gdgvlLongitude :: Lens' GeolayerDataGeoViewportLo (Maybe Double)
-gdgvlLongitude
-  = lens _gdgvlLongitude
-      (\ s a -> s{_gdgvlLongitude = a})
-      . mapping _Coerce
-
-instance FromJSON GeolayerDataGeoViewportLo where
-        parseJSON
-          = withObject "GeolayerDataGeoViewportLo"
-              (\ o ->
-                 GeolayerDataGeoViewportLo <$>
-                   (o .:? "latitude") <*> (o .:? "longitude"))
-
-instance ToJSON GeolayerDataGeoViewportLo where
-        toJSON GeolayerDataGeoViewportLo{..}
-          = object
-              (catMaybes
-                 [("latitude" .=) <$> _gdgvlLatitude,
-                  ("longitude" .=) <$> _gdgvlLongitude])
-
--- | Offer list (=undiscounted) price in Micros.
---
--- /See:/ 'volumeSaleInfoOffersItemListPrice' smart constructor.
-data VolumeSaleInfoOffersItemListPrice = VolumeSaleInfoOffersItemListPrice
-    { _vsioilpCurrencyCode   :: !(Maybe Text)
-    , _vsioilpAmountInMicros :: !(Maybe (Textual Double))
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VolumeSaleInfoOffersItemListPrice' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vsioilpCurrencyCode'
---
--- * 'vsioilpAmountInMicros'
-volumeSaleInfoOffersItemListPrice
-    :: VolumeSaleInfoOffersItemListPrice
-volumeSaleInfoOffersItemListPrice =
-    VolumeSaleInfoOffersItemListPrice
-    { _vsioilpCurrencyCode = Nothing
-    , _vsioilpAmountInMicros = Nothing
-    }
-
-vsioilpCurrencyCode :: Lens' VolumeSaleInfoOffersItemListPrice (Maybe Text)
-vsioilpCurrencyCode
-  = lens _vsioilpCurrencyCode
-      (\ s a -> s{_vsioilpCurrencyCode = a})
-
-vsioilpAmountInMicros :: Lens' VolumeSaleInfoOffersItemListPrice (Maybe Double)
-vsioilpAmountInMicros
-  = lens _vsioilpAmountInMicros
-      (\ s a -> s{_vsioilpAmountInMicros = a})
-      . mapping _Coerce
-
-instance FromJSON VolumeSaleInfoOffersItemListPrice
-         where
-        parseJSON
-          = withObject "VolumeSaleInfoOffersItemListPrice"
-              (\ o ->
-                 VolumeSaleInfoOffersItemListPrice <$>
-                   (o .:? "currencyCode") <*> (o .:? "amountInMicros"))
-
-instance ToJSON VolumeSaleInfoOffersItemListPrice
-         where
-        toJSON VolumeSaleInfoOffersItemListPrice{..}
-          = object
-              (catMaybes
-                 [("currencyCode" .=) <$> _vsioilpCurrencyCode,
-                  ("amountInMicros" .=) <$> _vsioilpAmountInMicros])
-
---
--- /See:/ 'downloadAccessRestriction' smart constructor.
-data DownloadAccessRestriction = DownloadAccessRestriction
-    { _darJustAcquired       :: !(Maybe Bool)
-    , _darSignature          :: !(Maybe Text)
-    , _darKind               :: !Text
-    , _darMaxDownloadDevices :: !(Maybe (Textual Int32))
-    , _darDownloadsAcquired  :: !(Maybe (Textual Int32))
-    , _darReasonCode         :: !(Maybe Text)
-    , _darVolumeId           :: !(Maybe Text)
-    , _darRestricted         :: !(Maybe Bool)
-    , _darSource             :: !(Maybe Text)
-    , _darDeviceAllowed      :: !(Maybe Bool)
-    , _darMessage            :: !(Maybe Text)
-    , _darNonce              :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DownloadAccessRestriction' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'darJustAcquired'
---
--- * 'darSignature'
---
--- * 'darKind'
---
--- * 'darMaxDownloadDevices'
---
--- * 'darDownloadsAcquired'
---
--- * 'darReasonCode'
---
--- * 'darVolumeId'
---
--- * 'darRestricted'
---
--- * 'darSource'
---
--- * 'darDeviceAllowed'
---
--- * 'darMessage'
---
--- * 'darNonce'
-downloadAccessRestriction
-    :: DownloadAccessRestriction
-downloadAccessRestriction =
-    DownloadAccessRestriction
-    { _darJustAcquired = Nothing
-    , _darSignature = Nothing
-    , _darKind = "books#downloadAccessRestriction"
-    , _darMaxDownloadDevices = Nothing
-    , _darDownloadsAcquired = Nothing
-    , _darReasonCode = Nothing
-    , _darVolumeId = Nothing
-    , _darRestricted = Nothing
-    , _darSource = Nothing
-    , _darDeviceAllowed = Nothing
-    , _darMessage = Nothing
-    , _darNonce = Nothing
-    }
-
--- | If deviceAllowed, whether access was just acquired with this request.
-darJustAcquired :: Lens' DownloadAccessRestriction (Maybe Bool)
-darJustAcquired
-  = lens _darJustAcquired
-      (\ s a -> s{_darJustAcquired = a})
-
--- | Response signature.
-darSignature :: Lens' DownloadAccessRestriction (Maybe Text)
-darSignature
-  = lens _darSignature (\ s a -> s{_darSignature = a})
-
--- | Resource type.
-darKind :: Lens' DownloadAccessRestriction Text
-darKind = lens _darKind (\ s a -> s{_darKind = a})
-
--- | If restricted, the maximum number of content download licenses for this
--- volume.
-darMaxDownloadDevices :: Lens' DownloadAccessRestriction (Maybe Int32)
-darMaxDownloadDevices
-  = lens _darMaxDownloadDevices
-      (\ s a -> s{_darMaxDownloadDevices = a})
-      . mapping _Coerce
-
--- | If restricted, the number of content download licenses already acquired
--- (including the requesting client, if licensed).
-darDownloadsAcquired :: Lens' DownloadAccessRestriction (Maybe Int32)
-darDownloadsAcquired
-  = lens _darDownloadsAcquired
-      (\ s a -> s{_darDownloadsAcquired = a})
-      . mapping _Coerce
-
--- | Error\/warning reason code. Additional codes may be added in the future.
--- 0 OK 100 ACCESS_DENIED_PUBLISHER_LIMIT 101 ACCESS_DENIED_LIMIT 200
--- WARNING_USED_LAST_ACCESS
-darReasonCode :: Lens' DownloadAccessRestriction (Maybe Text)
-darReasonCode
-  = lens _darReasonCode
-      (\ s a -> s{_darReasonCode = a})
-
--- | Identifies the volume for which this entry applies.
-darVolumeId :: Lens' DownloadAccessRestriction (Maybe Text)
-darVolumeId
-  = lens _darVolumeId (\ s a -> s{_darVolumeId = a})
-
--- | Whether this volume has any download access restrictions.
-darRestricted :: Lens' DownloadAccessRestriction (Maybe Bool)
-darRestricted
-  = lens _darRestricted
-      (\ s a -> s{_darRestricted = a})
-
--- | Client app identifier for verification. Download access and
--- client-validation only.
-darSource :: Lens' DownloadAccessRestriction (Maybe Text)
-darSource
-  = lens _darSource (\ s a -> s{_darSource = a})
-
--- | If restricted, whether access is granted for this (user, device,
--- volume).
-darDeviceAllowed :: Lens' DownloadAccessRestriction (Maybe Bool)
-darDeviceAllowed
-  = lens _darDeviceAllowed
-      (\ s a -> s{_darDeviceAllowed = a})
-
--- | Error\/warning message.
-darMessage :: Lens' DownloadAccessRestriction (Maybe Text)
-darMessage
-  = lens _darMessage (\ s a -> s{_darMessage = a})
-
--- | Client nonce for verification. Download access and client-validation
--- only.
-darNonce :: Lens' DownloadAccessRestriction (Maybe Text)
-darNonce = lens _darNonce (\ s a -> s{_darNonce = a})
-
-instance FromJSON DownloadAccessRestriction where
-        parseJSON
-          = withObject "DownloadAccessRestriction"
-              (\ o ->
-                 DownloadAccessRestriction <$>
-                   (o .:? "justAcquired") <*> (o .:? "signature") <*>
-                     (o .:? "kind" .!= "books#downloadAccessRestriction")
-                     <*> (o .:? "maxDownloadDevices")
-                     <*> (o .:? "downloadsAcquired")
-                     <*> (o .:? "reasonCode")
-                     <*> (o .:? "volumeId")
-                     <*> (o .:? "restricted")
-                     <*> (o .:? "source")
-                     <*> (o .:? "deviceAllowed")
-                     <*> (o .:? "message")
-                     <*> (o .:? "nonce"))
-
-instance ToJSON DownloadAccessRestriction where
-        toJSON DownloadAccessRestriction{..}
-          = object
-              (catMaybes
-                 [("justAcquired" .=) <$> _darJustAcquired,
-                  ("signature" .=) <$> _darSignature,
-                  Just ("kind" .= _darKind),
-                  ("maxDownloadDevices" .=) <$> _darMaxDownloadDevices,
-                  ("downloadsAcquired" .=) <$> _darDownloadsAcquired,
-                  ("reasonCode" .=) <$> _darReasonCode,
-                  ("volumeId" .=) <$> _darVolumeId,
-                  ("restricted" .=) <$> _darRestricted,
-                  ("source" .=) <$> _darSource,
-                  ("deviceAllowed" .=) <$> _darDeviceAllowed,
-                  ("message" .=) <$> _darMessage,
-                  ("nonce" .=) <$> _darNonce])
-
---
--- /See:/ 'dictlayerDataCommon' smart constructor.
-newtype DictlayerDataCommon = DictlayerDataCommon
-    { _ddcTitle :: Maybe Text
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DictlayerDataCommon' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ddcTitle'
-dictlayerDataCommon
-    :: DictlayerDataCommon
-dictlayerDataCommon =
-    DictlayerDataCommon
-    { _ddcTitle = Nothing
-    }
-
--- | The display title and localized canonical name to use when searching for
--- this entity on Google search.
-ddcTitle :: Lens' DictlayerDataCommon (Maybe Text)
-ddcTitle = lens _ddcTitle (\ s a -> s{_ddcTitle = a})
-
-instance FromJSON DictlayerDataCommon where
-        parseJSON
-          = withObject "DictlayerDataCommon"
-              (\ o -> DictlayerDataCommon <$> (o .:? "title"))
-
-instance ToJSON DictlayerDataCommon where
-        toJSON DictlayerDataCommon{..}
-          = object (catMaybes [("title" .=) <$> _ddcTitle])
-
---
--- /See:/ 'discoveryclustersClustersItem' smart constructor.
-data DiscoveryclustersClustersItem = DiscoveryclustersClustersItem
-    { _dciBannerWithContentContainer :: !(Maybe DiscoveryclustersClustersItemBanner_with_content_container)
-    , _dciUid                        :: !(Maybe Text)
-    , _dciTotalVolumes               :: !(Maybe (Textual Int32))
-    , _dciSubTitle                   :: !(Maybe Text)
-    , _dciTitle                      :: !(Maybe Text)
-    , _dciVolumes                    :: !(Maybe [Volume])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DiscoveryclustersClustersItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dciBannerWithContentContainer'
---
--- * 'dciUid'
---
--- * 'dciTotalVolumes'
---
--- * 'dciSubTitle'
---
--- * 'dciTitle'
---
--- * 'dciVolumes'
-discoveryclustersClustersItem
-    :: DiscoveryclustersClustersItem
-discoveryclustersClustersItem =
-    DiscoveryclustersClustersItem
-    { _dciBannerWithContentContainer = Nothing
-    , _dciUid = Nothing
-    , _dciTotalVolumes = Nothing
-    , _dciSubTitle = Nothing
-    , _dciTitle = Nothing
-    , _dciVolumes = Nothing
-    }
-
-dciBannerWithContentContainer :: Lens' DiscoveryclustersClustersItem (Maybe DiscoveryclustersClustersItemBanner_with_content_container)
-dciBannerWithContentContainer
-  = lens _dciBannerWithContentContainer
-      (\ s a -> s{_dciBannerWithContentContainer = a})
-
-dciUid :: Lens' DiscoveryclustersClustersItem (Maybe Text)
-dciUid = lens _dciUid (\ s a -> s{_dciUid = a})
-
-dciTotalVolumes :: Lens' DiscoveryclustersClustersItem (Maybe Int32)
-dciTotalVolumes
-  = lens _dciTotalVolumes
-      (\ s a -> s{_dciTotalVolumes = a})
-      . mapping _Coerce
-
-dciSubTitle :: Lens' DiscoveryclustersClustersItem (Maybe Text)
-dciSubTitle
-  = lens _dciSubTitle (\ s a -> s{_dciSubTitle = a})
-
-dciTitle :: Lens' DiscoveryclustersClustersItem (Maybe Text)
-dciTitle = lens _dciTitle (\ s a -> s{_dciTitle = a})
-
-dciVolumes :: Lens' DiscoveryclustersClustersItem [Volume]
-dciVolumes
-  = lens _dciVolumes (\ s a -> s{_dciVolumes = a}) .
-      _Default
-      . _Coerce
-
-instance FromJSON DiscoveryclustersClustersItem where
-        parseJSON
-          = withObject "DiscoveryclustersClustersItem"
-              (\ o ->
-                 DiscoveryclustersClustersItem <$>
-                   (o .:? "banner_with_content_container") <*>
-                     (o .:? "uid")
-                     <*> (o .:? "totalVolumes")
-                     <*> (o .:? "subTitle")
-                     <*> (o .:? "title")
-                     <*> (o .:? "volumes" .!= mempty))
-
-instance ToJSON DiscoveryclustersClustersItem where
-        toJSON DiscoveryclustersClustersItem{..}
-          = object
-              (catMaybes
-                 [("banner_with_content_container" .=) <$>
-                    _dciBannerWithContentContainer,
-                  ("uid" .=) <$> _dciUid,
-                  ("totalVolumes" .=) <$> _dciTotalVolumes,
-                  ("subTitle" .=) <$> _dciSubTitle,
-                  ("title" .=) <$> _dciTitle,
-                  ("volumes" .=) <$> _dciVolumes])
-
--- | The actual selling price of the book. This is the same as the suggested
--- retail or list price unless there are offers or discounts on this
--- volume. (In LITE projection.)
---
--- /See:/ 'volumeSaleInfoRetailPrice' smart constructor.
-data VolumeSaleInfoRetailPrice = VolumeSaleInfoRetailPrice
-    { _vsirpAmount       :: !(Maybe (Textual Double))
-    , _vsirpCurrencyCode :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VolumeSaleInfoRetailPrice' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vsirpAmount'
---
--- * 'vsirpCurrencyCode'
-volumeSaleInfoRetailPrice
-    :: VolumeSaleInfoRetailPrice
-volumeSaleInfoRetailPrice =
-    VolumeSaleInfoRetailPrice
-    { _vsirpAmount = Nothing
-    , _vsirpCurrencyCode = Nothing
-    }
-
--- | Amount in the currency listed below. (In LITE projection.)
-vsirpAmount :: Lens' VolumeSaleInfoRetailPrice (Maybe Double)
-vsirpAmount
-  = lens _vsirpAmount (\ s a -> s{_vsirpAmount = a}) .
-      mapping _Coerce
-
--- | An ISO 4217, three-letter currency code. (In LITE projection.)
-vsirpCurrencyCode :: Lens' VolumeSaleInfoRetailPrice (Maybe Text)
-vsirpCurrencyCode
-  = lens _vsirpCurrencyCode
-      (\ s a -> s{_vsirpCurrencyCode = a})
-
-instance FromJSON VolumeSaleInfoRetailPrice where
-        parseJSON
-          = withObject "VolumeSaleInfoRetailPrice"
-              (\ o ->
-                 VolumeSaleInfoRetailPrice <$>
-                   (o .:? "amount") <*> (o .:? "currencyCode"))
-
-instance ToJSON VolumeSaleInfoRetailPrice where
-        toJSON VolumeSaleInfoRetailPrice{..}
-          = object
-              (catMaybes
-                 [("amount" .=) <$> _vsirpAmount,
-                  ("currencyCode" .=) <$> _vsirpCurrencyCode])
-
--- | Suggested retail price. (In LITE projection.)
---
--- /See:/ 'volumeSaleInfoListPrice' smart constructor.
-data VolumeSaleInfoListPrice = VolumeSaleInfoListPrice
-    { _vsilpAmount       :: !(Maybe (Textual Double))
-    , _vsilpCurrencyCode :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VolumeSaleInfoListPrice' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vsilpAmount'
---
--- * 'vsilpCurrencyCode'
-volumeSaleInfoListPrice
-    :: VolumeSaleInfoListPrice
-volumeSaleInfoListPrice =
-    VolumeSaleInfoListPrice
-    { _vsilpAmount = Nothing
-    , _vsilpCurrencyCode = Nothing
-    }
-
--- | Amount in the currency listed below. (In LITE projection.)
-vsilpAmount :: Lens' VolumeSaleInfoListPrice (Maybe Double)
-vsilpAmount
-  = lens _vsilpAmount (\ s a -> s{_vsilpAmount = a}) .
-      mapping _Coerce
-
--- | An ISO 4217, three-letter currency code. (In LITE projection.)
-vsilpCurrencyCode :: Lens' VolumeSaleInfoListPrice (Maybe Text)
-vsilpCurrencyCode
-  = lens _vsilpCurrencyCode
-      (\ s a -> s{_vsilpCurrencyCode = a})
-
-instance FromJSON VolumeSaleInfoListPrice where
-        parseJSON
-          = withObject "VolumeSaleInfoListPrice"
-              (\ o ->
-                 VolumeSaleInfoListPrice <$>
-                   (o .:? "amount") <*> (o .:? "currencyCode"))
-
-instance ToJSON VolumeSaleInfoListPrice where
-        toJSON VolumeSaleInfoListPrice{..}
-          = object
-              (catMaybes
-                 [("amount" .=) <$> _vsilpAmount,
-                  ("currencyCode" .=) <$> _vsilpCurrencyCode])
-
---
--- /See:/ 'dictlayerDataDictWordsItemSensesItemConjugationsItem' smart constructor.
-data DictlayerDataDictWordsItemSensesItemConjugationsItem = DictlayerDataDictWordsItemSensesItemConjugationsItem
-    { _dddwisiciValue :: !(Maybe Text)
-    , _dddwisiciType  :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DictlayerDataDictWordsItemSensesItemConjugationsItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dddwisiciValue'
---
--- * 'dddwisiciType'
-dictlayerDataDictWordsItemSensesItemConjugationsItem
-    :: DictlayerDataDictWordsItemSensesItemConjugationsItem
-dictlayerDataDictWordsItemSensesItemConjugationsItem =
-    DictlayerDataDictWordsItemSensesItemConjugationsItem
-    { _dddwisiciValue = Nothing
-    , _dddwisiciType = Nothing
-    }
-
-dddwisiciValue :: Lens' DictlayerDataDictWordsItemSensesItemConjugationsItem (Maybe Text)
-dddwisiciValue
-  = lens _dddwisiciValue
-      (\ s a -> s{_dddwisiciValue = a})
-
-dddwisiciType :: Lens' DictlayerDataDictWordsItemSensesItemConjugationsItem (Maybe Text)
-dddwisiciType
-  = lens _dddwisiciType
-      (\ s a -> s{_dddwisiciType = a})
-
-instance FromJSON
-         DictlayerDataDictWordsItemSensesItemConjugationsItem
-         where
-        parseJSON
-          = withObject
-              "DictlayerDataDictWordsItemSensesItemConjugationsItem"
-              (\ o ->
-                 DictlayerDataDictWordsItemSensesItemConjugationsItem
-                   <$> (o .:? "value") <*> (o .:? "type"))
-
-instance ToJSON
-         DictlayerDataDictWordsItemSensesItemConjugationsItem
-         where
-        toJSON
-          DictlayerDataDictWordsItemSensesItemConjugationsItem{..}
-          = object
-              (catMaybes
-                 [("value" .=) <$> _dddwisiciValue,
-                  ("type" .=) <$> _dddwisiciType])
-
---
--- /See:/ 'volume2' smart constructor.
-data Volume2 = Volume2
-    { _voloNextPageToken :: !(Maybe Text)
-    , _voloKind          :: !Text
-    , _voloItems         :: !(Maybe [Volume])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Volume2' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'voloNextPageToken'
---
--- * 'voloKind'
---
--- * 'voloItems'
-volume2
-    :: Volume2
-volume2 =
-    Volume2
-    { _voloNextPageToken = Nothing
-    , _voloKind = "onboarding#volume"
-    , _voloItems = Nothing
-    }
-
-voloNextPageToken :: Lens' Volume2 (Maybe Text)
-voloNextPageToken
-  = lens _voloNextPageToken
-      (\ s a -> s{_voloNextPageToken = a})
-
--- | Resource type.
-voloKind :: Lens' Volume2 Text
-voloKind = lens _voloKind (\ s a -> s{_voloKind = a})
-
--- | A list of volumes.
-voloItems :: Lens' Volume2 [Volume]
-voloItems
-  = lens _voloItems (\ s a -> s{_voloItems = a}) .
-      _Default
-      . _Coerce
-
-instance FromJSON Volume2 where
-        parseJSON
-          = withObject "Volume2"
-              (\ o ->
-                 Volume2 <$>
-                   (o .:? "nextPageToken") <*>
-                     (o .:? "kind" .!= "onboarding#volume")
-                     <*> (o .:? "items" .!= mempty))
-
-instance ToJSON Volume2 where
-        toJSON Volume2{..}
-          = object
-              (catMaybes
-                 [("nextPageToken" .=) <$> _voloNextPageToken,
-                  Just ("kind" .= _voloKind),
-                  ("items" .=) <$> _voloItems])
-
---
--- /See:/ 'review' smart constructor.
-data Review = Review
-    { _rRating      :: !(Maybe Text)
-    , _rKind        :: !Text
-    , _rContent     :: !(Maybe Text)
-    , _rDate        :: !(Maybe Text)
-    , _rVolumeId    :: !(Maybe Text)
-    , _rAuthor      :: !(Maybe ReviewAuthor)
-    , _rSource      :: !(Maybe ReviewSource)
-    , _rFullTextURL :: !(Maybe Text)
-    , _rTitle       :: !(Maybe Text)
-    , _rType        :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Review' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rRating'
---
--- * 'rKind'
---
--- * 'rContent'
---
--- * 'rDate'
---
--- * 'rVolumeId'
---
--- * 'rAuthor'
---
--- * 'rSource'
---
--- * 'rFullTextURL'
---
--- * 'rTitle'
---
--- * 'rType'
-review
-    :: Review
-review =
-    Review
-    { _rRating = Nothing
-    , _rKind = "books#review"
-    , _rContent = Nothing
-    , _rDate = Nothing
-    , _rVolumeId = Nothing
-    , _rAuthor = Nothing
-    , _rSource = Nothing
-    , _rFullTextURL = Nothing
-    , _rTitle = Nothing
-    , _rType = Nothing
-    }
-
--- | Star rating for this review. Possible values are ONE, TWO, THREE, FOUR,
--- FIVE or NOT_RATED.
-rRating :: Lens' Review (Maybe Text)
-rRating = lens _rRating (\ s a -> s{_rRating = a})
-
--- | Resource type for a review.
-rKind :: Lens' Review Text
-rKind = lens _rKind (\ s a -> s{_rKind = a})
-
--- | Review text.
-rContent :: Lens' Review (Maybe Text)
-rContent = lens _rContent (\ s a -> s{_rContent = a})
-
--- | Date of this review.
-rDate :: Lens' Review (Maybe Text)
-rDate = lens _rDate (\ s a -> s{_rDate = a})
-
--- | Volume that this review is for.
-rVolumeId :: Lens' Review (Maybe Text)
-rVolumeId
-  = lens _rVolumeId (\ s a -> s{_rVolumeId = a})
-
--- | Author of this review.
-rAuthor :: Lens' Review (Maybe ReviewAuthor)
-rAuthor = lens _rAuthor (\ s a -> s{_rAuthor = a})
-
--- | Information regarding the source of this review, when the review is not
--- from a Google Books user.
-rSource :: Lens' Review (Maybe ReviewSource)
-rSource = lens _rSource (\ s a -> s{_rSource = a})
-
--- | URL for the full review text, for reviews gathered from the web.
-rFullTextURL :: Lens' Review (Maybe Text)
-rFullTextURL
-  = lens _rFullTextURL (\ s a -> s{_rFullTextURL = a})
-
--- | Title for this review.
-rTitle :: Lens' Review (Maybe Text)
-rTitle = lens _rTitle (\ s a -> s{_rTitle = a})
-
--- | Source type for this review. Possible values are EDITORIAL, WEB_USER or
--- GOOGLE_USER.
-rType :: Lens' Review (Maybe Text)
-rType = lens _rType (\ s a -> s{_rType = a})
-
-instance FromJSON Review where
-        parseJSON
-          = withObject "Review"
-              (\ o ->
-                 Review <$>
-                   (o .:? "rating") <*>
-                     (o .:? "kind" .!= "books#review")
-                     <*> (o .:? "content")
-                     <*> (o .:? "date")
-                     <*> (o .:? "volumeId")
-                     <*> (o .:? "author")
-                     <*> (o .:? "source")
-                     <*> (o .:? "fullTextUrl")
-                     <*> (o .:? "title")
-                     <*> (o .:? "type"))
-
-instance ToJSON Review where
-        toJSON Review{..}
-          = object
-              (catMaybes
-                 [("rating" .=) <$> _rRating, Just ("kind" .= _rKind),
-                  ("content" .=) <$> _rContent, ("date" .=) <$> _rDate,
-                  ("volumeId" .=) <$> _rVolumeId,
-                  ("author" .=) <$> _rAuthor,
-                  ("source" .=) <$> _rSource,
-                  ("fullTextUrl" .=) <$> _rFullTextURL,
-                  ("title" .=) <$> _rTitle, ("type" .=) <$> _rType])
-
--- | Period during this book is\/was a valid rental.
---
--- /See:/ 'volumeUserInfoRentalPeriod' smart constructor.
-data VolumeUserInfoRentalPeriod = VolumeUserInfoRentalPeriod
-    { _vuirpEndUtcSec   :: !(Maybe (Textual Int64))
-    , _vuirpStartUtcSec :: !(Maybe (Textual Int64))
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VolumeUserInfoRentalPeriod' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vuirpEndUtcSec'
---
--- * 'vuirpStartUtcSec'
-volumeUserInfoRentalPeriod
-    :: VolumeUserInfoRentalPeriod
-volumeUserInfoRentalPeriod =
-    VolumeUserInfoRentalPeriod
-    { _vuirpEndUtcSec = Nothing
-    , _vuirpStartUtcSec = Nothing
-    }
-
-vuirpEndUtcSec :: Lens' VolumeUserInfoRentalPeriod (Maybe Int64)
-vuirpEndUtcSec
-  = lens _vuirpEndUtcSec
-      (\ s a -> s{_vuirpEndUtcSec = a})
-      . mapping _Coerce
-
-vuirpStartUtcSec :: Lens' VolumeUserInfoRentalPeriod (Maybe Int64)
-vuirpStartUtcSec
-  = lens _vuirpStartUtcSec
-      (\ s a -> s{_vuirpStartUtcSec = a})
-      . mapping _Coerce
-
-instance FromJSON VolumeUserInfoRentalPeriod where
-        parseJSON
-          = withObject "VolumeUserInfoRentalPeriod"
-              (\ o ->
-                 VolumeUserInfoRentalPeriod <$>
-                   (o .:? "endUtcSec") <*> (o .:? "startUtcSec"))
-
-instance ToJSON VolumeUserInfoRentalPeriod where
-        toJSON VolumeUserInfoRentalPeriod{..}
-          = object
-              (catMaybes
-                 [("endUtcSec" .=) <$> _vuirpEndUtcSec,
-                  ("startUtcSec" .=) <$> _vuirpStartUtcSec])
-
--- | Any information about a volume related to the eBookstore and\/or
--- purchaseability. This information can depend on the country where the
--- request originates from (i.e. books may not be for sale in certain
--- countries).
---
--- /See:/ 'volumeSaleInfo' smart constructor.
-data VolumeSaleInfo = VolumeSaleInfo
-    { _vsiCountry     :: !(Maybe Text)
-    , _vsiOnSaleDate  :: !(Maybe DateTime')
-    , _vsiListPrice   :: !(Maybe VolumeSaleInfoListPrice)
-    , _vsiRetailPrice :: !(Maybe VolumeSaleInfoRetailPrice)
-    , _vsiOffers      :: !(Maybe [VolumeSaleInfoOffersItem])
-    , _vsiBuyLink     :: !(Maybe Text)
-    , _vsiIsEbook     :: !(Maybe Bool)
-    , _vsiSaleability :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VolumeSaleInfo' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vsiCountry'
---
--- * 'vsiOnSaleDate'
---
--- * 'vsiListPrice'
---
--- * 'vsiRetailPrice'
---
--- * 'vsiOffers'
---
--- * 'vsiBuyLink'
---
--- * 'vsiIsEbook'
---
--- * 'vsiSaleability'
-volumeSaleInfo
-    :: VolumeSaleInfo
-volumeSaleInfo =
-    VolumeSaleInfo
-    { _vsiCountry = Nothing
-    , _vsiOnSaleDate = Nothing
-    , _vsiListPrice = Nothing
-    , _vsiRetailPrice = Nothing
-    , _vsiOffers = Nothing
-    , _vsiBuyLink = Nothing
-    , _vsiIsEbook = Nothing
-    , _vsiSaleability = Nothing
-    }
-
--- | The two-letter ISO_3166-1 country code for which this sale information
--- is valid. (In LITE projection.)
-vsiCountry :: Lens' VolumeSaleInfo (Maybe Text)
-vsiCountry
-  = lens _vsiCountry (\ s a -> s{_vsiCountry = a})
-
--- | The date on which this book is available for sale.
-vsiOnSaleDate :: Lens' VolumeSaleInfo (Maybe UTCTime)
-vsiOnSaleDate
-  = lens _vsiOnSaleDate
-      (\ s a -> s{_vsiOnSaleDate = a})
-      . mapping _DateTime
-
--- | Suggested retail price. (In LITE projection.)
-vsiListPrice :: Lens' VolumeSaleInfo (Maybe VolumeSaleInfoListPrice)
-vsiListPrice
-  = lens _vsiListPrice (\ s a -> s{_vsiListPrice = a})
-
--- | The actual selling price of the book. This is the same as the suggested
--- retail or list price unless there are offers or discounts on this
--- volume. (In LITE projection.)
-vsiRetailPrice :: Lens' VolumeSaleInfo (Maybe VolumeSaleInfoRetailPrice)
-vsiRetailPrice
-  = lens _vsiRetailPrice
-      (\ s a -> s{_vsiRetailPrice = a})
-
--- | Offers available for this volume (sales and rentals).
-vsiOffers :: Lens' VolumeSaleInfo [VolumeSaleInfoOffersItem]
-vsiOffers
-  = lens _vsiOffers (\ s a -> s{_vsiOffers = a}) .
-      _Default
-      . _Coerce
-
--- | URL to purchase this volume on the Google Books site. (In LITE
--- projection)
-vsiBuyLink :: Lens' VolumeSaleInfo (Maybe Text)
-vsiBuyLink
-  = lens _vsiBuyLink (\ s a -> s{_vsiBuyLink = a})
-
--- | Whether or not this volume is an eBook (can be added to the My eBooks
--- shelf).
-vsiIsEbook :: Lens' VolumeSaleInfo (Maybe Bool)
-vsiIsEbook
-  = lens _vsiIsEbook (\ s a -> s{_vsiIsEbook = a})
-
--- | Whether or not this book is available for sale or offered for free in
--- the Google eBookstore for the country listed above. Possible values are
--- FOR_SALE, FOR_RENTAL_ONLY, FOR_SALE_AND_RENTAL, FREE, NOT_FOR_SALE, or
--- FOR_PREORDER.
-vsiSaleability :: Lens' VolumeSaleInfo (Maybe Text)
-vsiSaleability
-  = lens _vsiSaleability
-      (\ s a -> s{_vsiSaleability = a})
-
-instance FromJSON VolumeSaleInfo where
-        parseJSON
-          = withObject "VolumeSaleInfo"
-              (\ o ->
-                 VolumeSaleInfo <$>
-                   (o .:? "country") <*> (o .:? "onSaleDate") <*>
-                     (o .:? "listPrice")
-                     <*> (o .:? "retailPrice")
-                     <*> (o .:? "offers" .!= mempty)
-                     <*> (o .:? "buyLink")
-                     <*> (o .:? "isEbook")
-                     <*> (o .:? "saleability"))
-
-instance ToJSON VolumeSaleInfo where
-        toJSON VolumeSaleInfo{..}
-          = object
-              (catMaybes
-                 [("country" .=) <$> _vsiCountry,
-                  ("onSaleDate" .=) <$> _vsiOnSaleDate,
-                  ("listPrice" .=) <$> _vsiListPrice,
-                  ("retailPrice" .=) <$> _vsiRetailPrice,
-                  ("offers" .=) <$> _vsiOffers,
-                  ("buyLink" .=) <$> _vsiBuyLink,
-                  ("isEbook" .=) <$> _vsiIsEbook,
-                  ("saleability" .=) <$> _vsiSaleability])
-
---
--- /See:/ 'metadata' smart constructor.
-data Metadata = Metadata
-    { _mKind  :: !Text
-    , _mItems :: !(Maybe [MetadataItemsItem])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Metadata' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'mKind'
---
--- * 'mItems'
-metadata
-    :: Metadata
-metadata =
-    Metadata
-    { _mKind = "dictionary#metadata"
-    , _mItems = Nothing
-    }
-
--- | Resource type.
-mKind :: Lens' Metadata Text
-mKind = lens _mKind (\ s a -> s{_mKind = a})
-
--- | A list of offline dictionary metadata.
-mItems :: Lens' Metadata [MetadataItemsItem]
-mItems
-  = lens _mItems (\ s a -> s{_mItems = a}) . _Default .
-      _Coerce
-
-instance FromJSON Metadata where
-        parseJSON
-          = withObject "Metadata"
-              (\ o ->
-                 Metadata <$>
-                   (o .:? "kind" .!= "dictionary#metadata") <*>
-                     (o .:? "items" .!= mempty))
-
-instance ToJSON Metadata where
-        toJSON Metadata{..}
-          = object
-              (catMaybes
-                 [Just ("kind" .= _mKind), ("items" .=) <$> _mItems])
-
--- | What layers exist in this volume and high level information about them.
---
--- /See:/ 'volumeLayerInfo' smart constructor.
-newtype VolumeLayerInfo = VolumeLayerInfo
-    { _vliLayers :: Maybe [VolumeLayerInfoLayersItem]
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VolumeLayerInfo' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vliLayers'
-volumeLayerInfo
-    :: VolumeLayerInfo
-volumeLayerInfo =
-    VolumeLayerInfo
-    { _vliLayers = Nothing
-    }
-
--- | A layer should appear here if and only if the layer exists for this
--- book.
-vliLayers :: Lens' VolumeLayerInfo [VolumeLayerInfoLayersItem]
-vliLayers
-  = lens _vliLayers (\ s a -> s{_vliLayers = a}) .
-      _Default
-      . _Coerce
-
-instance FromJSON VolumeLayerInfo where
-        parseJSON
-          = withObject "VolumeLayerInfo"
-              (\ o ->
-                 VolumeLayerInfo <$> (o .:? "layers" .!= mempty))
-
-instance ToJSON VolumeLayerInfo where
-        toJSON VolumeLayerInfo{..}
-          = object (catMaybes [("layers" .=) <$> _vliLayers])
-
--- | Physical dimensions of this volume.
---
--- /See:/ 'volumeVolumeInfoDimensions' smart constructor.
-data VolumeVolumeInfoDimensions = VolumeVolumeInfoDimensions
-    { _vvidHeight    :: !(Maybe Text)
-    , _vvidWidth     :: !(Maybe Text)
-    , _vvidThickness :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VolumeVolumeInfoDimensions' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vvidHeight'
---
--- * 'vvidWidth'
---
--- * 'vvidThickness'
-volumeVolumeInfoDimensions
-    :: VolumeVolumeInfoDimensions
-volumeVolumeInfoDimensions =
-    VolumeVolumeInfoDimensions
-    { _vvidHeight = Nothing
-    , _vvidWidth = Nothing
-    , _vvidThickness = Nothing
-    }
-
--- | Height or length of this volume (in cm).
-vvidHeight :: Lens' VolumeVolumeInfoDimensions (Maybe Text)
-vvidHeight
-  = lens _vvidHeight (\ s a -> s{_vvidHeight = a})
-
--- | Width of this volume (in cm).
-vvidWidth :: Lens' VolumeVolumeInfoDimensions (Maybe Text)
-vvidWidth
-  = lens _vvidWidth (\ s a -> s{_vvidWidth = a})
-
--- | Thickness of this volume (in cm).
-vvidThickness :: Lens' VolumeVolumeInfoDimensions (Maybe Text)
-vvidThickness
-  = lens _vvidThickness
-      (\ s a -> s{_vvidThickness = a})
-
-instance FromJSON VolumeVolumeInfoDimensions where
-        parseJSON
-          = withObject "VolumeVolumeInfoDimensions"
-              (\ o ->
-                 VolumeVolumeInfoDimensions <$>
-                   (o .:? "height") <*> (o .:? "width") <*>
-                     (o .:? "thickness"))
-
-instance ToJSON VolumeVolumeInfoDimensions where
-        toJSON VolumeVolumeInfoDimensions{..}
-          = object
-              (catMaybes
-                 [("height" .=) <$> _vvidHeight,
-                  ("width" .=) <$> _vvidWidth,
-                  ("thickness" .=) <$> _vvidThickness])
-
---
--- /See:/ 'requestAccess' smart constructor.
-data RequestAccess = RequestAccess
-    { _raConcurrentAccess :: !(Maybe ConcurrentAccessRestriction)
-    , _raKind             :: !Text
-    , _raDownloadAccess   :: !(Maybe DownloadAccessRestriction)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'RequestAccess' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'raConcurrentAccess'
---
--- * 'raKind'
---
--- * 'raDownloadAccess'
-requestAccess
-    :: RequestAccess
-requestAccess =
-    RequestAccess
-    { _raConcurrentAccess = Nothing
-    , _raKind = "books#requestAccess"
-    , _raDownloadAccess = Nothing
-    }
-
--- | A concurrent access response.
-raConcurrentAccess :: Lens' RequestAccess (Maybe ConcurrentAccessRestriction)
-raConcurrentAccess
-  = lens _raConcurrentAccess
-      (\ s a -> s{_raConcurrentAccess = a})
-
--- | Resource type.
-raKind :: Lens' RequestAccess Text
-raKind = lens _raKind (\ s a -> s{_raKind = a})
-
--- | A download access response.
-raDownloadAccess :: Lens' RequestAccess (Maybe DownloadAccessRestriction)
-raDownloadAccess
-  = lens _raDownloadAccess
-      (\ s a -> s{_raDownloadAccess = a})
-
-instance FromJSON RequestAccess where
-        parseJSON
-          = withObject "RequestAccess"
-              (\ o ->
-                 RequestAccess <$>
-                   (o .:? "concurrentAccess") <*>
-                     (o .:? "kind" .!= "books#requestAccess")
-                     <*> (o .:? "downloadAccess"))
-
-instance ToJSON RequestAccess where
-        toJSON RequestAccess{..}
-          = object
-              (catMaybes
-                 [("concurrentAccess" .=) <$> _raConcurrentAccess,
-                  Just ("kind" .= _raKind),
-                  ("downloadAccess" .=) <$> _raDownloadAccess])
-
--- | Selection ranges sent from the client.
---
--- /See:/ 'annotationClientVersionRanges' smart constructor.
-data AnnotationClientVersionRanges = AnnotationClientVersionRanges
-    { _acvrGbImageRange   :: !(Maybe BooksAnnotationsRange)
-    , _acvrContentVersion :: !(Maybe Text)
-    , _acvrImageCfiRange  :: !(Maybe BooksAnnotationsRange)
-    , _acvrGbTextRange    :: !(Maybe BooksAnnotationsRange)
-    , _acvrCfiRange       :: !(Maybe BooksAnnotationsRange)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AnnotationClientVersionRanges' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'acvrGbImageRange'
---
--- * 'acvrContentVersion'
---
--- * 'acvrImageCfiRange'
---
--- * 'acvrGbTextRange'
---
--- * 'acvrCfiRange'
-annotationClientVersionRanges
-    :: AnnotationClientVersionRanges
-annotationClientVersionRanges =
-    AnnotationClientVersionRanges
-    { _acvrGbImageRange = Nothing
-    , _acvrContentVersion = Nothing
-    , _acvrImageCfiRange = Nothing
-    , _acvrGbTextRange = Nothing
-    , _acvrCfiRange = Nothing
-    }
-
--- | Range in GB image format for this annotation sent by client.
-acvrGbImageRange :: Lens' AnnotationClientVersionRanges (Maybe BooksAnnotationsRange)
-acvrGbImageRange
-  = lens _acvrGbImageRange
-      (\ s a -> s{_acvrGbImageRange = a})
-
--- | Content version the client sent in.
-acvrContentVersion :: Lens' AnnotationClientVersionRanges (Maybe Text)
-acvrContentVersion
-  = lens _acvrContentVersion
-      (\ s a -> s{_acvrContentVersion = a})
-
--- | Range in image CFI format for this annotation sent by client.
-acvrImageCfiRange :: Lens' AnnotationClientVersionRanges (Maybe BooksAnnotationsRange)
-acvrImageCfiRange
-  = lens _acvrImageCfiRange
-      (\ s a -> s{_acvrImageCfiRange = a})
-
--- | Range in GB text format for this annotation sent by client.
-acvrGbTextRange :: Lens' AnnotationClientVersionRanges (Maybe BooksAnnotationsRange)
-acvrGbTextRange
-  = lens _acvrGbTextRange
-      (\ s a -> s{_acvrGbTextRange = a})
-
--- | Range in CFI format for this annotation sent by client.
-acvrCfiRange :: Lens' AnnotationClientVersionRanges (Maybe BooksAnnotationsRange)
-acvrCfiRange
-  = lens _acvrCfiRange (\ s a -> s{_acvrCfiRange = a})
-
-instance FromJSON AnnotationClientVersionRanges where
-        parseJSON
-          = withObject "AnnotationClientVersionRanges"
-              (\ o ->
-                 AnnotationClientVersionRanges <$>
-                   (o .:? "gbImageRange") <*> (o .:? "contentVersion")
-                     <*> (o .:? "imageCfiRange")
-                     <*> (o .:? "gbTextRange")
-                     <*> (o .:? "cfiRange"))
-
-instance ToJSON AnnotationClientVersionRanges where
-        toJSON AnnotationClientVersionRanges{..}
-          = object
-              (catMaybes
-                 [("gbImageRange" .=) <$> _acvrGbImageRange,
-                  ("contentVersion" .=) <$> _acvrContentVersion,
-                  ("imageCfiRange" .=) <$> _acvrImageCfiRange,
-                  ("gbTextRange" .=) <$> _acvrGbTextRange,
-                  ("cfiRange" .=) <$> _acvrCfiRange])
-
---
--- /See:/ 'dictlayerDataDictWordsItemSensesItemDefinitionsItem' smart constructor.
-data DictlayerDataDictWordsItemSensesItemDefinitionsItem = DictlayerDataDictWordsItemSensesItemDefinitionsItem
-    { _dddwisidiDefinition :: !(Maybe Text)
-    , _dddwisidiExamples   :: !(Maybe [DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItem])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DictlayerDataDictWordsItemSensesItemDefinitionsItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dddwisidiDefinition'
---
--- * 'dddwisidiExamples'
-dictlayerDataDictWordsItemSensesItemDefinitionsItem
-    :: DictlayerDataDictWordsItemSensesItemDefinitionsItem
-dictlayerDataDictWordsItemSensesItemDefinitionsItem =
-    DictlayerDataDictWordsItemSensesItemDefinitionsItem
-    { _dddwisidiDefinition = Nothing
-    , _dddwisidiExamples = Nothing
-    }
-
-dddwisidiDefinition :: Lens' DictlayerDataDictWordsItemSensesItemDefinitionsItem (Maybe Text)
-dddwisidiDefinition
-  = lens _dddwisidiDefinition
-      (\ s a -> s{_dddwisidiDefinition = a})
-
-dddwisidiExamples :: Lens' DictlayerDataDictWordsItemSensesItemDefinitionsItem [DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItem]
-dddwisidiExamples
-  = lens _dddwisidiExamples
-      (\ s a -> s{_dddwisidiExamples = a})
-      . _Default
-      . _Coerce
-
-instance FromJSON
-         DictlayerDataDictWordsItemSensesItemDefinitionsItem
-         where
-        parseJSON
-          = withObject
-              "DictlayerDataDictWordsItemSensesItemDefinitionsItem"
-              (\ o ->
-                 DictlayerDataDictWordsItemSensesItemDefinitionsItem
-                   <$>
-                   (o .:? "definition") <*>
-                     (o .:? "examples" .!= mempty))
-
-instance ToJSON
-         DictlayerDataDictWordsItemSensesItemDefinitionsItem
-         where
-        toJSON
-          DictlayerDataDictWordsItemSensesItemDefinitionsItem{..}
-          = object
-              (catMaybes
-                 [("definition" .=) <$> _dddwisidiDefinition,
-                  ("examples" .=) <$> _dddwisidiExamples])
-
---
--- /See:/ 'volumeLayerInfoLayersItem' smart constructor.
-data VolumeLayerInfoLayersItem = VolumeLayerInfoLayersItem
-    { _vliliVolumeAnnotationsVersion :: !(Maybe Text)
-    , _vliliLayerId                  :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VolumeLayerInfoLayersItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vliliVolumeAnnotationsVersion'
---
--- * 'vliliLayerId'
-volumeLayerInfoLayersItem
-    :: VolumeLayerInfoLayersItem
-volumeLayerInfoLayersItem =
-    VolumeLayerInfoLayersItem
-    { _vliliVolumeAnnotationsVersion = Nothing
-    , _vliliLayerId = Nothing
-    }
-
--- | The current version of this layer\'s volume annotations. Note that this
--- version applies only to the data in the books.layers.volumeAnnotations.*
--- responses. The actual annotation data is versioned separately.
-vliliVolumeAnnotationsVersion :: Lens' VolumeLayerInfoLayersItem (Maybe Text)
-vliliVolumeAnnotationsVersion
-  = lens _vliliVolumeAnnotationsVersion
-      (\ s a -> s{_vliliVolumeAnnotationsVersion = a})
-
--- | The layer id of this layer (e.g. \"geo\").
-vliliLayerId :: Lens' VolumeLayerInfoLayersItem (Maybe Text)
-vliliLayerId
-  = lens _vliliLayerId (\ s a -> s{_vliliLayerId = a})
-
-instance FromJSON VolumeLayerInfoLayersItem where
-        parseJSON
-          = withObject "VolumeLayerInfoLayersItem"
-              (\ o ->
-                 VolumeLayerInfoLayersItem <$>
-                   (o .:? "volumeAnnotationsVersion") <*>
-                     (o .:? "layerId"))
-
-instance ToJSON VolumeLayerInfoLayersItem where
-        toJSON VolumeLayerInfoLayersItem{..}
-          = object
-              (catMaybes
-                 [("volumeAnnotationsVersion" .=) <$>
-                    _vliliVolumeAnnotationsVersion,
-                  ("layerId" .=) <$> _vliliLayerId])
-
--- | Selection ranges for the most recent content version.
---
--- /See:/ 'annotationCurrentVersionRanges' smart constructor.
-data AnnotationCurrentVersionRanges = AnnotationCurrentVersionRanges
-    { _aGbImageRange   :: !(Maybe BooksAnnotationsRange)
-    , _aContentVersion :: !(Maybe Text)
-    , _aImageCfiRange  :: !(Maybe BooksAnnotationsRange)
-    , _aGbTextRange    :: !(Maybe BooksAnnotationsRange)
-    , _aCfiRange       :: !(Maybe BooksAnnotationsRange)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AnnotationCurrentVersionRanges' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'aGbImageRange'
---
--- * 'aContentVersion'
---
--- * 'aImageCfiRange'
---
--- * 'aGbTextRange'
---
--- * 'aCfiRange'
-annotationCurrentVersionRanges
-    :: AnnotationCurrentVersionRanges
-annotationCurrentVersionRanges =
-    AnnotationCurrentVersionRanges
-    { _aGbImageRange = Nothing
-    , _aContentVersion = Nothing
-    , _aImageCfiRange = Nothing
-    , _aGbTextRange = Nothing
-    , _aCfiRange = Nothing
-    }
-
--- | Range in GB image format for this annotation for version above.
-aGbImageRange :: Lens' AnnotationCurrentVersionRanges (Maybe BooksAnnotationsRange)
-aGbImageRange
-  = lens _aGbImageRange
-      (\ s a -> s{_aGbImageRange = a})
-
--- | Content version applicable to ranges below.
-aContentVersion :: Lens' AnnotationCurrentVersionRanges (Maybe Text)
-aContentVersion
-  = lens _aContentVersion
-      (\ s a -> s{_aContentVersion = a})
-
--- | Range in image CFI format for this annotation for version above.
-aImageCfiRange :: Lens' AnnotationCurrentVersionRanges (Maybe BooksAnnotationsRange)
-aImageCfiRange
-  = lens _aImageCfiRange
-      (\ s a -> s{_aImageCfiRange = a})
-
--- | Range in GB text format for this annotation for version above.
-aGbTextRange :: Lens' AnnotationCurrentVersionRanges (Maybe BooksAnnotationsRange)
-aGbTextRange
-  = lens _aGbTextRange (\ s a -> s{_aGbTextRange = a})
-
--- | Range in CFI format for this annotation for version above.
-aCfiRange :: Lens' AnnotationCurrentVersionRanges (Maybe BooksAnnotationsRange)
-aCfiRange
-  = lens _aCfiRange (\ s a -> s{_aCfiRange = a})
-
-instance FromJSON AnnotationCurrentVersionRanges
-         where
-        parseJSON
-          = withObject "AnnotationCurrentVersionRanges"
-              (\ o ->
-                 AnnotationCurrentVersionRanges <$>
-                   (o .:? "gbImageRange") <*> (o .:? "contentVersion")
-                     <*> (o .:? "imageCfiRange")
-                     <*> (o .:? "gbTextRange")
-                     <*> (o .:? "cfiRange"))
-
-instance ToJSON AnnotationCurrentVersionRanges where
-        toJSON AnnotationCurrentVersionRanges{..}
-          = object
-              (catMaybes
-                 [("gbImageRange" .=) <$> _aGbImageRange,
-                  ("contentVersion" .=) <$> _aContentVersion,
-                  ("imageCfiRange" .=) <$> _aImageCfiRange,
-                  ("gbTextRange" .=) <$> _aGbTextRange,
-                  ("cfiRange" .=) <$> _aCfiRange])
-
--- | Information about pdf content. (In LITE projection.)
---
--- /See:/ 'volumeAccessInfoPdf' smart constructor.
-data VolumeAccessInfoPdf = VolumeAccessInfoPdf
-    { _vaipAcsTokenLink :: !(Maybe Text)
-    , _vaipIsAvailable  :: !(Maybe Bool)
-    , _vaipDownloadLink :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VolumeAccessInfoPdf' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vaipAcsTokenLink'
---
--- * 'vaipIsAvailable'
---
--- * 'vaipDownloadLink'
-volumeAccessInfoPdf
-    :: VolumeAccessInfoPdf
-volumeAccessInfoPdf =
-    VolumeAccessInfoPdf
-    { _vaipAcsTokenLink = Nothing
-    , _vaipIsAvailable = Nothing
-    , _vaipDownloadLink = Nothing
-    }
-
--- | URL to retrieve ACS token for pdf download. (In LITE projection.)
-vaipAcsTokenLink :: Lens' VolumeAccessInfoPdf (Maybe Text)
-vaipAcsTokenLink
-  = lens _vaipAcsTokenLink
-      (\ s a -> s{_vaipAcsTokenLink = a})
-
--- | Is a scanned image pdf available either as public domain or for
--- purchase. (In LITE projection.)
-vaipIsAvailable :: Lens' VolumeAccessInfoPdf (Maybe Bool)
-vaipIsAvailable
-  = lens _vaipIsAvailable
-      (\ s a -> s{_vaipIsAvailable = a})
-
--- | URL to download pdf. (In LITE projection.)
-vaipDownloadLink :: Lens' VolumeAccessInfoPdf (Maybe Text)
-vaipDownloadLink
-  = lens _vaipDownloadLink
-      (\ s a -> s{_vaipDownloadLink = a})
-
-instance FromJSON VolumeAccessInfoPdf where
-        parseJSON
-          = withObject "VolumeAccessInfoPdf"
-              (\ o ->
-                 VolumeAccessInfoPdf <$>
-                   (o .:? "acsTokenLink") <*> (o .:? "isAvailable") <*>
-                     (o .:? "downloadLink"))
-
-instance ToJSON VolumeAccessInfoPdf where
-        toJSON VolumeAccessInfoPdf{..}
-          = object
-              (catMaybes
-                 [("acsTokenLink" .=) <$> _vaipAcsTokenLink,
-                  ("isAvailable" .=) <$> _vaipIsAvailable,
-                  ("downloadLink" .=) <$> _vaipDownloadLink])
-
---
--- /See:/ 'dictlayerDataDictWordsItemExamplesItemSource' smart constructor.
-data DictlayerDataDictWordsItemExamplesItemSource = DictlayerDataDictWordsItemExamplesItemSource
-    { _dddwieisURL         :: !(Maybe Text)
-    , _dddwieisAttribution :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DictlayerDataDictWordsItemExamplesItemSource' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dddwieisURL'
---
--- * 'dddwieisAttribution'
-dictlayerDataDictWordsItemExamplesItemSource
-    :: DictlayerDataDictWordsItemExamplesItemSource
-dictlayerDataDictWordsItemExamplesItemSource =
-    DictlayerDataDictWordsItemExamplesItemSource
-    { _dddwieisURL = Nothing
-    , _dddwieisAttribution = Nothing
-    }
-
-dddwieisURL :: Lens' DictlayerDataDictWordsItemExamplesItemSource (Maybe Text)
-dddwieisURL
-  = lens _dddwieisURL (\ s a -> s{_dddwieisURL = a})
-
-dddwieisAttribution :: Lens' DictlayerDataDictWordsItemExamplesItemSource (Maybe Text)
-dddwieisAttribution
-  = lens _dddwieisAttribution
-      (\ s a -> s{_dddwieisAttribution = a})
-
-instance FromJSON
-         DictlayerDataDictWordsItemExamplesItemSource where
-        parseJSON
-          = withObject
-              "DictlayerDataDictWordsItemExamplesItemSource"
-              (\ o ->
-                 DictlayerDataDictWordsItemExamplesItemSource <$>
-                   (o .:? "url") <*> (o .:? "attribution"))
-
-instance ToJSON
-         DictlayerDataDictWordsItemExamplesItemSource where
-        toJSON
-          DictlayerDataDictWordsItemExamplesItemSource{..}
-          = object
-              (catMaybes
-                 [("url" .=) <$> _dddwieisURL,
-                  ("attribution" .=) <$> _dddwieisAttribution])
-
--- | Information about epub content. (In LITE projection.)
---
--- /See:/ 'volumeAccessInfoEpub' smart constructor.
-data VolumeAccessInfoEpub = VolumeAccessInfoEpub
-    { _vaieAcsTokenLink :: !(Maybe Text)
-    , _vaieIsAvailable  :: !(Maybe Bool)
-    , _vaieDownloadLink :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VolumeAccessInfoEpub' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vaieAcsTokenLink'
---
--- * 'vaieIsAvailable'
---
--- * 'vaieDownloadLink'
-volumeAccessInfoEpub
-    :: VolumeAccessInfoEpub
-volumeAccessInfoEpub =
-    VolumeAccessInfoEpub
-    { _vaieAcsTokenLink = Nothing
-    , _vaieIsAvailable = Nothing
-    , _vaieDownloadLink = Nothing
-    }
-
--- | URL to retrieve ACS token for epub download. (In LITE projection.)
-vaieAcsTokenLink :: Lens' VolumeAccessInfoEpub (Maybe Text)
-vaieAcsTokenLink
-  = lens _vaieAcsTokenLink
-      (\ s a -> s{_vaieAcsTokenLink = a})
-
--- | Is a flowing text epub available either as public domain or for
--- purchase. (In LITE projection.)
-vaieIsAvailable :: Lens' VolumeAccessInfoEpub (Maybe Bool)
-vaieIsAvailable
-  = lens _vaieIsAvailable
-      (\ s a -> s{_vaieIsAvailable = a})
-
--- | URL to download epub. (In LITE projection.)
-vaieDownloadLink :: Lens' VolumeAccessInfoEpub (Maybe Text)
-vaieDownloadLink
-  = lens _vaieDownloadLink
-      (\ s a -> s{_vaieDownloadLink = a})
-
-instance FromJSON VolumeAccessInfoEpub where
-        parseJSON
-          = withObject "VolumeAccessInfoEpub"
-              (\ o ->
-                 VolumeAccessInfoEpub <$>
-                   (o .:? "acsTokenLink") <*> (o .:? "isAvailable") <*>
-                     (o .:? "downloadLink"))
-
-instance ToJSON VolumeAccessInfoEpub where
-        toJSON VolumeAccessInfoEpub{..}
-          = object
-              (catMaybes
-                 [("acsTokenLink" .=) <$> _vaieAcsTokenLink,
-                  ("isAvailable" .=) <$> _vaieIsAvailable,
-                  ("downloadLink" .=) <$> _vaieDownloadLink])
-
---
--- /See:/ 'readingPosition' smart constructor.
-data ReadingPosition = ReadingPosition
-    { _rpEpubCfiPosition :: !(Maybe Text)
-    , _rpKind            :: !Text
-    , _rpGbImagePosition :: !(Maybe Text)
-    , _rpPdfPosition     :: !(Maybe Text)
-    , _rpVolumeId        :: !(Maybe Text)
-    , _rpUpdated         :: !(Maybe DateTime')
-    , _rpGbTextPosition  :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ReadingPosition' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rpEpubCfiPosition'
---
--- * 'rpKind'
---
--- * 'rpGbImagePosition'
---
--- * 'rpPdfPosition'
---
--- * 'rpVolumeId'
---
--- * 'rpUpdated'
---
--- * 'rpGbTextPosition'
-readingPosition
-    :: ReadingPosition
-readingPosition =
-    ReadingPosition
-    { _rpEpubCfiPosition = Nothing
-    , _rpKind = "books#readingPosition"
-    , _rpGbImagePosition = Nothing
-    , _rpPdfPosition = Nothing
-    , _rpVolumeId = Nothing
-    , _rpUpdated = Nothing
-    , _rpGbTextPosition = Nothing
-    }
-
--- | Position in an EPUB as a CFI.
-rpEpubCfiPosition :: Lens' ReadingPosition (Maybe Text)
-rpEpubCfiPosition
-  = lens _rpEpubCfiPosition
-      (\ s a -> s{_rpEpubCfiPosition = a})
-
--- | Resource type for a reading position.
-rpKind :: Lens' ReadingPosition Text
-rpKind = lens _rpKind (\ s a -> s{_rpKind = a})
-
--- | Position in a volume for image-based content.
-rpGbImagePosition :: Lens' ReadingPosition (Maybe Text)
-rpGbImagePosition
-  = lens _rpGbImagePosition
-      (\ s a -> s{_rpGbImagePosition = a})
-
--- | Position in a PDF file.
-rpPdfPosition :: Lens' ReadingPosition (Maybe Text)
-rpPdfPosition
-  = lens _rpPdfPosition
-      (\ s a -> s{_rpPdfPosition = a})
-
--- | Volume id associated with this reading position.
-rpVolumeId :: Lens' ReadingPosition (Maybe Text)
-rpVolumeId
-  = lens _rpVolumeId (\ s a -> s{_rpVolumeId = a})
-
--- | Timestamp when this reading position was last updated (formatted UTC
--- timestamp with millisecond resolution).
-rpUpdated :: Lens' ReadingPosition (Maybe UTCTime)
-rpUpdated
-  = lens _rpUpdated (\ s a -> s{_rpUpdated = a}) .
-      mapping _DateTime
-
--- | Position in a volume for text-based content.
-rpGbTextPosition :: Lens' ReadingPosition (Maybe Text)
-rpGbTextPosition
-  = lens _rpGbTextPosition
-      (\ s a -> s{_rpGbTextPosition = a})
-
-instance FromJSON ReadingPosition where
-        parseJSON
-          = withObject "ReadingPosition"
-              (\ o ->
-                 ReadingPosition <$>
-                   (o .:? "epubCfiPosition") <*>
-                     (o .:? "kind" .!= "books#readingPosition")
-                     <*> (o .:? "gbImagePosition")
-                     <*> (o .:? "pdfPosition")
-                     <*> (o .:? "volumeId")
-                     <*> (o .:? "updated")
-                     <*> (o .:? "gbTextPosition"))
-
-instance ToJSON ReadingPosition where
-        toJSON ReadingPosition{..}
-          = object
-              (catMaybes
-                 [("epubCfiPosition" .=) <$> _rpEpubCfiPosition,
-                  Just ("kind" .= _rpKind),
-                  ("gbImagePosition" .=) <$> _rpGbImagePosition,
-                  ("pdfPosition" .=) <$> _rpPdfPosition,
-                  ("volumeId" .=) <$> _rpVolumeId,
-                  ("updated" .=) <$> _rpUpdated,
-                  ("gbTextPosition" .=) <$> _rpGbTextPosition])
-
---
--- /See:/ 'volumeSaleInfoOffersItem' smart constructor.
-data VolumeSaleInfoOffersItem = VolumeSaleInfoOffersItem
-    { _vsioiFinskyOfferType :: !(Maybe (Textual Int32))
-    , _vsioiRentalDuration  :: !(Maybe VolumeSaleInfoOffersItemRentalDuration)
-    , _vsioiListPrice       :: !(Maybe VolumeSaleInfoOffersItemListPrice)
-    , _vsioiRetailPrice     :: !(Maybe VolumeSaleInfoOffersItemRetailPrice)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VolumeSaleInfoOffersItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vsioiFinskyOfferType'
---
--- * 'vsioiRentalDuration'
---
--- * 'vsioiListPrice'
---
--- * 'vsioiRetailPrice'
-volumeSaleInfoOffersItem
-    :: VolumeSaleInfoOffersItem
-volumeSaleInfoOffersItem =
-    VolumeSaleInfoOffersItem
-    { _vsioiFinskyOfferType = Nothing
-    , _vsioiRentalDuration = Nothing
-    , _vsioiListPrice = Nothing
-    , _vsioiRetailPrice = Nothing
-    }
-
--- | The finsky offer type (e.g., PURCHASE=0 RENTAL=3)
-vsioiFinskyOfferType :: Lens' VolumeSaleInfoOffersItem (Maybe Int32)
-vsioiFinskyOfferType
-  = lens _vsioiFinskyOfferType
-      (\ s a -> s{_vsioiFinskyOfferType = a})
-      . mapping _Coerce
-
--- | The rental duration (for rental offers only).
-vsioiRentalDuration :: Lens' VolumeSaleInfoOffersItem (Maybe VolumeSaleInfoOffersItemRentalDuration)
-vsioiRentalDuration
-  = lens _vsioiRentalDuration
-      (\ s a -> s{_vsioiRentalDuration = a})
-
--- | Offer list (=undiscounted) price in Micros.
-vsioiListPrice :: Lens' VolumeSaleInfoOffersItem (Maybe VolumeSaleInfoOffersItemListPrice)
-vsioiListPrice
-  = lens _vsioiListPrice
-      (\ s a -> s{_vsioiListPrice = a})
-
--- | Offer retail (=discounted) price in Micros
-vsioiRetailPrice :: Lens' VolumeSaleInfoOffersItem (Maybe VolumeSaleInfoOffersItemRetailPrice)
-vsioiRetailPrice
-  = lens _vsioiRetailPrice
-      (\ s a -> s{_vsioiRetailPrice = a})
-
-instance FromJSON VolumeSaleInfoOffersItem where
-        parseJSON
-          = withObject "VolumeSaleInfoOffersItem"
-              (\ o ->
-                 VolumeSaleInfoOffersItem <$>
-                   (o .:? "finskyOfferType") <*>
-                     (o .:? "rentalDuration")
-                     <*> (o .:? "listPrice")
-                     <*> (o .:? "retailPrice"))
-
-instance ToJSON VolumeSaleInfoOffersItem where
-        toJSON VolumeSaleInfoOffersItem{..}
-          = object
-              (catMaybes
-                 [("finskyOfferType" .=) <$> _vsioiFinskyOfferType,
-                  ("rentalDuration" .=) <$> _vsioiRentalDuration,
-                  ("listPrice" .=) <$> _vsioiListPrice,
-                  ("retailPrice" .=) <$> _vsioiRetailPrice])
-
---
--- /See:/ 'dictlayerDataDict' smart constructor.
-data DictlayerDataDict = DictlayerDataDict
-    { _dddSource :: !(Maybe DictlayerDataDictSource)
-    , _dddWords  :: !(Maybe [DictlayerDataDictWordsItem])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DictlayerDataDict' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dddSource'
---
--- * 'dddWords'
-dictlayerDataDict
-    :: DictlayerDataDict
-dictlayerDataDict =
-    DictlayerDataDict
-    { _dddSource = Nothing
-    , _dddWords = Nothing
-    }
-
--- | The source, url and attribution for this dictionary data.
-dddSource :: Lens' DictlayerDataDict (Maybe DictlayerDataDictSource)
-dddSource
-  = lens _dddSource (\ s a -> s{_dddSource = a})
-
-dddWords :: Lens' DictlayerDataDict [DictlayerDataDictWordsItem]
-dddWords
-  = lens _dddWords (\ s a -> s{_dddWords = a}) .
-      _Default
-      . _Coerce
-
-instance FromJSON DictlayerDataDict where
-        parseJSON
-          = withObject "DictlayerDataDict"
-              (\ o ->
-                 DictlayerDataDict <$>
-                   (o .:? "source") <*> (o .:? "words" .!= mempty))
-
-instance ToJSON DictlayerDataDict where
-        toJSON DictlayerDataDict{..}
-          = object
-              (catMaybes
-                 [("source" .=) <$> _dddSource,
-                  ("words" .=) <$> _dddWords])
-
---
--- /See:/ 'dictlayerDataDictWordsItemSensesItem' smart constructor.
-data DictlayerDataDictWordsItemSensesItem = DictlayerDataDictWordsItemSensesItem
-    { _dddwisiPronunciationURL :: !(Maybe Text)
-    , _dddwisiConjugations     :: !(Maybe [DictlayerDataDictWordsItemSensesItemConjugationsItem])
-    , _dddwisiPronunciation    :: !(Maybe Text)
-    , _dddwisiSynonyms         :: !(Maybe [DictlayerDataDictWordsItemSensesItemSynonymsItem])
-    , _dddwisiSource           :: !(Maybe DictlayerDataDictWordsItemSensesItemSource)
-    , _dddwisiPartOfSpeech     :: !(Maybe Text)
-    , _dddwisiDefinitions      :: !(Maybe [DictlayerDataDictWordsItemSensesItemDefinitionsItem])
-    , _dddwisiSyllabification  :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DictlayerDataDictWordsItemSensesItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dddwisiPronunciationURL'
---
--- * 'dddwisiConjugations'
---
--- * 'dddwisiPronunciation'
---
--- * 'dddwisiSynonyms'
---
--- * 'dddwisiSource'
---
--- * 'dddwisiPartOfSpeech'
---
--- * 'dddwisiDefinitions'
---
--- * 'dddwisiSyllabification'
-dictlayerDataDictWordsItemSensesItem
-    :: DictlayerDataDictWordsItemSensesItem
-dictlayerDataDictWordsItemSensesItem =
-    DictlayerDataDictWordsItemSensesItem
-    { _dddwisiPronunciationURL = Nothing
-    , _dddwisiConjugations = Nothing
-    , _dddwisiPronunciation = Nothing
-    , _dddwisiSynonyms = Nothing
-    , _dddwisiSource = Nothing
-    , _dddwisiPartOfSpeech = Nothing
-    , _dddwisiDefinitions = Nothing
-    , _dddwisiSyllabification = Nothing
-    }
-
-dddwisiPronunciationURL :: Lens' DictlayerDataDictWordsItemSensesItem (Maybe Text)
-dddwisiPronunciationURL
-  = lens _dddwisiPronunciationURL
-      (\ s a -> s{_dddwisiPronunciationURL = a})
-
-dddwisiConjugations :: Lens' DictlayerDataDictWordsItemSensesItem [DictlayerDataDictWordsItemSensesItemConjugationsItem]
-dddwisiConjugations
-  = lens _dddwisiConjugations
-      (\ s a -> s{_dddwisiConjugations = a})
-      . _Default
-      . _Coerce
-
-dddwisiPronunciation :: Lens' DictlayerDataDictWordsItemSensesItem (Maybe Text)
-dddwisiPronunciation
-  = lens _dddwisiPronunciation
-      (\ s a -> s{_dddwisiPronunciation = a})
-
-dddwisiSynonyms :: Lens' DictlayerDataDictWordsItemSensesItem [DictlayerDataDictWordsItemSensesItemSynonymsItem]
-dddwisiSynonyms
-  = lens _dddwisiSynonyms
-      (\ s a -> s{_dddwisiSynonyms = a})
-      . _Default
-      . _Coerce
-
-dddwisiSource :: Lens' DictlayerDataDictWordsItemSensesItem (Maybe DictlayerDataDictWordsItemSensesItemSource)
-dddwisiSource
-  = lens _dddwisiSource
-      (\ s a -> s{_dddwisiSource = a})
-
-dddwisiPartOfSpeech :: Lens' DictlayerDataDictWordsItemSensesItem (Maybe Text)
-dddwisiPartOfSpeech
-  = lens _dddwisiPartOfSpeech
-      (\ s a -> s{_dddwisiPartOfSpeech = a})
-
-dddwisiDefinitions :: Lens' DictlayerDataDictWordsItemSensesItem [DictlayerDataDictWordsItemSensesItemDefinitionsItem]
-dddwisiDefinitions
-  = lens _dddwisiDefinitions
-      (\ s a -> s{_dddwisiDefinitions = a})
-      . _Default
-      . _Coerce
-
-dddwisiSyllabification :: Lens' DictlayerDataDictWordsItemSensesItem (Maybe Text)
-dddwisiSyllabification
-  = lens _dddwisiSyllabification
-      (\ s a -> s{_dddwisiSyllabification = a})
-
-instance FromJSON
-         DictlayerDataDictWordsItemSensesItem where
-        parseJSON
-          = withObject "DictlayerDataDictWordsItemSensesItem"
-              (\ o ->
-                 DictlayerDataDictWordsItemSensesItem <$>
-                   (o .:? "pronunciationUrl") <*>
-                     (o .:? "conjugations" .!= mempty)
-                     <*> (o .:? "pronunciation")
-                     <*> (o .:? "synonyms" .!= mempty)
-                     <*> (o .:? "source")
-                     <*> (o .:? "partOfSpeech")
-                     <*> (o .:? "definitions" .!= mempty)
-                     <*> (o .:? "syllabification"))
-
-instance ToJSON DictlayerDataDictWordsItemSensesItem
-         where
-        toJSON DictlayerDataDictWordsItemSensesItem{..}
-          = object
-              (catMaybes
-                 [("pronunciationUrl" .=) <$>
-                    _dddwisiPronunciationURL,
-                  ("conjugations" .=) <$> _dddwisiConjugations,
-                  ("pronunciation" .=) <$> _dddwisiPronunciation,
-                  ("synonyms" .=) <$> _dddwisiSynonyms,
-                  ("source" .=) <$> _dddwisiSource,
-                  ("partOfSpeech" .=) <$> _dddwisiPartOfSpeech,
-                  ("definitions" .=) <$> _dddwisiDefinitions,
-                  ("syllabification" .=) <$> _dddwisiSyllabification])
-
--- | Recommendation related information for this volume.
---
--- /See:/ 'volumeRecommendedInfo' smart constructor.
-newtype VolumeRecommendedInfo = VolumeRecommendedInfo
-    { _vriExplanation :: Maybe Text
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VolumeRecommendedInfo' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vriExplanation'
-volumeRecommendedInfo
-    :: VolumeRecommendedInfo
-volumeRecommendedInfo =
-    VolumeRecommendedInfo
-    { _vriExplanation = Nothing
-    }
-
--- | A text explaining why this volume is recommended.
-vriExplanation :: Lens' VolumeRecommendedInfo (Maybe Text)
-vriExplanation
-  = lens _vriExplanation
-      (\ s a -> s{_vriExplanation = a})
-
-instance FromJSON VolumeRecommendedInfo where
-        parseJSON
-          = withObject "VolumeRecommendedInfo"
-              (\ o ->
-                 VolumeRecommendedInfo <$> (o .:? "explanation"))
-
-instance ToJSON VolumeRecommendedInfo where
-        toJSON VolumeRecommendedInfo{..}
-          = object
-              (catMaybes [("explanation" .=) <$> _vriExplanation])
-
---
--- /See:/ 'offers' smart constructor.
-data Offers = Offers
-    { _oKind  :: !Text
-    , _oItems :: !(Maybe [OffersItemsItem])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Offers' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'oKind'
---
--- * 'oItems'
-offers
-    :: Offers
-offers =
-    Offers
-    { _oKind = "promooffer#offers"
-    , _oItems = Nothing
-    }
-
--- | Resource type.
-oKind :: Lens' Offers Text
-oKind = lens _oKind (\ s a -> s{_oKind = a})
-
--- | A list of offers.
-oItems :: Lens' Offers [OffersItemsItem]
-oItems
-  = lens _oItems (\ s a -> s{_oItems = a}) . _Default .
-      _Coerce
-
-instance FromJSON Offers where
-        parseJSON
-          = withObject "Offers"
-              (\ o ->
-                 Offers <$>
-                   (o .:? "kind" .!= "promooffer#offers") <*>
-                     (o .:? "items" .!= mempty))
-
-instance ToJSON Offers where
-        toJSON Offers{..}
-          = object
-              (catMaybes
-                 [Just ("kind" .= _oKind), ("items" .=) <$> _oItems])
-
---
--- /See:/ 'discoveryclusters' smart constructor.
-data Discoveryclusters = Discoveryclusters
-    { _dKind          :: !Text
-    , _dTotalClusters :: !(Maybe (Textual Int32))
-    , _dClusters      :: !(Maybe [DiscoveryclustersClustersItem])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Discoveryclusters' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dKind'
---
--- * 'dTotalClusters'
---
--- * 'dClusters'
-discoveryclusters
-    :: Discoveryclusters
-discoveryclusters =
-    Discoveryclusters
-    { _dKind = "books#discovery#clusters"
-    , _dTotalClusters = Nothing
-    , _dClusters = Nothing
-    }
-
--- | Resorce type.
-dKind :: Lens' Discoveryclusters Text
-dKind = lens _dKind (\ s a -> s{_dKind = a})
-
-dTotalClusters :: Lens' Discoveryclusters (Maybe Int32)
-dTotalClusters
-  = lens _dTotalClusters
-      (\ s a -> s{_dTotalClusters = a})
-      . mapping _Coerce
-
-dClusters :: Lens' Discoveryclusters [DiscoveryclustersClustersItem]
-dClusters
-  = lens _dClusters (\ s a -> s{_dClusters = a}) .
-      _Default
-      . _Coerce
-
-instance FromJSON Discoveryclusters where
-        parseJSON
-          = withObject "Discoveryclusters"
-              (\ o ->
-                 Discoveryclusters <$>
-                   (o .:? "kind" .!= "books#discovery#clusters") <*>
-                     (o .:? "totalClusters")
-                     <*> (o .:? "clusters" .!= mempty))
-
-instance ToJSON Discoveryclusters where
-        toJSON Discoveryclusters{..}
-          = object
-              (catMaybes
-                 [Just ("kind" .= _dKind),
-                  ("totalClusters" .=) <$> _dTotalClusters,
-                  ("clusters" .=) <$> _dClusters])
-
--- | User settings in sub-objects, each for different purposes.
---
--- /See:/ 'userSettingsNotesExport' smart constructor.
-data UserSettingsNotesExport = UserSettingsNotesExport
-    { _usneFolderName :: !(Maybe Text)
-    , _usneIsEnabled  :: !(Maybe Bool)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'UserSettingsNotesExport' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'usneFolderName'
---
--- * 'usneIsEnabled'
-userSettingsNotesExport
-    :: UserSettingsNotesExport
-userSettingsNotesExport =
-    UserSettingsNotesExport
-    { _usneFolderName = Nothing
-    , _usneIsEnabled = Nothing
-    }
-
-usneFolderName :: Lens' UserSettingsNotesExport (Maybe Text)
-usneFolderName
-  = lens _usneFolderName
-      (\ s a -> s{_usneFolderName = a})
-
-usneIsEnabled :: Lens' UserSettingsNotesExport (Maybe Bool)
-usneIsEnabled
-  = lens _usneIsEnabled
-      (\ s a -> s{_usneIsEnabled = a})
-
-instance FromJSON UserSettingsNotesExport where
-        parseJSON
-          = withObject "UserSettingsNotesExport"
-              (\ o ->
-                 UserSettingsNotesExport <$>
-                   (o .:? "folderName") <*> (o .:? "isEnabled"))
-
-instance ToJSON UserSettingsNotesExport where
-        toJSON UserSettingsNotesExport{..}
-          = object
-              (catMaybes
-                 [("folderName" .=) <$> _usneFolderName,
-                  ("isEnabled" .=) <$> _usneIsEnabled])
-
---
--- /See:/ 'concurrentAccessRestriction' smart constructor.
-data ConcurrentAccessRestriction = ConcurrentAccessRestriction
-    { _carMaxConcurrentDevices :: !(Maybe (Textual Int32))
-    , _carSignature            :: !(Maybe Text)
-    , _carTimeWindowSeconds    :: !(Maybe (Textual Int32))
-    , _carKind                 :: !Text
-    , _carReasonCode           :: !(Maybe Text)
-    , _carVolumeId             :: !(Maybe Text)
-    , _carRestricted           :: !(Maybe Bool)
-    , _carSource               :: !(Maybe Text)
-    , _carDeviceAllowed        :: !(Maybe Bool)
-    , _carMessage              :: !(Maybe Text)
-    , _carNonce                :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ConcurrentAccessRestriction' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'carMaxConcurrentDevices'
---
--- * 'carSignature'
---
--- * 'carTimeWindowSeconds'
---
--- * 'carKind'
---
--- * 'carReasonCode'
---
--- * 'carVolumeId'
---
--- * 'carRestricted'
---
--- * 'carSource'
---
--- * 'carDeviceAllowed'
---
--- * 'carMessage'
---
--- * 'carNonce'
-concurrentAccessRestriction
-    :: ConcurrentAccessRestriction
-concurrentAccessRestriction =
-    ConcurrentAccessRestriction
-    { _carMaxConcurrentDevices = Nothing
-    , _carSignature = Nothing
-    , _carTimeWindowSeconds = Nothing
-    , _carKind = "books#concurrentAccessRestriction"
-    , _carReasonCode = Nothing
-    , _carVolumeId = Nothing
-    , _carRestricted = Nothing
-    , _carSource = Nothing
-    , _carDeviceAllowed = Nothing
-    , _carMessage = Nothing
-    , _carNonce = Nothing
-    }
-
--- | The maximum number of concurrent access licenses for this volume.
-carMaxConcurrentDevices :: Lens' ConcurrentAccessRestriction (Maybe Int32)
-carMaxConcurrentDevices
-  = lens _carMaxConcurrentDevices
-      (\ s a -> s{_carMaxConcurrentDevices = a})
-      . mapping _Coerce
-
--- | Response signature.
-carSignature :: Lens' ConcurrentAccessRestriction (Maybe Text)
-carSignature
-  = lens _carSignature (\ s a -> s{_carSignature = a})
-
--- | Time in seconds for license auto-expiration.
-carTimeWindowSeconds :: Lens' ConcurrentAccessRestriction (Maybe Int32)
-carTimeWindowSeconds
-  = lens _carTimeWindowSeconds
-      (\ s a -> s{_carTimeWindowSeconds = a})
-      . mapping _Coerce
-
--- | Resource type.
-carKind :: Lens' ConcurrentAccessRestriction Text
-carKind = lens _carKind (\ s a -> s{_carKind = a})
-
--- | Error\/warning reason code.
-carReasonCode :: Lens' ConcurrentAccessRestriction (Maybe Text)
-carReasonCode
-  = lens _carReasonCode
-      (\ s a -> s{_carReasonCode = a})
-
--- | Identifies the volume for which this entry applies.
-carVolumeId :: Lens' ConcurrentAccessRestriction (Maybe Text)
-carVolumeId
-  = lens _carVolumeId (\ s a -> s{_carVolumeId = a})
-
--- | Whether this volume has any concurrent access restrictions.
-carRestricted :: Lens' ConcurrentAccessRestriction (Maybe Bool)
-carRestricted
-  = lens _carRestricted
-      (\ s a -> s{_carRestricted = a})
-
--- | Client app identifier for verification. Download access and
--- client-validation only.
-carSource :: Lens' ConcurrentAccessRestriction (Maybe Text)
-carSource
-  = lens _carSource (\ s a -> s{_carSource = a})
-
--- | Whether access is granted for this (user, device, volume).
-carDeviceAllowed :: Lens' ConcurrentAccessRestriction (Maybe Bool)
-carDeviceAllowed
-  = lens _carDeviceAllowed
-      (\ s a -> s{_carDeviceAllowed = a})
-
--- | Error\/warning message.
-carMessage :: Lens' ConcurrentAccessRestriction (Maybe Text)
-carMessage
-  = lens _carMessage (\ s a -> s{_carMessage = a})
-
--- | Client nonce for verification. Download access and client-validation
--- only.
-carNonce :: Lens' ConcurrentAccessRestriction (Maybe Text)
-carNonce = lens _carNonce (\ s a -> s{_carNonce = a})
-
-instance FromJSON ConcurrentAccessRestriction where
-        parseJSON
-          = withObject "ConcurrentAccessRestriction"
-              (\ o ->
-                 ConcurrentAccessRestriction <$>
-                   (o .:? "maxConcurrentDevices") <*>
-                     (o .:? "signature")
-                     <*> (o .:? "timeWindowSeconds")
-                     <*>
-                     (o .:? "kind" .!=
-                        "books#concurrentAccessRestriction")
-                     <*> (o .:? "reasonCode")
-                     <*> (o .:? "volumeId")
-                     <*> (o .:? "restricted")
-                     <*> (o .:? "source")
-                     <*> (o .:? "deviceAllowed")
-                     <*> (o .:? "message")
-                     <*> (o .:? "nonce"))
-
-instance ToJSON ConcurrentAccessRestriction where
-        toJSON ConcurrentAccessRestriction{..}
-          = object
-              (catMaybes
-                 [("maxConcurrentDevices" .=) <$>
-                    _carMaxConcurrentDevices,
-                  ("signature" .=) <$> _carSignature,
-                  ("timeWindowSeconds" .=) <$> _carTimeWindowSeconds,
-                  Just ("kind" .= _carKind),
-                  ("reasonCode" .=) <$> _carReasonCode,
-                  ("volumeId" .=) <$> _carVolumeId,
-                  ("restricted" .=) <$> _carRestricted,
-                  ("source" .=) <$> _carSource,
-                  ("deviceAllowed" .=) <$> _carDeviceAllowed,
-                  ("message" .=) <$> _carMessage,
-                  ("nonce" .=) <$> _carNonce])
-
---
--- /See:/ 'volumes' smart constructor.
-data Volumes = Volumes
-    { _v1TotalItems :: !(Maybe (Textual Int32))
-    , _v1Kind       :: !Text
-    , _v1Items      :: !(Maybe [Volume])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Volumes' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'v1TotalItems'
---
--- * 'v1Kind'
---
--- * 'v1Items'
-volumes
-    :: Volumes
-volumes =
-    Volumes
-    { _v1TotalItems = Nothing
-    , _v1Kind = "books#volumes"
-    , _v1Items = Nothing
-    }
-
--- | Total number of volumes found. This might be greater than the number of
--- volumes returned in this response if results have been paginated.
-v1TotalItems :: Lens' Volumes (Maybe Int32)
-v1TotalItems
-  = lens _v1TotalItems (\ s a -> s{_v1TotalItems = a})
-      . mapping _Coerce
-
--- | Resource type.
-v1Kind :: Lens' Volumes Text
-v1Kind = lens _v1Kind (\ s a -> s{_v1Kind = a})
-
--- | A list of volumes.
-v1Items :: Lens' Volumes [Volume]
-v1Items
-  = lens _v1Items (\ s a -> s{_v1Items = a}) . _Default
-      . _Coerce
-
-instance FromJSON Volumes where
-        parseJSON
-          = withObject "Volumes"
-              (\ o ->
-                 Volumes <$>
-                   (o .:? "totalItems") <*>
-                     (o .:? "kind" .!= "books#volumes")
-                     <*> (o .:? "items" .!= mempty))
-
-instance ToJSON Volumes where
-        toJSON Volumes{..}
-          = object
-              (catMaybes
-                 [("totalItems" .=) <$> _v1TotalItems,
-                  Just ("kind" .= _v1Kind), ("items" .=) <$> _v1Items])
-
---
--- /See:/ 'bookshelves' smart constructor.
-data Bookshelves = Bookshelves
-    { _booKind  :: !Text
-    , _booItems :: !(Maybe [Bookshelf])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Bookshelves' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'booKind'
---
--- * 'booItems'
-bookshelves
-    :: Bookshelves
-bookshelves =
-    Bookshelves
-    { _booKind = "books#bookshelves"
-    , _booItems = Nothing
-    }
-
--- | Resource type.
-booKind :: Lens' Bookshelves Text
-booKind = lens _booKind (\ s a -> s{_booKind = a})
-
--- | A list of bookshelves.
-booItems :: Lens' Bookshelves [Bookshelf]
-booItems
-  = lens _booItems (\ s a -> s{_booItems = a}) .
-      _Default
-      . _Coerce
-
-instance FromJSON Bookshelves where
-        parseJSON
-          = withObject "Bookshelves"
-              (\ o ->
-                 Bookshelves <$>
-                   (o .:? "kind" .!= "books#bookshelves") <*>
-                     (o .:? "items" .!= mempty))
-
-instance ToJSON Bookshelves where
-        toJSON Bookshelves{..}
-          = object
-              (catMaybes
-                 [Just ("kind" .= _booKind),
-                  ("items" .=) <$> _booItems])
-
--- | The source, url and attribution for this dictionary data.
---
--- /See:/ 'dictlayerDataDictSource' smart constructor.
-data DictlayerDataDictSource = DictlayerDataDictSource
-    { _dddsURL         :: !(Maybe Text)
-    , _dddsAttribution :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DictlayerDataDictSource' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dddsURL'
---
--- * 'dddsAttribution'
-dictlayerDataDictSource
-    :: DictlayerDataDictSource
-dictlayerDataDictSource =
-    DictlayerDataDictSource
-    { _dddsURL = Nothing
-    , _dddsAttribution = Nothing
-    }
-
-dddsURL :: Lens' DictlayerDataDictSource (Maybe Text)
-dddsURL = lens _dddsURL (\ s a -> s{_dddsURL = a})
-
-dddsAttribution :: Lens' DictlayerDataDictSource (Maybe Text)
-dddsAttribution
-  = lens _dddsAttribution
-      (\ s a -> s{_dddsAttribution = a})
-
-instance FromJSON DictlayerDataDictSource where
-        parseJSON
-          = withObject "DictlayerDataDictSource"
-              (\ o ->
-                 DictlayerDataDictSource <$>
-                   (o .:? "url") <*> (o .:? "attribution"))
-
-instance ToJSON DictlayerDataDictSource where
-        toJSON DictlayerDataDictSource{..}
-          = object
-              (catMaybes
-                 [("url" .=) <$> _dddsURL,
-                  ("attribution" .=) <$> _dddsAttribution])
-
---
--- /See:/ 'downloadAccesses' smart constructor.
-data DownloadAccesses = DownloadAccesses
-    { _daKind               :: !Text
-    , _daDownloadAccessList :: !(Maybe [DownloadAccessRestriction])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DownloadAccesses' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'daKind'
---
--- * 'daDownloadAccessList'
-downloadAccesses
-    :: DownloadAccesses
-downloadAccesses =
-    DownloadAccesses
-    { _daKind = "books#downloadAccesses"
-    , _daDownloadAccessList = Nothing
-    }
-
--- | Resource type.
-daKind :: Lens' DownloadAccesses Text
-daKind = lens _daKind (\ s a -> s{_daKind = a})
-
--- | A list of download access responses.
-daDownloadAccessList :: Lens' DownloadAccesses [DownloadAccessRestriction]
-daDownloadAccessList
-  = lens _daDownloadAccessList
-      (\ s a -> s{_daDownloadAccessList = a})
-      . _Default
-      . _Coerce
-
-instance FromJSON DownloadAccesses where
-        parseJSON
-          = withObject "DownloadAccesses"
-              (\ o ->
-                 DownloadAccesses <$>
-                   (o .:? "kind" .!= "books#downloadAccesses") <*>
-                     (o .:? "downloadAccessList" .!= mempty))
-
-instance ToJSON DownloadAccesses where
-        toJSON DownloadAccesses{..}
-          = object
-              (catMaybes
-                 [Just ("kind" .= _daKind),
-                  ("downloadAccessList" .=) <$> _daDownloadAccessList])
-
---
--- /See:/ 'geolayerDataGeoViewportHi' smart constructor.
-data GeolayerDataGeoViewportHi = GeolayerDataGeoViewportHi
-    { _gdgvhLatitude  :: !(Maybe (Textual Double))
-    , _gdgvhLongitude :: !(Maybe (Textual Double))
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'GeolayerDataGeoViewportHi' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gdgvhLatitude'
---
--- * 'gdgvhLongitude'
-geolayerDataGeoViewportHi
-    :: GeolayerDataGeoViewportHi
-geolayerDataGeoViewportHi =
-    GeolayerDataGeoViewportHi
-    { _gdgvhLatitude = Nothing
-    , _gdgvhLongitude = Nothing
-    }
-
-gdgvhLatitude :: Lens' GeolayerDataGeoViewportHi (Maybe Double)
-gdgvhLatitude
-  = lens _gdgvhLatitude
-      (\ s a -> s{_gdgvhLatitude = a})
-      . mapping _Coerce
-
-gdgvhLongitude :: Lens' GeolayerDataGeoViewportHi (Maybe Double)
-gdgvhLongitude
-  = lens _gdgvhLongitude
-      (\ s a -> s{_gdgvhLongitude = a})
-      . mapping _Coerce
-
-instance FromJSON GeolayerDataGeoViewportHi where
-        parseJSON
-          = withObject "GeolayerDataGeoViewportHi"
-              (\ o ->
-                 GeolayerDataGeoViewportHi <$>
-                   (o .:? "latitude") <*> (o .:? "longitude"))
-
-instance ToJSON GeolayerDataGeoViewportHi where
-        toJSON GeolayerDataGeoViewportHi{..}
-          = object
-              (catMaybes
-                 [("latitude" .=) <$> _gdgvhLatitude,
-                  ("longitude" .=) <$> _gdgvhLongitude])
-
--- | General volume information.
---
--- /See:/ 'volumeVolumeInfo' smart constructor.
-data VolumeVolumeInfo = VolumeVolumeInfo
-    { _vviImageLinks          :: !(Maybe VolumeVolumeInfoImageLinks)
-    , _vviAverageRating       :: !(Maybe (Textual Double))
-    , _vviRatingsCount        :: !(Maybe (Textual Int32))
-    , _vviCanonicalVolumeLink :: !(Maybe Text)
-    , _vviReadingModes        :: !(Maybe JSONValue)
-    , _vviIndustryIdentifiers :: !(Maybe [VolumeVolumeInfoIndustryIdentifiersItem])
-    , _vviPrintedPageCount    :: !(Maybe (Textual Int32))
-    , _vviMainCategory        :: !(Maybe Text)
-    , _vviContentVersion      :: !(Maybe Text)
-    , _vviSamplePageCount     :: !(Maybe (Textual Int32))
-    , _vviCategories          :: !(Maybe [Text])
-    , _vviAuthors             :: !(Maybe [Text])
-    , _vviAllowAnonLogging    :: !(Maybe Bool)
-    , _vviSubtitle            :: !(Maybe Text)
-    , _vviPublishedDate       :: !(Maybe Text)
-    , _vviMaturityRating      :: !(Maybe Text)
-    , _vviPreviewLink         :: !(Maybe Text)
-    , _vviLanguage            :: !(Maybe Text)
-    , _vviTitle               :: !(Maybe Text)
-    , _vviPageCount           :: !(Maybe (Textual Int32))
-    , _vviDimensions          :: !(Maybe VolumeVolumeInfoDimensions)
-    , _vviInfoLink            :: !(Maybe Text)
-    , _vviPublisher           :: !(Maybe Text)
-    , _vviDescription         :: !(Maybe Text)
-    , _vviPrintType           :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VolumeVolumeInfo' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vviImageLinks'
---
--- * 'vviAverageRating'
---
--- * 'vviRatingsCount'
---
--- * 'vviCanonicalVolumeLink'
---
--- * 'vviReadingModes'
---
--- * 'vviIndustryIdentifiers'
---
--- * 'vviPrintedPageCount'
---
--- * 'vviMainCategory'
---
--- * 'vviContentVersion'
---
--- * 'vviSamplePageCount'
---
--- * 'vviCategories'
---
--- * 'vviAuthors'
---
--- * 'vviAllowAnonLogging'
---
--- * 'vviSubtitle'
---
--- * 'vviPublishedDate'
---
--- * 'vviMaturityRating'
---
--- * 'vviPreviewLink'
---
--- * 'vviLanguage'
---
--- * 'vviTitle'
---
--- * 'vviPageCount'
---
--- * 'vviDimensions'
---
--- * 'vviInfoLink'
---
--- * 'vviPublisher'
---
--- * 'vviDescription'
---
--- * 'vviPrintType'
-volumeVolumeInfo
-    :: VolumeVolumeInfo
-volumeVolumeInfo =
-    VolumeVolumeInfo
-    { _vviImageLinks = Nothing
-    , _vviAverageRating = Nothing
-    , _vviRatingsCount = Nothing
-    , _vviCanonicalVolumeLink = Nothing
-    , _vviReadingModes = Nothing
-    , _vviIndustryIdentifiers = Nothing
-    , _vviPrintedPageCount = Nothing
-    , _vviMainCategory = Nothing
-    , _vviContentVersion = Nothing
-    , _vviSamplePageCount = Nothing
-    , _vviCategories = Nothing
-    , _vviAuthors = Nothing
-    , _vviAllowAnonLogging = Nothing
-    , _vviSubtitle = Nothing
-    , _vviPublishedDate = Nothing
-    , _vviMaturityRating = Nothing
-    , _vviPreviewLink = Nothing
-    , _vviLanguage = Nothing
-    , _vviTitle = Nothing
-    , _vviPageCount = Nothing
-    , _vviDimensions = Nothing
-    , _vviInfoLink = Nothing
-    , _vviPublisher = Nothing
-    , _vviDescription = Nothing
-    , _vviPrintType = Nothing
-    }
-
--- | A list of image links for all the sizes that are available. (In LITE
--- projection.)
-vviImageLinks :: Lens' VolumeVolumeInfo (Maybe VolumeVolumeInfoImageLinks)
-vviImageLinks
-  = lens _vviImageLinks
-      (\ s a -> s{_vviImageLinks = a})
-
--- | The mean review rating for this volume. (min = 1.0, max = 5.0)
-vviAverageRating :: Lens' VolumeVolumeInfo (Maybe Double)
-vviAverageRating
-  = lens _vviAverageRating
-      (\ s a -> s{_vviAverageRating = a})
-      . mapping _Coerce
-
--- | The number of review ratings for this volume.
-vviRatingsCount :: Lens' VolumeVolumeInfo (Maybe Int32)
-vviRatingsCount
-  = lens _vviRatingsCount
-      (\ s a -> s{_vviRatingsCount = a})
-      . mapping _Coerce
-
--- | Canonical URL for a volume. (In LITE projection.)
-vviCanonicalVolumeLink :: Lens' VolumeVolumeInfo (Maybe Text)
-vviCanonicalVolumeLink
-  = lens _vviCanonicalVolumeLink
-      (\ s a -> s{_vviCanonicalVolumeLink = a})
-
--- | The reading modes available for this volume.
-vviReadingModes :: Lens' VolumeVolumeInfo (Maybe JSONValue)
-vviReadingModes
-  = lens _vviReadingModes
-      (\ s a -> s{_vviReadingModes = a})
-
--- | Industry standard identifiers for this volume.
-vviIndustryIdentifiers :: Lens' VolumeVolumeInfo [VolumeVolumeInfoIndustryIdentifiersItem]
-vviIndustryIdentifiers
-  = lens _vviIndustryIdentifiers
-      (\ s a -> s{_vviIndustryIdentifiers = a})
-      . _Default
-      . _Coerce
-
--- | Total number of printed pages in generated pdf representation.
-vviPrintedPageCount :: Lens' VolumeVolumeInfo (Maybe Int32)
-vviPrintedPageCount
-  = lens _vviPrintedPageCount
-      (\ s a -> s{_vviPrintedPageCount = a})
-      . mapping _Coerce
-
--- | The main category to which this volume belongs. It will be the category
--- from the categories list returned below that has the highest weight.
-vviMainCategory :: Lens' VolumeVolumeInfo (Maybe Text)
-vviMainCategory
-  = lens _vviMainCategory
-      (\ s a -> s{_vviMainCategory = a})
-
--- | An identifier for the version of the volume content (text & images). (In
--- LITE projection)
-vviContentVersion :: Lens' VolumeVolumeInfo (Maybe Text)
-vviContentVersion
-  = lens _vviContentVersion
-      (\ s a -> s{_vviContentVersion = a})
-
--- | Total number of sample pages as per publisher metadata.
-vviSamplePageCount :: Lens' VolumeVolumeInfo (Maybe Int32)
-vviSamplePageCount
-  = lens _vviSamplePageCount
-      (\ s a -> s{_vviSamplePageCount = a})
-      . mapping _Coerce
-
--- | A list of subject categories, such as \"Fiction\", \"Suspense\", etc.
-vviCategories :: Lens' VolumeVolumeInfo [Text]
-vviCategories
-  = lens _vviCategories
-      (\ s a -> s{_vviCategories = a})
-      . _Default
-      . _Coerce
-
--- | The names of the authors and\/or editors for this volume. (In LITE
--- projection)
-vviAuthors :: Lens' VolumeVolumeInfo [Text]
-vviAuthors
-  = lens _vviAuthors (\ s a -> s{_vviAuthors = a}) .
-      _Default
-      . _Coerce
-
--- | Whether anonymous logging should be allowed.
-vviAllowAnonLogging :: Lens' VolumeVolumeInfo (Maybe Bool)
-vviAllowAnonLogging
-  = lens _vviAllowAnonLogging
-      (\ s a -> s{_vviAllowAnonLogging = a})
-
--- | Volume subtitle. (In LITE projection.)
-vviSubtitle :: Lens' VolumeVolumeInfo (Maybe Text)
-vviSubtitle
-  = lens _vviSubtitle (\ s a -> s{_vviSubtitle = a})
-
--- | Date of publication. (In LITE projection.)
-vviPublishedDate :: Lens' VolumeVolumeInfo (Maybe Text)
-vviPublishedDate
-  = lens _vviPublishedDate
-      (\ s a -> s{_vviPublishedDate = a})
-
-vviMaturityRating :: Lens' VolumeVolumeInfo (Maybe Text)
-vviMaturityRating
-  = lens _vviMaturityRating
-      (\ s a -> s{_vviMaturityRating = a})
-
--- | URL to preview this volume on the Google Books site.
-vviPreviewLink :: Lens' VolumeVolumeInfo (Maybe Text)
-vviPreviewLink
-  = lens _vviPreviewLink
-      (\ s a -> s{_vviPreviewLink = a})
-
--- | Best language for this volume (based on content). It is the two-letter
--- ISO 639-1 code such as \'fr\', \'en\', etc.
-vviLanguage :: Lens' VolumeVolumeInfo (Maybe Text)
-vviLanguage
-  = lens _vviLanguage (\ s a -> s{_vviLanguage = a})
-
--- | Volume title. (In LITE projection.)
-vviTitle :: Lens' VolumeVolumeInfo (Maybe Text)
-vviTitle = lens _vviTitle (\ s a -> s{_vviTitle = a})
-
--- | Total number of pages as per publisher metadata.
-vviPageCount :: Lens' VolumeVolumeInfo (Maybe Int32)
-vviPageCount
-  = lens _vviPageCount (\ s a -> s{_vviPageCount = a})
-      . mapping _Coerce
-
--- | Physical dimensions of this volume.
-vviDimensions :: Lens' VolumeVolumeInfo (Maybe VolumeVolumeInfoDimensions)
-vviDimensions
-  = lens _vviDimensions
-      (\ s a -> s{_vviDimensions = a})
-
--- | URL to view information about this volume on the Google Books site. (In
--- LITE projection)
-vviInfoLink :: Lens' VolumeVolumeInfo (Maybe Text)
-vviInfoLink
-  = lens _vviInfoLink (\ s a -> s{_vviInfoLink = a})
-
--- | Publisher of this volume. (In LITE projection.)
-vviPublisher :: Lens' VolumeVolumeInfo (Maybe Text)
-vviPublisher
-  = lens _vviPublisher (\ s a -> s{_vviPublisher = a})
-
--- | A synopsis of the volume. The text of the description is formatted in
--- HTML and includes simple formatting elements, such as b, i, and br tags.
--- (In LITE projection.)
-vviDescription :: Lens' VolumeVolumeInfo (Maybe Text)
-vviDescription
-  = lens _vviDescription
-      (\ s a -> s{_vviDescription = a})
-
--- | Type of publication of this volume. Possible values are BOOK or
--- MAGAZINE.
-vviPrintType :: Lens' VolumeVolumeInfo (Maybe Text)
-vviPrintType
-  = lens _vviPrintType (\ s a -> s{_vviPrintType = a})
-
-instance FromJSON VolumeVolumeInfo where
-        parseJSON
-          = withObject "VolumeVolumeInfo"
-              (\ o ->
-                 VolumeVolumeInfo <$>
-                   (o .:? "imageLinks") <*> (o .:? "averageRating") <*>
-                     (o .:? "ratingsCount")
-                     <*> (o .:? "canonicalVolumeLink")
-                     <*> (o .:? "readingModes")
-                     <*> (o .:? "industryIdentifiers" .!= mempty)
-                     <*> (o .:? "printedPageCount")
-                     <*> (o .:? "mainCategory")
-                     <*> (o .:? "contentVersion")
-                     <*> (o .:? "samplePageCount")
-                     <*> (o .:? "categories" .!= mempty)
-                     <*> (o .:? "authors" .!= mempty)
-                     <*> (o .:? "allowAnonLogging")
-                     <*> (o .:? "subtitle")
-                     <*> (o .:? "publishedDate")
-                     <*> (o .:? "maturityRating")
-                     <*> (o .:? "previewLink")
-                     <*> (o .:? "language")
-                     <*> (o .:? "title")
-                     <*> (o .:? "pageCount")
-                     <*> (o .:? "dimensions")
-                     <*> (o .:? "infoLink")
-                     <*> (o .:? "publisher")
-                     <*> (o .:? "description")
-                     <*> (o .:? "printType"))
-
-instance ToJSON VolumeVolumeInfo where
-        toJSON VolumeVolumeInfo{..}
-          = object
-              (catMaybes
-                 [("imageLinks" .=) <$> _vviImageLinks,
-                  ("averageRating" .=) <$> _vviAverageRating,
-                  ("ratingsCount" .=) <$> _vviRatingsCount,
-                  ("canonicalVolumeLink" .=) <$>
-                    _vviCanonicalVolumeLink,
-                  ("readingModes" .=) <$> _vviReadingModes,
-                  ("industryIdentifiers" .=) <$>
-                    _vviIndustryIdentifiers,
-                  ("printedPageCount" .=) <$> _vviPrintedPageCount,
-                  ("mainCategory" .=) <$> _vviMainCategory,
-                  ("contentVersion" .=) <$> _vviContentVersion,
-                  ("samplePageCount" .=) <$> _vviSamplePageCount,
-                  ("categories" .=) <$> _vviCategories,
-                  ("authors" .=) <$> _vviAuthors,
-                  ("allowAnonLogging" .=) <$> _vviAllowAnonLogging,
-                  ("subtitle" .=) <$> _vviSubtitle,
-                  ("publishedDate" .=) <$> _vviPublishedDate,
-                  ("maturityRating" .=) <$> _vviMaturityRating,
-                  ("previewLink" .=) <$> _vviPreviewLink,
-                  ("language" .=) <$> _vviLanguage,
-                  ("title" .=) <$> _vviTitle,
-                  ("pageCount" .=) <$> _vviPageCount,
-                  ("dimensions" .=) <$> _vviDimensions,
-                  ("infoLink" .=) <$> _vviInfoLink,
-                  ("publisher" .=) <$> _vviPublisher,
-                  ("description" .=) <$> _vviDescription,
-                  ("printType" .=) <$> _vviPrintType])
-
---
--- /See:/ 'metadataItemsItem' smart constructor.
-data MetadataItemsItem = MetadataItemsItem
-    { _miiSize         :: !(Maybe (Textual Int64))
-    , _miiVersion      :: !(Maybe (Textual Int64))
-    , _miiLanguage     :: !(Maybe Text)
-    , _miiDownloadURL  :: !(Maybe Text)
-    , _miiEncryptedKey :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'MetadataItemsItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'miiSize'
---
--- * 'miiVersion'
---
--- * 'miiLanguage'
---
--- * 'miiDownloadURL'
---
--- * 'miiEncryptedKey'
-metadataItemsItem
-    :: MetadataItemsItem
-metadataItemsItem =
-    MetadataItemsItem
-    { _miiSize = Nothing
-    , _miiVersion = Nothing
-    , _miiLanguage = Nothing
-    , _miiDownloadURL = Nothing
-    , _miiEncryptedKey = Nothing
-    }
-
-miiSize :: Lens' MetadataItemsItem (Maybe Int64)
-miiSize
-  = lens _miiSize (\ s a -> s{_miiSize = a}) .
-      mapping _Coerce
-
-miiVersion :: Lens' MetadataItemsItem (Maybe Int64)
-miiVersion
-  = lens _miiVersion (\ s a -> s{_miiVersion = a}) .
-      mapping _Coerce
-
-miiLanguage :: Lens' MetadataItemsItem (Maybe Text)
-miiLanguage
-  = lens _miiLanguage (\ s a -> s{_miiLanguage = a})
-
-miiDownloadURL :: Lens' MetadataItemsItem (Maybe Text)
-miiDownloadURL
-  = lens _miiDownloadURL
-      (\ s a -> s{_miiDownloadURL = a})
-
-miiEncryptedKey :: Lens' MetadataItemsItem (Maybe Text)
-miiEncryptedKey
-  = lens _miiEncryptedKey
-      (\ s a -> s{_miiEncryptedKey = a})
-
-instance FromJSON MetadataItemsItem where
-        parseJSON
-          = withObject "MetadataItemsItem"
-              (\ o ->
-                 MetadataItemsItem <$>
-                   (o .:? "size") <*> (o .:? "version") <*>
-                     (o .:? "language")
-                     <*> (o .:? "download_url")
-                     <*> (o .:? "encrypted_key"))
-
-instance ToJSON MetadataItemsItem where
-        toJSON MetadataItemsItem{..}
-          = object
-              (catMaybes
-                 [("size" .=) <$> _miiSize,
-                  ("version" .=) <$> _miiVersion,
-                  ("language" .=) <$> _miiLanguage,
-                  ("download_url" .=) <$> _miiDownloadURL,
-                  ("encrypted_key" .=) <$> _miiEncryptedKey])
-
---
--- /See:/ 'dictlayerDataDictWordsItemSensesItemSource' smart constructor.
-data DictlayerDataDictWordsItemSensesItemSource = DictlayerDataDictWordsItemSensesItemSource
-    { _dddwisisURL         :: !(Maybe Text)
-    , _dddwisisAttribution :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DictlayerDataDictWordsItemSensesItemSource' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dddwisisURL'
---
--- * 'dddwisisAttribution'
-dictlayerDataDictWordsItemSensesItemSource
-    :: DictlayerDataDictWordsItemSensesItemSource
-dictlayerDataDictWordsItemSensesItemSource =
-    DictlayerDataDictWordsItemSensesItemSource
-    { _dddwisisURL = Nothing
-    , _dddwisisAttribution = Nothing
-    }
-
-dddwisisURL :: Lens' DictlayerDataDictWordsItemSensesItemSource (Maybe Text)
-dddwisisURL
-  = lens _dddwisisURL (\ s a -> s{_dddwisisURL = a})
-
-dddwisisAttribution :: Lens' DictlayerDataDictWordsItemSensesItemSource (Maybe Text)
-dddwisisAttribution
-  = lens _dddwisisAttribution
-      (\ s a -> s{_dddwisisAttribution = a})
-
-instance FromJSON
-         DictlayerDataDictWordsItemSensesItemSource where
-        parseJSON
-          = withObject
-              "DictlayerDataDictWordsItemSensesItemSource"
-              (\ o ->
-                 DictlayerDataDictWordsItemSensesItemSource <$>
-                   (o .:? "url") <*> (o .:? "attribution"))
-
-instance ToJSON
-         DictlayerDataDictWordsItemSensesItemSource where
-        toJSON DictlayerDataDictWordsItemSensesItemSource{..}
-          = object
-              (catMaybes
-                 [("url" .=) <$> _dddwisisURL,
-                  ("attribution" .=) <$> _dddwisisAttribution])
-
--- | Offer retail (=discounted) price in Micros
---
--- /See:/ 'volumeSaleInfoOffersItemRetailPrice' smart constructor.
-data VolumeSaleInfoOffersItemRetailPrice = VolumeSaleInfoOffersItemRetailPrice
-    { _vsioirpCurrencyCode   :: !(Maybe Text)
-    , _vsioirpAmountInMicros :: !(Maybe (Textual Double))
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VolumeSaleInfoOffersItemRetailPrice' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vsioirpCurrencyCode'
---
--- * 'vsioirpAmountInMicros'
-volumeSaleInfoOffersItemRetailPrice
-    :: VolumeSaleInfoOffersItemRetailPrice
-volumeSaleInfoOffersItemRetailPrice =
-    VolumeSaleInfoOffersItemRetailPrice
-    { _vsioirpCurrencyCode = Nothing
-    , _vsioirpAmountInMicros = Nothing
-    }
-
-vsioirpCurrencyCode :: Lens' VolumeSaleInfoOffersItemRetailPrice (Maybe Text)
-vsioirpCurrencyCode
-  = lens _vsioirpCurrencyCode
-      (\ s a -> s{_vsioirpCurrencyCode = a})
-
-vsioirpAmountInMicros :: Lens' VolumeSaleInfoOffersItemRetailPrice (Maybe Double)
-vsioirpAmountInMicros
-  = lens _vsioirpAmountInMicros
-      (\ s a -> s{_vsioirpAmountInMicros = a})
-      . mapping _Coerce
-
-instance FromJSON VolumeSaleInfoOffersItemRetailPrice
-         where
-        parseJSON
-          = withObject "VolumeSaleInfoOffersItemRetailPrice"
-              (\ o ->
-                 VolumeSaleInfoOffersItemRetailPrice <$>
-                   (o .:? "currencyCode") <*> (o .:? "amountInMicros"))
-
-instance ToJSON VolumeSaleInfoOffersItemRetailPrice
-         where
-        toJSON VolumeSaleInfoOffersItemRetailPrice{..}
-          = object
-              (catMaybes
-                 [("currencyCode" .=) <$> _vsioirpCurrencyCode,
-                  ("amountInMicros" .=) <$> _vsioirpAmountInMicros])
-
---
--- /See:/ 'volumeVolumeInfoIndustryIdentifiersItem' smart constructor.
-data VolumeVolumeInfoIndustryIdentifiersItem = VolumeVolumeInfoIndustryIdentifiersItem
-    { _vviiiiIdentifier :: !(Maybe Text)
-    , _vviiiiType       :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VolumeVolumeInfoIndustryIdentifiersItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vviiiiIdentifier'
---
--- * 'vviiiiType'
-volumeVolumeInfoIndustryIdentifiersItem
-    :: VolumeVolumeInfoIndustryIdentifiersItem
-volumeVolumeInfoIndustryIdentifiersItem =
-    VolumeVolumeInfoIndustryIdentifiersItem
-    { _vviiiiIdentifier = Nothing
-    , _vviiiiType = Nothing
-    }
-
--- | Industry specific volume identifier.
-vviiiiIdentifier :: Lens' VolumeVolumeInfoIndustryIdentifiersItem (Maybe Text)
-vviiiiIdentifier
-  = lens _vviiiiIdentifier
-      (\ s a -> s{_vviiiiIdentifier = a})
-
--- | Identifier type. Possible values are ISBN_10, ISBN_13, ISSN and OTHER.
-vviiiiType :: Lens' VolumeVolumeInfoIndustryIdentifiersItem (Maybe Text)
-vviiiiType
-  = lens _vviiiiType (\ s a -> s{_vviiiiType = a})
-
-instance FromJSON
-         VolumeVolumeInfoIndustryIdentifiersItem where
-        parseJSON
-          = withObject
-              "VolumeVolumeInfoIndustryIdentifiersItem"
-              (\ o ->
-                 VolumeVolumeInfoIndustryIdentifiersItem <$>
-                   (o .:? "identifier") <*> (o .:? "type"))
-
-instance ToJSON
-         VolumeVolumeInfoIndustryIdentifiersItem where
-        toJSON VolumeVolumeInfoIndustryIdentifiersItem{..}
-          = object
-              (catMaybes
-                 [("identifier" .=) <$> _vviiiiIdentifier,
-                  ("type" .=) <$> _vviiiiType])
-
---
--- /See:/ 'booksAnnotationsRange' smart constructor.
-data BooksAnnotationsRange = BooksAnnotationsRange
-    { _barStartOffSet   :: !(Maybe Text)
-    , _barEndOffSet     :: !(Maybe Text)
-    , _barEndPosition   :: !(Maybe Text)
-    , _barStartPosition :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'BooksAnnotationsRange' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'barStartOffSet'
---
--- * 'barEndOffSet'
---
--- * 'barEndPosition'
---
--- * 'barStartPosition'
-booksAnnotationsRange
-    :: BooksAnnotationsRange
-booksAnnotationsRange =
-    BooksAnnotationsRange
-    { _barStartOffSet = Nothing
-    , _barEndOffSet = Nothing
-    , _barEndPosition = Nothing
-    , _barStartPosition = Nothing
-    }
-
--- | The offset from the starting position.
-barStartOffSet :: Lens' BooksAnnotationsRange (Maybe Text)
-barStartOffSet
-  = lens _barStartOffSet
-      (\ s a -> s{_barStartOffSet = a})
-
--- | The offset from the ending position.
-barEndOffSet :: Lens' BooksAnnotationsRange (Maybe Text)
-barEndOffSet
-  = lens _barEndOffSet (\ s a -> s{_barEndOffSet = a})
-
--- | The ending position for the range.
-barEndPosition :: Lens' BooksAnnotationsRange (Maybe Text)
-barEndPosition
-  = lens _barEndPosition
-      (\ s a -> s{_barEndPosition = a})
-
--- | The starting position for the range.
-barStartPosition :: Lens' BooksAnnotationsRange (Maybe Text)
-barStartPosition
-  = lens _barStartPosition
-      (\ s a -> s{_barStartPosition = a})
-
-instance FromJSON BooksAnnotationsRange where
-        parseJSON
-          = withObject "BooksAnnotationsRange"
-              (\ o ->
-                 BooksAnnotationsRange <$>
-                   (o .:? "startOffset") <*> (o .:? "endOffset") <*>
-                     (o .:? "endPosition")
-                     <*> (o .:? "startPosition"))
-
-instance ToJSON BooksAnnotationsRange where
-        toJSON BooksAnnotationsRange{..}
-          = object
-              (catMaybes
-                 [("startOffset" .=) <$> _barStartOffSet,
-                  ("endOffset" .=) <$> _barEndOffSet,
-                  ("endPosition" .=) <$> _barEndPosition,
-                  ("startPosition" .=) <$> _barStartPosition])
-
---
--- /See:/ 'layersummaries' smart constructor.
-data Layersummaries = Layersummaries
-    { _layTotalItems :: !(Maybe (Textual Int32))
-    , _layKind       :: !Text
-    , _layItems      :: !(Maybe [Layersummary])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Layersummaries' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'layTotalItems'
---
--- * 'layKind'
---
--- * 'layItems'
-layersummaries
-    :: Layersummaries
-layersummaries =
-    Layersummaries
-    { _layTotalItems = Nothing
-    , _layKind = "books#layersummaries"
-    , _layItems = Nothing
-    }
-
--- | The total number of layer summaries found.
-layTotalItems :: Lens' Layersummaries (Maybe Int32)
-layTotalItems
-  = lens _layTotalItems
-      (\ s a -> s{_layTotalItems = a})
-      . mapping _Coerce
-
--- | Resource type.
-layKind :: Lens' Layersummaries Text
-layKind = lens _layKind (\ s a -> s{_layKind = a})
-
--- | A list of layer summary items.
-layItems :: Lens' Layersummaries [Layersummary]
-layItems
-  = lens _layItems (\ s a -> s{_layItems = a}) .
-      _Default
-      . _Coerce
-
-instance FromJSON Layersummaries where
-        parseJSON
-          = withObject "Layersummaries"
-              (\ o ->
-                 Layersummaries <$>
-                   (o .:? "totalItems") <*>
-                     (o .:? "kind" .!= "books#layersummaries")
-                     <*> (o .:? "items" .!= mempty))
-
-instance ToJSON Layersummaries where
-        toJSON Layersummaries{..}
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.Google.Books.Types.Product where
+
+import           Network.Google.Books.Types.Sum
+import           Network.Google.Prelude
+
+--
+-- /See:/ 'userSettings' smart constructor.
+data UserSettings = UserSettings'
+    { _usNotification :: !(Maybe UserSettingsNotification)
+    , _usKind         :: !Text
+    , _usNotesExport  :: !(Maybe UserSettingsNotesExport)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UserSettings' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'usNotification'
+--
+-- * 'usKind'
+--
+-- * 'usNotesExport'
+userSettings
+    :: UserSettings
+userSettings =
+    UserSettings'
+    { _usNotification = Nothing
+    , _usKind = "books#usersettings"
+    , _usNotesExport = Nothing
+    }
+
+usNotification :: Lens' UserSettings (Maybe UserSettingsNotification)
+usNotification
+  = lens _usNotification
+      (\ s a -> s{_usNotification = a})
+
+-- | Resource type.
+usKind :: Lens' UserSettings Text
+usKind = lens _usKind (\ s a -> s{_usKind = a})
+
+-- | User settings in sub-objects, each for different purposes.
+usNotesExport :: Lens' UserSettings (Maybe UserSettingsNotesExport)
+usNotesExport
+  = lens _usNotesExport
+      (\ s a -> s{_usNotesExport = a})
+
+instance FromJSON UserSettings where
+        parseJSON
+          = withObject "UserSettings"
+              (\ o ->
+                 UserSettings' <$>
+                   (o .:? "notification") <*>
+                     (o .:? "kind" .!= "books#usersettings")
+                     <*> (o .:? "notesExport"))
+
+instance ToJSON UserSettings where
+        toJSON UserSettings'{..}
+          = object
+              (catMaybes
+                 [("notification" .=) <$> _usNotification,
+                  Just ("kind" .= _usKind),
+                  ("notesExport" .=) <$> _usNotesExport])
+
+--
+-- /See:/ 'annotations' smart constructor.
+data Annotations = Annotations'
+    { _aTotalItems    :: !(Maybe (Textual Int32))
+    , _aNextPageToken :: !(Maybe Text)
+    , _aKind          :: !Text
+    , _aItems         :: !(Maybe [Annotation])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Annotations' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aTotalItems'
+--
+-- * 'aNextPageToken'
+--
+-- * 'aKind'
+--
+-- * 'aItems'
+annotations
+    :: Annotations
+annotations =
+    Annotations'
+    { _aTotalItems = Nothing
+    , _aNextPageToken = Nothing
+    , _aKind = "books#annotations"
+    , _aItems = Nothing
+    }
+
+-- | Total number of annotations found. This may be greater than the number
+-- of notes returned in this response if results have been paginated.
+aTotalItems :: Lens' Annotations (Maybe Int32)
+aTotalItems
+  = lens _aTotalItems (\ s a -> s{_aTotalItems = a}) .
+      mapping _Coerce
+
+-- | Token to pass in for pagination for the next page. This will not be
+-- present if this request does not have more results.
+aNextPageToken :: Lens' Annotations (Maybe Text)
+aNextPageToken
+  = lens _aNextPageToken
+      (\ s a -> s{_aNextPageToken = a})
+
+-- | Resource type.
+aKind :: Lens' Annotations Text
+aKind = lens _aKind (\ s a -> s{_aKind = a})
+
+-- | A list of annotations.
+aItems :: Lens' Annotations [Annotation]
+aItems
+  = lens _aItems (\ s a -> s{_aItems = a}) . _Default .
+      _Coerce
+
+instance FromJSON Annotations where
+        parseJSON
+          = withObject "Annotations"
+              (\ o ->
+                 Annotations' <$>
+                   (o .:? "totalItems") <*> (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "books#annotations")
+                     <*> (o .:? "items" .!= mempty))
+
+instance ToJSON Annotations where
+        toJSON Annotations'{..}
+          = object
+              (catMaybes
+                 [("totalItems" .=) <$> _aTotalItems,
+                  ("nextPageToken" .=) <$> _aNextPageToken,
+                  Just ("kind" .= _aKind), ("items" .=) <$> _aItems])
+
+--
+-- /See:/ 'annotationsData' smart constructor.
+data AnnotationsData = AnnotationsData'
+    { _adTotalItems    :: !(Maybe (Textual Int32))
+    , _adNextPageToken :: !(Maybe Text)
+    , _adKind          :: !Text
+    , _adItems         :: !(Maybe [AnnotationData])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AnnotationsData' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'adTotalItems'
+--
+-- * 'adNextPageToken'
+--
+-- * 'adKind'
+--
+-- * 'adItems'
+annotationsData
+    :: AnnotationsData
+annotationsData =
+    AnnotationsData'
+    { _adTotalItems = Nothing
+    , _adNextPageToken = Nothing
+    , _adKind = "books#annotationsdata"
+    , _adItems = Nothing
+    }
+
+-- | The total number of volume annotations found.
+adTotalItems :: Lens' AnnotationsData (Maybe Int32)
+adTotalItems
+  = lens _adTotalItems (\ s a -> s{_adTotalItems = a})
+      . mapping _Coerce
+
+-- | Token to pass in for pagination for the next page. This will not be
+-- present if this request does not have more results.
+adNextPageToken :: Lens' AnnotationsData (Maybe Text)
+adNextPageToken
+  = lens _adNextPageToken
+      (\ s a -> s{_adNextPageToken = a})
+
+-- | Resource type
+adKind :: Lens' AnnotationsData Text
+adKind = lens _adKind (\ s a -> s{_adKind = a})
+
+-- | A list of Annotation Data.
+adItems :: Lens' AnnotationsData [AnnotationData]
+adItems
+  = lens _adItems (\ s a -> s{_adItems = a}) . _Default
+      . _Coerce
+
+instance FromJSON AnnotationsData where
+        parseJSON
+          = withObject "AnnotationsData"
+              (\ o ->
+                 AnnotationsData' <$>
+                   (o .:? "totalItems") <*> (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "books#annotationsdata")
+                     <*> (o .:? "items" .!= mempty))
+
+instance ToJSON AnnotationsData where
+        toJSON AnnotationsData'{..}
+          = object
+              (catMaybes
+                 [("totalItems" .=) <$> _adTotalItems,
+                  ("nextPageToken" .=) <$> _adNextPageToken,
+                  Just ("kind" .= _adKind), ("items" .=) <$> _adItems])
+
+--
+-- /See:/ 'userSettingsNotificationMoreFromAuthors' smart constructor.
+newtype UserSettingsNotificationMoreFromAuthors = UserSettingsNotificationMoreFromAuthors'
+    { _usnmfaOptedState :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UserSettingsNotificationMoreFromAuthors' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'usnmfaOptedState'
+userSettingsNotificationMoreFromAuthors
+    :: UserSettingsNotificationMoreFromAuthors
+userSettingsNotificationMoreFromAuthors =
+    UserSettingsNotificationMoreFromAuthors'
+    { _usnmfaOptedState = Nothing
+    }
+
+usnmfaOptedState :: Lens' UserSettingsNotificationMoreFromAuthors (Maybe Text)
+usnmfaOptedState
+  = lens _usnmfaOptedState
+      (\ s a -> s{_usnmfaOptedState = a})
+
+instance FromJSON
+         UserSettingsNotificationMoreFromAuthors where
+        parseJSON
+          = withObject
+              "UserSettingsNotificationMoreFromAuthors"
+              (\ o ->
+                 UserSettingsNotificationMoreFromAuthors' <$>
+                   (o .:? "opted_state"))
+
+instance ToJSON
+         UserSettingsNotificationMoreFromAuthors where
+        toJSON UserSettingsNotificationMoreFromAuthors'{..}
+          = object
+              (catMaybes
+                 [("opted_state" .=) <$> _usnmfaOptedState])
+
+--
+-- /See:/ 'volumeannotations' smart constructor.
+data Volumeannotations = Volumeannotations'
+    { _vTotalItems    :: !(Maybe (Textual Int32))
+    , _vNextPageToken :: !(Maybe Text)
+    , _vKind          :: !Text
+    , _vItems         :: !(Maybe [Volumeannotation])
+    , _vVersion       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Volumeannotations' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vTotalItems'
+--
+-- * 'vNextPageToken'
+--
+-- * 'vKind'
+--
+-- * 'vItems'
+--
+-- * 'vVersion'
+volumeannotations
+    :: Volumeannotations
+volumeannotations =
+    Volumeannotations'
+    { _vTotalItems = Nothing
+    , _vNextPageToken = Nothing
+    , _vKind = "books#volumeannotations"
+    , _vItems = Nothing
+    , _vVersion = Nothing
+    }
+
+-- | The total number of volume annotations found.
+vTotalItems :: Lens' Volumeannotations (Maybe Int32)
+vTotalItems
+  = lens _vTotalItems (\ s a -> s{_vTotalItems = a}) .
+      mapping _Coerce
+
+-- | Token to pass in for pagination for the next page. This will not be
+-- present if this request does not have more results.
+vNextPageToken :: Lens' Volumeannotations (Maybe Text)
+vNextPageToken
+  = lens _vNextPageToken
+      (\ s a -> s{_vNextPageToken = a})
+
+-- | Resource type
+vKind :: Lens' Volumeannotations Text
+vKind = lens _vKind (\ s a -> s{_vKind = a})
+
+-- | A list of volume annotations.
+vItems :: Lens' Volumeannotations [Volumeannotation]
+vItems
+  = lens _vItems (\ s a -> s{_vItems = a}) . _Default .
+      _Coerce
+
+-- | The version string for all of the volume annotations in this layer (not
+-- just the ones in this response). Note: the version string doesn\'t apply
+-- to the annotation data, just the information in this response (e.g. the
+-- location of annotations in the book).
+vVersion :: Lens' Volumeannotations (Maybe Text)
+vVersion = lens _vVersion (\ s a -> s{_vVersion = a})
+
+instance FromJSON Volumeannotations where
+        parseJSON
+          = withObject "Volumeannotations"
+              (\ o ->
+                 Volumeannotations' <$>
+                   (o .:? "totalItems") <*> (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "books#volumeannotations")
+                     <*> (o .:? "items" .!= mempty)
+                     <*> (o .:? "version"))
+
+instance ToJSON Volumeannotations where
+        toJSON Volumeannotations'{..}
+          = object
+              (catMaybes
+                 [("totalItems" .=) <$> _vTotalItems,
+                  ("nextPageToken" .=) <$> _vNextPageToken,
+                  Just ("kind" .= _vKind), ("items" .=) <$> _vItems,
+                  ("version" .=) <$> _vVersion])
+
+-- | Information regarding the source of this review, when the review is not
+-- from a Google Books user.
+--
+-- /See:/ 'reviewSource' smart constructor.
+data ReviewSource = ReviewSource'
+    { _rsExtraDescription :: !(Maybe Text)
+    , _rsURL              :: !(Maybe Text)
+    , _rsDescription      :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ReviewSource' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rsExtraDescription'
+--
+-- * 'rsURL'
+--
+-- * 'rsDescription'
+reviewSource
+    :: ReviewSource
+reviewSource =
+    ReviewSource'
+    { _rsExtraDescription = Nothing
+    , _rsURL = Nothing
+    , _rsDescription = Nothing
+    }
+
+-- | Extra text about the source of the review.
+rsExtraDescription :: Lens' ReviewSource (Maybe Text)
+rsExtraDescription
+  = lens _rsExtraDescription
+      (\ s a -> s{_rsExtraDescription = a})
+
+-- | URL of the source of the review.
+rsURL :: Lens' ReviewSource (Maybe Text)
+rsURL = lens _rsURL (\ s a -> s{_rsURL = a})
+
+-- | Name of the source.
+rsDescription :: Lens' ReviewSource (Maybe Text)
+rsDescription
+  = lens _rsDescription
+      (\ s a -> s{_rsDescription = a})
+
+instance FromJSON ReviewSource where
+        parseJSON
+          = withObject "ReviewSource"
+              (\ o ->
+                 ReviewSource' <$>
+                   (o .:? "extraDescription") <*> (o .:? "url") <*>
+                     (o .:? "description"))
+
+instance ToJSON ReviewSource where
+        toJSON ReviewSource'{..}
+          = object
+              (catMaybes
+                 [("extraDescription" .=) <$> _rsExtraDescription,
+                  ("url" .=) <$> _rsURL,
+                  ("description" .=) <$> _rsDescription])
+
+--
+-- /See:/ 'annotationData' smart constructor.
+data AnnotationData = AnnotationData'
+    { _annEncodedData    :: !(Maybe Base64)
+    , _annKind           :: !Text
+    , _annData           :: !(Maybe JSONValue)
+    , _annSelfLink       :: !(Maybe Text)
+    , _annAnnotationType :: !(Maybe Text)
+    , _annVolumeId       :: !(Maybe Text)
+    , _annId             :: !(Maybe Text)
+    , _annUpdated        :: !(Maybe DateTime')
+    , _annLayerId        :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AnnotationData' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'annEncodedData'
+--
+-- * 'annKind'
+--
+-- * 'annData'
+--
+-- * 'annSelfLink'
+--
+-- * 'annAnnotationType'
+--
+-- * 'annVolumeId'
+--
+-- * 'annId'
+--
+-- * 'annUpdated'
+--
+-- * 'annLayerId'
+annotationData
+    :: AnnotationData
+annotationData =
+    AnnotationData'
+    { _annEncodedData = Nothing
+    , _annKind = "books#annotationdata"
+    , _annData = Nothing
+    , _annSelfLink = Nothing
+    , _annAnnotationType = Nothing
+    , _annVolumeId = Nothing
+    , _annId = Nothing
+    , _annUpdated = Nothing
+    , _annLayerId = Nothing
+    }
+
+-- | Base64 encoded data for this annotation data.
+annEncodedData :: Lens' AnnotationData (Maybe ByteString)
+annEncodedData
+  = lens _annEncodedData
+      (\ s a -> s{_annEncodedData = a})
+      . mapping _Base64
+
+-- | Resource Type
+annKind :: Lens' AnnotationData Text
+annKind = lens _annKind (\ s a -> s{_annKind = a})
+
+annData :: Lens' AnnotationData (Maybe JSONValue)
+annData = lens _annData (\ s a -> s{_annData = a})
+
+-- | URL for this resource. *
+annSelfLink :: Lens' AnnotationData (Maybe Text)
+annSelfLink
+  = lens _annSelfLink (\ s a -> s{_annSelfLink = a})
+
+-- | The type of annotation this data is for.
+annAnnotationType :: Lens' AnnotationData (Maybe Text)
+annAnnotationType
+  = lens _annAnnotationType
+      (\ s a -> s{_annAnnotationType = a})
+
+-- | The volume id for this data. *
+annVolumeId :: Lens' AnnotationData (Maybe Text)
+annVolumeId
+  = lens _annVolumeId (\ s a -> s{_annVolumeId = a})
+
+-- | Unique id for this annotation data.
+annId :: Lens' AnnotationData (Maybe Text)
+annId = lens _annId (\ s a -> s{_annId = a})
+
+-- | Timestamp for the last time this data was updated. (RFC 3339 UTC
+-- date-time format).
+annUpdated :: Lens' AnnotationData (Maybe UTCTime)
+annUpdated
+  = lens _annUpdated (\ s a -> s{_annUpdated = a}) .
+      mapping _DateTime
+
+-- | The Layer id for this data. *
+annLayerId :: Lens' AnnotationData (Maybe Text)
+annLayerId
+  = lens _annLayerId (\ s a -> s{_annLayerId = a})
+
+instance FromJSON AnnotationData where
+        parseJSON
+          = withObject "AnnotationData"
+              (\ o ->
+                 AnnotationData' <$>
+                   (o .:? "encoded_data") <*>
+                     (o .:? "kind" .!= "books#annotationdata")
+                     <*> (o .:? "data")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "annotationType")
+                     <*> (o .:? "volumeId")
+                     <*> (o .:? "id")
+                     <*> (o .:? "updated")
+                     <*> (o .:? "layerId"))
+
+instance ToJSON AnnotationData where
+        toJSON AnnotationData'{..}
+          = object
+              (catMaybes
+                 [("encoded_data" .=) <$> _annEncodedData,
+                  Just ("kind" .= _annKind), ("data" .=) <$> _annData,
+                  ("selfLink" .=) <$> _annSelfLink,
+                  ("annotationType" .=) <$> _annAnnotationType,
+                  ("volumeId" .=) <$> _annVolumeId,
+                  ("id" .=) <$> _annId, ("updated" .=) <$> _annUpdated,
+                  ("layerId" .=) <$> _annLayerId])
+
+--
+-- /See:/ 'volumeannotation' smart constructor.
+data Volumeannotation = Volumeannotation'
+    { _volSelectedText       :: !(Maybe Text)
+    , _volAnnotationDataLink :: !(Maybe Text)
+    , _volPageIds            :: !(Maybe [Text])
+    , _volKind               :: !Text
+    , _volData               :: !(Maybe Text)
+    , _volSelfLink           :: !(Maybe Text)
+    , _volAnnotationType     :: !(Maybe Text)
+    , _volAnnotationDataId   :: !(Maybe Text)
+    , _volContentRanges      :: !(Maybe VolumeannotationContentRanges)
+    , _volVolumeId           :: !(Maybe Text)
+    , _volId                 :: !(Maybe Text)
+    , _volDeleted            :: !(Maybe Bool)
+    , _volUpdated            :: !(Maybe DateTime')
+    , _volLayerId            :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Volumeannotation' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'volSelectedText'
+--
+-- * 'volAnnotationDataLink'
+--
+-- * 'volPageIds'
+--
+-- * 'volKind'
+--
+-- * 'volData'
+--
+-- * 'volSelfLink'
+--
+-- * 'volAnnotationType'
+--
+-- * 'volAnnotationDataId'
+--
+-- * 'volContentRanges'
+--
+-- * 'volVolumeId'
+--
+-- * 'volId'
+--
+-- * 'volDeleted'
+--
+-- * 'volUpdated'
+--
+-- * 'volLayerId'
+volumeannotation
+    :: Volumeannotation
+volumeannotation =
+    Volumeannotation'
+    { _volSelectedText = Nothing
+    , _volAnnotationDataLink = Nothing
+    , _volPageIds = Nothing
+    , _volKind = "books#volumeannotation"
+    , _volData = Nothing
+    , _volSelfLink = Nothing
+    , _volAnnotationType = Nothing
+    , _volAnnotationDataId = Nothing
+    , _volContentRanges = Nothing
+    , _volVolumeId = Nothing
+    , _volId = Nothing
+    , _volDeleted = Nothing
+    , _volUpdated = Nothing
+    , _volLayerId = Nothing
+    }
+
+-- | Excerpt from the volume.
+volSelectedText :: Lens' Volumeannotation (Maybe Text)
+volSelectedText
+  = lens _volSelectedText
+      (\ s a -> s{_volSelectedText = a})
+
+-- | Link to get data for this annotation.
+volAnnotationDataLink :: Lens' Volumeannotation (Maybe Text)
+volAnnotationDataLink
+  = lens _volAnnotationDataLink
+      (\ s a -> s{_volAnnotationDataLink = a})
+
+-- | Pages the annotation spans.
+volPageIds :: Lens' Volumeannotation [Text]
+volPageIds
+  = lens _volPageIds (\ s a -> s{_volPageIds = a}) .
+      _Default
+      . _Coerce
+
+-- | Resource Type
+volKind :: Lens' Volumeannotation Text
+volKind = lens _volKind (\ s a -> s{_volKind = a})
+
+-- | Data for this annotation.
+volData :: Lens' Volumeannotation (Maybe Text)
+volData = lens _volData (\ s a -> s{_volData = a})
+
+-- | URL to this resource.
+volSelfLink :: Lens' Volumeannotation (Maybe Text)
+volSelfLink
+  = lens _volSelfLink (\ s a -> s{_volSelfLink = a})
+
+-- | The type of annotation this is.
+volAnnotationType :: Lens' Volumeannotation (Maybe Text)
+volAnnotationType
+  = lens _volAnnotationType
+      (\ s a -> s{_volAnnotationType = a})
+
+-- | The annotation data id for this volume annotation.
+volAnnotationDataId :: Lens' Volumeannotation (Maybe Text)
+volAnnotationDataId
+  = lens _volAnnotationDataId
+      (\ s a -> s{_volAnnotationDataId = a})
+
+-- | The content ranges to identify the selected text.
+volContentRanges :: Lens' Volumeannotation (Maybe VolumeannotationContentRanges)
+volContentRanges
+  = lens _volContentRanges
+      (\ s a -> s{_volContentRanges = a})
+
+-- | The Volume this annotation is for.
+volVolumeId :: Lens' Volumeannotation (Maybe Text)
+volVolumeId
+  = lens _volVolumeId (\ s a -> s{_volVolumeId = a})
+
+-- | Unique id of this volume annotation.
+volId :: Lens' Volumeannotation (Maybe Text)
+volId = lens _volId (\ s a -> s{_volId = a})
+
+-- | Indicates that this annotation is deleted.
+volDeleted :: Lens' Volumeannotation (Maybe Bool)
+volDeleted
+  = lens _volDeleted (\ s a -> s{_volDeleted = a})
+
+-- | Timestamp for the last time this anntoation was updated. (RFC 3339 UTC
+-- date-time format).
+volUpdated :: Lens' Volumeannotation (Maybe UTCTime)
+volUpdated
+  = lens _volUpdated (\ s a -> s{_volUpdated = a}) .
+      mapping _DateTime
+
+-- | The Layer this annotation is for.
+volLayerId :: Lens' Volumeannotation (Maybe Text)
+volLayerId
+  = lens _volLayerId (\ s a -> s{_volLayerId = a})
+
+instance FromJSON Volumeannotation where
+        parseJSON
+          = withObject "Volumeannotation"
+              (\ o ->
+                 Volumeannotation' <$>
+                   (o .:? "selectedText") <*>
+                     (o .:? "annotationDataLink")
+                     <*> (o .:? "pageIds" .!= mempty)
+                     <*> (o .:? "kind" .!= "books#volumeannotation")
+                     <*> (o .:? "data")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "annotationType")
+                     <*> (o .:? "annotationDataId")
+                     <*> (o .:? "contentRanges")
+                     <*> (o .:? "volumeId")
+                     <*> (o .:? "id")
+                     <*> (o .:? "deleted")
+                     <*> (o .:? "updated")
+                     <*> (o .:? "layerId"))
+
+instance ToJSON Volumeannotation where
+        toJSON Volumeannotation'{..}
+          = object
+              (catMaybes
+                 [("selectedText" .=) <$> _volSelectedText,
+                  ("annotationDataLink" .=) <$> _volAnnotationDataLink,
+                  ("pageIds" .=) <$> _volPageIds,
+                  Just ("kind" .= _volKind), ("data" .=) <$> _volData,
+                  ("selfLink" .=) <$> _volSelfLink,
+                  ("annotationType" .=) <$> _volAnnotationType,
+                  ("annotationDataId" .=) <$> _volAnnotationDataId,
+                  ("contentRanges" .=) <$> _volContentRanges,
+                  ("volumeId" .=) <$> _volVolumeId,
+                  ("id" .=) <$> _volId, ("deleted" .=) <$> _volDeleted,
+                  ("updated" .=) <$> _volUpdated,
+                  ("layerId" .=) <$> _volLayerId])
+
+--
+-- /See:/ 'booksCloudLoadingResource' smart constructor.
+data BooksCloudLoadingResource = BooksCloudLoadingResource'
+    { _bclrProcessingState :: !(Maybe Text)
+    , _bclrVolumeId        :: !(Maybe Text)
+    , _bclrAuthor          :: !(Maybe Text)
+    , _bclrTitle           :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BooksCloudLoadingResource' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bclrProcessingState'
+--
+-- * 'bclrVolumeId'
+--
+-- * 'bclrAuthor'
+--
+-- * 'bclrTitle'
+booksCloudLoadingResource
+    :: BooksCloudLoadingResource
+booksCloudLoadingResource =
+    BooksCloudLoadingResource'
+    { _bclrProcessingState = Nothing
+    , _bclrVolumeId = Nothing
+    , _bclrAuthor = Nothing
+    , _bclrTitle = Nothing
+    }
+
+bclrProcessingState :: Lens' BooksCloudLoadingResource (Maybe Text)
+bclrProcessingState
+  = lens _bclrProcessingState
+      (\ s a -> s{_bclrProcessingState = a})
+
+bclrVolumeId :: Lens' BooksCloudLoadingResource (Maybe Text)
+bclrVolumeId
+  = lens _bclrVolumeId (\ s a -> s{_bclrVolumeId = a})
+
+bclrAuthor :: Lens' BooksCloudLoadingResource (Maybe Text)
+bclrAuthor
+  = lens _bclrAuthor (\ s a -> s{_bclrAuthor = a})
+
+bclrTitle :: Lens' BooksCloudLoadingResource (Maybe Text)
+bclrTitle
+  = lens _bclrTitle (\ s a -> s{_bclrTitle = a})
+
+instance FromJSON BooksCloudLoadingResource where
+        parseJSON
+          = withObject "BooksCloudLoadingResource"
+              (\ o ->
+                 BooksCloudLoadingResource' <$>
+                   (o .:? "processingState") <*> (o .:? "volumeId") <*>
+                     (o .:? "author")
+                     <*> (o .:? "title"))
+
+instance ToJSON BooksCloudLoadingResource where
+        toJSON BooksCloudLoadingResource'{..}
+          = object
+              (catMaybes
+                 [("processingState" .=) <$> _bclrProcessingState,
+                  ("volumeId" .=) <$> _bclrVolumeId,
+                  ("author" .=) <$> _bclrAuthor,
+                  ("title" .=) <$> _bclrTitle])
+
+--
+-- /See:/ 'volumeseriesInfoVolumeSeriesItemIssueItem' smart constructor.
+data VolumeseriesInfoVolumeSeriesItemIssueItem = VolumeseriesInfoVolumeSeriesItemIssueItem'
+    { _vivsiiiIssueOrderNumber   :: !(Maybe (Textual Int32))
+    , _vivsiiiIssueDisplayNumber :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumeseriesInfoVolumeSeriesItemIssueItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vivsiiiIssueOrderNumber'
+--
+-- * 'vivsiiiIssueDisplayNumber'
+volumeseriesInfoVolumeSeriesItemIssueItem
+    :: VolumeseriesInfoVolumeSeriesItemIssueItem
+volumeseriesInfoVolumeSeriesItemIssueItem =
+    VolumeseriesInfoVolumeSeriesItemIssueItem'
+    { _vivsiiiIssueOrderNumber = Nothing
+    , _vivsiiiIssueDisplayNumber = Nothing
+    }
+
+vivsiiiIssueOrderNumber :: Lens' VolumeseriesInfoVolumeSeriesItemIssueItem (Maybe Int32)
+vivsiiiIssueOrderNumber
+  = lens _vivsiiiIssueOrderNumber
+      (\ s a -> s{_vivsiiiIssueOrderNumber = a})
+      . mapping _Coerce
+
+vivsiiiIssueDisplayNumber :: Lens' VolumeseriesInfoVolumeSeriesItemIssueItem (Maybe Text)
+vivsiiiIssueDisplayNumber
+  = lens _vivsiiiIssueDisplayNumber
+      (\ s a -> s{_vivsiiiIssueDisplayNumber = a})
+
+instance FromJSON
+         VolumeseriesInfoVolumeSeriesItemIssueItem where
+        parseJSON
+          = withObject
+              "VolumeseriesInfoVolumeSeriesItemIssueItem"
+              (\ o ->
+                 VolumeseriesInfoVolumeSeriesItemIssueItem' <$>
+                   (o .:? "issueOrderNumber") <*>
+                     (o .:? "issueDisplayNumber"))
+
+instance ToJSON
+         VolumeseriesInfoVolumeSeriesItemIssueItem where
+        toJSON VolumeseriesInfoVolumeSeriesItemIssueItem'{..}
+          = object
+              (catMaybes
+                 [("issueOrderNumber" .=) <$>
+                    _vivsiiiIssueOrderNumber,
+                  ("issueDisplayNumber" .=) <$>
+                    _vivsiiiIssueDisplayNumber])
+
+--
+-- /See:/ 'annotation' smart constructor.
+data Annotation = Annotation'
+    { _aaSelectedText         :: !(Maybe Text)
+    , _aaLayerSummary         :: !(Maybe AnnotationLayerSummary)
+    , _aaHighlightStyle       :: !(Maybe Text)
+    , _aaClientVersionRanges  :: !(Maybe AnnotationClientVersionRanges)
+    , _aaPageIds              :: !(Maybe [Text])
+    , _aaKind                 :: !Text
+    , _aaData                 :: !(Maybe Text)
+    , _aaCreated              :: !(Maybe DateTime')
+    , _aaAfterSelectedText    :: !(Maybe Text)
+    , _aaSelfLink             :: !(Maybe Text)
+    , _aaCurrentVersionRanges :: !(Maybe AnnotationCurrentVersionRanges)
+    , _aaVolumeId             :: !(Maybe Text)
+    , _aaBeforeSelectedText   :: !(Maybe Text)
+    , _aaId                   :: !(Maybe Text)
+    , _aaDeleted              :: !(Maybe Bool)
+    , _aaUpdated              :: !(Maybe DateTime')
+    , _aaLayerId              :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Annotation' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aaSelectedText'
+--
+-- * 'aaLayerSummary'
+--
+-- * 'aaHighlightStyle'
+--
+-- * 'aaClientVersionRanges'
+--
+-- * 'aaPageIds'
+--
+-- * 'aaKind'
+--
+-- * 'aaData'
+--
+-- * 'aaCreated'
+--
+-- * 'aaAfterSelectedText'
+--
+-- * 'aaSelfLink'
+--
+-- * 'aaCurrentVersionRanges'
+--
+-- * 'aaVolumeId'
+--
+-- * 'aaBeforeSelectedText'
+--
+-- * 'aaId'
+--
+-- * 'aaDeleted'
+--
+-- * 'aaUpdated'
+--
+-- * 'aaLayerId'
+annotation
+    :: Annotation
+annotation =
+    Annotation'
+    { _aaSelectedText = Nothing
+    , _aaLayerSummary = Nothing
+    , _aaHighlightStyle = Nothing
+    , _aaClientVersionRanges = Nothing
+    , _aaPageIds = Nothing
+    , _aaKind = "books#annotation"
+    , _aaData = Nothing
+    , _aaCreated = Nothing
+    , _aaAfterSelectedText = Nothing
+    , _aaSelfLink = Nothing
+    , _aaCurrentVersionRanges = Nothing
+    , _aaVolumeId = Nothing
+    , _aaBeforeSelectedText = Nothing
+    , _aaId = Nothing
+    , _aaDeleted = Nothing
+    , _aaUpdated = Nothing
+    , _aaLayerId = Nothing
+    }
+
+-- | Excerpt from the volume.
+aaSelectedText :: Lens' Annotation (Maybe Text)
+aaSelectedText
+  = lens _aaSelectedText
+      (\ s a -> s{_aaSelectedText = a})
+
+aaLayerSummary :: Lens' Annotation (Maybe AnnotationLayerSummary)
+aaLayerSummary
+  = lens _aaLayerSummary
+      (\ s a -> s{_aaLayerSummary = a})
+
+-- | The highlight style for this annotation.
+aaHighlightStyle :: Lens' Annotation (Maybe Text)
+aaHighlightStyle
+  = lens _aaHighlightStyle
+      (\ s a -> s{_aaHighlightStyle = a})
+
+-- | Selection ranges sent from the client.
+aaClientVersionRanges :: Lens' Annotation (Maybe AnnotationClientVersionRanges)
+aaClientVersionRanges
+  = lens _aaClientVersionRanges
+      (\ s a -> s{_aaClientVersionRanges = a})
+
+-- | Pages that this annotation spans.
+aaPageIds :: Lens' Annotation [Text]
+aaPageIds
+  = lens _aaPageIds (\ s a -> s{_aaPageIds = a}) .
+      _Default
+      . _Coerce
+
+-- | Resource type.
+aaKind :: Lens' Annotation Text
+aaKind = lens _aaKind (\ s a -> s{_aaKind = a})
+
+-- | User-created data for this annotation.
+aaData :: Lens' Annotation (Maybe Text)
+aaData = lens _aaData (\ s a -> s{_aaData = a})
+
+-- | Timestamp for the created time of this annotation.
+aaCreated :: Lens' Annotation (Maybe UTCTime)
+aaCreated
+  = lens _aaCreated (\ s a -> s{_aaCreated = a}) .
+      mapping _DateTime
+
+-- | Anchor text after excerpt. For requests, if the user bookmarked a screen
+-- that has no flowing text on it, then this field should be empty.
+aaAfterSelectedText :: Lens' Annotation (Maybe Text)
+aaAfterSelectedText
+  = lens _aaAfterSelectedText
+      (\ s a -> s{_aaAfterSelectedText = a})
+
+-- | URL to this resource.
+aaSelfLink :: Lens' Annotation (Maybe Text)
+aaSelfLink
+  = lens _aaSelfLink (\ s a -> s{_aaSelfLink = a})
+
+-- | Selection ranges for the most recent content version.
+aaCurrentVersionRanges :: Lens' Annotation (Maybe AnnotationCurrentVersionRanges)
+aaCurrentVersionRanges
+  = lens _aaCurrentVersionRanges
+      (\ s a -> s{_aaCurrentVersionRanges = a})
+
+-- | The volume that this annotation belongs to.
+aaVolumeId :: Lens' Annotation (Maybe Text)
+aaVolumeId
+  = lens _aaVolumeId (\ s a -> s{_aaVolumeId = a})
+
+-- | Anchor text before excerpt. For requests, if the user bookmarked a
+-- screen that has no flowing text on it, then this field should be empty.
+aaBeforeSelectedText :: Lens' Annotation (Maybe Text)
+aaBeforeSelectedText
+  = lens _aaBeforeSelectedText
+      (\ s a -> s{_aaBeforeSelectedText = a})
+
+-- | Id of this annotation, in the form of a GUID.
+aaId :: Lens' Annotation (Maybe Text)
+aaId = lens _aaId (\ s a -> s{_aaId = a})
+
+-- | Indicates that this annotation is deleted.
+aaDeleted :: Lens' Annotation (Maybe Bool)
+aaDeleted
+  = lens _aaDeleted (\ s a -> s{_aaDeleted = a})
+
+-- | Timestamp for the last time this annotation was modified.
+aaUpdated :: Lens' Annotation (Maybe UTCTime)
+aaUpdated
+  = lens _aaUpdated (\ s a -> s{_aaUpdated = a}) .
+      mapping _DateTime
+
+-- | The layer this annotation is for.
+aaLayerId :: Lens' Annotation (Maybe Text)
+aaLayerId
+  = lens _aaLayerId (\ s a -> s{_aaLayerId = a})
+
+instance FromJSON Annotation where
+        parseJSON
+          = withObject "Annotation"
+              (\ o ->
+                 Annotation' <$>
+                   (o .:? "selectedText") <*> (o .:? "layerSummary") <*>
+                     (o .:? "highlightStyle")
+                     <*> (o .:? "clientVersionRanges")
+                     <*> (o .:? "pageIds" .!= mempty)
+                     <*> (o .:? "kind" .!= "books#annotation")
+                     <*> (o .:? "data")
+                     <*> (o .:? "created")
+                     <*> (o .:? "afterSelectedText")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "currentVersionRanges")
+                     <*> (o .:? "volumeId")
+                     <*> (o .:? "beforeSelectedText")
+                     <*> (o .:? "id")
+                     <*> (o .:? "deleted")
+                     <*> (o .:? "updated")
+                     <*> (o .:? "layerId"))
+
+instance ToJSON Annotation where
+        toJSON Annotation'{..}
+          = object
+              (catMaybes
+                 [("selectedText" .=) <$> _aaSelectedText,
+                  ("layerSummary" .=) <$> _aaLayerSummary,
+                  ("highlightStyle" .=) <$> _aaHighlightStyle,
+                  ("clientVersionRanges" .=) <$>
+                    _aaClientVersionRanges,
+                  ("pageIds" .=) <$> _aaPageIds,
+                  Just ("kind" .= _aaKind), ("data" .=) <$> _aaData,
+                  ("created" .=) <$> _aaCreated,
+                  ("afterSelectedText" .=) <$> _aaAfterSelectedText,
+                  ("selfLink" .=) <$> _aaSelfLink,
+                  ("currentVersionRanges" .=) <$>
+                    _aaCurrentVersionRanges,
+                  ("volumeId" .=) <$> _aaVolumeId,
+                  ("beforeSelectedText" .=) <$> _aaBeforeSelectedText,
+                  ("id" .=) <$> _aaId, ("deleted" .=) <$> _aaDeleted,
+                  ("updated" .=) <$> _aaUpdated,
+                  ("layerId" .=) <$> _aaLayerId])
+
+-- | Author of this review.
+--
+-- /See:/ 'reviewAuthor' smart constructor.
+newtype ReviewAuthor = ReviewAuthor'
+    { _raDisplayName :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ReviewAuthor' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'raDisplayName'
+reviewAuthor
+    :: ReviewAuthor
+reviewAuthor =
+    ReviewAuthor'
+    { _raDisplayName = Nothing
+    }
+
+-- | Name of this person.
+raDisplayName :: Lens' ReviewAuthor (Maybe Text)
+raDisplayName
+  = lens _raDisplayName
+      (\ s a -> s{_raDisplayName = a})
+
+instance FromJSON ReviewAuthor where
+        parseJSON
+          = withObject "ReviewAuthor"
+              (\ o -> ReviewAuthor' <$> (o .:? "displayName"))
+
+instance ToJSON ReviewAuthor where
+        toJSON ReviewAuthor'{..}
+          = object
+              (catMaybes [("displayName" .=) <$> _raDisplayName])
+
+-- | The viewport for showing this location. This is a latitude, longitude
+-- rectangle.
+--
+-- /See:/ 'geolayerDataGeoViewport' smart constructor.
+data GeolayerDataGeoViewport = GeolayerDataGeoViewport'
+    { _gdgvHi :: !(Maybe GeolayerDataGeoViewportHi)
+    , _gdgvLo :: !(Maybe GeolayerDataGeoViewportLo)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GeolayerDataGeoViewport' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gdgvHi'
+--
+-- * 'gdgvLo'
+geolayerDataGeoViewport
+    :: GeolayerDataGeoViewport
+geolayerDataGeoViewport =
+    GeolayerDataGeoViewport'
+    { _gdgvHi = Nothing
+    , _gdgvLo = Nothing
+    }
+
+gdgvHi :: Lens' GeolayerDataGeoViewport (Maybe GeolayerDataGeoViewportHi)
+gdgvHi = lens _gdgvHi (\ s a -> s{_gdgvHi = a})
+
+gdgvLo :: Lens' GeolayerDataGeoViewport (Maybe GeolayerDataGeoViewportLo)
+gdgvLo = lens _gdgvLo (\ s a -> s{_gdgvLo = a})
+
+instance FromJSON GeolayerDataGeoViewport where
+        parseJSON
+          = withObject "GeolayerDataGeoViewport"
+              (\ o ->
+                 GeolayerDataGeoViewport' <$>
+                   (o .:? "hi") <*> (o .:? "lo"))
+
+instance ToJSON GeolayerDataGeoViewport where
+        toJSON GeolayerDataGeoViewport'{..}
+          = object
+              (catMaybes
+                 [("hi" .=) <$> _gdgvHi, ("lo" .=) <$> _gdgvLo])
+
+-- | User specific information related to this volume. (e.g. page this user
+-- last read or whether they purchased this book)
+--
+-- /See:/ 'volumeUserInfo' smart constructor.
+data VolumeUserInfo = VolumeUserInfo'
+    { _vuiIsFamilySharingAllowed       :: !(Maybe Bool)
+    , _vuiIsFamilySharedToUser         :: !(Maybe Bool)
+    , _vuiCopy                         :: !(Maybe VolumeUserInfoCopy)
+    , _vuiUserUploadedVolumeInfo       :: !(Maybe VolumeUserInfoUserUploadedVolumeInfo)
+    , _vuiIsPurchased                  :: !(Maybe Bool)
+    , _vuiEntitlementType              :: !(Maybe (Textual Int32))
+    , _vuiAcquisitionType              :: !(Maybe (Textual Int32))
+    , _vuiAcquiredTime                 :: !(Maybe DateTime')
+    , _vuiRentalState                  :: !(Maybe Text)
+    , _vuiIsPreOrdered                 :: !(Maybe Bool)
+    , _vuiReview                       :: !(Maybe Review)
+    , _vuiIsFamilySharedFromUser       :: !(Maybe Bool)
+    , _vuiRentalPeriod                 :: !(Maybe VolumeUserInfoRentalPeriod)
+    , _vuiUpdated                      :: !(Maybe DateTime')
+    , _vuiIsUploaded                   :: !(Maybe Bool)
+    , _vuiIsInMyBooks                  :: !(Maybe Bool)
+    , _vuiReadingPosition              :: !(Maybe ReadingPosition)
+    , _vuiFamilySharing                :: !(Maybe VolumeUserInfoFamilySharing)
+    , _vuiIsFamilySharingDisabledByFop :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumeUserInfo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vuiIsFamilySharingAllowed'
+--
+-- * 'vuiIsFamilySharedToUser'
+--
+-- * 'vuiCopy'
+--
+-- * 'vuiUserUploadedVolumeInfo'
+--
+-- * 'vuiIsPurchased'
+--
+-- * 'vuiEntitlementType'
+--
+-- * 'vuiAcquisitionType'
+--
+-- * 'vuiAcquiredTime'
+--
+-- * 'vuiRentalState'
+--
+-- * 'vuiIsPreOrdered'
+--
+-- * 'vuiReview'
+--
+-- * 'vuiIsFamilySharedFromUser'
+--
+-- * 'vuiRentalPeriod'
+--
+-- * 'vuiUpdated'
+--
+-- * 'vuiIsUploaded'
+--
+-- * 'vuiIsInMyBooks'
+--
+-- * 'vuiReadingPosition'
+--
+-- * 'vuiFamilySharing'
+--
+-- * 'vuiIsFamilySharingDisabledByFop'
+volumeUserInfo
+    :: VolumeUserInfo
+volumeUserInfo =
+    VolumeUserInfo'
+    { _vuiIsFamilySharingAllowed = Nothing
+    , _vuiIsFamilySharedToUser = Nothing
+    , _vuiCopy = Nothing
+    , _vuiUserUploadedVolumeInfo = Nothing
+    , _vuiIsPurchased = Nothing
+    , _vuiEntitlementType = Nothing
+    , _vuiAcquisitionType = Nothing
+    , _vuiAcquiredTime = Nothing
+    , _vuiRentalState = Nothing
+    , _vuiIsPreOrdered = Nothing
+    , _vuiReview = Nothing
+    , _vuiIsFamilySharedFromUser = Nothing
+    , _vuiRentalPeriod = Nothing
+    , _vuiUpdated = Nothing
+    , _vuiIsUploaded = Nothing
+    , _vuiIsInMyBooks = Nothing
+    , _vuiReadingPosition = Nothing
+    , _vuiFamilySharing = Nothing
+    , _vuiIsFamilySharingDisabledByFop = Nothing
+    }
+
+-- | Deprecated: Replaced by familySharing.
+vuiIsFamilySharingAllowed :: Lens' VolumeUserInfo (Maybe Bool)
+vuiIsFamilySharingAllowed
+  = lens _vuiIsFamilySharingAllowed
+      (\ s a -> s{_vuiIsFamilySharingAllowed = a})
+
+-- | Whether or not the user received this volume through family sharing.
+vuiIsFamilySharedToUser :: Lens' VolumeUserInfo (Maybe Bool)
+vuiIsFamilySharedToUser
+  = lens _vuiIsFamilySharedToUser
+      (\ s a -> s{_vuiIsFamilySharedToUser = a})
+
+-- | Copy\/Paste accounting information.
+vuiCopy :: Lens' VolumeUserInfo (Maybe VolumeUserInfoCopy)
+vuiCopy = lens _vuiCopy (\ s a -> s{_vuiCopy = a})
+
+vuiUserUploadedVolumeInfo :: Lens' VolumeUserInfo (Maybe VolumeUserInfoUserUploadedVolumeInfo)
+vuiUserUploadedVolumeInfo
+  = lens _vuiUserUploadedVolumeInfo
+      (\ s a -> s{_vuiUserUploadedVolumeInfo = a})
+
+-- | Whether or not this volume was purchased by the authenticated user
+-- making the request. (In LITE projection.)
+vuiIsPurchased :: Lens' VolumeUserInfo (Maybe Bool)
+vuiIsPurchased
+  = lens _vuiIsPurchased
+      (\ s a -> s{_vuiIsPurchased = a})
+
+-- | Whether this volume is purchased, sample, pd download etc.
+vuiEntitlementType :: Lens' VolumeUserInfo (Maybe Int32)
+vuiEntitlementType
+  = lens _vuiEntitlementType
+      (\ s a -> s{_vuiEntitlementType = a})
+      . mapping _Coerce
+
+-- | How this volume was acquired.
+vuiAcquisitionType :: Lens' VolumeUserInfo (Maybe Int32)
+vuiAcquisitionType
+  = lens _vuiAcquisitionType
+      (\ s a -> s{_vuiAcquisitionType = a})
+      . mapping _Coerce
+
+-- | Timestamp when this volume was acquired by the user. (RFC 3339 UTC
+-- date-time format) Acquiring includes purchase, user upload, receiving
+-- family sharing, etc.
+vuiAcquiredTime :: Lens' VolumeUserInfo (Maybe UTCTime)
+vuiAcquiredTime
+  = lens _vuiAcquiredTime
+      (\ s a -> s{_vuiAcquiredTime = a})
+      . mapping _DateTime
+
+-- | Whether this book is an active or an expired rental.
+vuiRentalState :: Lens' VolumeUserInfo (Maybe Text)
+vuiRentalState
+  = lens _vuiRentalState
+      (\ s a -> s{_vuiRentalState = a})
+
+-- | Whether or not this volume was pre-ordered by the authenticated user
+-- making the request. (In LITE projection.)
+vuiIsPreOrdered :: Lens' VolumeUserInfo (Maybe Bool)
+vuiIsPreOrdered
+  = lens _vuiIsPreOrdered
+      (\ s a -> s{_vuiIsPreOrdered = a})
+
+-- | This user\'s review of this volume, if one exists.
+vuiReview :: Lens' VolumeUserInfo (Maybe Review)
+vuiReview
+  = lens _vuiReview (\ s a -> s{_vuiReview = a})
+
+-- | Whether or not the user shared this volume with the family.
+vuiIsFamilySharedFromUser :: Lens' VolumeUserInfo (Maybe Bool)
+vuiIsFamilySharedFromUser
+  = lens _vuiIsFamilySharedFromUser
+      (\ s a -> s{_vuiIsFamilySharedFromUser = a})
+
+-- | Period during this book is\/was a valid rental.
+vuiRentalPeriod :: Lens' VolumeUserInfo (Maybe VolumeUserInfoRentalPeriod)
+vuiRentalPeriod
+  = lens _vuiRentalPeriod
+      (\ s a -> s{_vuiRentalPeriod = a})
+
+-- | Timestamp when this volume was last modified by a user action, such as a
+-- reading position update, volume purchase or writing a review. (RFC 3339
+-- UTC date-time format).
+vuiUpdated :: Lens' VolumeUserInfo (Maybe UTCTime)
+vuiUpdated
+  = lens _vuiUpdated (\ s a -> s{_vuiUpdated = a}) .
+      mapping _DateTime
+
+-- | Whether or not this volume was user uploaded.
+vuiIsUploaded :: Lens' VolumeUserInfo (Maybe Bool)
+vuiIsUploaded
+  = lens _vuiIsUploaded
+      (\ s a -> s{_vuiIsUploaded = a})
+
+-- | Whether or not this volume is currently in \"my books.\"
+vuiIsInMyBooks :: Lens' VolumeUserInfo (Maybe Bool)
+vuiIsInMyBooks
+  = lens _vuiIsInMyBooks
+      (\ s a -> s{_vuiIsInMyBooks = a})
+
+-- | The user\'s current reading position in the volume, if one is available.
+-- (In LITE projection.)
+vuiReadingPosition :: Lens' VolumeUserInfo (Maybe ReadingPosition)
+vuiReadingPosition
+  = lens _vuiReadingPosition
+      (\ s a -> s{_vuiReadingPosition = a})
+
+-- | Information on the ability to share with the family.
+vuiFamilySharing :: Lens' VolumeUserInfo (Maybe VolumeUserInfoFamilySharing)
+vuiFamilySharing
+  = lens _vuiFamilySharing
+      (\ s a -> s{_vuiFamilySharing = a})
+
+-- | Deprecated: Replaced by familySharing.
+vuiIsFamilySharingDisabledByFop :: Lens' VolumeUserInfo (Maybe Bool)
+vuiIsFamilySharingDisabledByFop
+  = lens _vuiIsFamilySharingDisabledByFop
+      (\ s a -> s{_vuiIsFamilySharingDisabledByFop = a})
+
+instance FromJSON VolumeUserInfo where
+        parseJSON
+          = withObject "VolumeUserInfo"
+              (\ o ->
+                 VolumeUserInfo' <$>
+                   (o .:? "isFamilySharingAllowed") <*>
+                     (o .:? "isFamilySharedToUser")
+                     <*> (o .:? "copy")
+                     <*> (o .:? "userUploadedVolumeInfo")
+                     <*> (o .:? "isPurchased")
+                     <*> (o .:? "entitlementType")
+                     <*> (o .:? "acquisitionType")
+                     <*> (o .:? "acquiredTime")
+                     <*> (o .:? "rentalState")
+                     <*> (o .:? "isPreordered")
+                     <*> (o .:? "review")
+                     <*> (o .:? "isFamilySharedFromUser")
+                     <*> (o .:? "rentalPeriod")
+                     <*> (o .:? "updated")
+                     <*> (o .:? "isUploaded")
+                     <*> (o .:? "isInMyBooks")
+                     <*> (o .:? "readingPosition")
+                     <*> (o .:? "familySharing")
+                     <*> (o .:? "isFamilySharingDisabledByFop"))
+
+instance ToJSON VolumeUserInfo where
+        toJSON VolumeUserInfo'{..}
+          = object
+              (catMaybes
+                 [("isFamilySharingAllowed" .=) <$>
+                    _vuiIsFamilySharingAllowed,
+                  ("isFamilySharedToUser" .=) <$>
+                    _vuiIsFamilySharedToUser,
+                  ("copy" .=) <$> _vuiCopy,
+                  ("userUploadedVolumeInfo" .=) <$>
+                    _vuiUserUploadedVolumeInfo,
+                  ("isPurchased" .=) <$> _vuiIsPurchased,
+                  ("entitlementType" .=) <$> _vuiEntitlementType,
+                  ("acquisitionType" .=) <$> _vuiAcquisitionType,
+                  ("acquiredTime" .=) <$> _vuiAcquiredTime,
+                  ("rentalState" .=) <$> _vuiRentalState,
+                  ("isPreordered" .=) <$> _vuiIsPreOrdered,
+                  ("review" .=) <$> _vuiReview,
+                  ("isFamilySharedFromUser" .=) <$>
+                    _vuiIsFamilySharedFromUser,
+                  ("rentalPeriod" .=) <$> _vuiRentalPeriod,
+                  ("updated" .=) <$> _vuiUpdated,
+                  ("isUploaded" .=) <$> _vuiIsUploaded,
+                  ("isInMyBooks" .=) <$> _vuiIsInMyBooks,
+                  ("readingPosition" .=) <$> _vuiReadingPosition,
+                  ("familySharing" .=) <$> _vuiFamilySharing,
+                  ("isFamilySharingDisabledByFop" .=) <$>
+                    _vuiIsFamilySharingDisabledByFop])
+
+--
+-- /See:/ 'layersummary' smart constructor.
+data Layersummary = Layersummary'
+    { _lAnnotationsDataLink      :: !(Maybe Text)
+    , _lAnnotationsLink          :: !(Maybe Text)
+    , _lKind                     :: !Text
+    , _lDataCount                :: !(Maybe (Textual Int32))
+    , _lContentVersion           :: !(Maybe Text)
+    , _lVolumeAnnotationsVersion :: !(Maybe Text)
+    , _lAnnotationCount          :: !(Maybe (Textual Int32))
+    , _lAnnotationTypes          :: !(Maybe [Text])
+    , _lSelfLink                 :: !(Maybe Text)
+    , _lVolumeId                 :: !(Maybe Text)
+    , _lId                       :: !(Maybe Text)
+    , _lUpdated                  :: !(Maybe DateTime')
+    , _lLayerId                  :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Layersummary' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lAnnotationsDataLink'
+--
+-- * 'lAnnotationsLink'
+--
+-- * 'lKind'
+--
+-- * 'lDataCount'
+--
+-- * 'lContentVersion'
+--
+-- * 'lVolumeAnnotationsVersion'
+--
+-- * 'lAnnotationCount'
+--
+-- * 'lAnnotationTypes'
+--
+-- * 'lSelfLink'
+--
+-- * 'lVolumeId'
+--
+-- * 'lId'
+--
+-- * 'lUpdated'
+--
+-- * 'lLayerId'
+layersummary
+    :: Layersummary
+layersummary =
+    Layersummary'
+    { _lAnnotationsDataLink = Nothing
+    , _lAnnotationsLink = Nothing
+    , _lKind = "books#layersummary"
+    , _lDataCount = Nothing
+    , _lContentVersion = Nothing
+    , _lVolumeAnnotationsVersion = Nothing
+    , _lAnnotationCount = Nothing
+    , _lAnnotationTypes = Nothing
+    , _lSelfLink = Nothing
+    , _lVolumeId = Nothing
+    , _lId = Nothing
+    , _lUpdated = Nothing
+    , _lLayerId = Nothing
+    }
+
+-- | Link to get data for this annotation.
+lAnnotationsDataLink :: Lens' Layersummary (Maybe Text)
+lAnnotationsDataLink
+  = lens _lAnnotationsDataLink
+      (\ s a -> s{_lAnnotationsDataLink = a})
+
+-- | The link to get the annotations for this layer.
+lAnnotationsLink :: Lens' Layersummary (Maybe Text)
+lAnnotationsLink
+  = lens _lAnnotationsLink
+      (\ s a -> s{_lAnnotationsLink = a})
+
+-- | Resource Type
+lKind :: Lens' Layersummary Text
+lKind = lens _lKind (\ s a -> s{_lKind = a})
+
+-- | The number of data items for this layer.
+lDataCount :: Lens' Layersummary (Maybe Int32)
+lDataCount
+  = lens _lDataCount (\ s a -> s{_lDataCount = a}) .
+      mapping _Coerce
+
+-- | The content version this resource is for.
+lContentVersion :: Lens' Layersummary (Maybe Text)
+lContentVersion
+  = lens _lContentVersion
+      (\ s a -> s{_lContentVersion = a})
+
+-- | The current version of this layer\'s volume annotations. Note that this
+-- version applies only to the data in the books.layers.volumeAnnotations.*
+-- responses. The actual annotation data is versioned separately.
+lVolumeAnnotationsVersion :: Lens' Layersummary (Maybe Text)
+lVolumeAnnotationsVersion
+  = lens _lVolumeAnnotationsVersion
+      (\ s a -> s{_lVolumeAnnotationsVersion = a})
+
+-- | The number of annotations for this layer.
+lAnnotationCount :: Lens' Layersummary (Maybe Int32)
+lAnnotationCount
+  = lens _lAnnotationCount
+      (\ s a -> s{_lAnnotationCount = a})
+      . mapping _Coerce
+
+-- | The list of annotation types contained for this layer.
+lAnnotationTypes :: Lens' Layersummary [Text]
+lAnnotationTypes
+  = lens _lAnnotationTypes
+      (\ s a -> s{_lAnnotationTypes = a})
+      . _Default
+      . _Coerce
+
+-- | URL to this resource.
+lSelfLink :: Lens' Layersummary (Maybe Text)
+lSelfLink
+  = lens _lSelfLink (\ s a -> s{_lSelfLink = a})
+
+-- | The volume id this resource is for.
+lVolumeId :: Lens' Layersummary (Maybe Text)
+lVolumeId
+  = lens _lVolumeId (\ s a -> s{_lVolumeId = a})
+
+-- | Unique id of this layer summary.
+lId :: Lens' Layersummary (Maybe Text)
+lId = lens _lId (\ s a -> s{_lId = a})
+
+-- | Timestamp for the last time an item in this layer was updated. (RFC 3339
+-- UTC date-time format).
+lUpdated :: Lens' Layersummary (Maybe UTCTime)
+lUpdated
+  = lens _lUpdated (\ s a -> s{_lUpdated = a}) .
+      mapping _DateTime
+
+-- | The layer id for this summary.
+lLayerId :: Lens' Layersummary (Maybe Text)
+lLayerId = lens _lLayerId (\ s a -> s{_lLayerId = a})
+
+instance FromJSON Layersummary where
+        parseJSON
+          = withObject "Layersummary"
+              (\ o ->
+                 Layersummary' <$>
+                   (o .:? "annotationsDataLink") <*>
+                     (o .:? "annotationsLink")
+                     <*> (o .:? "kind" .!= "books#layersummary")
+                     <*> (o .:? "dataCount")
+                     <*> (o .:? "contentVersion")
+                     <*> (o .:? "volumeAnnotationsVersion")
+                     <*> (o .:? "annotationCount")
+                     <*> (o .:? "annotationTypes" .!= mempty)
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "volumeId")
+                     <*> (o .:? "id")
+                     <*> (o .:? "updated")
+                     <*> (o .:? "layerId"))
+
+instance ToJSON Layersummary where
+        toJSON Layersummary'{..}
+          = object
+              (catMaybes
+                 [("annotationsDataLink" .=) <$>
+                    _lAnnotationsDataLink,
+                  ("annotationsLink" .=) <$> _lAnnotationsLink,
+                  Just ("kind" .= _lKind),
+                  ("dataCount" .=) <$> _lDataCount,
+                  ("contentVersion" .=) <$> _lContentVersion,
+                  ("volumeAnnotationsVersion" .=) <$>
+                    _lVolumeAnnotationsVersion,
+                  ("annotationCount" .=) <$> _lAnnotationCount,
+                  ("annotationTypes" .=) <$> _lAnnotationTypes,
+                  ("selfLink" .=) <$> _lSelfLink,
+                  ("volumeId" .=) <$> _lVolumeId, ("id" .=) <$> _lId,
+                  ("updated" .=) <$> _lUpdated,
+                  ("layerId" .=) <$> _lLayerId])
+
+-- | The content ranges to identify the selected text.
+--
+-- /See:/ 'volumeannotationContentRanges' smart constructor.
+data VolumeannotationContentRanges = VolumeannotationContentRanges'
+    { _vcrGbImageRange   :: !(Maybe BooksAnnotationsRange)
+    , _vcrContentVersion :: !(Maybe Text)
+    , _vcrGbTextRange    :: !(Maybe BooksAnnotationsRange)
+    , _vcrCfiRange       :: !(Maybe BooksAnnotationsRange)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumeannotationContentRanges' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vcrGbImageRange'
+--
+-- * 'vcrContentVersion'
+--
+-- * 'vcrGbTextRange'
+--
+-- * 'vcrCfiRange'
+volumeannotationContentRanges
+    :: VolumeannotationContentRanges
+volumeannotationContentRanges =
+    VolumeannotationContentRanges'
+    { _vcrGbImageRange = Nothing
+    , _vcrContentVersion = Nothing
+    , _vcrGbTextRange = Nothing
+    , _vcrCfiRange = Nothing
+    }
+
+-- | Range in GB image format for this annotation for version above.
+vcrGbImageRange :: Lens' VolumeannotationContentRanges (Maybe BooksAnnotationsRange)
+vcrGbImageRange
+  = lens _vcrGbImageRange
+      (\ s a -> s{_vcrGbImageRange = a})
+
+-- | Content version applicable to ranges below.
+vcrContentVersion :: Lens' VolumeannotationContentRanges (Maybe Text)
+vcrContentVersion
+  = lens _vcrContentVersion
+      (\ s a -> s{_vcrContentVersion = a})
+
+-- | Range in GB text format for this annotation for version above.
+vcrGbTextRange :: Lens' VolumeannotationContentRanges (Maybe BooksAnnotationsRange)
+vcrGbTextRange
+  = lens _vcrGbTextRange
+      (\ s a -> s{_vcrGbTextRange = a})
+
+-- | Range in CFI format for this annotation for version above.
+vcrCfiRange :: Lens' VolumeannotationContentRanges (Maybe BooksAnnotationsRange)
+vcrCfiRange
+  = lens _vcrCfiRange (\ s a -> s{_vcrCfiRange = a})
+
+instance FromJSON VolumeannotationContentRanges where
+        parseJSON
+          = withObject "VolumeannotationContentRanges"
+              (\ o ->
+                 VolumeannotationContentRanges' <$>
+                   (o .:? "gbImageRange") <*> (o .:? "contentVersion")
+                     <*> (o .:? "gbTextRange")
+                     <*> (o .:? "cfiRange"))
+
+instance ToJSON VolumeannotationContentRanges where
+        toJSON VolumeannotationContentRanges'{..}
+          = object
+              (catMaybes
+                 [("gbImageRange" .=) <$> _vcrGbImageRange,
+                  ("contentVersion" .=) <$> _vcrContentVersion,
+                  ("gbTextRange" .=) <$> _vcrGbTextRange,
+                  ("cfiRange" .=) <$> _vcrCfiRange])
+
+-- | Any information about a volume related to reading or obtaining that
+-- volume text. This information can depend on country (books may be public
+-- domain in one country but not in another, e.g.).
+--
+-- /See:/ 'volumeAccessInfo' smart constructor.
+data VolumeAccessInfo = VolumeAccessInfo'
+    { _vaiWebReaderLink                    :: !(Maybe Text)
+    , _vaiCountry                          :: !(Maybe Text)
+    , _vaiDriveImportedContentLink         :: !(Maybe Text)
+    , _vaiExplicitOfflineLicenseManagement :: !(Maybe Bool)
+    , _vaiViewability                      :: !(Maybe Text)
+    , _vaiQuoteSharingAllowed              :: !(Maybe Bool)
+    , _vaiEpub                             :: !(Maybe VolumeAccessInfoEpub)
+    , _vaiPdf                              :: !(Maybe VolumeAccessInfoPdf)
+    , _vaiTextToSpeechPermission           :: !(Maybe Text)
+    , _vaiEmbeddable                       :: !(Maybe Bool)
+    , _vaiAccessViewStatus                 :: !(Maybe Text)
+    , _vaiDownloadAccess                   :: !(Maybe DownloadAccessRestriction)
+    , _vaiViewOrderURL                     :: !(Maybe Text)
+    , _vaiPublicDomain                     :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumeAccessInfo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vaiWebReaderLink'
+--
+-- * 'vaiCountry'
+--
+-- * 'vaiDriveImportedContentLink'
+--
+-- * 'vaiExplicitOfflineLicenseManagement'
+--
+-- * 'vaiViewability'
+--
+-- * 'vaiQuoteSharingAllowed'
+--
+-- * 'vaiEpub'
+--
+-- * 'vaiPdf'
+--
+-- * 'vaiTextToSpeechPermission'
+--
+-- * 'vaiEmbeddable'
+--
+-- * 'vaiAccessViewStatus'
+--
+-- * 'vaiDownloadAccess'
+--
+-- * 'vaiViewOrderURL'
+--
+-- * 'vaiPublicDomain'
+volumeAccessInfo
+    :: VolumeAccessInfo
+volumeAccessInfo =
+    VolumeAccessInfo'
+    { _vaiWebReaderLink = Nothing
+    , _vaiCountry = Nothing
+    , _vaiDriveImportedContentLink = Nothing
+    , _vaiExplicitOfflineLicenseManagement = Nothing
+    , _vaiViewability = Nothing
+    , _vaiQuoteSharingAllowed = Nothing
+    , _vaiEpub = Nothing
+    , _vaiPdf = Nothing
+    , _vaiTextToSpeechPermission = Nothing
+    , _vaiEmbeddable = Nothing
+    , _vaiAccessViewStatus = Nothing
+    , _vaiDownloadAccess = Nothing
+    , _vaiViewOrderURL = Nothing
+    , _vaiPublicDomain = Nothing
+    }
+
+-- | URL to read this volume on the Google Books site. Link will not allow
+-- users to read non-viewable volumes.
+vaiWebReaderLink :: Lens' VolumeAccessInfo (Maybe Text)
+vaiWebReaderLink
+  = lens _vaiWebReaderLink
+      (\ s a -> s{_vaiWebReaderLink = a})
+
+-- | The two-letter ISO_3166-1 country code for which this access information
+-- is valid. (In LITE projection.)
+vaiCountry :: Lens' VolumeAccessInfo (Maybe Text)
+vaiCountry
+  = lens _vaiCountry (\ s a -> s{_vaiCountry = a})
+
+-- | URL to the Google Drive viewer if this volume is uploaded by the user by
+-- selecting the file from Google Drive.
+vaiDriveImportedContentLink :: Lens' VolumeAccessInfo (Maybe Text)
+vaiDriveImportedContentLink
+  = lens _vaiDriveImportedContentLink
+      (\ s a -> s{_vaiDriveImportedContentLink = a})
+
+-- | Whether this volume requires that the client explicitly request offline
+-- download license rather than have it done automatically when loading the
+-- content, if the client supports it.
+vaiExplicitOfflineLicenseManagement :: Lens' VolumeAccessInfo (Maybe Bool)
+vaiExplicitOfflineLicenseManagement
+  = lens _vaiExplicitOfflineLicenseManagement
+      (\ s a ->
+         s{_vaiExplicitOfflineLicenseManagement = a})
+
+-- | The read access of a volume. Possible values are PARTIAL, ALL_PAGES,
+-- NO_PAGES or UNKNOWN. This value depends on the country listed above. A
+-- value of PARTIAL means that the publisher has allowed some portion of
+-- the volume to be viewed publicly, without purchase. This can apply to
+-- eBooks as well as non-eBooks. Public domain books will always have a
+-- value of ALL_PAGES.
+vaiViewability :: Lens' VolumeAccessInfo (Maybe Text)
+vaiViewability
+  = lens _vaiViewability
+      (\ s a -> s{_vaiViewability = a})
+
+-- | Whether quote sharing is allowed for this volume.
+vaiQuoteSharingAllowed :: Lens' VolumeAccessInfo (Maybe Bool)
+vaiQuoteSharingAllowed
+  = lens _vaiQuoteSharingAllowed
+      (\ s a -> s{_vaiQuoteSharingAllowed = a})
+
+-- | Information about epub content. (In LITE projection.)
+vaiEpub :: Lens' VolumeAccessInfo (Maybe VolumeAccessInfoEpub)
+vaiEpub = lens _vaiEpub (\ s a -> s{_vaiEpub = a})
+
+-- | Information about pdf content. (In LITE projection.)
+vaiPdf :: Lens' VolumeAccessInfo (Maybe VolumeAccessInfoPdf)
+vaiPdf = lens _vaiPdf (\ s a -> s{_vaiPdf = a})
+
+-- | Whether text-to-speech is permitted for this volume. Values can be
+-- ALLOWED, ALLOWED_FOR_ACCESSIBILITY, or NOT_ALLOWED.
+vaiTextToSpeechPermission :: Lens' VolumeAccessInfo (Maybe Text)
+vaiTextToSpeechPermission
+  = lens _vaiTextToSpeechPermission
+      (\ s a -> s{_vaiTextToSpeechPermission = a})
+
+-- | Whether this volume can be embedded in a viewport using the Embedded
+-- Viewer API.
+vaiEmbeddable :: Lens' VolumeAccessInfo (Maybe Bool)
+vaiEmbeddable
+  = lens _vaiEmbeddable
+      (\ s a -> s{_vaiEmbeddable = a})
+
+-- | Combines the access and viewability of this volume into a single status
+-- field for this user. Values can be FULL_PURCHASED, FULL_PUBLIC_DOMAIN,
+-- SAMPLE or NONE. (In LITE projection.)
+vaiAccessViewStatus :: Lens' VolumeAccessInfo (Maybe Text)
+vaiAccessViewStatus
+  = lens _vaiAccessViewStatus
+      (\ s a -> s{_vaiAccessViewStatus = a})
+
+-- | Information about a volume\'s download license access restrictions.
+vaiDownloadAccess :: Lens' VolumeAccessInfo (Maybe DownloadAccessRestriction)
+vaiDownloadAccess
+  = lens _vaiDownloadAccess
+      (\ s a -> s{_vaiDownloadAccess = a})
+
+-- | For ordered but not yet processed orders, we give a URL that can be used
+-- to go to the appropriate Google Wallet page.
+vaiViewOrderURL :: Lens' VolumeAccessInfo (Maybe Text)
+vaiViewOrderURL
+  = lens _vaiViewOrderURL
+      (\ s a -> s{_vaiViewOrderURL = a})
+
+-- | Whether or not this book is public domain in the country listed above.
+vaiPublicDomain :: Lens' VolumeAccessInfo (Maybe Bool)
+vaiPublicDomain
+  = lens _vaiPublicDomain
+      (\ s a -> s{_vaiPublicDomain = a})
+
+instance FromJSON VolumeAccessInfo where
+        parseJSON
+          = withObject "VolumeAccessInfo"
+              (\ o ->
+                 VolumeAccessInfo' <$>
+                   (o .:? "webReaderLink") <*> (o .:? "country") <*>
+                     (o .:? "driveImportedContentLink")
+                     <*> (o .:? "explicitOfflineLicenseManagement")
+                     <*> (o .:? "viewability")
+                     <*> (o .:? "quoteSharingAllowed")
+                     <*> (o .:? "epub")
+                     <*> (o .:? "pdf")
+                     <*> (o .:? "textToSpeechPermission")
+                     <*> (o .:? "embeddable")
+                     <*> (o .:? "accessViewStatus")
+                     <*> (o .:? "downloadAccess")
+                     <*> (o .:? "viewOrderUrl")
+                     <*> (o .:? "publicDomain"))
+
+instance ToJSON VolumeAccessInfo where
+        toJSON VolumeAccessInfo'{..}
+          = object
+              (catMaybes
+                 [("webReaderLink" .=) <$> _vaiWebReaderLink,
+                  ("country" .=) <$> _vaiCountry,
+                  ("driveImportedContentLink" .=) <$>
+                    _vaiDriveImportedContentLink,
+                  ("explicitOfflineLicenseManagement" .=) <$>
+                    _vaiExplicitOfflineLicenseManagement,
+                  ("viewability" .=) <$> _vaiViewability,
+                  ("quoteSharingAllowed" .=) <$>
+                    _vaiQuoteSharingAllowed,
+                  ("epub" .=) <$> _vaiEpub, ("pdf" .=) <$> _vaiPdf,
+                  ("textToSpeechPermission" .=) <$>
+                    _vaiTextToSpeechPermission,
+                  ("embeddable" .=) <$> _vaiEmbeddable,
+                  ("accessViewStatus" .=) <$> _vaiAccessViewStatus,
+                  ("downloadAccess" .=) <$> _vaiDownloadAccess,
+                  ("viewOrderUrl" .=) <$> _vaiViewOrderURL,
+                  ("publicDomain" .=) <$> _vaiPublicDomain])
+
+-- | A list of image links for all the sizes that are available. (In LITE
+-- projection.)
+--
+-- /See:/ 'volumeVolumeInfoImageLinks' smart constructor.
+data VolumeVolumeInfoImageLinks = VolumeVolumeInfoImageLinks'
+    { _vviilThumbnail      :: !(Maybe Text)
+    , _vviilSmall          :: !(Maybe Text)
+    , _vviilExtraLarge     :: !(Maybe Text)
+    , _vviilLarge          :: !(Maybe Text)
+    , _vviilMedium         :: !(Maybe Text)
+    , _vviilSmallThumbnail :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumeVolumeInfoImageLinks' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vviilThumbnail'
+--
+-- * 'vviilSmall'
+--
+-- * 'vviilExtraLarge'
+--
+-- * 'vviilLarge'
+--
+-- * 'vviilMedium'
+--
+-- * 'vviilSmallThumbnail'
+volumeVolumeInfoImageLinks
+    :: VolumeVolumeInfoImageLinks
+volumeVolumeInfoImageLinks =
+    VolumeVolumeInfoImageLinks'
+    { _vviilThumbnail = Nothing
+    , _vviilSmall = Nothing
+    , _vviilExtraLarge = Nothing
+    , _vviilLarge = Nothing
+    , _vviilMedium = Nothing
+    , _vviilSmallThumbnail = Nothing
+    }
+
+-- | Image link for thumbnail size (width of ~128 pixels). (In LITE
+-- projection)
+vviilThumbnail :: Lens' VolumeVolumeInfoImageLinks (Maybe Text)
+vviilThumbnail
+  = lens _vviilThumbnail
+      (\ s a -> s{_vviilThumbnail = a})
+
+-- | Image link for small size (width of ~300 pixels). (In LITE projection)
+vviilSmall :: Lens' VolumeVolumeInfoImageLinks (Maybe Text)
+vviilSmall
+  = lens _vviilSmall (\ s a -> s{_vviilSmall = a})
+
+-- | Image link for extra large size (width of ~1280 pixels). (In LITE
+-- projection)
+vviilExtraLarge :: Lens' VolumeVolumeInfoImageLinks (Maybe Text)
+vviilExtraLarge
+  = lens _vviilExtraLarge
+      (\ s a -> s{_vviilExtraLarge = a})
+
+-- | Image link for large size (width of ~800 pixels). (In LITE projection)
+vviilLarge :: Lens' VolumeVolumeInfoImageLinks (Maybe Text)
+vviilLarge
+  = lens _vviilLarge (\ s a -> s{_vviilLarge = a})
+
+-- | Image link for medium size (width of ~575 pixels). (In LITE projection)
+vviilMedium :: Lens' VolumeVolumeInfoImageLinks (Maybe Text)
+vviilMedium
+  = lens _vviilMedium (\ s a -> s{_vviilMedium = a})
+
+-- | Image link for small thumbnail size (width of ~80 pixels). (In LITE
+-- projection)
+vviilSmallThumbnail :: Lens' VolumeVolumeInfoImageLinks (Maybe Text)
+vviilSmallThumbnail
+  = lens _vviilSmallThumbnail
+      (\ s a -> s{_vviilSmallThumbnail = a})
+
+instance FromJSON VolumeVolumeInfoImageLinks where
+        parseJSON
+          = withObject "VolumeVolumeInfoImageLinks"
+              (\ o ->
+                 VolumeVolumeInfoImageLinks' <$>
+                   (o .:? "thumbnail") <*> (o .:? "small") <*>
+                     (o .:? "extraLarge")
+                     <*> (o .:? "large")
+                     <*> (o .:? "medium")
+                     <*> (o .:? "smallThumbnail"))
+
+instance ToJSON VolumeVolumeInfoImageLinks where
+        toJSON VolumeVolumeInfoImageLinks'{..}
+          = object
+              (catMaybes
+                 [("thumbnail" .=) <$> _vviilThumbnail,
+                  ("small" .=) <$> _vviilSmall,
+                  ("extraLarge" .=) <$> _vviilExtraLarge,
+                  ("large" .=) <$> _vviilLarge,
+                  ("medium" .=) <$> _vviilMedium,
+                  ("smallThumbnail" .=) <$> _vviilSmallThumbnail])
+
+--
+-- /See:/ 'volumeUserInfoUserUploadedVolumeInfo' smart constructor.
+newtype VolumeUserInfoUserUploadedVolumeInfo = VolumeUserInfoUserUploadedVolumeInfo'
+    { _vuiuuviProcessingState :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumeUserInfoUserUploadedVolumeInfo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vuiuuviProcessingState'
+volumeUserInfoUserUploadedVolumeInfo
+    :: VolumeUserInfoUserUploadedVolumeInfo
+volumeUserInfoUserUploadedVolumeInfo =
+    VolumeUserInfoUserUploadedVolumeInfo'
+    { _vuiuuviProcessingState = Nothing
+    }
+
+vuiuuviProcessingState :: Lens' VolumeUserInfoUserUploadedVolumeInfo (Maybe Text)
+vuiuuviProcessingState
+  = lens _vuiuuviProcessingState
+      (\ s a -> s{_vuiuuviProcessingState = a})
+
+instance FromJSON
+         VolumeUserInfoUserUploadedVolumeInfo where
+        parseJSON
+          = withObject "VolumeUserInfoUserUploadedVolumeInfo"
+              (\ o ->
+                 VolumeUserInfoUserUploadedVolumeInfo' <$>
+                   (o .:? "processingState"))
+
+instance ToJSON VolumeUserInfoUserUploadedVolumeInfo
+         where
+        toJSON VolumeUserInfoUserUploadedVolumeInfo'{..}
+          = object
+              (catMaybes
+                 [("processingState" .=) <$> _vuiuuviProcessingState])
+
+-- | Copy\/Paste accounting information.
+--
+-- /See:/ 'volumeUserInfoCopy' smart constructor.
+data VolumeUserInfoCopy = VolumeUserInfoCopy'
+    { _vuicLimitType               :: !(Maybe Text)
+    , _vuicAllowedCharacterCount   :: !(Maybe (Textual Int32))
+    , _vuicUpdated                 :: !(Maybe DateTime')
+    , _vuicRemainingCharacterCount :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumeUserInfoCopy' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vuicLimitType'
+--
+-- * 'vuicAllowedCharacterCount'
+--
+-- * 'vuicUpdated'
+--
+-- * 'vuicRemainingCharacterCount'
+volumeUserInfoCopy
+    :: VolumeUserInfoCopy
+volumeUserInfoCopy =
+    VolumeUserInfoCopy'
+    { _vuicLimitType = Nothing
+    , _vuicAllowedCharacterCount = Nothing
+    , _vuicUpdated = Nothing
+    , _vuicRemainingCharacterCount = Nothing
+    }
+
+vuicLimitType :: Lens' VolumeUserInfoCopy (Maybe Text)
+vuicLimitType
+  = lens _vuicLimitType
+      (\ s a -> s{_vuicLimitType = a})
+
+vuicAllowedCharacterCount :: Lens' VolumeUserInfoCopy (Maybe Int32)
+vuicAllowedCharacterCount
+  = lens _vuicAllowedCharacterCount
+      (\ s a -> s{_vuicAllowedCharacterCount = a})
+      . mapping _Coerce
+
+vuicUpdated :: Lens' VolumeUserInfoCopy (Maybe UTCTime)
+vuicUpdated
+  = lens _vuicUpdated (\ s a -> s{_vuicUpdated = a}) .
+      mapping _DateTime
+
+vuicRemainingCharacterCount :: Lens' VolumeUserInfoCopy (Maybe Int32)
+vuicRemainingCharacterCount
+  = lens _vuicRemainingCharacterCount
+      (\ s a -> s{_vuicRemainingCharacterCount = a})
+      . mapping _Coerce
+
+instance FromJSON VolumeUserInfoCopy where
+        parseJSON
+          = withObject "VolumeUserInfoCopy"
+              (\ o ->
+                 VolumeUserInfoCopy' <$>
+                   (o .:? "limitType") <*>
+                     (o .:? "allowedCharacterCount")
+                     <*> (o .:? "updated")
+                     <*> (o .:? "remainingCharacterCount"))
+
+instance ToJSON VolumeUserInfoCopy where
+        toJSON VolumeUserInfoCopy'{..}
+          = object
+              (catMaybes
+                 [("limitType" .=) <$> _vuicLimitType,
+                  ("allowedCharacterCount" .=) <$>
+                    _vuicAllowedCharacterCount,
+                  ("updated" .=) <$> _vuicUpdated,
+                  ("remainingCharacterCount" .=) <$>
+                    _vuicRemainingCharacterCount])
+
+--
+-- /See:/ 'booksVolumesRecommendedRateResponse' smart constructor.
+newtype BooksVolumesRecommendedRateResponse = BooksVolumesRecommendedRateResponse'
+    { _bvrrrConsistencyToken :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BooksVolumesRecommendedRateResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bvrrrConsistencyToken'
+booksVolumesRecommendedRateResponse
+    :: BooksVolumesRecommendedRateResponse
+booksVolumesRecommendedRateResponse =
+    BooksVolumesRecommendedRateResponse'
+    { _bvrrrConsistencyToken = Nothing
+    }
+
+bvrrrConsistencyToken :: Lens' BooksVolumesRecommendedRateResponse (Maybe Text)
+bvrrrConsistencyToken
+  = lens _bvrrrConsistencyToken
+      (\ s a -> s{_bvrrrConsistencyToken = a})
+
+instance FromJSON BooksVolumesRecommendedRateResponse
+         where
+        parseJSON
+          = withObject "BooksVolumesRecommendedRateResponse"
+              (\ o ->
+                 BooksVolumesRecommendedRateResponse' <$>
+                   (o .:? "consistency_token"))
+
+instance ToJSON BooksVolumesRecommendedRateResponse
+         where
+        toJSON BooksVolumesRecommendedRateResponse'{..}
+          = object
+              (catMaybes
+                 [("consistency_token" .=) <$>
+                    _bvrrrConsistencyToken])
+
+--
+-- /See:/ 'volumeseriesInfo' smart constructor.
+data VolumeseriesInfo = VolumeseriesInfo'
+    { _viBookDisplayNumber    :: !(Maybe Text)
+    , _viKind                 :: !Text
+    , _viShortSeriesBookTitle :: !(Maybe Text)
+    , _viVolumeSeries         :: !(Maybe [VolumeseriesInfoVolumeSeriesItem])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumeseriesInfo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'viBookDisplayNumber'
+--
+-- * 'viKind'
+--
+-- * 'viShortSeriesBookTitle'
+--
+-- * 'viVolumeSeries'
+volumeseriesInfo
+    :: VolumeseriesInfo
+volumeseriesInfo =
+    VolumeseriesInfo'
+    { _viBookDisplayNumber = Nothing
+    , _viKind = "books#volume_series_info"
+    , _viShortSeriesBookTitle = Nothing
+    , _viVolumeSeries = Nothing
+    }
+
+-- | The display number string. This should be used only for display purposes
+-- and the actual sequence should be inferred from the below orderNumber.
+viBookDisplayNumber :: Lens' VolumeseriesInfo (Maybe Text)
+viBookDisplayNumber
+  = lens _viBookDisplayNumber
+      (\ s a -> s{_viBookDisplayNumber = a})
+
+-- | Resource type.
+viKind :: Lens' VolumeseriesInfo Text
+viKind = lens _viKind (\ s a -> s{_viKind = a})
+
+-- | Short book title in the context of the series.
+viShortSeriesBookTitle :: Lens' VolumeseriesInfo (Maybe Text)
+viShortSeriesBookTitle
+  = lens _viShortSeriesBookTitle
+      (\ s a -> s{_viShortSeriesBookTitle = a})
+
+viVolumeSeries :: Lens' VolumeseriesInfo [VolumeseriesInfoVolumeSeriesItem]
+viVolumeSeries
+  = lens _viVolumeSeries
+      (\ s a -> s{_viVolumeSeries = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON VolumeseriesInfo where
+        parseJSON
+          = withObject "VolumeseriesInfo"
+              (\ o ->
+                 VolumeseriesInfo' <$>
+                   (o .:? "bookDisplayNumber") <*>
+                     (o .:? "kind" .!= "books#volume_series_info")
+                     <*> (o .:? "shortSeriesBookTitle")
+                     <*> (o .:? "volumeSeries" .!= mempty))
+
+instance ToJSON VolumeseriesInfo where
+        toJSON VolumeseriesInfo'{..}
+          = object
+              (catMaybes
+                 [("bookDisplayNumber" .=) <$> _viBookDisplayNumber,
+                  Just ("kind" .= _viKind),
+                  ("shortSeriesBookTitle" .=) <$>
+                    _viShortSeriesBookTitle,
+                  ("volumeSeries" .=) <$> _viVolumeSeries])
+
+--
+-- /See:/ 'bookshelf' smart constructor.
+data Bookshelf = Bookshelf'
+    { _bAccess             :: !(Maybe Text)
+    , _bVolumesLastUpdated :: !(Maybe DateTime')
+    , _bKind               :: !Text
+    , _bCreated            :: !(Maybe DateTime')
+    , _bVolumeCount        :: !(Maybe (Textual Int32))
+    , _bSelfLink           :: !(Maybe Text)
+    , _bId                 :: !(Maybe (Textual Int32))
+    , _bUpdated            :: !(Maybe DateTime')
+    , _bTitle              :: !(Maybe Text)
+    , _bDescription        :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Bookshelf' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bAccess'
+--
+-- * 'bVolumesLastUpdated'
+--
+-- * 'bKind'
+--
+-- * 'bCreated'
+--
+-- * 'bVolumeCount'
+--
+-- * 'bSelfLink'
+--
+-- * 'bId'
+--
+-- * 'bUpdated'
+--
+-- * 'bTitle'
+--
+-- * 'bDescription'
+bookshelf
+    :: Bookshelf
+bookshelf =
+    Bookshelf'
+    { _bAccess = Nothing
+    , _bVolumesLastUpdated = Nothing
+    , _bKind = "books#bookshelf"
+    , _bCreated = Nothing
+    , _bVolumeCount = Nothing
+    , _bSelfLink = Nothing
+    , _bId = Nothing
+    , _bUpdated = Nothing
+    , _bTitle = Nothing
+    , _bDescription = Nothing
+    }
+
+-- | Whether this bookshelf is PUBLIC or PRIVATE.
+bAccess :: Lens' Bookshelf (Maybe Text)
+bAccess = lens _bAccess (\ s a -> s{_bAccess = a})
+
+-- | Last time a volume was added or removed from this bookshelf (formatted
+-- UTC timestamp with millisecond resolution).
+bVolumesLastUpdated :: Lens' Bookshelf (Maybe UTCTime)
+bVolumesLastUpdated
+  = lens _bVolumesLastUpdated
+      (\ s a -> s{_bVolumesLastUpdated = a})
+      . mapping _DateTime
+
+-- | Resource type for bookshelf metadata.
+bKind :: Lens' Bookshelf Text
+bKind = lens _bKind (\ s a -> s{_bKind = a})
+
+-- | Created time for this bookshelf (formatted UTC timestamp with
+-- millisecond resolution).
+bCreated :: Lens' Bookshelf (Maybe UTCTime)
+bCreated
+  = lens _bCreated (\ s a -> s{_bCreated = a}) .
+      mapping _DateTime
+
+-- | Number of volumes in this bookshelf.
+bVolumeCount :: Lens' Bookshelf (Maybe Int32)
+bVolumeCount
+  = lens _bVolumeCount (\ s a -> s{_bVolumeCount = a})
+      . mapping _Coerce
+
+-- | URL to this resource.
+bSelfLink :: Lens' Bookshelf (Maybe Text)
+bSelfLink
+  = lens _bSelfLink (\ s a -> s{_bSelfLink = a})
+
+-- | Id of this bookshelf, only unique by user.
+bId :: Lens' Bookshelf (Maybe Int32)
+bId
+  = lens _bId (\ s a -> s{_bId = a}) . mapping _Coerce
+
+-- | Last modified time of this bookshelf (formatted UTC timestamp with
+-- millisecond resolution).
+bUpdated :: Lens' Bookshelf (Maybe UTCTime)
+bUpdated
+  = lens _bUpdated (\ s a -> s{_bUpdated = a}) .
+      mapping _DateTime
+
+-- | Title of this bookshelf.
+bTitle :: Lens' Bookshelf (Maybe Text)
+bTitle = lens _bTitle (\ s a -> s{_bTitle = a})
+
+-- | Description of this bookshelf.
+bDescription :: Lens' Bookshelf (Maybe Text)
+bDescription
+  = lens _bDescription (\ s a -> s{_bDescription = a})
+
+instance FromJSON Bookshelf where
+        parseJSON
+          = withObject "Bookshelf"
+              (\ o ->
+                 Bookshelf' <$>
+                   (o .:? "access") <*> (o .:? "volumesLastUpdated") <*>
+                     (o .:? "kind" .!= "books#bookshelf")
+                     <*> (o .:? "created")
+                     <*> (o .:? "volumeCount")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "id")
+                     <*> (o .:? "updated")
+                     <*> (o .:? "title")
+                     <*> (o .:? "description"))
+
+instance ToJSON Bookshelf where
+        toJSON Bookshelf'{..}
+          = object
+              (catMaybes
+                 [("access" .=) <$> _bAccess,
+                  ("volumesLastUpdated" .=) <$> _bVolumesLastUpdated,
+                  Just ("kind" .= _bKind),
+                  ("created" .=) <$> _bCreated,
+                  ("volumeCount" .=) <$> _bVolumeCount,
+                  ("selfLink" .=) <$> _bSelfLink, ("id" .=) <$> _bId,
+                  ("updated" .=) <$> _bUpdated,
+                  ("title" .=) <$> _bTitle,
+                  ("description" .=) <$> _bDescription])
+
+--
+-- /See:/ 'notification' smart constructor.
+data Notification = Notification'
+    { _nDocType                        :: !(Maybe Text)
+    , _nTargetURL                      :: !(Maybe Text)
+    , _nShowNotificationSettingsAction :: !(Maybe Bool)
+    , _nDocId                          :: !(Maybe Text)
+    , _nKind                           :: !Text
+    , _nBody                           :: !(Maybe Text)
+    , _nCrmExperimentIds               :: !(Maybe [Textual Int64])
+    , _nPcampaignId                    :: !(Maybe Text)
+    , _nReason                         :: !(Maybe Text)
+    , _nDontShowNotification           :: !(Maybe Bool)
+    , _nNotificationType               :: !(Maybe Text)
+    , _nIconURL                        :: !(Maybe Text)
+    , _nTitle                          :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Notification' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'nDocType'
+--
+-- * 'nTargetURL'
+--
+-- * 'nShowNotificationSettingsAction'
+--
+-- * 'nDocId'
+--
+-- * 'nKind'
+--
+-- * 'nBody'
+--
+-- * 'nCrmExperimentIds'
+--
+-- * 'nPcampaignId'
+--
+-- * 'nReason'
+--
+-- * 'nDontShowNotification'
+--
+-- * 'nNotificationType'
+--
+-- * 'nIconURL'
+--
+-- * 'nTitle'
+notification
+    :: Notification
+notification =
+    Notification'
+    { _nDocType = Nothing
+    , _nTargetURL = Nothing
+    , _nShowNotificationSettingsAction = Nothing
+    , _nDocId = Nothing
+    , _nKind = "books#notification"
+    , _nBody = Nothing
+    , _nCrmExperimentIds = Nothing
+    , _nPcampaignId = Nothing
+    , _nReason = Nothing
+    , _nDontShowNotification = Nothing
+    , _nNotificationType = Nothing
+    , _nIconURL = Nothing
+    , _nTitle = Nothing
+    }
+
+nDocType :: Lens' Notification (Maybe Text)
+nDocType = lens _nDocType (\ s a -> s{_nDocType = a})
+
+nTargetURL :: Lens' Notification (Maybe Text)
+nTargetURL
+  = lens _nTargetURL (\ s a -> s{_nTargetURL = a})
+
+nShowNotificationSettingsAction :: Lens' Notification (Maybe Bool)
+nShowNotificationSettingsAction
+  = lens _nShowNotificationSettingsAction
+      (\ s a -> s{_nShowNotificationSettingsAction = a})
+
+nDocId :: Lens' Notification (Maybe Text)
+nDocId = lens _nDocId (\ s a -> s{_nDocId = a})
+
+-- | Resource type.
+nKind :: Lens' Notification Text
+nKind = lens _nKind (\ s a -> s{_nKind = a})
+
+nBody :: Lens' Notification (Maybe Text)
+nBody = lens _nBody (\ s a -> s{_nBody = a})
+
+-- | The list of crm experiment ids.
+nCrmExperimentIds :: Lens' Notification [Int64]
+nCrmExperimentIds
+  = lens _nCrmExperimentIds
+      (\ s a -> s{_nCrmExperimentIds = a})
+      . _Default
+      . _Coerce
+
+nPcampaignId :: Lens' Notification (Maybe Text)
+nPcampaignId
+  = lens _nPcampaignId (\ s a -> s{_nPcampaignId = a})
+
+nReason :: Lens' Notification (Maybe Text)
+nReason = lens _nReason (\ s a -> s{_nReason = a})
+
+nDontShowNotification :: Lens' Notification (Maybe Bool)
+nDontShowNotification
+  = lens _nDontShowNotification
+      (\ s a -> s{_nDontShowNotification = a})
+
+nNotificationType :: Lens' Notification (Maybe Text)
+nNotificationType
+  = lens _nNotificationType
+      (\ s a -> s{_nNotificationType = a})
+
+nIconURL :: Lens' Notification (Maybe Text)
+nIconURL = lens _nIconURL (\ s a -> s{_nIconURL = a})
+
+nTitle :: Lens' Notification (Maybe Text)
+nTitle = lens _nTitle (\ s a -> s{_nTitle = a})
+
+instance FromJSON Notification where
+        parseJSON
+          = withObject "Notification"
+              (\ o ->
+                 Notification' <$>
+                   (o .:? "doc_type") <*> (o .:? "targetUrl") <*>
+                     (o .:? "show_notification_settings_action")
+                     <*> (o .:? "doc_id")
+                     <*> (o .:? "kind" .!= "books#notification")
+                     <*> (o .:? "body")
+                     <*> (o .:? "crmExperimentIds" .!= mempty)
+                     <*> (o .:? "pcampaign_id")
+                     <*> (o .:? "reason")
+                     <*> (o .:? "dont_show_notification")
+                     <*> (o .:? "notification_type")
+                     <*> (o .:? "iconUrl")
+                     <*> (o .:? "title"))
+
+instance ToJSON Notification where
+        toJSON Notification'{..}
+          = object
+              (catMaybes
+                 [("doc_type" .=) <$> _nDocType,
+                  ("targetUrl" .=) <$> _nTargetURL,
+                  ("show_notification_settings_action" .=) <$>
+                    _nShowNotificationSettingsAction,
+                  ("doc_id" .=) <$> _nDocId, Just ("kind" .= _nKind),
+                  ("body" .=) <$> _nBody,
+                  ("crmExperimentIds" .=) <$> _nCrmExperimentIds,
+                  ("pcampaign_id" .=) <$> _nPcampaignId,
+                  ("reason" .=) <$> _nReason,
+                  ("dont_show_notification" .=) <$>
+                    _nDontShowNotification,
+                  ("notification_type" .=) <$> _nNotificationType,
+                  ("iconUrl" .=) <$> _nIconURL,
+                  ("title" .=) <$> _nTitle])
+
+--
+-- /See:/ 'annotationsSummaryLayersItem' smart constructor.
+data AnnotationsSummaryLayersItem = AnnotationsSummaryLayersItem'
+    { _asliLimitType               :: !(Maybe Text)
+    , _asliAllowedCharacterCount   :: !(Maybe (Textual Int32))
+    , _asliUpdated                 :: !(Maybe DateTime')
+    , _asliLayerId                 :: !(Maybe Text)
+    , _asliRemainingCharacterCount :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AnnotationsSummaryLayersItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'asliLimitType'
+--
+-- * 'asliAllowedCharacterCount'
+--
+-- * 'asliUpdated'
+--
+-- * 'asliLayerId'
+--
+-- * 'asliRemainingCharacterCount'
+annotationsSummaryLayersItem
+    :: AnnotationsSummaryLayersItem
+annotationsSummaryLayersItem =
+    AnnotationsSummaryLayersItem'
+    { _asliLimitType = Nothing
+    , _asliAllowedCharacterCount = Nothing
+    , _asliUpdated = Nothing
+    , _asliLayerId = Nothing
+    , _asliRemainingCharacterCount = Nothing
+    }
+
+asliLimitType :: Lens' AnnotationsSummaryLayersItem (Maybe Text)
+asliLimitType
+  = lens _asliLimitType
+      (\ s a -> s{_asliLimitType = a})
+
+asliAllowedCharacterCount :: Lens' AnnotationsSummaryLayersItem (Maybe Int32)
+asliAllowedCharacterCount
+  = lens _asliAllowedCharacterCount
+      (\ s a -> s{_asliAllowedCharacterCount = a})
+      . mapping _Coerce
+
+asliUpdated :: Lens' AnnotationsSummaryLayersItem (Maybe UTCTime)
+asliUpdated
+  = lens _asliUpdated (\ s a -> s{_asliUpdated = a}) .
+      mapping _DateTime
+
+asliLayerId :: Lens' AnnotationsSummaryLayersItem (Maybe Text)
+asliLayerId
+  = lens _asliLayerId (\ s a -> s{_asliLayerId = a})
+
+asliRemainingCharacterCount :: Lens' AnnotationsSummaryLayersItem (Maybe Int32)
+asliRemainingCharacterCount
+  = lens _asliRemainingCharacterCount
+      (\ s a -> s{_asliRemainingCharacterCount = a})
+      . mapping _Coerce
+
+instance FromJSON AnnotationsSummaryLayersItem where
+        parseJSON
+          = withObject "AnnotationsSummaryLayersItem"
+              (\ o ->
+                 AnnotationsSummaryLayersItem' <$>
+                   (o .:? "limitType") <*>
+                     (o .:? "allowedCharacterCount")
+                     <*> (o .:? "updated")
+                     <*> (o .:? "layerId")
+                     <*> (o .:? "remainingCharacterCount"))
+
+instance ToJSON AnnotationsSummaryLayersItem where
+        toJSON AnnotationsSummaryLayersItem'{..}
+          = object
+              (catMaybes
+                 [("limitType" .=) <$> _asliLimitType,
+                  ("allowedCharacterCount" .=) <$>
+                    _asliAllowedCharacterCount,
+                  ("updated" .=) <$> _asliUpdated,
+                  ("layerId" .=) <$> _asliLayerId,
+                  ("remainingCharacterCount" .=) <$>
+                    _asliRemainingCharacterCount])
+
+-- | The rental duration (for rental offers only).
+--
+-- /See:/ 'volumeSaleInfoOffersItemRentalDuration' smart constructor.
+data VolumeSaleInfoOffersItemRentalDuration = VolumeSaleInfoOffersItemRentalDuration'
+    { _vsioirdCount :: !(Maybe (Textual Double))
+    , _vsioirdUnit  :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumeSaleInfoOffersItemRentalDuration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vsioirdCount'
+--
+-- * 'vsioirdUnit'
+volumeSaleInfoOffersItemRentalDuration
+    :: VolumeSaleInfoOffersItemRentalDuration
+volumeSaleInfoOffersItemRentalDuration =
+    VolumeSaleInfoOffersItemRentalDuration'
+    { _vsioirdCount = Nothing
+    , _vsioirdUnit = Nothing
+    }
+
+vsioirdCount :: Lens' VolumeSaleInfoOffersItemRentalDuration (Maybe Double)
+vsioirdCount
+  = lens _vsioirdCount (\ s a -> s{_vsioirdCount = a})
+      . mapping _Coerce
+
+vsioirdUnit :: Lens' VolumeSaleInfoOffersItemRentalDuration (Maybe Text)
+vsioirdUnit
+  = lens _vsioirdUnit (\ s a -> s{_vsioirdUnit = a})
+
+instance FromJSON
+         VolumeSaleInfoOffersItemRentalDuration where
+        parseJSON
+          = withObject "VolumeSaleInfoOffersItemRentalDuration"
+              (\ o ->
+                 VolumeSaleInfoOffersItemRentalDuration' <$>
+                   (o .:? "count") <*> (o .:? "unit"))
+
+instance ToJSON
+         VolumeSaleInfoOffersItemRentalDuration where
+        toJSON VolumeSaleInfoOffersItemRentalDuration'{..}
+          = object
+              (catMaybes
+                 [("count" .=) <$> _vsioirdCount,
+                  ("unit" .=) <$> _vsioirdUnit])
+
+--
+-- /See:/ 'dictlayerDataDictWordsItemExamplesItem' smart constructor.
+data DictlayerDataDictWordsItemExamplesItem = DictlayerDataDictWordsItemExamplesItem'
+    { _dddwieiText   :: !(Maybe Text)
+    , _dddwieiSource :: !(Maybe DictlayerDataDictWordsItemExamplesItemSource)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DictlayerDataDictWordsItemExamplesItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dddwieiText'
+--
+-- * 'dddwieiSource'
+dictlayerDataDictWordsItemExamplesItem
+    :: DictlayerDataDictWordsItemExamplesItem
+dictlayerDataDictWordsItemExamplesItem =
+    DictlayerDataDictWordsItemExamplesItem'
+    { _dddwieiText = Nothing
+    , _dddwieiSource = Nothing
+    }
+
+dddwieiText :: Lens' DictlayerDataDictWordsItemExamplesItem (Maybe Text)
+dddwieiText
+  = lens _dddwieiText (\ s a -> s{_dddwieiText = a})
+
+dddwieiSource :: Lens' DictlayerDataDictWordsItemExamplesItem (Maybe DictlayerDataDictWordsItemExamplesItemSource)
+dddwieiSource
+  = lens _dddwieiSource
+      (\ s a -> s{_dddwieiSource = a})
+
+instance FromJSON
+         DictlayerDataDictWordsItemExamplesItem where
+        parseJSON
+          = withObject "DictlayerDataDictWordsItemExamplesItem"
+              (\ o ->
+                 DictlayerDataDictWordsItemExamplesItem' <$>
+                   (o .:? "text") <*> (o .:? "source"))
+
+instance ToJSON
+         DictlayerDataDictWordsItemExamplesItem where
+        toJSON DictlayerDataDictWordsItemExamplesItem'{..}
+          = object
+              (catMaybes
+                 [("text" .=) <$> _dddwieiText,
+                  ("source" .=) <$> _dddwieiSource])
+
+--
+-- /See:/ 'offersItemsItem' smart constructor.
+data OffersItemsItem = OffersItemsItem'
+    { _oiiItems        :: !(Maybe [OffersItemsItemItemsItem])
+    , _oiiArtURL       :: !(Maybe Text)
+    , _oiiId           :: !(Maybe Text)
+    , _oiiGServicesKey :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'OffersItemsItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'oiiItems'
+--
+-- * 'oiiArtURL'
+--
+-- * 'oiiId'
+--
+-- * 'oiiGServicesKey'
+offersItemsItem
+    :: OffersItemsItem
+offersItemsItem =
+    OffersItemsItem'
+    { _oiiItems = Nothing
+    , _oiiArtURL = Nothing
+    , _oiiId = Nothing
+    , _oiiGServicesKey = Nothing
+    }
+
+oiiItems :: Lens' OffersItemsItem [OffersItemsItemItemsItem]
+oiiItems
+  = lens _oiiItems (\ s a -> s{_oiiItems = a}) .
+      _Default
+      . _Coerce
+
+oiiArtURL :: Lens' OffersItemsItem (Maybe Text)
+oiiArtURL
+  = lens _oiiArtURL (\ s a -> s{_oiiArtURL = a})
+
+oiiId :: Lens' OffersItemsItem (Maybe Text)
+oiiId = lens _oiiId (\ s a -> s{_oiiId = a})
+
+oiiGServicesKey :: Lens' OffersItemsItem (Maybe Text)
+oiiGServicesKey
+  = lens _oiiGServicesKey
+      (\ s a -> s{_oiiGServicesKey = a})
+
+instance FromJSON OffersItemsItem where
+        parseJSON
+          = withObject "OffersItemsItem"
+              (\ o ->
+                 OffersItemsItem' <$>
+                   (o .:? "items" .!= mempty) <*> (o .:? "artUrl") <*>
+                     (o .:? "id")
+                     <*> (o .:? "gservicesKey"))
+
+instance ToJSON OffersItemsItem where
+        toJSON OffersItemsItem'{..}
+          = object
+              (catMaybes
+                 [("items" .=) <$> _oiiItems,
+                  ("artUrl" .=) <$> _oiiArtURL, ("id" .=) <$> _oiiId,
+                  ("gservicesKey" .=) <$> _oiiGServicesKey])
+
+--
+-- /See:/ 'annotationLayerSummary' smart constructor.
+data AnnotationLayerSummary = AnnotationLayerSummary'
+    { _alsLimitType               :: !(Maybe Text)
+    , _alsAllowedCharacterCount   :: !(Maybe (Textual Int32))
+    , _alsRemainingCharacterCount :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AnnotationLayerSummary' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'alsLimitType'
+--
+-- * 'alsAllowedCharacterCount'
+--
+-- * 'alsRemainingCharacterCount'
+annotationLayerSummary
+    :: AnnotationLayerSummary
+annotationLayerSummary =
+    AnnotationLayerSummary'
+    { _alsLimitType = Nothing
+    , _alsAllowedCharacterCount = Nothing
+    , _alsRemainingCharacterCount = Nothing
+    }
+
+-- | Type of limitation on this layer. \"limited\" or \"unlimited\" for the
+-- \"copy\" layer.
+alsLimitType :: Lens' AnnotationLayerSummary (Maybe Text)
+alsLimitType
+  = lens _alsLimitType (\ s a -> s{_alsLimitType = a})
+
+-- | Maximum allowed characters on this layer, especially for the \"copy\"
+-- layer.
+alsAllowedCharacterCount :: Lens' AnnotationLayerSummary (Maybe Int32)
+alsAllowedCharacterCount
+  = lens _alsAllowedCharacterCount
+      (\ s a -> s{_alsAllowedCharacterCount = a})
+      . mapping _Coerce
+
+-- | Remaining allowed characters on this layer, especially for the \"copy\"
+-- layer.
+alsRemainingCharacterCount :: Lens' AnnotationLayerSummary (Maybe Int32)
+alsRemainingCharacterCount
+  = lens _alsRemainingCharacterCount
+      (\ s a -> s{_alsRemainingCharacterCount = a})
+      . mapping _Coerce
+
+instance FromJSON AnnotationLayerSummary where
+        parseJSON
+          = withObject "AnnotationLayerSummary"
+              (\ o ->
+                 AnnotationLayerSummary' <$>
+                   (o .:? "limitType") <*>
+                     (o .:? "allowedCharacterCount")
+                     <*> (o .:? "remainingCharacterCount"))
+
+instance ToJSON AnnotationLayerSummary where
+        toJSON AnnotationLayerSummary'{..}
+          = object
+              (catMaybes
+                 [("limitType" .=) <$> _alsLimitType,
+                  ("allowedCharacterCount" .=) <$>
+                    _alsAllowedCharacterCount,
+                  ("remainingCharacterCount" .=) <$>
+                    _alsRemainingCharacterCount])
+
+-- | Search result information related to this volume.
+--
+-- /See:/ 'volumeSearchInfo' smart constructor.
+newtype VolumeSearchInfo = VolumeSearchInfo'
+    { _vsiTextSnippet :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumeSearchInfo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vsiTextSnippet'
+volumeSearchInfo
+    :: VolumeSearchInfo
+volumeSearchInfo =
+    VolumeSearchInfo'
+    { _vsiTextSnippet = Nothing
+    }
+
+-- | A text snippet containing the search query.
+vsiTextSnippet :: Lens' VolumeSearchInfo (Maybe Text)
+vsiTextSnippet
+  = lens _vsiTextSnippet
+      (\ s a -> s{_vsiTextSnippet = a})
+
+instance FromJSON VolumeSearchInfo where
+        parseJSON
+          = withObject "VolumeSearchInfo"
+              (\ o -> VolumeSearchInfo' <$> (o .:? "textSnippet"))
+
+instance ToJSON VolumeSearchInfo where
+        toJSON VolumeSearchInfo'{..}
+          = object
+              (catMaybes [("textSnippet" .=) <$> _vsiTextSnippet])
+
+--
+-- /See:/ 'annotationsSummary' smart constructor.
+data AnnotationsSummary = AnnotationsSummary'
+    { _asKind   :: !Text
+    , _asLayers :: !(Maybe [AnnotationsSummaryLayersItem])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AnnotationsSummary' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'asKind'
+--
+-- * 'asLayers'
+annotationsSummary
+    :: AnnotationsSummary
+annotationsSummary =
+    AnnotationsSummary'
+    { _asKind = "books#annotationsSummary"
+    , _asLayers = Nothing
+    }
+
+asKind :: Lens' AnnotationsSummary Text
+asKind = lens _asKind (\ s a -> s{_asKind = a})
+
+asLayers :: Lens' AnnotationsSummary [AnnotationsSummaryLayersItem]
+asLayers
+  = lens _asLayers (\ s a -> s{_asLayers = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON AnnotationsSummary where
+        parseJSON
+          = withObject "AnnotationsSummary"
+              (\ o ->
+                 AnnotationsSummary' <$>
+                   (o .:? "kind" .!= "books#annotationsSummary") <*>
+                     (o .:? "layers" .!= mempty))
+
+instance ToJSON AnnotationsSummary where
+        toJSON AnnotationsSummary'{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _asKind),
+                  ("layers" .=) <$> _asLayers])
+
+--
+-- /See:/ 'category' smart constructor.
+data Category = Category'
+    { _cKind  :: !Text
+    , _cItems :: !(Maybe [CategoryItemsItem])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Category' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cKind'
+--
+-- * 'cItems'
+category
+    :: Category
+category =
+    Category'
+    { _cKind = "onboarding#category"
+    , _cItems = Nothing
+    }
+
+-- | Resource type.
+cKind :: Lens' Category Text
+cKind = lens _cKind (\ s a -> s{_cKind = a})
+
+-- | A list of onboarding categories.
+cItems :: Lens' Category [CategoryItemsItem]
+cItems
+  = lens _cItems (\ s a -> s{_cItems = a}) . _Default .
+      _Coerce
+
+instance FromJSON Category where
+        parseJSON
+          = withObject "Category"
+              (\ o ->
+                 Category' <$>
+                   (o .:? "kind" .!= "onboarding#category") <*>
+                     (o .:? "items" .!= mempty))
+
+instance ToJSON Category where
+        toJSON Category'{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _cKind), ("items" .=) <$> _cItems])
+
+--
+-- /See:/ 'discoveryclustersClustersItemBanner_with_content_container' smart constructor.
+data DiscoveryclustersClustersItemBanner_with_content_container = DiscoveryclustersClustersItemBanner_with_content_container'
+    { _dcibFillColorArgb  :: !(Maybe Text)
+    , _dcibMoreButtonURL  :: !(Maybe Text)
+    , _dcibTextColorArgb  :: !(Maybe Text)
+    , _dcibMoreButtonText :: !(Maybe Text)
+    , _dcibImageURL       :: !(Maybe Text)
+    , _dcibMaskColorArgb  :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DiscoveryclustersClustersItemBanner_with_content_container' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dcibFillColorArgb'
+--
+-- * 'dcibMoreButtonURL'
+--
+-- * 'dcibTextColorArgb'
+--
+-- * 'dcibMoreButtonText'
+--
+-- * 'dcibImageURL'
+--
+-- * 'dcibMaskColorArgb'
+discoveryclustersClustersItemBanner_with_content_container
+    :: DiscoveryclustersClustersItemBanner_with_content_container
+discoveryclustersClustersItemBanner_with_content_container =
+    DiscoveryclustersClustersItemBanner_with_content_container'
+    { _dcibFillColorArgb = Nothing
+    , _dcibMoreButtonURL = Nothing
+    , _dcibTextColorArgb = Nothing
+    , _dcibMoreButtonText = Nothing
+    , _dcibImageURL = Nothing
+    , _dcibMaskColorArgb = Nothing
+    }
+
+dcibFillColorArgb :: Lens' DiscoveryclustersClustersItemBanner_with_content_container (Maybe Text)
+dcibFillColorArgb
+  = lens _dcibFillColorArgb
+      (\ s a -> s{_dcibFillColorArgb = a})
+
+dcibMoreButtonURL :: Lens' DiscoveryclustersClustersItemBanner_with_content_container (Maybe Text)
+dcibMoreButtonURL
+  = lens _dcibMoreButtonURL
+      (\ s a -> s{_dcibMoreButtonURL = a})
+
+dcibTextColorArgb :: Lens' DiscoveryclustersClustersItemBanner_with_content_container (Maybe Text)
+dcibTextColorArgb
+  = lens _dcibTextColorArgb
+      (\ s a -> s{_dcibTextColorArgb = a})
+
+dcibMoreButtonText :: Lens' DiscoveryclustersClustersItemBanner_with_content_container (Maybe Text)
+dcibMoreButtonText
+  = lens _dcibMoreButtonText
+      (\ s a -> s{_dcibMoreButtonText = a})
+
+dcibImageURL :: Lens' DiscoveryclustersClustersItemBanner_with_content_container (Maybe Text)
+dcibImageURL
+  = lens _dcibImageURL (\ s a -> s{_dcibImageURL = a})
+
+dcibMaskColorArgb :: Lens' DiscoveryclustersClustersItemBanner_with_content_container (Maybe Text)
+dcibMaskColorArgb
+  = lens _dcibMaskColorArgb
+      (\ s a -> s{_dcibMaskColorArgb = a})
+
+instance FromJSON
+         DiscoveryclustersClustersItemBanner_with_content_container
+         where
+        parseJSON
+          = withObject
+              "DiscoveryclustersClustersItemBannerWithContentContainer"
+              (\ o ->
+                 DiscoveryclustersClustersItemBanner_with_content_container'
+                   <$>
+                   (o .:? "fillColorArgb") <*> (o .:? "moreButtonUrl")
+                     <*> (o .:? "textColorArgb")
+                     <*> (o .:? "moreButtonText")
+                     <*> (o .:? "imageUrl")
+                     <*> (o .:? "maskColorArgb"))
+
+instance ToJSON
+         DiscoveryclustersClustersItemBanner_with_content_container
+         where
+        toJSON
+          DiscoveryclustersClustersItemBanner_with_content_container'{..}
+          = object
+              (catMaybes
+                 [("fillColorArgb" .=) <$> _dcibFillColorArgb,
+                  ("moreButtonUrl" .=) <$> _dcibMoreButtonURL,
+                  ("textColorArgb" .=) <$> _dcibTextColorArgb,
+                  ("moreButtonText" .=) <$> _dcibMoreButtonText,
+                  ("imageUrl" .=) <$> _dcibImageURL,
+                  ("maskColorArgb" .=) <$> _dcibMaskColorArgb])
+
+--
+-- /See:/ 'volume' smart constructor.
+data Volume = Volume'
+    { _vvUserInfo        :: !(Maybe VolumeUserInfo)
+    , _vvEtag            :: !(Maybe Text)
+    , _vvAccessInfo      :: !(Maybe VolumeAccessInfo)
+    , _vvKind            :: !Text
+    , _vvSearchInfo      :: !(Maybe VolumeSearchInfo)
+    , _vvSelfLink        :: !(Maybe Text)
+    , _vvLayerInfo       :: !(Maybe VolumeLayerInfo)
+    , _vvSaleInfo        :: !(Maybe VolumeSaleInfo)
+    , _vvId              :: !(Maybe Text)
+    , _vvRecommendedInfo :: !(Maybe VolumeRecommendedInfo)
+    , _vvVolumeInfo      :: !(Maybe VolumeVolumeInfo)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Volume' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vvUserInfo'
+--
+-- * 'vvEtag'
+--
+-- * 'vvAccessInfo'
+--
+-- * 'vvKind'
+--
+-- * 'vvSearchInfo'
+--
+-- * 'vvSelfLink'
+--
+-- * 'vvLayerInfo'
+--
+-- * 'vvSaleInfo'
+--
+-- * 'vvId'
+--
+-- * 'vvRecommendedInfo'
+--
+-- * 'vvVolumeInfo'
+volume
+    :: Volume
+volume =
+    Volume'
+    { _vvUserInfo = Nothing
+    , _vvEtag = Nothing
+    , _vvAccessInfo = Nothing
+    , _vvKind = "books#volume"
+    , _vvSearchInfo = Nothing
+    , _vvSelfLink = Nothing
+    , _vvLayerInfo = Nothing
+    , _vvSaleInfo = Nothing
+    , _vvId = Nothing
+    , _vvRecommendedInfo = Nothing
+    , _vvVolumeInfo = Nothing
+    }
+
+-- | User specific information related to this volume. (e.g. page this user
+-- last read or whether they purchased this book)
+vvUserInfo :: Lens' Volume (Maybe VolumeUserInfo)
+vvUserInfo
+  = lens _vvUserInfo (\ s a -> s{_vvUserInfo = a})
+
+-- | Opaque identifier for a specific version of a volume resource. (In LITE
+-- projection)
+vvEtag :: Lens' Volume (Maybe Text)
+vvEtag = lens _vvEtag (\ s a -> s{_vvEtag = a})
+
+-- | Any information about a volume related to reading or obtaining that
+-- volume text. This information can depend on country (books may be public
+-- domain in one country but not in another, e.g.).
+vvAccessInfo :: Lens' Volume (Maybe VolumeAccessInfo)
+vvAccessInfo
+  = lens _vvAccessInfo (\ s a -> s{_vvAccessInfo = a})
+
+-- | Resource type for a volume. (In LITE projection.)
+vvKind :: Lens' Volume Text
+vvKind = lens _vvKind (\ s a -> s{_vvKind = a})
+
+-- | Search result information related to this volume.
+vvSearchInfo :: Lens' Volume (Maybe VolumeSearchInfo)
+vvSearchInfo
+  = lens _vvSearchInfo (\ s a -> s{_vvSearchInfo = a})
+
+-- | URL to this resource. (In LITE projection.)
+vvSelfLink :: Lens' Volume (Maybe Text)
+vvSelfLink
+  = lens _vvSelfLink (\ s a -> s{_vvSelfLink = a})
+
+-- | What layers exist in this volume and high level information about them.
+vvLayerInfo :: Lens' Volume (Maybe VolumeLayerInfo)
+vvLayerInfo
+  = lens _vvLayerInfo (\ s a -> s{_vvLayerInfo = a})
+
+-- | Any information about a volume related to the eBookstore and\/or
+-- purchaseability. This information can depend on the country where the
+-- request originates from (i.e. books may not be for sale in certain
+-- countries).
+vvSaleInfo :: Lens' Volume (Maybe VolumeSaleInfo)
+vvSaleInfo
+  = lens _vvSaleInfo (\ s a -> s{_vvSaleInfo = a})
+
+-- | Unique identifier for a volume. (In LITE projection.)
+vvId :: Lens' Volume (Maybe Text)
+vvId = lens _vvId (\ s a -> s{_vvId = a})
+
+-- | Recommendation related information for this volume.
+vvRecommendedInfo :: Lens' Volume (Maybe VolumeRecommendedInfo)
+vvRecommendedInfo
+  = lens _vvRecommendedInfo
+      (\ s a -> s{_vvRecommendedInfo = a})
+
+-- | General volume information.
+vvVolumeInfo :: Lens' Volume (Maybe VolumeVolumeInfo)
+vvVolumeInfo
+  = lens _vvVolumeInfo (\ s a -> s{_vvVolumeInfo = a})
+
+instance FromJSON Volume where
+        parseJSON
+          = withObject "Volume"
+              (\ o ->
+                 Volume' <$>
+                   (o .:? "userInfo") <*> (o .:? "etag") <*>
+                     (o .:? "accessInfo")
+                     <*> (o .:? "kind" .!= "books#volume")
+                     <*> (o .:? "searchInfo")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "layerInfo")
+                     <*> (o .:? "saleInfo")
+                     <*> (o .:? "id")
+                     <*> (o .:? "recommendedInfo")
+                     <*> (o .:? "volumeInfo"))
+
+instance ToJSON Volume where
+        toJSON Volume'{..}
+          = object
+              (catMaybes
+                 [("userInfo" .=) <$> _vvUserInfo,
+                  ("etag" .=) <$> _vvEtag,
+                  ("accessInfo" .=) <$> _vvAccessInfo,
+                  Just ("kind" .= _vvKind),
+                  ("searchInfo" .=) <$> _vvSearchInfo,
+                  ("selfLink" .=) <$> _vvSelfLink,
+                  ("layerInfo" .=) <$> _vvLayerInfo,
+                  ("saleInfo" .=) <$> _vvSaleInfo, ("id" .=) <$> _vvId,
+                  ("recommendedInfo" .=) <$> _vvRecommendedInfo,
+                  ("volumeInfo" .=) <$> _vvVolumeInfo])
+
+--
+-- /See:/ 'geolayerDataGeoBoundaryItemItem' smart constructor.
+data GeolayerDataGeoBoundaryItemItem = GeolayerDataGeoBoundaryItemItem'
+    { _gdgbiiLatitude  :: !(Maybe (Textual Word32))
+    , _gdgbiiLongitude :: !(Maybe (Textual Word32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GeolayerDataGeoBoundaryItemItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gdgbiiLatitude'
+--
+-- * 'gdgbiiLongitude'
+geolayerDataGeoBoundaryItemItem
+    :: GeolayerDataGeoBoundaryItemItem
+geolayerDataGeoBoundaryItemItem =
+    GeolayerDataGeoBoundaryItemItem'
+    { _gdgbiiLatitude = Nothing
+    , _gdgbiiLongitude = Nothing
+    }
+
+gdgbiiLatitude :: Lens' GeolayerDataGeoBoundaryItemItem (Maybe Word32)
+gdgbiiLatitude
+  = lens _gdgbiiLatitude
+      (\ s a -> s{_gdgbiiLatitude = a})
+      . mapping _Coerce
+
+gdgbiiLongitude :: Lens' GeolayerDataGeoBoundaryItemItem (Maybe Word32)
+gdgbiiLongitude
+  = lens _gdgbiiLongitude
+      (\ s a -> s{_gdgbiiLongitude = a})
+      . mapping _Coerce
+
+instance FromJSON GeolayerDataGeoBoundaryItemItem
+         where
+        parseJSON
+          = withObject "GeolayerDataGeoBoundaryItemItem"
+              (\ o ->
+                 GeolayerDataGeoBoundaryItemItem' <$>
+                   (o .:? "latitude") <*> (o .:? "longitude"))
+
+instance ToJSON GeolayerDataGeoBoundaryItemItem where
+        toJSON GeolayerDataGeoBoundaryItemItem'{..}
+          = object
+              (catMaybes
+                 [("latitude" .=) <$> _gdgbiiLatitude,
+                  ("longitude" .=) <$> _gdgbiiLongitude])
+
+--
+-- /See:/ 'series' smart constructor.
+data Series = Series'
+    { _sKind   :: !Text
+    , _sSeries :: !(Maybe [SeriesSeriesItem])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Series' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sKind'
+--
+-- * 'sSeries'
+series
+    :: Series
+series =
+    Series'
+    { _sKind = "books#series"
+    , _sSeries = Nothing
+    }
+
+-- | Resource type.
+sKind :: Lens' Series Text
+sKind = lens _sKind (\ s a -> s{_sKind = a})
+
+sSeries :: Lens' Series [SeriesSeriesItem]
+sSeries
+  = lens _sSeries (\ s a -> s{_sSeries = a}) . _Default
+      . _Coerce
+
+instance FromJSON Series where
+        parseJSON
+          = withObject "Series"
+              (\ o ->
+                 Series' <$>
+                   (o .:? "kind" .!= "books#series") <*>
+                     (o .:? "series" .!= mempty))
+
+instance ToJSON Series where
+        toJSON Series'{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _sKind),
+                  ("series" .=) <$> _sSeries])
+
+--
+-- /See:/ 'offersItemsItemItemsItem' smart constructor.
+data OffersItemsItemItemsItem = OffersItemsItemItemsItem'
+    { _oiiiiCanonicalVolumeLink :: !(Maybe Text)
+    , _oiiiiCoverURL            :: !(Maybe Text)
+    , _oiiiiVolumeId            :: !(Maybe Text)
+    , _oiiiiAuthor              :: !(Maybe Text)
+    , _oiiiiTitle               :: !(Maybe Text)
+    , _oiiiiDescription         :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'OffersItemsItemItemsItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'oiiiiCanonicalVolumeLink'
+--
+-- * 'oiiiiCoverURL'
+--
+-- * 'oiiiiVolumeId'
+--
+-- * 'oiiiiAuthor'
+--
+-- * 'oiiiiTitle'
+--
+-- * 'oiiiiDescription'
+offersItemsItemItemsItem
+    :: OffersItemsItemItemsItem
+offersItemsItemItemsItem =
+    OffersItemsItemItemsItem'
+    { _oiiiiCanonicalVolumeLink = Nothing
+    , _oiiiiCoverURL = Nothing
+    , _oiiiiVolumeId = Nothing
+    , _oiiiiAuthor = Nothing
+    , _oiiiiTitle = Nothing
+    , _oiiiiDescription = Nothing
+    }
+
+oiiiiCanonicalVolumeLink :: Lens' OffersItemsItemItemsItem (Maybe Text)
+oiiiiCanonicalVolumeLink
+  = lens _oiiiiCanonicalVolumeLink
+      (\ s a -> s{_oiiiiCanonicalVolumeLink = a})
+
+oiiiiCoverURL :: Lens' OffersItemsItemItemsItem (Maybe Text)
+oiiiiCoverURL
+  = lens _oiiiiCoverURL
+      (\ s a -> s{_oiiiiCoverURL = a})
+
+oiiiiVolumeId :: Lens' OffersItemsItemItemsItem (Maybe Text)
+oiiiiVolumeId
+  = lens _oiiiiVolumeId
+      (\ s a -> s{_oiiiiVolumeId = a})
+
+oiiiiAuthor :: Lens' OffersItemsItemItemsItem (Maybe Text)
+oiiiiAuthor
+  = lens _oiiiiAuthor (\ s a -> s{_oiiiiAuthor = a})
+
+oiiiiTitle :: Lens' OffersItemsItemItemsItem (Maybe Text)
+oiiiiTitle
+  = lens _oiiiiTitle (\ s a -> s{_oiiiiTitle = a})
+
+oiiiiDescription :: Lens' OffersItemsItemItemsItem (Maybe Text)
+oiiiiDescription
+  = lens _oiiiiDescription
+      (\ s a -> s{_oiiiiDescription = a})
+
+instance FromJSON OffersItemsItemItemsItem where
+        parseJSON
+          = withObject "OffersItemsItemItemsItem"
+              (\ o ->
+                 OffersItemsItemItemsItem' <$>
+                   (o .:? "canonicalVolumeLink") <*> (o .:? "coverUrl")
+                     <*> (o .:? "volumeId")
+                     <*> (o .:? "author")
+                     <*> (o .:? "title")
+                     <*> (o .:? "description"))
+
+instance ToJSON OffersItemsItemItemsItem where
+        toJSON OffersItemsItemItemsItem'{..}
+          = object
+              (catMaybes
+                 [("canonicalVolumeLink" .=) <$>
+                    _oiiiiCanonicalVolumeLink,
+                  ("coverUrl" .=) <$> _oiiiiCoverURL,
+                  ("volumeId" .=) <$> _oiiiiVolumeId,
+                  ("author" .=) <$> _oiiiiAuthor,
+                  ("title" .=) <$> _oiiiiTitle,
+                  ("description" .=) <$> _oiiiiDescription])
+
+--
+-- /See:/ 'dictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItemSource' smart constructor.
+data DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItemSource = DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItemSource'
+    { _dddwisidieisURL         :: !(Maybe Text)
+    , _dddwisidieisAttribution :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItemSource' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dddwisidieisURL'
+--
+-- * 'dddwisidieisAttribution'
+dictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItemSource
+    :: DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItemSource
+dictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItemSource =
+    DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItemSource'
+    { _dddwisidieisURL = Nothing
+    , _dddwisidieisAttribution = Nothing
+    }
+
+dddwisidieisURL :: Lens' DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItemSource (Maybe Text)
+dddwisidieisURL
+  = lens _dddwisidieisURL
+      (\ s a -> s{_dddwisidieisURL = a})
+
+dddwisidieisAttribution :: Lens' DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItemSource (Maybe Text)
+dddwisidieisAttribution
+  = lens _dddwisidieisAttribution
+      (\ s a -> s{_dddwisidieisAttribution = a})
+
+instance FromJSON
+         DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItemSource
+         where
+        parseJSON
+          = withObject
+              "DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItemSource"
+              (\ o ->
+                 DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItemSource'
+                   <$> (o .:? "url") <*> (o .:? "attribution"))
+
+instance ToJSON
+         DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItemSource
+         where
+        toJSON
+          DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItemSource'{..}
+          = object
+              (catMaybes
+                 [("url" .=) <$> _dddwisidieisURL,
+                  ("attribution" .=) <$> _dddwisidieisAttribution])
+
+--
+-- /See:/ 'geolayerDataCommon' smart constructor.
+data GeolayerDataCommon = GeolayerDataCommon'
+    { _gdcSnippet         :: !(Maybe Text)
+    , _gdcSnippetURL      :: !(Maybe Text)
+    , _gdcLang            :: !(Maybe Text)
+    , _gdcTitle           :: !(Maybe Text)
+    , _gdcPreviewImageURL :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GeolayerDataCommon' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gdcSnippet'
+--
+-- * 'gdcSnippetURL'
+--
+-- * 'gdcLang'
+--
+-- * 'gdcTitle'
+--
+-- * 'gdcPreviewImageURL'
+geolayerDataCommon
+    :: GeolayerDataCommon
+geolayerDataCommon =
+    GeolayerDataCommon'
+    { _gdcSnippet = Nothing
+    , _gdcSnippetURL = Nothing
+    , _gdcLang = Nothing
+    , _gdcTitle = Nothing
+    , _gdcPreviewImageURL = Nothing
+    }
+
+-- | The description for this location.
+gdcSnippet :: Lens' GeolayerDataCommon (Maybe Text)
+gdcSnippet
+  = lens _gdcSnippet (\ s a -> s{_gdcSnippet = a})
+
+-- | The URL for information for this location. Ex: wikipedia link.
+gdcSnippetURL :: Lens' GeolayerDataCommon (Maybe Text)
+gdcSnippetURL
+  = lens _gdcSnippetURL
+      (\ s a -> s{_gdcSnippetURL = a})
+
+-- | The language of the information url and description.
+gdcLang :: Lens' GeolayerDataCommon (Maybe Text)
+gdcLang = lens _gdcLang (\ s a -> s{_gdcLang = a})
+
+-- | The display title and localized canonical name to use when searching for
+-- this entity on Google search.
+gdcTitle :: Lens' GeolayerDataCommon (Maybe Text)
+gdcTitle = lens _gdcTitle (\ s a -> s{_gdcTitle = a})
+
+-- | The URL for the preview image information.
+gdcPreviewImageURL :: Lens' GeolayerDataCommon (Maybe Text)
+gdcPreviewImageURL
+  = lens _gdcPreviewImageURL
+      (\ s a -> s{_gdcPreviewImageURL = a})
+
+instance FromJSON GeolayerDataCommon where
+        parseJSON
+          = withObject "GeolayerDataCommon"
+              (\ o ->
+                 GeolayerDataCommon' <$>
+                   (o .:? "snippet") <*> (o .:? "snippetUrl") <*>
+                     (o .:? "lang")
+                     <*> (o .:? "title")
+                     <*> (o .:? "previewImageUrl"))
+
+instance ToJSON GeolayerDataCommon where
+        toJSON GeolayerDataCommon'{..}
+          = object
+              (catMaybes
+                 [("snippet" .=) <$> _gdcSnippet,
+                  ("snippetUrl" .=) <$> _gdcSnippetURL,
+                  ("lang" .=) <$> _gdcLang, ("title" .=) <$> _gdcTitle,
+                  ("previewImageUrl" .=) <$> _gdcPreviewImageURL])
+
+--
+-- /See:/ 'geolayerDataGeo' smart constructor.
+data GeolayerDataGeo = GeolayerDataGeo'
+    { _gdgMapType     :: !(Maybe Text)
+    , _gdgCachePolicy :: !(Maybe Text)
+    , _gdgViewport    :: !(Maybe GeolayerDataGeoViewport)
+    , _gdgBoundary    :: !(Maybe [[GeolayerDataGeoBoundaryItemItem]])
+    , _gdgLatitude    :: !(Maybe (Textual Double))
+    , _gdgZoom        :: !(Maybe (Textual Int32))
+    , _gdgCountryCode :: !(Maybe Text)
+    , _gdgLongitude   :: !(Maybe (Textual Double))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GeolayerDataGeo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gdgMapType'
+--
+-- * 'gdgCachePolicy'
+--
+-- * 'gdgViewport'
+--
+-- * 'gdgBoundary'
+--
+-- * 'gdgLatitude'
+--
+-- * 'gdgZoom'
+--
+-- * 'gdgCountryCode'
+--
+-- * 'gdgLongitude'
+geolayerDataGeo
+    :: GeolayerDataGeo
+geolayerDataGeo =
+    GeolayerDataGeo'
+    { _gdgMapType = Nothing
+    , _gdgCachePolicy = Nothing
+    , _gdgViewport = Nothing
+    , _gdgBoundary = Nothing
+    , _gdgLatitude = Nothing
+    , _gdgZoom = Nothing
+    , _gdgCountryCode = Nothing
+    , _gdgLongitude = Nothing
+    }
+
+-- | The type of map that should be used for this location. EX: HYBRID,
+-- ROADMAP, SATELLITE, TERRAIN
+gdgMapType :: Lens' GeolayerDataGeo (Maybe Text)
+gdgMapType
+  = lens _gdgMapType (\ s a -> s{_gdgMapType = a})
+
+-- | The cache policy active for this data. EX: UNRESTRICTED, RESTRICTED,
+-- NEVER
+gdgCachePolicy :: Lens' GeolayerDataGeo (Maybe Text)
+gdgCachePolicy
+  = lens _gdgCachePolicy
+      (\ s a -> s{_gdgCachePolicy = a})
+
+-- | The viewport for showing this location. This is a latitude, longitude
+-- rectangle.
+gdgViewport :: Lens' GeolayerDataGeo (Maybe GeolayerDataGeoViewport)
+gdgViewport
+  = lens _gdgViewport (\ s a -> s{_gdgViewport = a})
+
+-- | The boundary of the location as a set of loops containing pairs of
+-- latitude, longitude coordinates.
+gdgBoundary :: Lens' GeolayerDataGeo [[GeolayerDataGeoBoundaryItemItem]]
+gdgBoundary
+  = lens _gdgBoundary (\ s a -> s{_gdgBoundary = a}) .
+      _Default
+      . _Coerce
+
+-- | The latitude of the location.
+gdgLatitude :: Lens' GeolayerDataGeo (Maybe Double)
+gdgLatitude
+  = lens _gdgLatitude (\ s a -> s{_gdgLatitude = a}) .
+      mapping _Coerce
+
+-- | The Zoom level to use for the map. Zoom levels between 0 (the lowest
+-- zoom level, in which the entire world can be seen on one map) to 21+
+-- (down to individual buildings). See:
+-- https:\/\/developers.google.com\/maps\/documentation\/staticmaps\/#Zoomlevels
+gdgZoom :: Lens' GeolayerDataGeo (Maybe Int32)
+gdgZoom
+  = lens _gdgZoom (\ s a -> s{_gdgZoom = a}) .
+      mapping _Coerce
+
+-- | The country code of the location.
+gdgCountryCode :: Lens' GeolayerDataGeo (Maybe Text)
+gdgCountryCode
+  = lens _gdgCountryCode
+      (\ s a -> s{_gdgCountryCode = a})
+
+-- | The longitude of the location.
+gdgLongitude :: Lens' GeolayerDataGeo (Maybe Double)
+gdgLongitude
+  = lens _gdgLongitude (\ s a -> s{_gdgLongitude = a})
+      . mapping _Coerce
+
+instance FromJSON GeolayerDataGeo where
+        parseJSON
+          = withObject "GeolayerDataGeo"
+              (\ o ->
+                 GeolayerDataGeo' <$>
+                   (o .:? "mapType") <*> (o .:? "cachePolicy") <*>
+                     (o .:? "viewport")
+                     <*> (o .:? "boundary" .!= mempty)
+                     <*> (o .:? "latitude")
+                     <*> (o .:? "zoom")
+                     <*> (o .:? "countryCode")
+                     <*> (o .:? "longitude"))
+
+instance ToJSON GeolayerDataGeo where
+        toJSON GeolayerDataGeo'{..}
+          = object
+              (catMaybes
+                 [("mapType" .=) <$> _gdgMapType,
+                  ("cachePolicy" .=) <$> _gdgCachePolicy,
+                  ("viewport" .=) <$> _gdgViewport,
+                  ("boundary" .=) <$> _gdgBoundary,
+                  ("latitude" .=) <$> _gdgLatitude,
+                  ("zoom" .=) <$> _gdgZoom,
+                  ("countryCode" .=) <$> _gdgCountryCode,
+                  ("longitude" .=) <$> _gdgLongitude])
+
+--
+-- /See:/ 'dictlayerDataDictWordsItem' smart constructor.
+data DictlayerDataDictWordsItem = DictlayerDataDictWordsItem'
+    { _dddwiSenses      :: !(Maybe [DictlayerDataDictWordsItemSensesItem])
+    , _dddwiSource      :: !(Maybe DictlayerDataDictWordsItemSource)
+    , _dddwiDerivatives :: !(Maybe [DictlayerDataDictWordsItemDerivativesItem])
+    , _dddwiExamples    :: !(Maybe [DictlayerDataDictWordsItemExamplesItem])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DictlayerDataDictWordsItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dddwiSenses'
+--
+-- * 'dddwiSource'
+--
+-- * 'dddwiDerivatives'
+--
+-- * 'dddwiExamples'
+dictlayerDataDictWordsItem
+    :: DictlayerDataDictWordsItem
+dictlayerDataDictWordsItem =
+    DictlayerDataDictWordsItem'
+    { _dddwiSenses = Nothing
+    , _dddwiSource = Nothing
+    , _dddwiDerivatives = Nothing
+    , _dddwiExamples = Nothing
+    }
+
+dddwiSenses :: Lens' DictlayerDataDictWordsItem [DictlayerDataDictWordsItemSensesItem]
+dddwiSenses
+  = lens _dddwiSenses (\ s a -> s{_dddwiSenses = a}) .
+      _Default
+      . _Coerce
+
+-- | The words with different meanings but not related words, e.g. \"go\"
+-- (game) and \"go\" (verb).
+dddwiSource :: Lens' DictlayerDataDictWordsItem (Maybe DictlayerDataDictWordsItemSource)
+dddwiSource
+  = lens _dddwiSource (\ s a -> s{_dddwiSource = a})
+
+dddwiDerivatives :: Lens' DictlayerDataDictWordsItem [DictlayerDataDictWordsItemDerivativesItem]
+dddwiDerivatives
+  = lens _dddwiDerivatives
+      (\ s a -> s{_dddwiDerivatives = a})
+      . _Default
+      . _Coerce
+
+dddwiExamples :: Lens' DictlayerDataDictWordsItem [DictlayerDataDictWordsItemExamplesItem]
+dddwiExamples
+  = lens _dddwiExamples
+      (\ s a -> s{_dddwiExamples = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON DictlayerDataDictWordsItem where
+        parseJSON
+          = withObject "DictlayerDataDictWordsItem"
+              (\ o ->
+                 DictlayerDataDictWordsItem' <$>
+                   (o .:? "senses" .!= mempty) <*> (o .:? "source") <*>
+                     (o .:? "derivatives" .!= mempty)
+                     <*> (o .:? "examples" .!= mempty))
+
+instance ToJSON DictlayerDataDictWordsItem where
+        toJSON DictlayerDataDictWordsItem'{..}
+          = object
+              (catMaybes
+                 [("senses" .=) <$> _dddwiSenses,
+                  ("source" .=) <$> _dddwiSource,
+                  ("derivatives" .=) <$> _dddwiDerivatives,
+                  ("examples" .=) <$> _dddwiExamples])
+
+--
+-- /See:/ 'categoryItemsItem' smart constructor.
+data CategoryItemsItem = CategoryItemsItem'
+    { _ciiName       :: !(Maybe Text)
+    , _ciiCategoryId :: !(Maybe Text)
+    , _ciiBadgeURL   :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CategoryItemsItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ciiName'
+--
+-- * 'ciiCategoryId'
+--
+-- * 'ciiBadgeURL'
+categoryItemsItem
+    :: CategoryItemsItem
+categoryItemsItem =
+    CategoryItemsItem'
+    { _ciiName = Nothing
+    , _ciiCategoryId = Nothing
+    , _ciiBadgeURL = Nothing
+    }
+
+ciiName :: Lens' CategoryItemsItem (Maybe Text)
+ciiName = lens _ciiName (\ s a -> s{_ciiName = a})
+
+ciiCategoryId :: Lens' CategoryItemsItem (Maybe Text)
+ciiCategoryId
+  = lens _ciiCategoryId
+      (\ s a -> s{_ciiCategoryId = a})
+
+ciiBadgeURL :: Lens' CategoryItemsItem (Maybe Text)
+ciiBadgeURL
+  = lens _ciiBadgeURL (\ s a -> s{_ciiBadgeURL = a})
+
+instance FromJSON CategoryItemsItem where
+        parseJSON
+          = withObject "CategoryItemsItem"
+              (\ o ->
+                 CategoryItemsItem' <$>
+                   (o .:? "name") <*> (o .:? "categoryId") <*>
+                     (o .:? "badgeUrl"))
+
+instance ToJSON CategoryItemsItem where
+        toJSON CategoryItemsItem'{..}
+          = object
+              (catMaybes
+                 [("name" .=) <$> _ciiName,
+                  ("categoryId" .=) <$> _ciiCategoryId,
+                  ("badgeUrl" .=) <$> _ciiBadgeURL])
+
+--
+-- /See:/ 'dictlayerDataDictWordsItemDerivativesItemSource' smart constructor.
+data DictlayerDataDictWordsItemDerivativesItemSource = DictlayerDataDictWordsItemDerivativesItemSource'
+    { _dddwidisURL         :: !(Maybe Text)
+    , _dddwidisAttribution :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DictlayerDataDictWordsItemDerivativesItemSource' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dddwidisURL'
+--
+-- * 'dddwidisAttribution'
+dictlayerDataDictWordsItemDerivativesItemSource
+    :: DictlayerDataDictWordsItemDerivativesItemSource
+dictlayerDataDictWordsItemDerivativesItemSource =
+    DictlayerDataDictWordsItemDerivativesItemSource'
+    { _dddwidisURL = Nothing
+    , _dddwidisAttribution = Nothing
+    }
+
+dddwidisURL :: Lens' DictlayerDataDictWordsItemDerivativesItemSource (Maybe Text)
+dddwidisURL
+  = lens _dddwidisURL (\ s a -> s{_dddwidisURL = a})
+
+dddwidisAttribution :: Lens' DictlayerDataDictWordsItemDerivativesItemSource (Maybe Text)
+dddwidisAttribution
+  = lens _dddwidisAttribution
+      (\ s a -> s{_dddwidisAttribution = a})
+
+instance FromJSON
+         DictlayerDataDictWordsItemDerivativesItemSource where
+        parseJSON
+          = withObject
+              "DictlayerDataDictWordsItemDerivativesItemSource"
+              (\ o ->
+                 DictlayerDataDictWordsItemDerivativesItemSource' <$>
+                   (o .:? "url") <*> (o .:? "attribution"))
+
+instance ToJSON
+         DictlayerDataDictWordsItemDerivativesItemSource where
+        toJSON
+          DictlayerDataDictWordsItemDerivativesItemSource'{..}
+          = object
+              (catMaybes
+                 [("url" .=) <$> _dddwidisURL,
+                  ("attribution" .=) <$> _dddwidisAttribution])
+
+--
+-- /See:/ 'geolayerData' smart constructor.
+data GeolayerData = GeolayerData'
+    { _gdKind   :: !Text
+    , _gdGeo    :: !(Maybe GeolayerDataGeo)
+    , _gdCommon :: !(Maybe GeolayerDataCommon)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GeolayerData' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gdKind'
+--
+-- * 'gdGeo'
+--
+-- * 'gdCommon'
+geolayerData
+    :: GeolayerData
+geolayerData =
+    GeolayerData'
+    { _gdKind = "books#geolayerdata"
+    , _gdGeo = Nothing
+    , _gdCommon = Nothing
+    }
+
+gdKind :: Lens' GeolayerData Text
+gdKind = lens _gdKind (\ s a -> s{_gdKind = a})
+
+gdGeo :: Lens' GeolayerData (Maybe GeolayerDataGeo)
+gdGeo = lens _gdGeo (\ s a -> s{_gdGeo = a})
+
+gdCommon :: Lens' GeolayerData (Maybe GeolayerDataCommon)
+gdCommon = lens _gdCommon (\ s a -> s{_gdCommon = a})
+
+instance FromJSON GeolayerData where
+        parseJSON
+          = withObject "GeolayerData"
+              (\ o ->
+                 GeolayerData' <$>
+                   (o .:? "kind" .!= "books#geolayerdata") <*>
+                     (o .:? "geo")
+                     <*> (o .:? "common"))
+
+instance ToJSON GeolayerData where
+        toJSON GeolayerData'{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _gdKind), ("geo" .=) <$> _gdGeo,
+                  ("common" .=) <$> _gdCommon])
+
+-- | The words with different meanings but not related words, e.g. \"go\"
+-- (game) and \"go\" (verb).
+--
+-- /See:/ 'dictlayerDataDictWordsItemSource' smart constructor.
+data DictlayerDataDictWordsItemSource = DictlayerDataDictWordsItemSource'
+    { _dddwisURL         :: !(Maybe Text)
+    , _dddwisAttribution :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DictlayerDataDictWordsItemSource' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dddwisURL'
+--
+-- * 'dddwisAttribution'
+dictlayerDataDictWordsItemSource
+    :: DictlayerDataDictWordsItemSource
+dictlayerDataDictWordsItemSource =
+    DictlayerDataDictWordsItemSource'
+    { _dddwisURL = Nothing
+    , _dddwisAttribution = Nothing
+    }
+
+dddwisURL :: Lens' DictlayerDataDictWordsItemSource (Maybe Text)
+dddwisURL
+  = lens _dddwisURL (\ s a -> s{_dddwisURL = a})
+
+dddwisAttribution :: Lens' DictlayerDataDictWordsItemSource (Maybe Text)
+dddwisAttribution
+  = lens _dddwisAttribution
+      (\ s a -> s{_dddwisAttribution = a})
+
+instance FromJSON DictlayerDataDictWordsItemSource
+         where
+        parseJSON
+          = withObject "DictlayerDataDictWordsItemSource"
+              (\ o ->
+                 DictlayerDataDictWordsItemSource' <$>
+                   (o .:? "url") <*> (o .:? "attribution"))
+
+instance ToJSON DictlayerDataDictWordsItemSource
+         where
+        toJSON DictlayerDataDictWordsItemSource'{..}
+          = object
+              (catMaybes
+                 [("url" .=) <$> _dddwisURL,
+                  ("attribution" .=) <$> _dddwisAttribution])
+
+--
+-- /See:/ 'dictlayerDataDictWordsItemDerivativesItem' smart constructor.
+data DictlayerDataDictWordsItemDerivativesItem = DictlayerDataDictWordsItemDerivativesItem'
+    { _dddwidiText   :: !(Maybe Text)
+    , _dddwidiSource :: !(Maybe DictlayerDataDictWordsItemDerivativesItemSource)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DictlayerDataDictWordsItemDerivativesItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dddwidiText'
+--
+-- * 'dddwidiSource'
+dictlayerDataDictWordsItemDerivativesItem
+    :: DictlayerDataDictWordsItemDerivativesItem
+dictlayerDataDictWordsItemDerivativesItem =
+    DictlayerDataDictWordsItemDerivativesItem'
+    { _dddwidiText = Nothing
+    , _dddwidiSource = Nothing
+    }
+
+dddwidiText :: Lens' DictlayerDataDictWordsItemDerivativesItem (Maybe Text)
+dddwidiText
+  = lens _dddwidiText (\ s a -> s{_dddwidiText = a})
+
+dddwidiSource :: Lens' DictlayerDataDictWordsItemDerivativesItem (Maybe DictlayerDataDictWordsItemDerivativesItemSource)
+dddwidiSource
+  = lens _dddwidiSource
+      (\ s a -> s{_dddwidiSource = a})
+
+instance FromJSON
+         DictlayerDataDictWordsItemDerivativesItem where
+        parseJSON
+          = withObject
+              "DictlayerDataDictWordsItemDerivativesItem"
+              (\ o ->
+                 DictlayerDataDictWordsItemDerivativesItem' <$>
+                   (o .:? "text") <*> (o .:? "source"))
+
+instance ToJSON
+         DictlayerDataDictWordsItemDerivativesItem where
+        toJSON DictlayerDataDictWordsItemDerivativesItem'{..}
+          = object
+              (catMaybes
+                 [("text" .=) <$> _dddwidiText,
+                  ("source" .=) <$> _dddwidiSource])
+
+--
+-- /See:/ 'dictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItem' smart constructor.
+data DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItem = DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItem'
+    { _dddwisidieiText   :: !(Maybe Text)
+    , _dddwisidieiSource :: !(Maybe DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItemSource)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dddwisidieiText'
+--
+-- * 'dddwisidieiSource'
+dictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItem
+    :: DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItem
+dictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItem =
+    DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItem'
+    { _dddwisidieiText = Nothing
+    , _dddwisidieiSource = Nothing
+    }
+
+dddwisidieiText :: Lens' DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItem (Maybe Text)
+dddwisidieiText
+  = lens _dddwisidieiText
+      (\ s a -> s{_dddwisidieiText = a})
+
+dddwisidieiSource :: Lens' DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItem (Maybe DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItemSource)
+dddwisidieiSource
+  = lens _dddwisidieiSource
+      (\ s a -> s{_dddwisidieiSource = a})
+
+instance FromJSON
+         DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItem
+         where
+        parseJSON
+          = withObject
+              "DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItem"
+              (\ o ->
+                 DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItem'
+                   <$> (o .:? "text") <*> (o .:? "source"))
+
+instance ToJSON
+         DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItem
+         where
+        toJSON
+          DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItem'{..}
+          = object
+              (catMaybes
+                 [("text" .=) <$> _dddwisidieiText,
+                  ("source" .=) <$> _dddwisidieiSource])
+
+--
+-- /See:/ 'dictlayerData' smart constructor.
+data DictlayerData = DictlayerData'
+    { _ddKind   :: !Text
+    , _ddDict   :: !(Maybe DictlayerDataDict)
+    , _ddCommon :: !(Maybe DictlayerDataCommon)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DictlayerData' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ddKind'
+--
+-- * 'ddDict'
+--
+-- * 'ddCommon'
+dictlayerData
+    :: DictlayerData
+dictlayerData =
+    DictlayerData'
+    { _ddKind = "books#dictlayerdata"
+    , _ddDict = Nothing
+    , _ddCommon = Nothing
+    }
+
+ddKind :: Lens' DictlayerData Text
+ddKind = lens _ddKind (\ s a -> s{_ddKind = a})
+
+ddDict :: Lens' DictlayerData (Maybe DictlayerDataDict)
+ddDict = lens _ddDict (\ s a -> s{_ddDict = a})
+
+ddCommon :: Lens' DictlayerData (Maybe DictlayerDataCommon)
+ddCommon = lens _ddCommon (\ s a -> s{_ddCommon = a})
+
+instance FromJSON DictlayerData where
+        parseJSON
+          = withObject "DictlayerData"
+              (\ o ->
+                 DictlayerData' <$>
+                   (o .:? "kind" .!= "books#dictlayerdata") <*>
+                     (o .:? "dict")
+                     <*> (o .:? "common"))
+
+instance ToJSON DictlayerData where
+        toJSON DictlayerData'{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _ddKind), ("dict" .=) <$> _ddDict,
+                  ("common" .=) <$> _ddCommon])
+
+--
+-- /See:/ 'dictlayerDataDictWordsItemSensesItemSynonymsItemSource' smart constructor.
+data DictlayerDataDictWordsItemSensesItemSynonymsItemSource = DictlayerDataDictWordsItemSensesItemSynonymsItemSource'
+    { _dddwisisisURL         :: !(Maybe Text)
+    , _dddwisisisAttribution :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DictlayerDataDictWordsItemSensesItemSynonymsItemSource' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dddwisisisURL'
+--
+-- * 'dddwisisisAttribution'
+dictlayerDataDictWordsItemSensesItemSynonymsItemSource
+    :: DictlayerDataDictWordsItemSensesItemSynonymsItemSource
+dictlayerDataDictWordsItemSensesItemSynonymsItemSource =
+    DictlayerDataDictWordsItemSensesItemSynonymsItemSource'
+    { _dddwisisisURL = Nothing
+    , _dddwisisisAttribution = Nothing
+    }
+
+dddwisisisURL :: Lens' DictlayerDataDictWordsItemSensesItemSynonymsItemSource (Maybe Text)
+dddwisisisURL
+  = lens _dddwisisisURL
+      (\ s a -> s{_dddwisisisURL = a})
+
+dddwisisisAttribution :: Lens' DictlayerDataDictWordsItemSensesItemSynonymsItemSource (Maybe Text)
+dddwisisisAttribution
+  = lens _dddwisisisAttribution
+      (\ s a -> s{_dddwisisisAttribution = a})
+
+instance FromJSON
+         DictlayerDataDictWordsItemSensesItemSynonymsItemSource
+         where
+        parseJSON
+          = withObject
+              "DictlayerDataDictWordsItemSensesItemSynonymsItemSource"
+              (\ o ->
+                 DictlayerDataDictWordsItemSensesItemSynonymsItemSource'
+                   <$> (o .:? "url") <*> (o .:? "attribution"))
+
+instance ToJSON
+         DictlayerDataDictWordsItemSensesItemSynonymsItemSource
+         where
+        toJSON
+          DictlayerDataDictWordsItemSensesItemSynonymsItemSource'{..}
+          = object
+              (catMaybes
+                 [("url" .=) <$> _dddwisisisURL,
+                  ("attribution" .=) <$> _dddwisisisAttribution])
+
+--
+-- /See:/ 'seriesmembership' smart constructor.
+data Seriesmembership = Seriesmembership'
+    { _serNextPageToken :: !(Maybe Text)
+    , _serKind          :: !Text
+    , _serMember        :: !(Maybe [Volume])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Seriesmembership' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'serNextPageToken'
+--
+-- * 'serKind'
+--
+-- * 'serMember'
+seriesmembership
+    :: Seriesmembership
+seriesmembership =
+    Seriesmembership'
+    { _serNextPageToken = Nothing
+    , _serKind = "books#series#membership"
+    , _serMember = Nothing
+    }
+
+serNextPageToken :: Lens' Seriesmembership (Maybe Text)
+serNextPageToken
+  = lens _serNextPageToken
+      (\ s a -> s{_serNextPageToken = a})
+
+-- | Resorce type.
+serKind :: Lens' Seriesmembership Text
+serKind = lens _serKind (\ s a -> s{_serKind = a})
+
+serMember :: Lens' Seriesmembership [Volume]
+serMember
+  = lens _serMember (\ s a -> s{_serMember = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON Seriesmembership where
+        parseJSON
+          = withObject "Seriesmembership"
+              (\ o ->
+                 Seriesmembership' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "books#series#membership")
+                     <*> (o .:? "member" .!= mempty))
+
+instance ToJSON Seriesmembership where
+        toJSON Seriesmembership'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _serNextPageToken,
+                  Just ("kind" .= _serKind),
+                  ("member" .=) <$> _serMember])
+
+--
+-- /See:/ 'userSettingsNotification' smart constructor.
+newtype UserSettingsNotification = UserSettingsNotification'
+    { _usnMoreFromAuthors :: Maybe UserSettingsNotificationMoreFromAuthors
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UserSettingsNotification' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'usnMoreFromAuthors'
+userSettingsNotification
+    :: UserSettingsNotification
+userSettingsNotification =
+    UserSettingsNotification'
+    { _usnMoreFromAuthors = Nothing
+    }
+
+usnMoreFromAuthors :: Lens' UserSettingsNotification (Maybe UserSettingsNotificationMoreFromAuthors)
+usnMoreFromAuthors
+  = lens _usnMoreFromAuthors
+      (\ s a -> s{_usnMoreFromAuthors = a})
+
+instance FromJSON UserSettingsNotification where
+        parseJSON
+          = withObject "UserSettingsNotification"
+              (\ o ->
+                 UserSettingsNotification' <$>
+                   (o .:? "moreFromAuthors"))
+
+instance ToJSON UserSettingsNotification where
+        toJSON UserSettingsNotification'{..}
+          = object
+              (catMaybes
+                 [("moreFromAuthors" .=) <$> _usnMoreFromAuthors])
+
+--
+-- /See:/ 'dictlayerDataDictWordsItemSensesItemSynonymsItem' smart constructor.
+data DictlayerDataDictWordsItemSensesItemSynonymsItem = DictlayerDataDictWordsItemSensesItemSynonymsItem'
+    { _dddwisisiText   :: !(Maybe Text)
+    , _dddwisisiSource :: !(Maybe DictlayerDataDictWordsItemSensesItemSynonymsItemSource)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DictlayerDataDictWordsItemSensesItemSynonymsItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dddwisisiText'
+--
+-- * 'dddwisisiSource'
+dictlayerDataDictWordsItemSensesItemSynonymsItem
+    :: DictlayerDataDictWordsItemSensesItemSynonymsItem
+dictlayerDataDictWordsItemSensesItemSynonymsItem =
+    DictlayerDataDictWordsItemSensesItemSynonymsItem'
+    { _dddwisisiText = Nothing
+    , _dddwisisiSource = Nothing
+    }
+
+dddwisisiText :: Lens' DictlayerDataDictWordsItemSensesItemSynonymsItem (Maybe Text)
+dddwisisiText
+  = lens _dddwisisiText
+      (\ s a -> s{_dddwisisiText = a})
+
+dddwisisiSource :: Lens' DictlayerDataDictWordsItemSensesItemSynonymsItem (Maybe DictlayerDataDictWordsItemSensesItemSynonymsItemSource)
+dddwisisiSource
+  = lens _dddwisisiSource
+      (\ s a -> s{_dddwisisiSource = a})
+
+instance FromJSON
+         DictlayerDataDictWordsItemSensesItemSynonymsItem
+         where
+        parseJSON
+          = withObject
+              "DictlayerDataDictWordsItemSensesItemSynonymsItem"
+              (\ o ->
+                 DictlayerDataDictWordsItemSensesItemSynonymsItem' <$>
+                   (o .:? "text") <*> (o .:? "source"))
+
+instance ToJSON
+         DictlayerDataDictWordsItemSensesItemSynonymsItem
+         where
+        toJSON
+          DictlayerDataDictWordsItemSensesItemSynonymsItem'{..}
+          = object
+              (catMaybes
+                 [("text" .=) <$> _dddwisisiText,
+                  ("source" .=) <$> _dddwisisiSource])
+
+--
+-- /See:/ 'geolayerDataGeoViewportLo' smart constructor.
+data GeolayerDataGeoViewportLo = GeolayerDataGeoViewportLo'
+    { _gdgvlLatitude  :: !(Maybe (Textual Double))
+    , _gdgvlLongitude :: !(Maybe (Textual Double))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GeolayerDataGeoViewportLo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gdgvlLatitude'
+--
+-- * 'gdgvlLongitude'
+geolayerDataGeoViewportLo
+    :: GeolayerDataGeoViewportLo
+geolayerDataGeoViewportLo =
+    GeolayerDataGeoViewportLo'
+    { _gdgvlLatitude = Nothing
+    , _gdgvlLongitude = Nothing
+    }
+
+gdgvlLatitude :: Lens' GeolayerDataGeoViewportLo (Maybe Double)
+gdgvlLatitude
+  = lens _gdgvlLatitude
+      (\ s a -> s{_gdgvlLatitude = a})
+      . mapping _Coerce
+
+gdgvlLongitude :: Lens' GeolayerDataGeoViewportLo (Maybe Double)
+gdgvlLongitude
+  = lens _gdgvlLongitude
+      (\ s a -> s{_gdgvlLongitude = a})
+      . mapping _Coerce
+
+instance FromJSON GeolayerDataGeoViewportLo where
+        parseJSON
+          = withObject "GeolayerDataGeoViewportLo"
+              (\ o ->
+                 GeolayerDataGeoViewportLo' <$>
+                   (o .:? "latitude") <*> (o .:? "longitude"))
+
+instance ToJSON GeolayerDataGeoViewportLo where
+        toJSON GeolayerDataGeoViewportLo'{..}
+          = object
+              (catMaybes
+                 [("latitude" .=) <$> _gdgvlLatitude,
+                  ("longitude" .=) <$> _gdgvlLongitude])
+
+-- | Offer list (=undiscounted) price in Micros.
+--
+-- /See:/ 'volumeSaleInfoOffersItemListPrice' smart constructor.
+data VolumeSaleInfoOffersItemListPrice = VolumeSaleInfoOffersItemListPrice'
+    { _vsioilpCurrencyCode   :: !(Maybe Text)
+    , _vsioilpAmountInMicros :: !(Maybe (Textual Double))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumeSaleInfoOffersItemListPrice' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vsioilpCurrencyCode'
+--
+-- * 'vsioilpAmountInMicros'
+volumeSaleInfoOffersItemListPrice
+    :: VolumeSaleInfoOffersItemListPrice
+volumeSaleInfoOffersItemListPrice =
+    VolumeSaleInfoOffersItemListPrice'
+    { _vsioilpCurrencyCode = Nothing
+    , _vsioilpAmountInMicros = Nothing
+    }
+
+vsioilpCurrencyCode :: Lens' VolumeSaleInfoOffersItemListPrice (Maybe Text)
+vsioilpCurrencyCode
+  = lens _vsioilpCurrencyCode
+      (\ s a -> s{_vsioilpCurrencyCode = a})
+
+vsioilpAmountInMicros :: Lens' VolumeSaleInfoOffersItemListPrice (Maybe Double)
+vsioilpAmountInMicros
+  = lens _vsioilpAmountInMicros
+      (\ s a -> s{_vsioilpAmountInMicros = a})
+      . mapping _Coerce
+
+instance FromJSON VolumeSaleInfoOffersItemListPrice
+         where
+        parseJSON
+          = withObject "VolumeSaleInfoOffersItemListPrice"
+              (\ o ->
+                 VolumeSaleInfoOffersItemListPrice' <$>
+                   (o .:? "currencyCode") <*> (o .:? "amountInMicros"))
+
+instance ToJSON VolumeSaleInfoOffersItemListPrice
+         where
+        toJSON VolumeSaleInfoOffersItemListPrice'{..}
+          = object
+              (catMaybes
+                 [("currencyCode" .=) <$> _vsioilpCurrencyCode,
+                  ("amountInMicros" .=) <$> _vsioilpAmountInMicros])
+
+--
+-- /See:/ 'downloadAccessRestriction' smart constructor.
+data DownloadAccessRestriction = DownloadAccessRestriction'
+    { _darJustAcquired       :: !(Maybe Bool)
+    , _darSignature          :: !(Maybe Text)
+    , _darKind               :: !Text
+    , _darMaxDownloadDevices :: !(Maybe (Textual Int32))
+    , _darDownloadsAcquired  :: !(Maybe (Textual Int32))
+    , _darReasonCode         :: !(Maybe Text)
+    , _darVolumeId           :: !(Maybe Text)
+    , _darRestricted         :: !(Maybe Bool)
+    , _darSource             :: !(Maybe Text)
+    , _darDeviceAllowed      :: !(Maybe Bool)
+    , _darMessage            :: !(Maybe Text)
+    , _darNonce              :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DownloadAccessRestriction' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'darJustAcquired'
+--
+-- * 'darSignature'
+--
+-- * 'darKind'
+--
+-- * 'darMaxDownloadDevices'
+--
+-- * 'darDownloadsAcquired'
+--
+-- * 'darReasonCode'
+--
+-- * 'darVolumeId'
+--
+-- * 'darRestricted'
+--
+-- * 'darSource'
+--
+-- * 'darDeviceAllowed'
+--
+-- * 'darMessage'
+--
+-- * 'darNonce'
+downloadAccessRestriction
+    :: DownloadAccessRestriction
+downloadAccessRestriction =
+    DownloadAccessRestriction'
+    { _darJustAcquired = Nothing
+    , _darSignature = Nothing
+    , _darKind = "books#downloadAccessRestriction"
+    , _darMaxDownloadDevices = Nothing
+    , _darDownloadsAcquired = Nothing
+    , _darReasonCode = Nothing
+    , _darVolumeId = Nothing
+    , _darRestricted = Nothing
+    , _darSource = Nothing
+    , _darDeviceAllowed = Nothing
+    , _darMessage = Nothing
+    , _darNonce = Nothing
+    }
+
+-- | If deviceAllowed, whether access was just acquired with this request.
+darJustAcquired :: Lens' DownloadAccessRestriction (Maybe Bool)
+darJustAcquired
+  = lens _darJustAcquired
+      (\ s a -> s{_darJustAcquired = a})
+
+-- | Response signature.
+darSignature :: Lens' DownloadAccessRestriction (Maybe Text)
+darSignature
+  = lens _darSignature (\ s a -> s{_darSignature = a})
+
+-- | Resource type.
+darKind :: Lens' DownloadAccessRestriction Text
+darKind = lens _darKind (\ s a -> s{_darKind = a})
+
+-- | If restricted, the maximum number of content download licenses for this
+-- volume.
+darMaxDownloadDevices :: Lens' DownloadAccessRestriction (Maybe Int32)
+darMaxDownloadDevices
+  = lens _darMaxDownloadDevices
+      (\ s a -> s{_darMaxDownloadDevices = a})
+      . mapping _Coerce
+
+-- | If restricted, the number of content download licenses already acquired
+-- (including the requesting client, if licensed).
+darDownloadsAcquired :: Lens' DownloadAccessRestriction (Maybe Int32)
+darDownloadsAcquired
+  = lens _darDownloadsAcquired
+      (\ s a -> s{_darDownloadsAcquired = a})
+      . mapping _Coerce
+
+-- | Error\/warning reason code. Additional codes may be added in the future.
+-- 0 OK 100 ACCESS_DENIED_PUBLISHER_LIMIT 101 ACCESS_DENIED_LIMIT 200
+-- WARNING_USED_LAST_ACCESS
+darReasonCode :: Lens' DownloadAccessRestriction (Maybe Text)
+darReasonCode
+  = lens _darReasonCode
+      (\ s a -> s{_darReasonCode = a})
+
+-- | Identifies the volume for which this entry applies.
+darVolumeId :: Lens' DownloadAccessRestriction (Maybe Text)
+darVolumeId
+  = lens _darVolumeId (\ s a -> s{_darVolumeId = a})
+
+-- | Whether this volume has any download access restrictions.
+darRestricted :: Lens' DownloadAccessRestriction (Maybe Bool)
+darRestricted
+  = lens _darRestricted
+      (\ s a -> s{_darRestricted = a})
+
+-- | Client app identifier for verification. Download access and
+-- client-validation only.
+darSource :: Lens' DownloadAccessRestriction (Maybe Text)
+darSource
+  = lens _darSource (\ s a -> s{_darSource = a})
+
+-- | If restricted, whether access is granted for this (user, device,
+-- volume).
+darDeviceAllowed :: Lens' DownloadAccessRestriction (Maybe Bool)
+darDeviceAllowed
+  = lens _darDeviceAllowed
+      (\ s a -> s{_darDeviceAllowed = a})
+
+-- | Error\/warning message.
+darMessage :: Lens' DownloadAccessRestriction (Maybe Text)
+darMessage
+  = lens _darMessage (\ s a -> s{_darMessage = a})
+
+-- | Client nonce for verification. Download access and client-validation
+-- only.
+darNonce :: Lens' DownloadAccessRestriction (Maybe Text)
+darNonce = lens _darNonce (\ s a -> s{_darNonce = a})
+
+instance FromJSON DownloadAccessRestriction where
+        parseJSON
+          = withObject "DownloadAccessRestriction"
+              (\ o ->
+                 DownloadAccessRestriction' <$>
+                   (o .:? "justAcquired") <*> (o .:? "signature") <*>
+                     (o .:? "kind" .!= "books#downloadAccessRestriction")
+                     <*> (o .:? "maxDownloadDevices")
+                     <*> (o .:? "downloadsAcquired")
+                     <*> (o .:? "reasonCode")
+                     <*> (o .:? "volumeId")
+                     <*> (o .:? "restricted")
+                     <*> (o .:? "source")
+                     <*> (o .:? "deviceAllowed")
+                     <*> (o .:? "message")
+                     <*> (o .:? "nonce"))
+
+instance ToJSON DownloadAccessRestriction where
+        toJSON DownloadAccessRestriction'{..}
+          = object
+              (catMaybes
+                 [("justAcquired" .=) <$> _darJustAcquired,
+                  ("signature" .=) <$> _darSignature,
+                  Just ("kind" .= _darKind),
+                  ("maxDownloadDevices" .=) <$> _darMaxDownloadDevices,
+                  ("downloadsAcquired" .=) <$> _darDownloadsAcquired,
+                  ("reasonCode" .=) <$> _darReasonCode,
+                  ("volumeId" .=) <$> _darVolumeId,
+                  ("restricted" .=) <$> _darRestricted,
+                  ("source" .=) <$> _darSource,
+                  ("deviceAllowed" .=) <$> _darDeviceAllowed,
+                  ("message" .=) <$> _darMessage,
+                  ("nonce" .=) <$> _darNonce])
+
+--
+-- /See:/ 'dictlayerDataCommon' smart constructor.
+newtype DictlayerDataCommon = DictlayerDataCommon'
+    { _ddcTitle :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DictlayerDataCommon' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ddcTitle'
+dictlayerDataCommon
+    :: DictlayerDataCommon
+dictlayerDataCommon =
+    DictlayerDataCommon'
+    { _ddcTitle = Nothing
+    }
+
+-- | The display title and localized canonical name to use when searching for
+-- this entity on Google search.
+ddcTitle :: Lens' DictlayerDataCommon (Maybe Text)
+ddcTitle = lens _ddcTitle (\ s a -> s{_ddcTitle = a})
+
+instance FromJSON DictlayerDataCommon where
+        parseJSON
+          = withObject "DictlayerDataCommon"
+              (\ o -> DictlayerDataCommon' <$> (o .:? "title"))
+
+instance ToJSON DictlayerDataCommon where
+        toJSON DictlayerDataCommon'{..}
+          = object (catMaybes [("title" .=) <$> _ddcTitle])
+
+--
+-- /See:/ 'discoveryclustersClustersItem' smart constructor.
+data DiscoveryclustersClustersItem = DiscoveryclustersClustersItem'
+    { _dciBannerWithContentContainer :: !(Maybe DiscoveryclustersClustersItemBanner_with_content_container)
+    , _dciUid                        :: !(Maybe Text)
+    , _dciTotalVolumes               :: !(Maybe (Textual Int32))
+    , _dciSubTitle                   :: !(Maybe Text)
+    , _dciTitle                      :: !(Maybe Text)
+    , _dciVolumes                    :: !(Maybe [Volume])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DiscoveryclustersClustersItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dciBannerWithContentContainer'
+--
+-- * 'dciUid'
+--
+-- * 'dciTotalVolumes'
+--
+-- * 'dciSubTitle'
+--
+-- * 'dciTitle'
+--
+-- * 'dciVolumes'
+discoveryclustersClustersItem
+    :: DiscoveryclustersClustersItem
+discoveryclustersClustersItem =
+    DiscoveryclustersClustersItem'
+    { _dciBannerWithContentContainer = Nothing
+    , _dciUid = Nothing
+    , _dciTotalVolumes = Nothing
+    , _dciSubTitle = Nothing
+    , _dciTitle = Nothing
+    , _dciVolumes = Nothing
+    }
+
+dciBannerWithContentContainer :: Lens' DiscoveryclustersClustersItem (Maybe DiscoveryclustersClustersItemBanner_with_content_container)
+dciBannerWithContentContainer
+  = lens _dciBannerWithContentContainer
+      (\ s a -> s{_dciBannerWithContentContainer = a})
+
+dciUid :: Lens' DiscoveryclustersClustersItem (Maybe Text)
+dciUid = lens _dciUid (\ s a -> s{_dciUid = a})
+
+dciTotalVolumes :: Lens' DiscoveryclustersClustersItem (Maybe Int32)
+dciTotalVolumes
+  = lens _dciTotalVolumes
+      (\ s a -> s{_dciTotalVolumes = a})
+      . mapping _Coerce
+
+dciSubTitle :: Lens' DiscoveryclustersClustersItem (Maybe Text)
+dciSubTitle
+  = lens _dciSubTitle (\ s a -> s{_dciSubTitle = a})
+
+dciTitle :: Lens' DiscoveryclustersClustersItem (Maybe Text)
+dciTitle = lens _dciTitle (\ s a -> s{_dciTitle = a})
+
+dciVolumes :: Lens' DiscoveryclustersClustersItem [Volume]
+dciVolumes
+  = lens _dciVolumes (\ s a -> s{_dciVolumes = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON DiscoveryclustersClustersItem where
+        parseJSON
+          = withObject "DiscoveryclustersClustersItem"
+              (\ o ->
+                 DiscoveryclustersClustersItem' <$>
+                   (o .:? "banner_with_content_container") <*>
+                     (o .:? "uid")
+                     <*> (o .:? "totalVolumes")
+                     <*> (o .:? "subTitle")
+                     <*> (o .:? "title")
+                     <*> (o .:? "volumes" .!= mempty))
+
+instance ToJSON DiscoveryclustersClustersItem where
+        toJSON DiscoveryclustersClustersItem'{..}
+          = object
+              (catMaybes
+                 [("banner_with_content_container" .=) <$>
+                    _dciBannerWithContentContainer,
+                  ("uid" .=) <$> _dciUid,
+                  ("totalVolumes" .=) <$> _dciTotalVolumes,
+                  ("subTitle" .=) <$> _dciSubTitle,
+                  ("title" .=) <$> _dciTitle,
+                  ("volumes" .=) <$> _dciVolumes])
+
+-- | The actual selling price of the book. This is the same as the suggested
+-- retail or list price unless there are offers or discounts on this
+-- volume. (In LITE projection.)
+--
+-- /See:/ 'volumeSaleInfoRetailPrice' smart constructor.
+data VolumeSaleInfoRetailPrice = VolumeSaleInfoRetailPrice'
+    { _vsirpAmount       :: !(Maybe (Textual Double))
+    , _vsirpCurrencyCode :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumeSaleInfoRetailPrice' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vsirpAmount'
+--
+-- * 'vsirpCurrencyCode'
+volumeSaleInfoRetailPrice
+    :: VolumeSaleInfoRetailPrice
+volumeSaleInfoRetailPrice =
+    VolumeSaleInfoRetailPrice'
+    { _vsirpAmount = Nothing
+    , _vsirpCurrencyCode = Nothing
+    }
+
+-- | Amount in the currency listed below. (In LITE projection.)
+vsirpAmount :: Lens' VolumeSaleInfoRetailPrice (Maybe Double)
+vsirpAmount
+  = lens _vsirpAmount (\ s a -> s{_vsirpAmount = a}) .
+      mapping _Coerce
+
+-- | An ISO 4217, three-letter currency code. (In LITE projection.)
+vsirpCurrencyCode :: Lens' VolumeSaleInfoRetailPrice (Maybe Text)
+vsirpCurrencyCode
+  = lens _vsirpCurrencyCode
+      (\ s a -> s{_vsirpCurrencyCode = a})
+
+instance FromJSON VolumeSaleInfoRetailPrice where
+        parseJSON
+          = withObject "VolumeSaleInfoRetailPrice"
+              (\ o ->
+                 VolumeSaleInfoRetailPrice' <$>
+                   (o .:? "amount") <*> (o .:? "currencyCode"))
+
+instance ToJSON VolumeSaleInfoRetailPrice where
+        toJSON VolumeSaleInfoRetailPrice'{..}
+          = object
+              (catMaybes
+                 [("amount" .=) <$> _vsirpAmount,
+                  ("currencyCode" .=) <$> _vsirpCurrencyCode])
+
+-- | Suggested retail price. (In LITE projection.)
+--
+-- /See:/ 'volumeSaleInfoListPrice' smart constructor.
+data VolumeSaleInfoListPrice = VolumeSaleInfoListPrice'
+    { _vsilpAmount       :: !(Maybe (Textual Double))
+    , _vsilpCurrencyCode :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumeSaleInfoListPrice' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vsilpAmount'
+--
+-- * 'vsilpCurrencyCode'
+volumeSaleInfoListPrice
+    :: VolumeSaleInfoListPrice
+volumeSaleInfoListPrice =
+    VolumeSaleInfoListPrice'
+    { _vsilpAmount = Nothing
+    , _vsilpCurrencyCode = Nothing
+    }
+
+-- | Amount in the currency listed below. (In LITE projection.)
+vsilpAmount :: Lens' VolumeSaleInfoListPrice (Maybe Double)
+vsilpAmount
+  = lens _vsilpAmount (\ s a -> s{_vsilpAmount = a}) .
+      mapping _Coerce
+
+-- | An ISO 4217, three-letter currency code. (In LITE projection.)
+vsilpCurrencyCode :: Lens' VolumeSaleInfoListPrice (Maybe Text)
+vsilpCurrencyCode
+  = lens _vsilpCurrencyCode
+      (\ s a -> s{_vsilpCurrencyCode = a})
+
+instance FromJSON VolumeSaleInfoListPrice where
+        parseJSON
+          = withObject "VolumeSaleInfoListPrice"
+              (\ o ->
+                 VolumeSaleInfoListPrice' <$>
+                   (o .:? "amount") <*> (o .:? "currencyCode"))
+
+instance ToJSON VolumeSaleInfoListPrice where
+        toJSON VolumeSaleInfoListPrice'{..}
+          = object
+              (catMaybes
+                 [("amount" .=) <$> _vsilpAmount,
+                  ("currencyCode" .=) <$> _vsilpCurrencyCode])
+
+--
+-- /See:/ 'dictlayerDataDictWordsItemSensesItemConjugationsItem' smart constructor.
+data DictlayerDataDictWordsItemSensesItemConjugationsItem = DictlayerDataDictWordsItemSensesItemConjugationsItem'
+    { _dddwisiciValue :: !(Maybe Text)
+    , _dddwisiciType  :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DictlayerDataDictWordsItemSensesItemConjugationsItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dddwisiciValue'
+--
+-- * 'dddwisiciType'
+dictlayerDataDictWordsItemSensesItemConjugationsItem
+    :: DictlayerDataDictWordsItemSensesItemConjugationsItem
+dictlayerDataDictWordsItemSensesItemConjugationsItem =
+    DictlayerDataDictWordsItemSensesItemConjugationsItem'
+    { _dddwisiciValue = Nothing
+    , _dddwisiciType = Nothing
+    }
+
+dddwisiciValue :: Lens' DictlayerDataDictWordsItemSensesItemConjugationsItem (Maybe Text)
+dddwisiciValue
+  = lens _dddwisiciValue
+      (\ s a -> s{_dddwisiciValue = a})
+
+dddwisiciType :: Lens' DictlayerDataDictWordsItemSensesItemConjugationsItem (Maybe Text)
+dddwisiciType
+  = lens _dddwisiciType
+      (\ s a -> s{_dddwisiciType = a})
+
+instance FromJSON
+         DictlayerDataDictWordsItemSensesItemConjugationsItem
+         where
+        parseJSON
+          = withObject
+              "DictlayerDataDictWordsItemSensesItemConjugationsItem"
+              (\ o ->
+                 DictlayerDataDictWordsItemSensesItemConjugationsItem'
+                   <$> (o .:? "value") <*> (o .:? "type"))
+
+instance ToJSON
+         DictlayerDataDictWordsItemSensesItemConjugationsItem
+         where
+        toJSON
+          DictlayerDataDictWordsItemSensesItemConjugationsItem'{..}
+          = object
+              (catMaybes
+                 [("value" .=) <$> _dddwisiciValue,
+                  ("type" .=) <$> _dddwisiciType])
+
+--
+-- /See:/ 'volume2' smart constructor.
+data Volume2 = Volume2'
+    { _voloNextPageToken :: !(Maybe Text)
+    , _voloKind          :: !Text
+    , _voloItems         :: !(Maybe [Volume])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Volume2' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'voloNextPageToken'
+--
+-- * 'voloKind'
+--
+-- * 'voloItems'
+volume2
+    :: Volume2
+volume2 =
+    Volume2'
+    { _voloNextPageToken = Nothing
+    , _voloKind = "onboarding#volume"
+    , _voloItems = Nothing
+    }
+
+voloNextPageToken :: Lens' Volume2 (Maybe Text)
+voloNextPageToken
+  = lens _voloNextPageToken
+      (\ s a -> s{_voloNextPageToken = a})
+
+-- | Resource type.
+voloKind :: Lens' Volume2 Text
+voloKind = lens _voloKind (\ s a -> s{_voloKind = a})
+
+-- | A list of volumes.
+voloItems :: Lens' Volume2 [Volume]
+voloItems
+  = lens _voloItems (\ s a -> s{_voloItems = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON Volume2 where
+        parseJSON
+          = withObject "Volume2"
+              (\ o ->
+                 Volume2' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "onboarding#volume")
+                     <*> (o .:? "items" .!= mempty))
+
+instance ToJSON Volume2 where
+        toJSON Volume2'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _voloNextPageToken,
+                  Just ("kind" .= _voloKind),
+                  ("items" .=) <$> _voloItems])
+
+--
+-- /See:/ 'review' smart constructor.
+data Review = Review'
+    { _rRating      :: !(Maybe Text)
+    , _rKind        :: !Text
+    , _rContent     :: !(Maybe Text)
+    , _rDate        :: !(Maybe Text)
+    , _rVolumeId    :: !(Maybe Text)
+    , _rAuthor      :: !(Maybe ReviewAuthor)
+    , _rSource      :: !(Maybe ReviewSource)
+    , _rFullTextURL :: !(Maybe Text)
+    , _rTitle       :: !(Maybe Text)
+    , _rType        :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Review' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rRating'
+--
+-- * 'rKind'
+--
+-- * 'rContent'
+--
+-- * 'rDate'
+--
+-- * 'rVolumeId'
+--
+-- * 'rAuthor'
+--
+-- * 'rSource'
+--
+-- * 'rFullTextURL'
+--
+-- * 'rTitle'
+--
+-- * 'rType'
+review
+    :: Review
+review =
+    Review'
+    { _rRating = Nothing
+    , _rKind = "books#review"
+    , _rContent = Nothing
+    , _rDate = Nothing
+    , _rVolumeId = Nothing
+    , _rAuthor = Nothing
+    , _rSource = Nothing
+    , _rFullTextURL = Nothing
+    , _rTitle = Nothing
+    , _rType = Nothing
+    }
+
+-- | Star rating for this review. Possible values are ONE, TWO, THREE, FOUR,
+-- FIVE or NOT_RATED.
+rRating :: Lens' Review (Maybe Text)
+rRating = lens _rRating (\ s a -> s{_rRating = a})
+
+-- | Resource type for a review.
+rKind :: Lens' Review Text
+rKind = lens _rKind (\ s a -> s{_rKind = a})
+
+-- | Review text.
+rContent :: Lens' Review (Maybe Text)
+rContent = lens _rContent (\ s a -> s{_rContent = a})
+
+-- | Date of this review.
+rDate :: Lens' Review (Maybe Text)
+rDate = lens _rDate (\ s a -> s{_rDate = a})
+
+-- | Volume that this review is for.
+rVolumeId :: Lens' Review (Maybe Text)
+rVolumeId
+  = lens _rVolumeId (\ s a -> s{_rVolumeId = a})
+
+-- | Author of this review.
+rAuthor :: Lens' Review (Maybe ReviewAuthor)
+rAuthor = lens _rAuthor (\ s a -> s{_rAuthor = a})
+
+-- | Information regarding the source of this review, when the review is not
+-- from a Google Books user.
+rSource :: Lens' Review (Maybe ReviewSource)
+rSource = lens _rSource (\ s a -> s{_rSource = a})
+
+-- | URL for the full review text, for reviews gathered from the web.
+rFullTextURL :: Lens' Review (Maybe Text)
+rFullTextURL
+  = lens _rFullTextURL (\ s a -> s{_rFullTextURL = a})
+
+-- | Title for this review.
+rTitle :: Lens' Review (Maybe Text)
+rTitle = lens _rTitle (\ s a -> s{_rTitle = a})
+
+-- | Source type for this review. Possible values are EDITORIAL, WEB_USER or
+-- GOOGLE_USER.
+rType :: Lens' Review (Maybe Text)
+rType = lens _rType (\ s a -> s{_rType = a})
+
+instance FromJSON Review where
+        parseJSON
+          = withObject "Review"
+              (\ o ->
+                 Review' <$>
+                   (o .:? "rating") <*>
+                     (o .:? "kind" .!= "books#review")
+                     <*> (o .:? "content")
+                     <*> (o .:? "date")
+                     <*> (o .:? "volumeId")
+                     <*> (o .:? "author")
+                     <*> (o .:? "source")
+                     <*> (o .:? "fullTextUrl")
+                     <*> (o .:? "title")
+                     <*> (o .:? "type"))
+
+instance ToJSON Review where
+        toJSON Review'{..}
+          = object
+              (catMaybes
+                 [("rating" .=) <$> _rRating, Just ("kind" .= _rKind),
+                  ("content" .=) <$> _rContent, ("date" .=) <$> _rDate,
+                  ("volumeId" .=) <$> _rVolumeId,
+                  ("author" .=) <$> _rAuthor,
+                  ("source" .=) <$> _rSource,
+                  ("fullTextUrl" .=) <$> _rFullTextURL,
+                  ("title" .=) <$> _rTitle, ("type" .=) <$> _rType])
+
+-- | Period during this book is\/was a valid rental.
+--
+-- /See:/ 'volumeUserInfoRentalPeriod' smart constructor.
+data VolumeUserInfoRentalPeriod = VolumeUserInfoRentalPeriod'
+    { _vuirpEndUtcSec   :: !(Maybe (Textual Int64))
+    , _vuirpStartUtcSec :: !(Maybe (Textual Int64))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumeUserInfoRentalPeriod' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vuirpEndUtcSec'
+--
+-- * 'vuirpStartUtcSec'
+volumeUserInfoRentalPeriod
+    :: VolumeUserInfoRentalPeriod
+volumeUserInfoRentalPeriod =
+    VolumeUserInfoRentalPeriod'
+    { _vuirpEndUtcSec = Nothing
+    , _vuirpStartUtcSec = Nothing
+    }
+
+vuirpEndUtcSec :: Lens' VolumeUserInfoRentalPeriod (Maybe Int64)
+vuirpEndUtcSec
+  = lens _vuirpEndUtcSec
+      (\ s a -> s{_vuirpEndUtcSec = a})
+      . mapping _Coerce
+
+vuirpStartUtcSec :: Lens' VolumeUserInfoRentalPeriod (Maybe Int64)
+vuirpStartUtcSec
+  = lens _vuirpStartUtcSec
+      (\ s a -> s{_vuirpStartUtcSec = a})
+      . mapping _Coerce
+
+instance FromJSON VolumeUserInfoRentalPeriod where
+        parseJSON
+          = withObject "VolumeUserInfoRentalPeriod"
+              (\ o ->
+                 VolumeUserInfoRentalPeriod' <$>
+                   (o .:? "endUtcSec") <*> (o .:? "startUtcSec"))
+
+instance ToJSON VolumeUserInfoRentalPeriod where
+        toJSON VolumeUserInfoRentalPeriod'{..}
+          = object
+              (catMaybes
+                 [("endUtcSec" .=) <$> _vuirpEndUtcSec,
+                  ("startUtcSec" .=) <$> _vuirpStartUtcSec])
+
+-- | Any information about a volume related to the eBookstore and\/or
+-- purchaseability. This information can depend on the country where the
+-- request originates from (i.e. books may not be for sale in certain
+-- countries).
+--
+-- /See:/ 'volumeSaleInfo' smart constructor.
+data VolumeSaleInfo = VolumeSaleInfo'
+    { _vsiCountry     :: !(Maybe Text)
+    , _vsiOnSaleDate  :: !(Maybe DateTime')
+    , _vsiListPrice   :: !(Maybe VolumeSaleInfoListPrice)
+    , _vsiRetailPrice :: !(Maybe VolumeSaleInfoRetailPrice)
+    , _vsiOffers      :: !(Maybe [VolumeSaleInfoOffersItem])
+    , _vsiBuyLink     :: !(Maybe Text)
+    , _vsiIsEbook     :: !(Maybe Bool)
+    , _vsiSaleability :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumeSaleInfo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vsiCountry'
+--
+-- * 'vsiOnSaleDate'
+--
+-- * 'vsiListPrice'
+--
+-- * 'vsiRetailPrice'
+--
+-- * 'vsiOffers'
+--
+-- * 'vsiBuyLink'
+--
+-- * 'vsiIsEbook'
+--
+-- * 'vsiSaleability'
+volumeSaleInfo
+    :: VolumeSaleInfo
+volumeSaleInfo =
+    VolumeSaleInfo'
+    { _vsiCountry = Nothing
+    , _vsiOnSaleDate = Nothing
+    , _vsiListPrice = Nothing
+    , _vsiRetailPrice = Nothing
+    , _vsiOffers = Nothing
+    , _vsiBuyLink = Nothing
+    , _vsiIsEbook = Nothing
+    , _vsiSaleability = Nothing
+    }
+
+-- | The two-letter ISO_3166-1 country code for which this sale information
+-- is valid. (In LITE projection.)
+vsiCountry :: Lens' VolumeSaleInfo (Maybe Text)
+vsiCountry
+  = lens _vsiCountry (\ s a -> s{_vsiCountry = a})
+
+-- | The date on which this book is available for sale.
+vsiOnSaleDate :: Lens' VolumeSaleInfo (Maybe UTCTime)
+vsiOnSaleDate
+  = lens _vsiOnSaleDate
+      (\ s a -> s{_vsiOnSaleDate = a})
+      . mapping _DateTime
+
+-- | Suggested retail price. (In LITE projection.)
+vsiListPrice :: Lens' VolumeSaleInfo (Maybe VolumeSaleInfoListPrice)
+vsiListPrice
+  = lens _vsiListPrice (\ s a -> s{_vsiListPrice = a})
+
+-- | The actual selling price of the book. This is the same as the suggested
+-- retail or list price unless there are offers or discounts on this
+-- volume. (In LITE projection.)
+vsiRetailPrice :: Lens' VolumeSaleInfo (Maybe VolumeSaleInfoRetailPrice)
+vsiRetailPrice
+  = lens _vsiRetailPrice
+      (\ s a -> s{_vsiRetailPrice = a})
+
+-- | Offers available for this volume (sales and rentals).
+vsiOffers :: Lens' VolumeSaleInfo [VolumeSaleInfoOffersItem]
+vsiOffers
+  = lens _vsiOffers (\ s a -> s{_vsiOffers = a}) .
+      _Default
+      . _Coerce
+
+-- | URL to purchase this volume on the Google Books site. (In LITE
+-- projection)
+vsiBuyLink :: Lens' VolumeSaleInfo (Maybe Text)
+vsiBuyLink
+  = lens _vsiBuyLink (\ s a -> s{_vsiBuyLink = a})
+
+-- | Whether or not this volume is an eBook (can be added to the My eBooks
+-- shelf).
+vsiIsEbook :: Lens' VolumeSaleInfo (Maybe Bool)
+vsiIsEbook
+  = lens _vsiIsEbook (\ s a -> s{_vsiIsEbook = a})
+
+-- | Whether or not this book is available for sale or offered for free in
+-- the Google eBookstore for the country listed above. Possible values are
+-- FOR_SALE, FOR_RENTAL_ONLY, FOR_SALE_AND_RENTAL, FREE, NOT_FOR_SALE, or
+-- FOR_PREORDER.
+vsiSaleability :: Lens' VolumeSaleInfo (Maybe Text)
+vsiSaleability
+  = lens _vsiSaleability
+      (\ s a -> s{_vsiSaleability = a})
+
+instance FromJSON VolumeSaleInfo where
+        parseJSON
+          = withObject "VolumeSaleInfo"
+              (\ o ->
+                 VolumeSaleInfo' <$>
+                   (o .:? "country") <*> (o .:? "onSaleDate") <*>
+                     (o .:? "listPrice")
+                     <*> (o .:? "retailPrice")
+                     <*> (o .:? "offers" .!= mempty)
+                     <*> (o .:? "buyLink")
+                     <*> (o .:? "isEbook")
+                     <*> (o .:? "saleability"))
+
+instance ToJSON VolumeSaleInfo where
+        toJSON VolumeSaleInfo'{..}
+          = object
+              (catMaybes
+                 [("country" .=) <$> _vsiCountry,
+                  ("onSaleDate" .=) <$> _vsiOnSaleDate,
+                  ("listPrice" .=) <$> _vsiListPrice,
+                  ("retailPrice" .=) <$> _vsiRetailPrice,
+                  ("offers" .=) <$> _vsiOffers,
+                  ("buyLink" .=) <$> _vsiBuyLink,
+                  ("isEbook" .=) <$> _vsiIsEbook,
+                  ("saleability" .=) <$> _vsiSaleability])
+
+--
+-- /See:/ 'seriesSeriesItem' smart constructor.
+data SeriesSeriesItem = SeriesSeriesItem'
+    { _ssiSeriesId       :: !(Maybe Text)
+    , _ssiImageURL       :: !(Maybe Text)
+    , _ssiBannerImageURL :: !(Maybe Text)
+    , _ssiTitle          :: !(Maybe Text)
+    , _ssiSeriesType     :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SeriesSeriesItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ssiSeriesId'
+--
+-- * 'ssiImageURL'
+--
+-- * 'ssiBannerImageURL'
+--
+-- * 'ssiTitle'
+--
+-- * 'ssiSeriesType'
+seriesSeriesItem
+    :: SeriesSeriesItem
+seriesSeriesItem =
+    SeriesSeriesItem'
+    { _ssiSeriesId = Nothing
+    , _ssiImageURL = Nothing
+    , _ssiBannerImageURL = Nothing
+    , _ssiTitle = Nothing
+    , _ssiSeriesType = Nothing
+    }
+
+ssiSeriesId :: Lens' SeriesSeriesItem (Maybe Text)
+ssiSeriesId
+  = lens _ssiSeriesId (\ s a -> s{_ssiSeriesId = a})
+
+ssiImageURL :: Lens' SeriesSeriesItem (Maybe Text)
+ssiImageURL
+  = lens _ssiImageURL (\ s a -> s{_ssiImageURL = a})
+
+ssiBannerImageURL :: Lens' SeriesSeriesItem (Maybe Text)
+ssiBannerImageURL
+  = lens _ssiBannerImageURL
+      (\ s a -> s{_ssiBannerImageURL = a})
+
+ssiTitle :: Lens' SeriesSeriesItem (Maybe Text)
+ssiTitle = lens _ssiTitle (\ s a -> s{_ssiTitle = a})
+
+ssiSeriesType :: Lens' SeriesSeriesItem (Maybe Text)
+ssiSeriesType
+  = lens _ssiSeriesType
+      (\ s a -> s{_ssiSeriesType = a})
+
+instance FromJSON SeriesSeriesItem where
+        parseJSON
+          = withObject "SeriesSeriesItem"
+              (\ o ->
+                 SeriesSeriesItem' <$>
+                   (o .:? "seriesId") <*> (o .:? "imageUrl") <*>
+                     (o .:? "bannerImageUrl")
+                     <*> (o .:? "title")
+                     <*> (o .:? "seriesType"))
+
+instance ToJSON SeriesSeriesItem where
+        toJSON SeriesSeriesItem'{..}
+          = object
+              (catMaybes
+                 [("seriesId" .=) <$> _ssiSeriesId,
+                  ("imageUrl" .=) <$> _ssiImageURL,
+                  ("bannerImageUrl" .=) <$> _ssiBannerImageURL,
+                  ("title" .=) <$> _ssiTitle,
+                  ("seriesType" .=) <$> _ssiSeriesType])
+
+--
+-- /See:/ 'metadata' smart constructor.
+data Metadata = Metadata'
+    { _mKind  :: !Text
+    , _mItems :: !(Maybe [MetadataItemsItem])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Metadata' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mKind'
+--
+-- * 'mItems'
+metadata
+    :: Metadata
+metadata =
+    Metadata'
+    { _mKind = "dictionary#metadata"
+    , _mItems = Nothing
+    }
+
+-- | Resource type.
+mKind :: Lens' Metadata Text
+mKind = lens _mKind (\ s a -> s{_mKind = a})
+
+-- | A list of offline dictionary metadata.
+mItems :: Lens' Metadata [MetadataItemsItem]
+mItems
+  = lens _mItems (\ s a -> s{_mItems = a}) . _Default .
+      _Coerce
+
+instance FromJSON Metadata where
+        parseJSON
+          = withObject "Metadata"
+              (\ o ->
+                 Metadata' <$>
+                   (o .:? "kind" .!= "dictionary#metadata") <*>
+                     (o .:? "items" .!= mempty))
+
+instance ToJSON Metadata where
+        toJSON Metadata'{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _mKind), ("items" .=) <$> _mItems])
+
+-- | What layers exist in this volume and high level information about them.
+--
+-- /See:/ 'volumeLayerInfo' smart constructor.
+newtype VolumeLayerInfo = VolumeLayerInfo'
+    { _vliLayers :: Maybe [VolumeLayerInfoLayersItem]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumeLayerInfo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vliLayers'
+volumeLayerInfo
+    :: VolumeLayerInfo
+volumeLayerInfo =
+    VolumeLayerInfo'
+    { _vliLayers = Nothing
+    }
+
+-- | A layer should appear here if and only if the layer exists for this
+-- book.
+vliLayers :: Lens' VolumeLayerInfo [VolumeLayerInfoLayersItem]
+vliLayers
+  = lens _vliLayers (\ s a -> s{_vliLayers = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON VolumeLayerInfo where
+        parseJSON
+          = withObject "VolumeLayerInfo"
+              (\ o ->
+                 VolumeLayerInfo' <$> (o .:? "layers" .!= mempty))
+
+instance ToJSON VolumeLayerInfo where
+        toJSON VolumeLayerInfo'{..}
+          = object (catMaybes [("layers" .=) <$> _vliLayers])
+
+-- | Physical dimensions of this volume.
+--
+-- /See:/ 'volumeVolumeInfoDimensions' smart constructor.
+data VolumeVolumeInfoDimensions = VolumeVolumeInfoDimensions'
+    { _vvidHeight    :: !(Maybe Text)
+    , _vvidWidth     :: !(Maybe Text)
+    , _vvidThickness :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumeVolumeInfoDimensions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vvidHeight'
+--
+-- * 'vvidWidth'
+--
+-- * 'vvidThickness'
+volumeVolumeInfoDimensions
+    :: VolumeVolumeInfoDimensions
+volumeVolumeInfoDimensions =
+    VolumeVolumeInfoDimensions'
+    { _vvidHeight = Nothing
+    , _vvidWidth = Nothing
+    , _vvidThickness = Nothing
+    }
+
+-- | Height or length of this volume (in cm).
+vvidHeight :: Lens' VolumeVolumeInfoDimensions (Maybe Text)
+vvidHeight
+  = lens _vvidHeight (\ s a -> s{_vvidHeight = a})
+
+-- | Width of this volume (in cm).
+vvidWidth :: Lens' VolumeVolumeInfoDimensions (Maybe Text)
+vvidWidth
+  = lens _vvidWidth (\ s a -> s{_vvidWidth = a})
+
+-- | Thickness of this volume (in cm).
+vvidThickness :: Lens' VolumeVolumeInfoDimensions (Maybe Text)
+vvidThickness
+  = lens _vvidThickness
+      (\ s a -> s{_vvidThickness = a})
+
+instance FromJSON VolumeVolumeInfoDimensions where
+        parseJSON
+          = withObject "VolumeVolumeInfoDimensions"
+              (\ o ->
+                 VolumeVolumeInfoDimensions' <$>
+                   (o .:? "height") <*> (o .:? "width") <*>
+                     (o .:? "thickness"))
+
+instance ToJSON VolumeVolumeInfoDimensions where
+        toJSON VolumeVolumeInfoDimensions'{..}
+          = object
+              (catMaybes
+                 [("height" .=) <$> _vvidHeight,
+                  ("width" .=) <$> _vvidWidth,
+                  ("thickness" .=) <$> _vvidThickness])
+
+--
+-- /See:/ 'requestAccess' smart constructor.
+data RequestAccess = RequestAccess'
+    { _raConcurrentAccess :: !(Maybe ConcurrentAccessRestriction)
+    , _raKind             :: !Text
+    , _raDownloadAccess   :: !(Maybe DownloadAccessRestriction)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RequestAccess' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'raConcurrentAccess'
+--
+-- * 'raKind'
+--
+-- * 'raDownloadAccess'
+requestAccess
+    :: RequestAccess
+requestAccess =
+    RequestAccess'
+    { _raConcurrentAccess = Nothing
+    , _raKind = "books#requestAccess"
+    , _raDownloadAccess = Nothing
+    }
+
+-- | A concurrent access response.
+raConcurrentAccess :: Lens' RequestAccess (Maybe ConcurrentAccessRestriction)
+raConcurrentAccess
+  = lens _raConcurrentAccess
+      (\ s a -> s{_raConcurrentAccess = a})
+
+-- | Resource type.
+raKind :: Lens' RequestAccess Text
+raKind = lens _raKind (\ s a -> s{_raKind = a})
+
+-- | A download access response.
+raDownloadAccess :: Lens' RequestAccess (Maybe DownloadAccessRestriction)
+raDownloadAccess
+  = lens _raDownloadAccess
+      (\ s a -> s{_raDownloadAccess = a})
+
+instance FromJSON RequestAccess where
+        parseJSON
+          = withObject "RequestAccess"
+              (\ o ->
+                 RequestAccess' <$>
+                   (o .:? "concurrentAccess") <*>
+                     (o .:? "kind" .!= "books#requestAccess")
+                     <*> (o .:? "downloadAccess"))
+
+instance ToJSON RequestAccess where
+        toJSON RequestAccess'{..}
+          = object
+              (catMaybes
+                 [("concurrentAccess" .=) <$> _raConcurrentAccess,
+                  Just ("kind" .= _raKind),
+                  ("downloadAccess" .=) <$> _raDownloadAccess])
+
+-- | Selection ranges sent from the client.
+--
+-- /See:/ 'annotationClientVersionRanges' smart constructor.
+data AnnotationClientVersionRanges = AnnotationClientVersionRanges'
+    { _acvrGbImageRange   :: !(Maybe BooksAnnotationsRange)
+    , _acvrContentVersion :: !(Maybe Text)
+    , _acvrImageCfiRange  :: !(Maybe BooksAnnotationsRange)
+    , _acvrGbTextRange    :: !(Maybe BooksAnnotationsRange)
+    , _acvrCfiRange       :: !(Maybe BooksAnnotationsRange)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AnnotationClientVersionRanges' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'acvrGbImageRange'
+--
+-- * 'acvrContentVersion'
+--
+-- * 'acvrImageCfiRange'
+--
+-- * 'acvrGbTextRange'
+--
+-- * 'acvrCfiRange'
+annotationClientVersionRanges
+    :: AnnotationClientVersionRanges
+annotationClientVersionRanges =
+    AnnotationClientVersionRanges'
+    { _acvrGbImageRange = Nothing
+    , _acvrContentVersion = Nothing
+    , _acvrImageCfiRange = Nothing
+    , _acvrGbTextRange = Nothing
+    , _acvrCfiRange = Nothing
+    }
+
+-- | Range in GB image format for this annotation sent by client.
+acvrGbImageRange :: Lens' AnnotationClientVersionRanges (Maybe BooksAnnotationsRange)
+acvrGbImageRange
+  = lens _acvrGbImageRange
+      (\ s a -> s{_acvrGbImageRange = a})
+
+-- | Content version the client sent in.
+acvrContentVersion :: Lens' AnnotationClientVersionRanges (Maybe Text)
+acvrContentVersion
+  = lens _acvrContentVersion
+      (\ s a -> s{_acvrContentVersion = a})
+
+-- | Range in image CFI format for this annotation sent by client.
+acvrImageCfiRange :: Lens' AnnotationClientVersionRanges (Maybe BooksAnnotationsRange)
+acvrImageCfiRange
+  = lens _acvrImageCfiRange
+      (\ s a -> s{_acvrImageCfiRange = a})
+
+-- | Range in GB text format for this annotation sent by client.
+acvrGbTextRange :: Lens' AnnotationClientVersionRanges (Maybe BooksAnnotationsRange)
+acvrGbTextRange
+  = lens _acvrGbTextRange
+      (\ s a -> s{_acvrGbTextRange = a})
+
+-- | Range in CFI format for this annotation sent by client.
+acvrCfiRange :: Lens' AnnotationClientVersionRanges (Maybe BooksAnnotationsRange)
+acvrCfiRange
+  = lens _acvrCfiRange (\ s a -> s{_acvrCfiRange = a})
+
+instance FromJSON AnnotationClientVersionRanges where
+        parseJSON
+          = withObject "AnnotationClientVersionRanges"
+              (\ o ->
+                 AnnotationClientVersionRanges' <$>
+                   (o .:? "gbImageRange") <*> (o .:? "contentVersion")
+                     <*> (o .:? "imageCfiRange")
+                     <*> (o .:? "gbTextRange")
+                     <*> (o .:? "cfiRange"))
+
+instance ToJSON AnnotationClientVersionRanges where
+        toJSON AnnotationClientVersionRanges'{..}
+          = object
+              (catMaybes
+                 [("gbImageRange" .=) <$> _acvrGbImageRange,
+                  ("contentVersion" .=) <$> _acvrContentVersion,
+                  ("imageCfiRange" .=) <$> _acvrImageCfiRange,
+                  ("gbTextRange" .=) <$> _acvrGbTextRange,
+                  ("cfiRange" .=) <$> _acvrCfiRange])
+
+--
+-- /See:/ 'dictlayerDataDictWordsItemSensesItemDefinitionsItem' smart constructor.
+data DictlayerDataDictWordsItemSensesItemDefinitionsItem = DictlayerDataDictWordsItemSensesItemDefinitionsItem'
+    { _dddwisidiDefinition :: !(Maybe Text)
+    , _dddwisidiExamples   :: !(Maybe [DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItem])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DictlayerDataDictWordsItemSensesItemDefinitionsItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dddwisidiDefinition'
+--
+-- * 'dddwisidiExamples'
+dictlayerDataDictWordsItemSensesItemDefinitionsItem
+    :: DictlayerDataDictWordsItemSensesItemDefinitionsItem
+dictlayerDataDictWordsItemSensesItemDefinitionsItem =
+    DictlayerDataDictWordsItemSensesItemDefinitionsItem'
+    { _dddwisidiDefinition = Nothing
+    , _dddwisidiExamples = Nothing
+    }
+
+dddwisidiDefinition :: Lens' DictlayerDataDictWordsItemSensesItemDefinitionsItem (Maybe Text)
+dddwisidiDefinition
+  = lens _dddwisidiDefinition
+      (\ s a -> s{_dddwisidiDefinition = a})
+
+dddwisidiExamples :: Lens' DictlayerDataDictWordsItemSensesItemDefinitionsItem [DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItem]
+dddwisidiExamples
+  = lens _dddwisidiExamples
+      (\ s a -> s{_dddwisidiExamples = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON
+         DictlayerDataDictWordsItemSensesItemDefinitionsItem
+         where
+        parseJSON
+          = withObject
+              "DictlayerDataDictWordsItemSensesItemDefinitionsItem"
+              (\ o ->
+                 DictlayerDataDictWordsItemSensesItemDefinitionsItem'
+                   <$>
+                   (o .:? "definition") <*>
+                     (o .:? "examples" .!= mempty))
+
+instance ToJSON
+         DictlayerDataDictWordsItemSensesItemDefinitionsItem
+         where
+        toJSON
+          DictlayerDataDictWordsItemSensesItemDefinitionsItem'{..}
+          = object
+              (catMaybes
+                 [("definition" .=) <$> _dddwisidiDefinition,
+                  ("examples" .=) <$> _dddwisidiExamples])
+
+--
+-- /See:/ 'volumeLayerInfoLayersItem' smart constructor.
+data VolumeLayerInfoLayersItem = VolumeLayerInfoLayersItem'
+    { _vliliVolumeAnnotationsVersion :: !(Maybe Text)
+    , _vliliLayerId                  :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumeLayerInfoLayersItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vliliVolumeAnnotationsVersion'
+--
+-- * 'vliliLayerId'
+volumeLayerInfoLayersItem
+    :: VolumeLayerInfoLayersItem
+volumeLayerInfoLayersItem =
+    VolumeLayerInfoLayersItem'
+    { _vliliVolumeAnnotationsVersion = Nothing
+    , _vliliLayerId = Nothing
+    }
+
+-- | The current version of this layer\'s volume annotations. Note that this
+-- version applies only to the data in the books.layers.volumeAnnotations.*
+-- responses. The actual annotation data is versioned separately.
+vliliVolumeAnnotationsVersion :: Lens' VolumeLayerInfoLayersItem (Maybe Text)
+vliliVolumeAnnotationsVersion
+  = lens _vliliVolumeAnnotationsVersion
+      (\ s a -> s{_vliliVolumeAnnotationsVersion = a})
+
+-- | The layer id of this layer (e.g. \"geo\").
+vliliLayerId :: Lens' VolumeLayerInfoLayersItem (Maybe Text)
+vliliLayerId
+  = lens _vliliLayerId (\ s a -> s{_vliliLayerId = a})
+
+instance FromJSON VolumeLayerInfoLayersItem where
+        parseJSON
+          = withObject "VolumeLayerInfoLayersItem"
+              (\ o ->
+                 VolumeLayerInfoLayersItem' <$>
+                   (o .:? "volumeAnnotationsVersion") <*>
+                     (o .:? "layerId"))
+
+instance ToJSON VolumeLayerInfoLayersItem where
+        toJSON VolumeLayerInfoLayersItem'{..}
+          = object
+              (catMaybes
+                 [("volumeAnnotationsVersion" .=) <$>
+                    _vliliVolumeAnnotationsVersion,
+                  ("layerId" .=) <$> _vliliLayerId])
+
+-- | Selection ranges for the most recent content version.
+--
+-- /See:/ 'annotationCurrentVersionRanges' smart constructor.
+data AnnotationCurrentVersionRanges = AnnotationCurrentVersionRanges'
+    { _aGbImageRange   :: !(Maybe BooksAnnotationsRange)
+    , _aContentVersion :: !(Maybe Text)
+    , _aImageCfiRange  :: !(Maybe BooksAnnotationsRange)
+    , _aGbTextRange    :: !(Maybe BooksAnnotationsRange)
+    , _aCfiRange       :: !(Maybe BooksAnnotationsRange)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AnnotationCurrentVersionRanges' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aGbImageRange'
+--
+-- * 'aContentVersion'
+--
+-- * 'aImageCfiRange'
+--
+-- * 'aGbTextRange'
+--
+-- * 'aCfiRange'
+annotationCurrentVersionRanges
+    :: AnnotationCurrentVersionRanges
+annotationCurrentVersionRanges =
+    AnnotationCurrentVersionRanges'
+    { _aGbImageRange = Nothing
+    , _aContentVersion = Nothing
+    , _aImageCfiRange = Nothing
+    , _aGbTextRange = Nothing
+    , _aCfiRange = Nothing
+    }
+
+-- | Range in GB image format for this annotation for version above.
+aGbImageRange :: Lens' AnnotationCurrentVersionRanges (Maybe BooksAnnotationsRange)
+aGbImageRange
+  = lens _aGbImageRange
+      (\ s a -> s{_aGbImageRange = a})
+
+-- | Content version applicable to ranges below.
+aContentVersion :: Lens' AnnotationCurrentVersionRanges (Maybe Text)
+aContentVersion
+  = lens _aContentVersion
+      (\ s a -> s{_aContentVersion = a})
+
+-- | Range in image CFI format for this annotation for version above.
+aImageCfiRange :: Lens' AnnotationCurrentVersionRanges (Maybe BooksAnnotationsRange)
+aImageCfiRange
+  = lens _aImageCfiRange
+      (\ s a -> s{_aImageCfiRange = a})
+
+-- | Range in GB text format for this annotation for version above.
+aGbTextRange :: Lens' AnnotationCurrentVersionRanges (Maybe BooksAnnotationsRange)
+aGbTextRange
+  = lens _aGbTextRange (\ s a -> s{_aGbTextRange = a})
+
+-- | Range in CFI format for this annotation for version above.
+aCfiRange :: Lens' AnnotationCurrentVersionRanges (Maybe BooksAnnotationsRange)
+aCfiRange
+  = lens _aCfiRange (\ s a -> s{_aCfiRange = a})
+
+instance FromJSON AnnotationCurrentVersionRanges
+         where
+        parseJSON
+          = withObject "AnnotationCurrentVersionRanges"
+              (\ o ->
+                 AnnotationCurrentVersionRanges' <$>
+                   (o .:? "gbImageRange") <*> (o .:? "contentVersion")
+                     <*> (o .:? "imageCfiRange")
+                     <*> (o .:? "gbTextRange")
+                     <*> (o .:? "cfiRange"))
+
+instance ToJSON AnnotationCurrentVersionRanges where
+        toJSON AnnotationCurrentVersionRanges'{..}
+          = object
+              (catMaybes
+                 [("gbImageRange" .=) <$> _aGbImageRange,
+                  ("contentVersion" .=) <$> _aContentVersion,
+                  ("imageCfiRange" .=) <$> _aImageCfiRange,
+                  ("gbTextRange" .=) <$> _aGbTextRange,
+                  ("cfiRange" .=) <$> _aCfiRange])
+
+-- | Information about pdf content. (In LITE projection.)
+--
+-- /See:/ 'volumeAccessInfoPdf' smart constructor.
+data VolumeAccessInfoPdf = VolumeAccessInfoPdf'
+    { _vaipAcsTokenLink :: !(Maybe Text)
+    , _vaipIsAvailable  :: !(Maybe Bool)
+    , _vaipDownloadLink :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumeAccessInfoPdf' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vaipAcsTokenLink'
+--
+-- * 'vaipIsAvailable'
+--
+-- * 'vaipDownloadLink'
+volumeAccessInfoPdf
+    :: VolumeAccessInfoPdf
+volumeAccessInfoPdf =
+    VolumeAccessInfoPdf'
+    { _vaipAcsTokenLink = Nothing
+    , _vaipIsAvailable = Nothing
+    , _vaipDownloadLink = Nothing
+    }
+
+-- | URL to retrieve ACS token for pdf download. (In LITE projection.)
+vaipAcsTokenLink :: Lens' VolumeAccessInfoPdf (Maybe Text)
+vaipAcsTokenLink
+  = lens _vaipAcsTokenLink
+      (\ s a -> s{_vaipAcsTokenLink = a})
+
+-- | Is a scanned image pdf available either as public domain or for
+-- purchase. (In LITE projection.)
+vaipIsAvailable :: Lens' VolumeAccessInfoPdf (Maybe Bool)
+vaipIsAvailable
+  = lens _vaipIsAvailable
+      (\ s a -> s{_vaipIsAvailable = a})
+
+-- | URL to download pdf. (In LITE projection.)
+vaipDownloadLink :: Lens' VolumeAccessInfoPdf (Maybe Text)
+vaipDownloadLink
+  = lens _vaipDownloadLink
+      (\ s a -> s{_vaipDownloadLink = a})
+
+instance FromJSON VolumeAccessInfoPdf where
+        parseJSON
+          = withObject "VolumeAccessInfoPdf"
+              (\ o ->
+                 VolumeAccessInfoPdf' <$>
+                   (o .:? "acsTokenLink") <*> (o .:? "isAvailable") <*>
+                     (o .:? "downloadLink"))
+
+instance ToJSON VolumeAccessInfoPdf where
+        toJSON VolumeAccessInfoPdf'{..}
+          = object
+              (catMaybes
+                 [("acsTokenLink" .=) <$> _vaipAcsTokenLink,
+                  ("isAvailable" .=) <$> _vaipIsAvailable,
+                  ("downloadLink" .=) <$> _vaipDownloadLink])
+
+--
+-- /See:/ 'dictlayerDataDictWordsItemExamplesItemSource' smart constructor.
+data DictlayerDataDictWordsItemExamplesItemSource = DictlayerDataDictWordsItemExamplesItemSource'
+    { _dddwieisURL         :: !(Maybe Text)
+    , _dddwieisAttribution :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DictlayerDataDictWordsItemExamplesItemSource' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dddwieisURL'
+--
+-- * 'dddwieisAttribution'
+dictlayerDataDictWordsItemExamplesItemSource
+    :: DictlayerDataDictWordsItemExamplesItemSource
+dictlayerDataDictWordsItemExamplesItemSource =
+    DictlayerDataDictWordsItemExamplesItemSource'
+    { _dddwieisURL = Nothing
+    , _dddwieisAttribution = Nothing
+    }
+
+dddwieisURL :: Lens' DictlayerDataDictWordsItemExamplesItemSource (Maybe Text)
+dddwieisURL
+  = lens _dddwieisURL (\ s a -> s{_dddwieisURL = a})
+
+dddwieisAttribution :: Lens' DictlayerDataDictWordsItemExamplesItemSource (Maybe Text)
+dddwieisAttribution
+  = lens _dddwieisAttribution
+      (\ s a -> s{_dddwieisAttribution = a})
+
+instance FromJSON
+         DictlayerDataDictWordsItemExamplesItemSource where
+        parseJSON
+          = withObject
+              "DictlayerDataDictWordsItemExamplesItemSource"
+              (\ o ->
+                 DictlayerDataDictWordsItemExamplesItemSource' <$>
+                   (o .:? "url") <*> (o .:? "attribution"))
+
+instance ToJSON
+         DictlayerDataDictWordsItemExamplesItemSource where
+        toJSON
+          DictlayerDataDictWordsItemExamplesItemSource'{..}
+          = object
+              (catMaybes
+                 [("url" .=) <$> _dddwieisURL,
+                  ("attribution" .=) <$> _dddwieisAttribution])
+
+-- | Information about epub content. (In LITE projection.)
+--
+-- /See:/ 'volumeAccessInfoEpub' smart constructor.
+data VolumeAccessInfoEpub = VolumeAccessInfoEpub'
+    { _vaieAcsTokenLink :: !(Maybe Text)
+    , _vaieIsAvailable  :: !(Maybe Bool)
+    , _vaieDownloadLink :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumeAccessInfoEpub' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vaieAcsTokenLink'
+--
+-- * 'vaieIsAvailable'
+--
+-- * 'vaieDownloadLink'
+volumeAccessInfoEpub
+    :: VolumeAccessInfoEpub
+volumeAccessInfoEpub =
+    VolumeAccessInfoEpub'
+    { _vaieAcsTokenLink = Nothing
+    , _vaieIsAvailable = Nothing
+    , _vaieDownloadLink = Nothing
+    }
+
+-- | URL to retrieve ACS token for epub download. (In LITE projection.)
+vaieAcsTokenLink :: Lens' VolumeAccessInfoEpub (Maybe Text)
+vaieAcsTokenLink
+  = lens _vaieAcsTokenLink
+      (\ s a -> s{_vaieAcsTokenLink = a})
+
+-- | Is a flowing text epub available either as public domain or for
+-- purchase. (In LITE projection.)
+vaieIsAvailable :: Lens' VolumeAccessInfoEpub (Maybe Bool)
+vaieIsAvailable
+  = lens _vaieIsAvailable
+      (\ s a -> s{_vaieIsAvailable = a})
+
+-- | URL to download epub. (In LITE projection.)
+vaieDownloadLink :: Lens' VolumeAccessInfoEpub (Maybe Text)
+vaieDownloadLink
+  = lens _vaieDownloadLink
+      (\ s a -> s{_vaieDownloadLink = a})
+
+instance FromJSON VolumeAccessInfoEpub where
+        parseJSON
+          = withObject "VolumeAccessInfoEpub"
+              (\ o ->
+                 VolumeAccessInfoEpub' <$>
+                   (o .:? "acsTokenLink") <*> (o .:? "isAvailable") <*>
+                     (o .:? "downloadLink"))
+
+instance ToJSON VolumeAccessInfoEpub where
+        toJSON VolumeAccessInfoEpub'{..}
+          = object
+              (catMaybes
+                 [("acsTokenLink" .=) <$> _vaieAcsTokenLink,
+                  ("isAvailable" .=) <$> _vaieIsAvailable,
+                  ("downloadLink" .=) <$> _vaieDownloadLink])
+
+--
+-- /See:/ 'readingPosition' smart constructor.
+data ReadingPosition = ReadingPosition'
+    { _rpEpubCfiPosition :: !(Maybe Text)
+    , _rpKind            :: !Text
+    , _rpGbImagePosition :: !(Maybe Text)
+    , _rpPdfPosition     :: !(Maybe Text)
+    , _rpVolumeId        :: !(Maybe Text)
+    , _rpUpdated         :: !(Maybe DateTime')
+    , _rpGbTextPosition  :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ReadingPosition' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rpEpubCfiPosition'
+--
+-- * 'rpKind'
+--
+-- * 'rpGbImagePosition'
+--
+-- * 'rpPdfPosition'
+--
+-- * 'rpVolumeId'
+--
+-- * 'rpUpdated'
+--
+-- * 'rpGbTextPosition'
+readingPosition
+    :: ReadingPosition
+readingPosition =
+    ReadingPosition'
+    { _rpEpubCfiPosition = Nothing
+    , _rpKind = "books#readingPosition"
+    , _rpGbImagePosition = Nothing
+    , _rpPdfPosition = Nothing
+    , _rpVolumeId = Nothing
+    , _rpUpdated = Nothing
+    , _rpGbTextPosition = Nothing
+    }
+
+-- | Position in an EPUB as a CFI.
+rpEpubCfiPosition :: Lens' ReadingPosition (Maybe Text)
+rpEpubCfiPosition
+  = lens _rpEpubCfiPosition
+      (\ s a -> s{_rpEpubCfiPosition = a})
+
+-- | Resource type for a reading position.
+rpKind :: Lens' ReadingPosition Text
+rpKind = lens _rpKind (\ s a -> s{_rpKind = a})
+
+-- | Position in a volume for image-based content.
+rpGbImagePosition :: Lens' ReadingPosition (Maybe Text)
+rpGbImagePosition
+  = lens _rpGbImagePosition
+      (\ s a -> s{_rpGbImagePosition = a})
+
+-- | Position in a PDF file.
+rpPdfPosition :: Lens' ReadingPosition (Maybe Text)
+rpPdfPosition
+  = lens _rpPdfPosition
+      (\ s a -> s{_rpPdfPosition = a})
+
+-- | Volume id associated with this reading position.
+rpVolumeId :: Lens' ReadingPosition (Maybe Text)
+rpVolumeId
+  = lens _rpVolumeId (\ s a -> s{_rpVolumeId = a})
+
+-- | Timestamp when this reading position was last updated (formatted UTC
+-- timestamp with millisecond resolution).
+rpUpdated :: Lens' ReadingPosition (Maybe UTCTime)
+rpUpdated
+  = lens _rpUpdated (\ s a -> s{_rpUpdated = a}) .
+      mapping _DateTime
+
+-- | Position in a volume for text-based content.
+rpGbTextPosition :: Lens' ReadingPosition (Maybe Text)
+rpGbTextPosition
+  = lens _rpGbTextPosition
+      (\ s a -> s{_rpGbTextPosition = a})
+
+instance FromJSON ReadingPosition where
+        parseJSON
+          = withObject "ReadingPosition"
+              (\ o ->
+                 ReadingPosition' <$>
+                   (o .:? "epubCfiPosition") <*>
+                     (o .:? "kind" .!= "books#readingPosition")
+                     <*> (o .:? "gbImagePosition")
+                     <*> (o .:? "pdfPosition")
+                     <*> (o .:? "volumeId")
+                     <*> (o .:? "updated")
+                     <*> (o .:? "gbTextPosition"))
+
+instance ToJSON ReadingPosition where
+        toJSON ReadingPosition'{..}
+          = object
+              (catMaybes
+                 [("epubCfiPosition" .=) <$> _rpEpubCfiPosition,
+                  Just ("kind" .= _rpKind),
+                  ("gbImagePosition" .=) <$> _rpGbImagePosition,
+                  ("pdfPosition" .=) <$> _rpPdfPosition,
+                  ("volumeId" .=) <$> _rpVolumeId,
+                  ("updated" .=) <$> _rpUpdated,
+                  ("gbTextPosition" .=) <$> _rpGbTextPosition])
+
+--
+-- /See:/ 'volumeSaleInfoOffersItem' smart constructor.
+data VolumeSaleInfoOffersItem = VolumeSaleInfoOffersItem'
+    { _vsioiFinskyOfferType :: !(Maybe (Textual Int32))
+    , _vsioiRentalDuration  :: !(Maybe VolumeSaleInfoOffersItemRentalDuration)
+    , _vsioiListPrice       :: !(Maybe VolumeSaleInfoOffersItemListPrice)
+    , _vsioiRetailPrice     :: !(Maybe VolumeSaleInfoOffersItemRetailPrice)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumeSaleInfoOffersItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vsioiFinskyOfferType'
+--
+-- * 'vsioiRentalDuration'
+--
+-- * 'vsioiListPrice'
+--
+-- * 'vsioiRetailPrice'
+volumeSaleInfoOffersItem
+    :: VolumeSaleInfoOffersItem
+volumeSaleInfoOffersItem =
+    VolumeSaleInfoOffersItem'
+    { _vsioiFinskyOfferType = Nothing
+    , _vsioiRentalDuration = Nothing
+    , _vsioiListPrice = Nothing
+    , _vsioiRetailPrice = Nothing
+    }
+
+-- | The finsky offer type (e.g., PURCHASE=0 RENTAL=3)
+vsioiFinskyOfferType :: Lens' VolumeSaleInfoOffersItem (Maybe Int32)
+vsioiFinskyOfferType
+  = lens _vsioiFinskyOfferType
+      (\ s a -> s{_vsioiFinskyOfferType = a})
+      . mapping _Coerce
+
+-- | The rental duration (for rental offers only).
+vsioiRentalDuration :: Lens' VolumeSaleInfoOffersItem (Maybe VolumeSaleInfoOffersItemRentalDuration)
+vsioiRentalDuration
+  = lens _vsioiRentalDuration
+      (\ s a -> s{_vsioiRentalDuration = a})
+
+-- | Offer list (=undiscounted) price in Micros.
+vsioiListPrice :: Lens' VolumeSaleInfoOffersItem (Maybe VolumeSaleInfoOffersItemListPrice)
+vsioiListPrice
+  = lens _vsioiListPrice
+      (\ s a -> s{_vsioiListPrice = a})
+
+-- | Offer retail (=discounted) price in Micros
+vsioiRetailPrice :: Lens' VolumeSaleInfoOffersItem (Maybe VolumeSaleInfoOffersItemRetailPrice)
+vsioiRetailPrice
+  = lens _vsioiRetailPrice
+      (\ s a -> s{_vsioiRetailPrice = a})
+
+instance FromJSON VolumeSaleInfoOffersItem where
+        parseJSON
+          = withObject "VolumeSaleInfoOffersItem"
+              (\ o ->
+                 VolumeSaleInfoOffersItem' <$>
+                   (o .:? "finskyOfferType") <*>
+                     (o .:? "rentalDuration")
+                     <*> (o .:? "listPrice")
+                     <*> (o .:? "retailPrice"))
+
+instance ToJSON VolumeSaleInfoOffersItem where
+        toJSON VolumeSaleInfoOffersItem'{..}
+          = object
+              (catMaybes
+                 [("finskyOfferType" .=) <$> _vsioiFinskyOfferType,
+                  ("rentalDuration" .=) <$> _vsioiRentalDuration,
+                  ("listPrice" .=) <$> _vsioiListPrice,
+                  ("retailPrice" .=) <$> _vsioiRetailPrice])
+
+--
+-- /See:/ 'dictlayerDataDict' smart constructor.
+data DictlayerDataDict = DictlayerDataDict'
+    { _dddSource :: !(Maybe DictlayerDataDictSource)
+    , _dddWords  :: !(Maybe [DictlayerDataDictWordsItem])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DictlayerDataDict' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dddSource'
+--
+-- * 'dddWords'
+dictlayerDataDict
+    :: DictlayerDataDict
+dictlayerDataDict =
+    DictlayerDataDict'
+    { _dddSource = Nothing
+    , _dddWords = Nothing
+    }
+
+-- | The source, url and attribution for this dictionary data.
+dddSource :: Lens' DictlayerDataDict (Maybe DictlayerDataDictSource)
+dddSource
+  = lens _dddSource (\ s a -> s{_dddSource = a})
+
+dddWords :: Lens' DictlayerDataDict [DictlayerDataDictWordsItem]
+dddWords
+  = lens _dddWords (\ s a -> s{_dddWords = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON DictlayerDataDict where
+        parseJSON
+          = withObject "DictlayerDataDict"
+              (\ o ->
+                 DictlayerDataDict' <$>
+                   (o .:? "source") <*> (o .:? "words" .!= mempty))
+
+instance ToJSON DictlayerDataDict where
+        toJSON DictlayerDataDict'{..}
+          = object
+              (catMaybes
+                 [("source" .=) <$> _dddSource,
+                  ("words" .=) <$> _dddWords])
+
+--
+-- /See:/ 'dictlayerDataDictWordsItemSensesItem' smart constructor.
+data DictlayerDataDictWordsItemSensesItem = DictlayerDataDictWordsItemSensesItem'
+    { _dddwisiPronunciationURL :: !(Maybe Text)
+    , _dddwisiConjugations     :: !(Maybe [DictlayerDataDictWordsItemSensesItemConjugationsItem])
+    , _dddwisiPronunciation    :: !(Maybe Text)
+    , _dddwisiSynonyms         :: !(Maybe [DictlayerDataDictWordsItemSensesItemSynonymsItem])
+    , _dddwisiSource           :: !(Maybe DictlayerDataDictWordsItemSensesItemSource)
+    , _dddwisiPartOfSpeech     :: !(Maybe Text)
+    , _dddwisiDefinitions      :: !(Maybe [DictlayerDataDictWordsItemSensesItemDefinitionsItem])
+    , _dddwisiSyllabification  :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DictlayerDataDictWordsItemSensesItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dddwisiPronunciationURL'
+--
+-- * 'dddwisiConjugations'
+--
+-- * 'dddwisiPronunciation'
+--
+-- * 'dddwisiSynonyms'
+--
+-- * 'dddwisiSource'
+--
+-- * 'dddwisiPartOfSpeech'
+--
+-- * 'dddwisiDefinitions'
+--
+-- * 'dddwisiSyllabification'
+dictlayerDataDictWordsItemSensesItem
+    :: DictlayerDataDictWordsItemSensesItem
+dictlayerDataDictWordsItemSensesItem =
+    DictlayerDataDictWordsItemSensesItem'
+    { _dddwisiPronunciationURL = Nothing
+    , _dddwisiConjugations = Nothing
+    , _dddwisiPronunciation = Nothing
+    , _dddwisiSynonyms = Nothing
+    , _dddwisiSource = Nothing
+    , _dddwisiPartOfSpeech = Nothing
+    , _dddwisiDefinitions = Nothing
+    , _dddwisiSyllabification = Nothing
+    }
+
+dddwisiPronunciationURL :: Lens' DictlayerDataDictWordsItemSensesItem (Maybe Text)
+dddwisiPronunciationURL
+  = lens _dddwisiPronunciationURL
+      (\ s a -> s{_dddwisiPronunciationURL = a})
+
+dddwisiConjugations :: Lens' DictlayerDataDictWordsItemSensesItem [DictlayerDataDictWordsItemSensesItemConjugationsItem]
+dddwisiConjugations
+  = lens _dddwisiConjugations
+      (\ s a -> s{_dddwisiConjugations = a})
+      . _Default
+      . _Coerce
+
+dddwisiPronunciation :: Lens' DictlayerDataDictWordsItemSensesItem (Maybe Text)
+dddwisiPronunciation
+  = lens _dddwisiPronunciation
+      (\ s a -> s{_dddwisiPronunciation = a})
+
+dddwisiSynonyms :: Lens' DictlayerDataDictWordsItemSensesItem [DictlayerDataDictWordsItemSensesItemSynonymsItem]
+dddwisiSynonyms
+  = lens _dddwisiSynonyms
+      (\ s a -> s{_dddwisiSynonyms = a})
+      . _Default
+      . _Coerce
+
+dddwisiSource :: Lens' DictlayerDataDictWordsItemSensesItem (Maybe DictlayerDataDictWordsItemSensesItemSource)
+dddwisiSource
+  = lens _dddwisiSource
+      (\ s a -> s{_dddwisiSource = a})
+
+dddwisiPartOfSpeech :: Lens' DictlayerDataDictWordsItemSensesItem (Maybe Text)
+dddwisiPartOfSpeech
+  = lens _dddwisiPartOfSpeech
+      (\ s a -> s{_dddwisiPartOfSpeech = a})
+
+dddwisiDefinitions :: Lens' DictlayerDataDictWordsItemSensesItem [DictlayerDataDictWordsItemSensesItemDefinitionsItem]
+dddwisiDefinitions
+  = lens _dddwisiDefinitions
+      (\ s a -> s{_dddwisiDefinitions = a})
+      . _Default
+      . _Coerce
+
+dddwisiSyllabification :: Lens' DictlayerDataDictWordsItemSensesItem (Maybe Text)
+dddwisiSyllabification
+  = lens _dddwisiSyllabification
+      (\ s a -> s{_dddwisiSyllabification = a})
+
+instance FromJSON
+         DictlayerDataDictWordsItemSensesItem where
+        parseJSON
+          = withObject "DictlayerDataDictWordsItemSensesItem"
+              (\ o ->
+                 DictlayerDataDictWordsItemSensesItem' <$>
+                   (o .:? "pronunciationUrl") <*>
+                     (o .:? "conjugations" .!= mempty)
+                     <*> (o .:? "pronunciation")
+                     <*> (o .:? "synonyms" .!= mempty)
+                     <*> (o .:? "source")
+                     <*> (o .:? "partOfSpeech")
+                     <*> (o .:? "definitions" .!= mempty)
+                     <*> (o .:? "syllabification"))
+
+instance ToJSON DictlayerDataDictWordsItemSensesItem
+         where
+        toJSON DictlayerDataDictWordsItemSensesItem'{..}
+          = object
+              (catMaybes
+                 [("pronunciationUrl" .=) <$>
+                    _dddwisiPronunciationURL,
+                  ("conjugations" .=) <$> _dddwisiConjugations,
+                  ("pronunciation" .=) <$> _dddwisiPronunciation,
+                  ("synonyms" .=) <$> _dddwisiSynonyms,
+                  ("source" .=) <$> _dddwisiSource,
+                  ("partOfSpeech" .=) <$> _dddwisiPartOfSpeech,
+                  ("definitions" .=) <$> _dddwisiDefinitions,
+                  ("syllabification" .=) <$> _dddwisiSyllabification])
+
+-- | Recommendation related information for this volume.
+--
+-- /See:/ 'volumeRecommendedInfo' smart constructor.
+newtype VolumeRecommendedInfo = VolumeRecommendedInfo'
+    { _vriExplanation :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumeRecommendedInfo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vriExplanation'
+volumeRecommendedInfo
+    :: VolumeRecommendedInfo
+volumeRecommendedInfo =
+    VolumeRecommendedInfo'
+    { _vriExplanation = Nothing
+    }
+
+-- | A text explaining why this volume is recommended.
+vriExplanation :: Lens' VolumeRecommendedInfo (Maybe Text)
+vriExplanation
+  = lens _vriExplanation
+      (\ s a -> s{_vriExplanation = a})
+
+instance FromJSON VolumeRecommendedInfo where
+        parseJSON
+          = withObject "VolumeRecommendedInfo"
+              (\ o ->
+                 VolumeRecommendedInfo' <$> (o .:? "explanation"))
+
+instance ToJSON VolumeRecommendedInfo where
+        toJSON VolumeRecommendedInfo'{..}
+          = object
+              (catMaybes [("explanation" .=) <$> _vriExplanation])
+
+--
+-- /See:/ 'offers' smart constructor.
+data Offers = Offers'
+    { _oKind  :: !Text
+    , _oItems :: !(Maybe [OffersItemsItem])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Offers' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'oKind'
+--
+-- * 'oItems'
+offers
+    :: Offers
+offers =
+    Offers'
+    { _oKind = "promooffer#offers"
+    , _oItems = Nothing
+    }
+
+-- | Resource type.
+oKind :: Lens' Offers Text
+oKind = lens _oKind (\ s a -> s{_oKind = a})
+
+-- | A list of offers.
+oItems :: Lens' Offers [OffersItemsItem]
+oItems
+  = lens _oItems (\ s a -> s{_oItems = a}) . _Default .
+      _Coerce
+
+instance FromJSON Offers where
+        parseJSON
+          = withObject "Offers"
+              (\ o ->
+                 Offers' <$>
+                   (o .:? "kind" .!= "promooffer#offers") <*>
+                     (o .:? "items" .!= mempty))
+
+instance ToJSON Offers where
+        toJSON Offers'{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _oKind), ("items" .=) <$> _oItems])
+
+--
+-- /See:/ 'discoveryclusters' smart constructor.
+data Discoveryclusters = Discoveryclusters'
+    { _dKind          :: !Text
+    , _dTotalClusters :: !(Maybe (Textual Int32))
+    , _dClusters      :: !(Maybe [DiscoveryclustersClustersItem])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Discoveryclusters' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dKind'
+--
+-- * 'dTotalClusters'
+--
+-- * 'dClusters'
+discoveryclusters
+    :: Discoveryclusters
+discoveryclusters =
+    Discoveryclusters'
+    { _dKind = "books#discovery#clusters"
+    , _dTotalClusters = Nothing
+    , _dClusters = Nothing
+    }
+
+-- | Resorce type.
+dKind :: Lens' Discoveryclusters Text
+dKind = lens _dKind (\ s a -> s{_dKind = a})
+
+dTotalClusters :: Lens' Discoveryclusters (Maybe Int32)
+dTotalClusters
+  = lens _dTotalClusters
+      (\ s a -> s{_dTotalClusters = a})
+      . mapping _Coerce
+
+dClusters :: Lens' Discoveryclusters [DiscoveryclustersClustersItem]
+dClusters
+  = lens _dClusters (\ s a -> s{_dClusters = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON Discoveryclusters where
+        parseJSON
+          = withObject "Discoveryclusters"
+              (\ o ->
+                 Discoveryclusters' <$>
+                   (o .:? "kind" .!= "books#discovery#clusters") <*>
+                     (o .:? "totalClusters")
+                     <*> (o .:? "clusters" .!= mempty))
+
+instance ToJSON Discoveryclusters where
+        toJSON Discoveryclusters'{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _dKind),
+                  ("totalClusters" .=) <$> _dTotalClusters,
+                  ("clusters" .=) <$> _dClusters])
+
+--
+-- /See:/ 'volumeseriesInfoVolumeSeriesItem' smart constructor.
+data VolumeseriesInfoVolumeSeriesItem = VolumeseriesInfoVolumeSeriesItem'
+    { _vivsiSeriesId       :: !(Maybe Text)
+    , _vivsiSeriesBookType :: !(Maybe Text)
+    , _vivsiOrderNumber    :: !(Maybe (Textual Int32))
+    , _vivsiIssue          :: !(Maybe [VolumeseriesInfoVolumeSeriesItemIssueItem])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumeseriesInfoVolumeSeriesItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vivsiSeriesId'
+--
+-- * 'vivsiSeriesBookType'
+--
+-- * 'vivsiOrderNumber'
+--
+-- * 'vivsiIssue'
+volumeseriesInfoVolumeSeriesItem
+    :: VolumeseriesInfoVolumeSeriesItem
+volumeseriesInfoVolumeSeriesItem =
+    VolumeseriesInfoVolumeSeriesItem'
+    { _vivsiSeriesId = Nothing
+    , _vivsiSeriesBookType = Nothing
+    , _vivsiOrderNumber = Nothing
+    , _vivsiIssue = Nothing
+    }
+
+-- | The series id.
+vivsiSeriesId :: Lens' VolumeseriesInfoVolumeSeriesItem (Maybe Text)
+vivsiSeriesId
+  = lens _vivsiSeriesId
+      (\ s a -> s{_vivsiSeriesId = a})
+
+-- | The book type in the context of series. Examples - Single Issue,
+-- Collection Edition, etc.
+vivsiSeriesBookType :: Lens' VolumeseriesInfoVolumeSeriesItem (Maybe Text)
+vivsiSeriesBookType
+  = lens _vivsiSeriesBookType
+      (\ s a -> s{_vivsiSeriesBookType = a})
+
+-- | The book order number in the series.
+vivsiOrderNumber :: Lens' VolumeseriesInfoVolumeSeriesItem (Maybe Int32)
+vivsiOrderNumber
+  = lens _vivsiOrderNumber
+      (\ s a -> s{_vivsiOrderNumber = a})
+      . mapping _Coerce
+
+-- | List of issues. Applicable only for Collection Edition and Omnibus.
+vivsiIssue :: Lens' VolumeseriesInfoVolumeSeriesItem [VolumeseriesInfoVolumeSeriesItemIssueItem]
+vivsiIssue
+  = lens _vivsiIssue (\ s a -> s{_vivsiIssue = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON VolumeseriesInfoVolumeSeriesItem
+         where
+        parseJSON
+          = withObject "VolumeseriesInfoVolumeSeriesItem"
+              (\ o ->
+                 VolumeseriesInfoVolumeSeriesItem' <$>
+                   (o .:? "seriesId") <*> (o .:? "seriesBookType") <*>
+                     (o .:? "orderNumber")
+                     <*> (o .:? "issue" .!= mempty))
+
+instance ToJSON VolumeseriesInfoVolumeSeriesItem
+         where
+        toJSON VolumeseriesInfoVolumeSeriesItem'{..}
+          = object
+              (catMaybes
+                 [("seriesId" .=) <$> _vivsiSeriesId,
+                  ("seriesBookType" .=) <$> _vivsiSeriesBookType,
+                  ("orderNumber" .=) <$> _vivsiOrderNumber,
+                  ("issue" .=) <$> _vivsiIssue])
+
+-- | User settings in sub-objects, each for different purposes.
+--
+-- /See:/ 'userSettingsNotesExport' smart constructor.
+data UserSettingsNotesExport = UserSettingsNotesExport'
+    { _usneFolderName :: !(Maybe Text)
+    , _usneIsEnabled  :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UserSettingsNotesExport' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'usneFolderName'
+--
+-- * 'usneIsEnabled'
+userSettingsNotesExport
+    :: UserSettingsNotesExport
+userSettingsNotesExport =
+    UserSettingsNotesExport'
+    { _usneFolderName = Nothing
+    , _usneIsEnabled = Nothing
+    }
+
+usneFolderName :: Lens' UserSettingsNotesExport (Maybe Text)
+usneFolderName
+  = lens _usneFolderName
+      (\ s a -> s{_usneFolderName = a})
+
+usneIsEnabled :: Lens' UserSettingsNotesExport (Maybe Bool)
+usneIsEnabled
+  = lens _usneIsEnabled
+      (\ s a -> s{_usneIsEnabled = a})
+
+instance FromJSON UserSettingsNotesExport where
+        parseJSON
+          = withObject "UserSettingsNotesExport"
+              (\ o ->
+                 UserSettingsNotesExport' <$>
+                   (o .:? "folderName") <*> (o .:? "isEnabled"))
+
+instance ToJSON UserSettingsNotesExport where
+        toJSON UserSettingsNotesExport'{..}
+          = object
+              (catMaybes
+                 [("folderName" .=) <$> _usneFolderName,
+                  ("isEnabled" .=) <$> _usneIsEnabled])
+
+--
+-- /See:/ 'concurrentAccessRestriction' smart constructor.
+data ConcurrentAccessRestriction = ConcurrentAccessRestriction'
+    { _carMaxConcurrentDevices :: !(Maybe (Textual Int32))
+    , _carSignature            :: !(Maybe Text)
+    , _carTimeWindowSeconds    :: !(Maybe (Textual Int32))
+    , _carKind                 :: !Text
+    , _carReasonCode           :: !(Maybe Text)
+    , _carVolumeId             :: !(Maybe Text)
+    , _carRestricted           :: !(Maybe Bool)
+    , _carSource               :: !(Maybe Text)
+    , _carDeviceAllowed        :: !(Maybe Bool)
+    , _carMessage              :: !(Maybe Text)
+    , _carNonce                :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ConcurrentAccessRestriction' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'carMaxConcurrentDevices'
+--
+-- * 'carSignature'
+--
+-- * 'carTimeWindowSeconds'
+--
+-- * 'carKind'
+--
+-- * 'carReasonCode'
+--
+-- * 'carVolumeId'
+--
+-- * 'carRestricted'
+--
+-- * 'carSource'
+--
+-- * 'carDeviceAllowed'
+--
+-- * 'carMessage'
+--
+-- * 'carNonce'
+concurrentAccessRestriction
+    :: ConcurrentAccessRestriction
+concurrentAccessRestriction =
+    ConcurrentAccessRestriction'
+    { _carMaxConcurrentDevices = Nothing
+    , _carSignature = Nothing
+    , _carTimeWindowSeconds = Nothing
+    , _carKind = "books#concurrentAccessRestriction"
+    , _carReasonCode = Nothing
+    , _carVolumeId = Nothing
+    , _carRestricted = Nothing
+    , _carSource = Nothing
+    , _carDeviceAllowed = Nothing
+    , _carMessage = Nothing
+    , _carNonce = Nothing
+    }
+
+-- | The maximum number of concurrent access licenses for this volume.
+carMaxConcurrentDevices :: Lens' ConcurrentAccessRestriction (Maybe Int32)
+carMaxConcurrentDevices
+  = lens _carMaxConcurrentDevices
+      (\ s a -> s{_carMaxConcurrentDevices = a})
+      . mapping _Coerce
+
+-- | Response signature.
+carSignature :: Lens' ConcurrentAccessRestriction (Maybe Text)
+carSignature
+  = lens _carSignature (\ s a -> s{_carSignature = a})
+
+-- | Time in seconds for license auto-expiration.
+carTimeWindowSeconds :: Lens' ConcurrentAccessRestriction (Maybe Int32)
+carTimeWindowSeconds
+  = lens _carTimeWindowSeconds
+      (\ s a -> s{_carTimeWindowSeconds = a})
+      . mapping _Coerce
+
+-- | Resource type.
+carKind :: Lens' ConcurrentAccessRestriction Text
+carKind = lens _carKind (\ s a -> s{_carKind = a})
+
+-- | Error\/warning reason code.
+carReasonCode :: Lens' ConcurrentAccessRestriction (Maybe Text)
+carReasonCode
+  = lens _carReasonCode
+      (\ s a -> s{_carReasonCode = a})
+
+-- | Identifies the volume for which this entry applies.
+carVolumeId :: Lens' ConcurrentAccessRestriction (Maybe Text)
+carVolumeId
+  = lens _carVolumeId (\ s a -> s{_carVolumeId = a})
+
+-- | Whether this volume has any concurrent access restrictions.
+carRestricted :: Lens' ConcurrentAccessRestriction (Maybe Bool)
+carRestricted
+  = lens _carRestricted
+      (\ s a -> s{_carRestricted = a})
+
+-- | Client app identifier for verification. Download access and
+-- client-validation only.
+carSource :: Lens' ConcurrentAccessRestriction (Maybe Text)
+carSource
+  = lens _carSource (\ s a -> s{_carSource = a})
+
+-- | Whether access is granted for this (user, device, volume).
+carDeviceAllowed :: Lens' ConcurrentAccessRestriction (Maybe Bool)
+carDeviceAllowed
+  = lens _carDeviceAllowed
+      (\ s a -> s{_carDeviceAllowed = a})
+
+-- | Error\/warning message.
+carMessage :: Lens' ConcurrentAccessRestriction (Maybe Text)
+carMessage
+  = lens _carMessage (\ s a -> s{_carMessage = a})
+
+-- | Client nonce for verification. Download access and client-validation
+-- only.
+carNonce :: Lens' ConcurrentAccessRestriction (Maybe Text)
+carNonce = lens _carNonce (\ s a -> s{_carNonce = a})
+
+instance FromJSON ConcurrentAccessRestriction where
+        parseJSON
+          = withObject "ConcurrentAccessRestriction"
+              (\ o ->
+                 ConcurrentAccessRestriction' <$>
+                   (o .:? "maxConcurrentDevices") <*>
+                     (o .:? "signature")
+                     <*> (o .:? "timeWindowSeconds")
+                     <*>
+                     (o .:? "kind" .!=
+                        "books#concurrentAccessRestriction")
+                     <*> (o .:? "reasonCode")
+                     <*> (o .:? "volumeId")
+                     <*> (o .:? "restricted")
+                     <*> (o .:? "source")
+                     <*> (o .:? "deviceAllowed")
+                     <*> (o .:? "message")
+                     <*> (o .:? "nonce"))
+
+instance ToJSON ConcurrentAccessRestriction where
+        toJSON ConcurrentAccessRestriction'{..}
+          = object
+              (catMaybes
+                 [("maxConcurrentDevices" .=) <$>
+                    _carMaxConcurrentDevices,
+                  ("signature" .=) <$> _carSignature,
+                  ("timeWindowSeconds" .=) <$> _carTimeWindowSeconds,
+                  Just ("kind" .= _carKind),
+                  ("reasonCode" .=) <$> _carReasonCode,
+                  ("volumeId" .=) <$> _carVolumeId,
+                  ("restricted" .=) <$> _carRestricted,
+                  ("source" .=) <$> _carSource,
+                  ("deviceAllowed" .=) <$> _carDeviceAllowed,
+                  ("message" .=) <$> _carMessage,
+                  ("nonce" .=) <$> _carNonce])
+
+--
+-- /See:/ 'volumes' smart constructor.
+data Volumes = Volumes'
+    { _v1TotalItems :: !(Maybe (Textual Int32))
+    , _v1Kind       :: !Text
+    , _v1Items      :: !(Maybe [Volume])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Volumes' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'v1TotalItems'
+--
+-- * 'v1Kind'
+--
+-- * 'v1Items'
+volumes
+    :: Volumes
+volumes =
+    Volumes'
+    { _v1TotalItems = Nothing
+    , _v1Kind = "books#volumes"
+    , _v1Items = Nothing
+    }
+
+-- | Total number of volumes found. This might be greater than the number of
+-- volumes returned in this response if results have been paginated.
+v1TotalItems :: Lens' Volumes (Maybe Int32)
+v1TotalItems
+  = lens _v1TotalItems (\ s a -> s{_v1TotalItems = a})
+      . mapping _Coerce
+
+-- | Resource type.
+v1Kind :: Lens' Volumes Text
+v1Kind = lens _v1Kind (\ s a -> s{_v1Kind = a})
+
+-- | A list of volumes.
+v1Items :: Lens' Volumes [Volume]
+v1Items
+  = lens _v1Items (\ s a -> s{_v1Items = a}) . _Default
+      . _Coerce
+
+instance FromJSON Volumes where
+        parseJSON
+          = withObject "Volumes"
+              (\ o ->
+                 Volumes' <$>
+                   (o .:? "totalItems") <*>
+                     (o .:? "kind" .!= "books#volumes")
+                     <*> (o .:? "items" .!= mempty))
+
+instance ToJSON Volumes where
+        toJSON Volumes'{..}
+          = object
+              (catMaybes
+                 [("totalItems" .=) <$> _v1TotalItems,
+                  Just ("kind" .= _v1Kind), ("items" .=) <$> _v1Items])
+
+--
+-- /See:/ 'bookshelves' smart constructor.
+data Bookshelves = Bookshelves'
+    { _booKind  :: !Text
+    , _booItems :: !(Maybe [Bookshelf])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Bookshelves' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'booKind'
+--
+-- * 'booItems'
+bookshelves
+    :: Bookshelves
+bookshelves =
+    Bookshelves'
+    { _booKind = "books#bookshelves"
+    , _booItems = Nothing
+    }
+
+-- | Resource type.
+booKind :: Lens' Bookshelves Text
+booKind = lens _booKind (\ s a -> s{_booKind = a})
+
+-- | A list of bookshelves.
+booItems :: Lens' Bookshelves [Bookshelf]
+booItems
+  = lens _booItems (\ s a -> s{_booItems = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON Bookshelves where
+        parseJSON
+          = withObject "Bookshelves"
+              (\ o ->
+                 Bookshelves' <$>
+                   (o .:? "kind" .!= "books#bookshelves") <*>
+                     (o .:? "items" .!= mempty))
+
+instance ToJSON Bookshelves where
+        toJSON Bookshelves'{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _booKind),
+                  ("items" .=) <$> _booItems])
+
+-- | The source, url and attribution for this dictionary data.
+--
+-- /See:/ 'dictlayerDataDictSource' smart constructor.
+data DictlayerDataDictSource = DictlayerDataDictSource'
+    { _dddsURL         :: !(Maybe Text)
+    , _dddsAttribution :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DictlayerDataDictSource' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dddsURL'
+--
+-- * 'dddsAttribution'
+dictlayerDataDictSource
+    :: DictlayerDataDictSource
+dictlayerDataDictSource =
+    DictlayerDataDictSource'
+    { _dddsURL = Nothing
+    , _dddsAttribution = Nothing
+    }
+
+dddsURL :: Lens' DictlayerDataDictSource (Maybe Text)
+dddsURL = lens _dddsURL (\ s a -> s{_dddsURL = a})
+
+dddsAttribution :: Lens' DictlayerDataDictSource (Maybe Text)
+dddsAttribution
+  = lens _dddsAttribution
+      (\ s a -> s{_dddsAttribution = a})
+
+instance FromJSON DictlayerDataDictSource where
+        parseJSON
+          = withObject "DictlayerDataDictSource"
+              (\ o ->
+                 DictlayerDataDictSource' <$>
+                   (o .:? "url") <*> (o .:? "attribution"))
+
+instance ToJSON DictlayerDataDictSource where
+        toJSON DictlayerDataDictSource'{..}
+          = object
+              (catMaybes
+                 [("url" .=) <$> _dddsURL,
+                  ("attribution" .=) <$> _dddsAttribution])
+
+--
+-- /See:/ 'downloadAccesses' smart constructor.
+data DownloadAccesses = DownloadAccesses'
+    { _daKind               :: !Text
+    , _daDownloadAccessList :: !(Maybe [DownloadAccessRestriction])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DownloadAccesses' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'daKind'
+--
+-- * 'daDownloadAccessList'
+downloadAccesses
+    :: DownloadAccesses
+downloadAccesses =
+    DownloadAccesses'
+    { _daKind = "books#downloadAccesses"
+    , _daDownloadAccessList = Nothing
+    }
+
+-- | Resource type.
+daKind :: Lens' DownloadAccesses Text
+daKind = lens _daKind (\ s a -> s{_daKind = a})
+
+-- | A list of download access responses.
+daDownloadAccessList :: Lens' DownloadAccesses [DownloadAccessRestriction]
+daDownloadAccessList
+  = lens _daDownloadAccessList
+      (\ s a -> s{_daDownloadAccessList = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON DownloadAccesses where
+        parseJSON
+          = withObject "DownloadAccesses"
+              (\ o ->
+                 DownloadAccesses' <$>
+                   (o .:? "kind" .!= "books#downloadAccesses") <*>
+                     (o .:? "downloadAccessList" .!= mempty))
+
+instance ToJSON DownloadAccesses where
+        toJSON DownloadAccesses'{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _daKind),
+                  ("downloadAccessList" .=) <$> _daDownloadAccessList])
+
+--
+-- /See:/ 'geolayerDataGeoViewportHi' smart constructor.
+data GeolayerDataGeoViewportHi = GeolayerDataGeoViewportHi'
+    { _gdgvhLatitude  :: !(Maybe (Textual Double))
+    , _gdgvhLongitude :: !(Maybe (Textual Double))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GeolayerDataGeoViewportHi' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gdgvhLatitude'
+--
+-- * 'gdgvhLongitude'
+geolayerDataGeoViewportHi
+    :: GeolayerDataGeoViewportHi
+geolayerDataGeoViewportHi =
+    GeolayerDataGeoViewportHi'
+    { _gdgvhLatitude = Nothing
+    , _gdgvhLongitude = Nothing
+    }
+
+gdgvhLatitude :: Lens' GeolayerDataGeoViewportHi (Maybe Double)
+gdgvhLatitude
+  = lens _gdgvhLatitude
+      (\ s a -> s{_gdgvhLatitude = a})
+      . mapping _Coerce
+
+gdgvhLongitude :: Lens' GeolayerDataGeoViewportHi (Maybe Double)
+gdgvhLongitude
+  = lens _gdgvhLongitude
+      (\ s a -> s{_gdgvhLongitude = a})
+      . mapping _Coerce
+
+instance FromJSON GeolayerDataGeoViewportHi where
+        parseJSON
+          = withObject "GeolayerDataGeoViewportHi"
+              (\ o ->
+                 GeolayerDataGeoViewportHi' <$>
+                   (o .:? "latitude") <*> (o .:? "longitude"))
+
+instance ToJSON GeolayerDataGeoViewportHi where
+        toJSON GeolayerDataGeoViewportHi'{..}
+          = object
+              (catMaybes
+                 [("latitude" .=) <$> _gdgvhLatitude,
+                  ("longitude" .=) <$> _gdgvhLongitude])
+
+-- | General volume information.
+--
+-- /See:/ 'volumeVolumeInfo' smart constructor.
+data VolumeVolumeInfo = VolumeVolumeInfo'
+    { _vviImageLinks          :: !(Maybe VolumeVolumeInfoImageLinks)
+    , _vviAverageRating       :: !(Maybe (Textual Double))
+    , _vviRatingsCount        :: !(Maybe (Textual Int32))
+    , _vviCanonicalVolumeLink :: !(Maybe Text)
+    , _vviReadingModes        :: !(Maybe JSONValue)
+    , _vviIndustryIdentifiers :: !(Maybe [VolumeVolumeInfoIndustryIdentifiersItem])
+    , _vviSeriesInfo          :: !(Maybe VolumeseriesInfo)
+    , _vviPrintedPageCount    :: !(Maybe (Textual Int32))
+    , _vviMainCategory        :: !(Maybe Text)
+    , _vviContentVersion      :: !(Maybe Text)
+    , _vviSamplePageCount     :: !(Maybe (Textual Int32))
+    , _vviCategories          :: !(Maybe [Text])
+    , _vviAuthors             :: !(Maybe [Text])
+    , _vviAllowAnonLogging    :: !(Maybe Bool)
+    , _vviSubtitle            :: !(Maybe Text)
+    , _vviPublishedDate       :: !(Maybe Text)
+    , _vviMaturityRating      :: !(Maybe Text)
+    , _vviPreviewLink         :: !(Maybe Text)
+    , _vviLanguage            :: !(Maybe Text)
+    , _vviTitle               :: !(Maybe Text)
+    , _vviPageCount           :: !(Maybe (Textual Int32))
+    , _vviDimensions          :: !(Maybe VolumeVolumeInfoDimensions)
+    , _vviInfoLink            :: !(Maybe Text)
+    , _vviPublisher           :: !(Maybe Text)
+    , _vviDescription         :: !(Maybe Text)
+    , _vviPrintType           :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumeVolumeInfo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vviImageLinks'
+--
+-- * 'vviAverageRating'
+--
+-- * 'vviRatingsCount'
+--
+-- * 'vviCanonicalVolumeLink'
+--
+-- * 'vviReadingModes'
+--
+-- * 'vviIndustryIdentifiers'
+--
+-- * 'vviSeriesInfo'
+--
+-- * 'vviPrintedPageCount'
+--
+-- * 'vviMainCategory'
+--
+-- * 'vviContentVersion'
+--
+-- * 'vviSamplePageCount'
+--
+-- * 'vviCategories'
+--
+-- * 'vviAuthors'
+--
+-- * 'vviAllowAnonLogging'
+--
+-- * 'vviSubtitle'
+--
+-- * 'vviPublishedDate'
+--
+-- * 'vviMaturityRating'
+--
+-- * 'vviPreviewLink'
+--
+-- * 'vviLanguage'
+--
+-- * 'vviTitle'
+--
+-- * 'vviPageCount'
+--
+-- * 'vviDimensions'
+--
+-- * 'vviInfoLink'
+--
+-- * 'vviPublisher'
+--
+-- * 'vviDescription'
+--
+-- * 'vviPrintType'
+volumeVolumeInfo
+    :: VolumeVolumeInfo
+volumeVolumeInfo =
+    VolumeVolumeInfo'
+    { _vviImageLinks = Nothing
+    , _vviAverageRating = Nothing
+    , _vviRatingsCount = Nothing
+    , _vviCanonicalVolumeLink = Nothing
+    , _vviReadingModes = Nothing
+    , _vviIndustryIdentifiers = Nothing
+    , _vviSeriesInfo = Nothing
+    , _vviPrintedPageCount = Nothing
+    , _vviMainCategory = Nothing
+    , _vviContentVersion = Nothing
+    , _vviSamplePageCount = Nothing
+    , _vviCategories = Nothing
+    , _vviAuthors = Nothing
+    , _vviAllowAnonLogging = Nothing
+    , _vviSubtitle = Nothing
+    , _vviPublishedDate = Nothing
+    , _vviMaturityRating = Nothing
+    , _vviPreviewLink = Nothing
+    , _vviLanguage = Nothing
+    , _vviTitle = Nothing
+    , _vviPageCount = Nothing
+    , _vviDimensions = Nothing
+    , _vviInfoLink = Nothing
+    , _vviPublisher = Nothing
+    , _vviDescription = Nothing
+    , _vviPrintType = Nothing
+    }
+
+-- | A list of image links for all the sizes that are available. (In LITE
+-- projection.)
+vviImageLinks :: Lens' VolumeVolumeInfo (Maybe VolumeVolumeInfoImageLinks)
+vviImageLinks
+  = lens _vviImageLinks
+      (\ s a -> s{_vviImageLinks = a})
+
+-- | The mean review rating for this volume. (min = 1.0, max = 5.0)
+vviAverageRating :: Lens' VolumeVolumeInfo (Maybe Double)
+vviAverageRating
+  = lens _vviAverageRating
+      (\ s a -> s{_vviAverageRating = a})
+      . mapping _Coerce
+
+-- | The number of review ratings for this volume.
+vviRatingsCount :: Lens' VolumeVolumeInfo (Maybe Int32)
+vviRatingsCount
+  = lens _vviRatingsCount
+      (\ s a -> s{_vviRatingsCount = a})
+      . mapping _Coerce
+
+-- | Canonical URL for a volume. (In LITE projection.)
+vviCanonicalVolumeLink :: Lens' VolumeVolumeInfo (Maybe Text)
+vviCanonicalVolumeLink
+  = lens _vviCanonicalVolumeLink
+      (\ s a -> s{_vviCanonicalVolumeLink = a})
+
+-- | The reading modes available for this volume.
+vviReadingModes :: Lens' VolumeVolumeInfo (Maybe JSONValue)
+vviReadingModes
+  = lens _vviReadingModes
+      (\ s a -> s{_vviReadingModes = a})
+
+-- | Industry standard identifiers for this volume.
+vviIndustryIdentifiers :: Lens' VolumeVolumeInfo [VolumeVolumeInfoIndustryIdentifiersItem]
+vviIndustryIdentifiers
+  = lens _vviIndustryIdentifiers
+      (\ s a -> s{_vviIndustryIdentifiers = a})
+      . _Default
+      . _Coerce
+
+vviSeriesInfo :: Lens' VolumeVolumeInfo (Maybe VolumeseriesInfo)
+vviSeriesInfo
+  = lens _vviSeriesInfo
+      (\ s a -> s{_vviSeriesInfo = a})
+
+-- | Total number of printed pages in generated pdf representation.
+vviPrintedPageCount :: Lens' VolumeVolumeInfo (Maybe Int32)
+vviPrintedPageCount
+  = lens _vviPrintedPageCount
+      (\ s a -> s{_vviPrintedPageCount = a})
+      . mapping _Coerce
+
+-- | The main category to which this volume belongs. It will be the category
+-- from the categories list returned below that has the highest weight.
+vviMainCategory :: Lens' VolumeVolumeInfo (Maybe Text)
+vviMainCategory
+  = lens _vviMainCategory
+      (\ s a -> s{_vviMainCategory = a})
+
+-- | An identifier for the version of the volume content (text & images). (In
+-- LITE projection)
+vviContentVersion :: Lens' VolumeVolumeInfo (Maybe Text)
+vviContentVersion
+  = lens _vviContentVersion
+      (\ s a -> s{_vviContentVersion = a})
+
+-- | Total number of sample pages as per publisher metadata.
+vviSamplePageCount :: Lens' VolumeVolumeInfo (Maybe Int32)
+vviSamplePageCount
+  = lens _vviSamplePageCount
+      (\ s a -> s{_vviSamplePageCount = a})
+      . mapping _Coerce
+
+-- | A list of subject categories, such as \"Fiction\", \"Suspense\", etc.
+vviCategories :: Lens' VolumeVolumeInfo [Text]
+vviCategories
+  = lens _vviCategories
+      (\ s a -> s{_vviCategories = a})
+      . _Default
+      . _Coerce
+
+-- | The names of the authors and\/or editors for this volume. (In LITE
+-- projection)
+vviAuthors :: Lens' VolumeVolumeInfo [Text]
+vviAuthors
+  = lens _vviAuthors (\ s a -> s{_vviAuthors = a}) .
+      _Default
+      . _Coerce
+
+-- | Whether anonymous logging should be allowed.
+vviAllowAnonLogging :: Lens' VolumeVolumeInfo (Maybe Bool)
+vviAllowAnonLogging
+  = lens _vviAllowAnonLogging
+      (\ s a -> s{_vviAllowAnonLogging = a})
+
+-- | Volume subtitle. (In LITE projection.)
+vviSubtitle :: Lens' VolumeVolumeInfo (Maybe Text)
+vviSubtitle
+  = lens _vviSubtitle (\ s a -> s{_vviSubtitle = a})
+
+-- | Date of publication. (In LITE projection.)
+vviPublishedDate :: Lens' VolumeVolumeInfo (Maybe Text)
+vviPublishedDate
+  = lens _vviPublishedDate
+      (\ s a -> s{_vviPublishedDate = a})
+
+vviMaturityRating :: Lens' VolumeVolumeInfo (Maybe Text)
+vviMaturityRating
+  = lens _vviMaturityRating
+      (\ s a -> s{_vviMaturityRating = a})
+
+-- | URL to preview this volume on the Google Books site.
+vviPreviewLink :: Lens' VolumeVolumeInfo (Maybe Text)
+vviPreviewLink
+  = lens _vviPreviewLink
+      (\ s a -> s{_vviPreviewLink = a})
+
+-- | Best language for this volume (based on content). It is the two-letter
+-- ISO 639-1 code such as \'fr\', \'en\', etc.
+vviLanguage :: Lens' VolumeVolumeInfo (Maybe Text)
+vviLanguage
+  = lens _vviLanguage (\ s a -> s{_vviLanguage = a})
+
+-- | Volume title. (In LITE projection.)
+vviTitle :: Lens' VolumeVolumeInfo (Maybe Text)
+vviTitle = lens _vviTitle (\ s a -> s{_vviTitle = a})
+
+-- | Total number of pages as per publisher metadata.
+vviPageCount :: Lens' VolumeVolumeInfo (Maybe Int32)
+vviPageCount
+  = lens _vviPageCount (\ s a -> s{_vviPageCount = a})
+      . mapping _Coerce
+
+-- | Physical dimensions of this volume.
+vviDimensions :: Lens' VolumeVolumeInfo (Maybe VolumeVolumeInfoDimensions)
+vviDimensions
+  = lens _vviDimensions
+      (\ s a -> s{_vviDimensions = a})
+
+-- | URL to view information about this volume on the Google Books site. (In
+-- LITE projection)
+vviInfoLink :: Lens' VolumeVolumeInfo (Maybe Text)
+vviInfoLink
+  = lens _vviInfoLink (\ s a -> s{_vviInfoLink = a})
+
+-- | Publisher of this volume. (In LITE projection.)
+vviPublisher :: Lens' VolumeVolumeInfo (Maybe Text)
+vviPublisher
+  = lens _vviPublisher (\ s a -> s{_vviPublisher = a})
+
+-- | A synopsis of the volume. The text of the description is formatted in
+-- HTML and includes simple formatting elements, such as b, i, and br tags.
+-- (In LITE projection.)
+vviDescription :: Lens' VolumeVolumeInfo (Maybe Text)
+vviDescription
+  = lens _vviDescription
+      (\ s a -> s{_vviDescription = a})
+
+-- | Type of publication of this volume. Possible values are BOOK or
+-- MAGAZINE.
+vviPrintType :: Lens' VolumeVolumeInfo (Maybe Text)
+vviPrintType
+  = lens _vviPrintType (\ s a -> s{_vviPrintType = a})
+
+instance FromJSON VolumeVolumeInfo where
+        parseJSON
+          = withObject "VolumeVolumeInfo"
+              (\ o ->
+                 VolumeVolumeInfo' <$>
+                   (o .:? "imageLinks") <*> (o .:? "averageRating") <*>
+                     (o .:? "ratingsCount")
+                     <*> (o .:? "canonicalVolumeLink")
+                     <*> (o .:? "readingModes")
+                     <*> (o .:? "industryIdentifiers" .!= mempty)
+                     <*> (o .:? "seriesInfo")
+                     <*> (o .:? "printedPageCount")
+                     <*> (o .:? "mainCategory")
+                     <*> (o .:? "contentVersion")
+                     <*> (o .:? "samplePageCount")
+                     <*> (o .:? "categories" .!= mempty)
+                     <*> (o .:? "authors" .!= mempty)
+                     <*> (o .:? "allowAnonLogging")
+                     <*> (o .:? "subtitle")
+                     <*> (o .:? "publishedDate")
+                     <*> (o .:? "maturityRating")
+                     <*> (o .:? "previewLink")
+                     <*> (o .:? "language")
+                     <*> (o .:? "title")
+                     <*> (o .:? "pageCount")
+                     <*> (o .:? "dimensions")
+                     <*> (o .:? "infoLink")
+                     <*> (o .:? "publisher")
+                     <*> (o .:? "description")
+                     <*> (o .:? "printType"))
+
+instance ToJSON VolumeVolumeInfo where
+        toJSON VolumeVolumeInfo'{..}
+          = object
+              (catMaybes
+                 [("imageLinks" .=) <$> _vviImageLinks,
+                  ("averageRating" .=) <$> _vviAverageRating,
+                  ("ratingsCount" .=) <$> _vviRatingsCount,
+                  ("canonicalVolumeLink" .=) <$>
+                    _vviCanonicalVolumeLink,
+                  ("readingModes" .=) <$> _vviReadingModes,
+                  ("industryIdentifiers" .=) <$>
+                    _vviIndustryIdentifiers,
+                  ("seriesInfo" .=) <$> _vviSeriesInfo,
+                  ("printedPageCount" .=) <$> _vviPrintedPageCount,
+                  ("mainCategory" .=) <$> _vviMainCategory,
+                  ("contentVersion" .=) <$> _vviContentVersion,
+                  ("samplePageCount" .=) <$> _vviSamplePageCount,
+                  ("categories" .=) <$> _vviCategories,
+                  ("authors" .=) <$> _vviAuthors,
+                  ("allowAnonLogging" .=) <$> _vviAllowAnonLogging,
+                  ("subtitle" .=) <$> _vviSubtitle,
+                  ("publishedDate" .=) <$> _vviPublishedDate,
+                  ("maturityRating" .=) <$> _vviMaturityRating,
+                  ("previewLink" .=) <$> _vviPreviewLink,
+                  ("language" .=) <$> _vviLanguage,
+                  ("title" .=) <$> _vviTitle,
+                  ("pageCount" .=) <$> _vviPageCount,
+                  ("dimensions" .=) <$> _vviDimensions,
+                  ("infoLink" .=) <$> _vviInfoLink,
+                  ("publisher" .=) <$> _vviPublisher,
+                  ("description" .=) <$> _vviDescription,
+                  ("printType" .=) <$> _vviPrintType])
+
+--
+-- /See:/ 'metadataItemsItem' smart constructor.
+data MetadataItemsItem = MetadataItemsItem'
+    { _miiSize         :: !(Maybe (Textual Int64))
+    , _miiVersion      :: !(Maybe (Textual Int64))
+    , _miiLanguage     :: !(Maybe Text)
+    , _miiDownloadURL  :: !(Maybe Text)
+    , _miiEncryptedKey :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MetadataItemsItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'miiSize'
+--
+-- * 'miiVersion'
+--
+-- * 'miiLanguage'
+--
+-- * 'miiDownloadURL'
+--
+-- * 'miiEncryptedKey'
+metadataItemsItem
+    :: MetadataItemsItem
+metadataItemsItem =
+    MetadataItemsItem'
+    { _miiSize = Nothing
+    , _miiVersion = Nothing
+    , _miiLanguage = Nothing
+    , _miiDownloadURL = Nothing
+    , _miiEncryptedKey = Nothing
+    }
+
+miiSize :: Lens' MetadataItemsItem (Maybe Int64)
+miiSize
+  = lens _miiSize (\ s a -> s{_miiSize = a}) .
+      mapping _Coerce
+
+miiVersion :: Lens' MetadataItemsItem (Maybe Int64)
+miiVersion
+  = lens _miiVersion (\ s a -> s{_miiVersion = a}) .
+      mapping _Coerce
+
+miiLanguage :: Lens' MetadataItemsItem (Maybe Text)
+miiLanguage
+  = lens _miiLanguage (\ s a -> s{_miiLanguage = a})
+
+miiDownloadURL :: Lens' MetadataItemsItem (Maybe Text)
+miiDownloadURL
+  = lens _miiDownloadURL
+      (\ s a -> s{_miiDownloadURL = a})
+
+miiEncryptedKey :: Lens' MetadataItemsItem (Maybe Text)
+miiEncryptedKey
+  = lens _miiEncryptedKey
+      (\ s a -> s{_miiEncryptedKey = a})
+
+instance FromJSON MetadataItemsItem where
+        parseJSON
+          = withObject "MetadataItemsItem"
+              (\ o ->
+                 MetadataItemsItem' <$>
+                   (o .:? "size") <*> (o .:? "version") <*>
+                     (o .:? "language")
+                     <*> (o .:? "download_url")
+                     <*> (o .:? "encrypted_key"))
+
+instance ToJSON MetadataItemsItem where
+        toJSON MetadataItemsItem'{..}
+          = object
+              (catMaybes
+                 [("size" .=) <$> _miiSize,
+                  ("version" .=) <$> _miiVersion,
+                  ("language" .=) <$> _miiLanguage,
+                  ("download_url" .=) <$> _miiDownloadURL,
+                  ("encrypted_key" .=) <$> _miiEncryptedKey])
+
+--
+-- /See:/ 'dictlayerDataDictWordsItemSensesItemSource' smart constructor.
+data DictlayerDataDictWordsItemSensesItemSource = DictlayerDataDictWordsItemSensesItemSource'
+    { _dddwisisURL         :: !(Maybe Text)
+    , _dddwisisAttribution :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DictlayerDataDictWordsItemSensesItemSource' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dddwisisURL'
+--
+-- * 'dddwisisAttribution'
+dictlayerDataDictWordsItemSensesItemSource
+    :: DictlayerDataDictWordsItemSensesItemSource
+dictlayerDataDictWordsItemSensesItemSource =
+    DictlayerDataDictWordsItemSensesItemSource'
+    { _dddwisisURL = Nothing
+    , _dddwisisAttribution = Nothing
+    }
+
+dddwisisURL :: Lens' DictlayerDataDictWordsItemSensesItemSource (Maybe Text)
+dddwisisURL
+  = lens _dddwisisURL (\ s a -> s{_dddwisisURL = a})
+
+dddwisisAttribution :: Lens' DictlayerDataDictWordsItemSensesItemSource (Maybe Text)
+dddwisisAttribution
+  = lens _dddwisisAttribution
+      (\ s a -> s{_dddwisisAttribution = a})
+
+instance FromJSON
+         DictlayerDataDictWordsItemSensesItemSource where
+        parseJSON
+          = withObject
+              "DictlayerDataDictWordsItemSensesItemSource"
+              (\ o ->
+                 DictlayerDataDictWordsItemSensesItemSource' <$>
+                   (o .:? "url") <*> (o .:? "attribution"))
+
+instance ToJSON
+         DictlayerDataDictWordsItemSensesItemSource where
+        toJSON
+          DictlayerDataDictWordsItemSensesItemSource'{..}
+          = object
+              (catMaybes
+                 [("url" .=) <$> _dddwisisURL,
+                  ("attribution" .=) <$> _dddwisisAttribution])
+
+-- | Offer retail (=discounted) price in Micros
+--
+-- /See:/ 'volumeSaleInfoOffersItemRetailPrice' smart constructor.
+data VolumeSaleInfoOffersItemRetailPrice = VolumeSaleInfoOffersItemRetailPrice'
+    { _vsioirpCurrencyCode   :: !(Maybe Text)
+    , _vsioirpAmountInMicros :: !(Maybe (Textual Double))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumeSaleInfoOffersItemRetailPrice' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vsioirpCurrencyCode'
+--
+-- * 'vsioirpAmountInMicros'
+volumeSaleInfoOffersItemRetailPrice
+    :: VolumeSaleInfoOffersItemRetailPrice
+volumeSaleInfoOffersItemRetailPrice =
+    VolumeSaleInfoOffersItemRetailPrice'
+    { _vsioirpCurrencyCode = Nothing
+    , _vsioirpAmountInMicros = Nothing
+    }
+
+vsioirpCurrencyCode :: Lens' VolumeSaleInfoOffersItemRetailPrice (Maybe Text)
+vsioirpCurrencyCode
+  = lens _vsioirpCurrencyCode
+      (\ s a -> s{_vsioirpCurrencyCode = a})
+
+vsioirpAmountInMicros :: Lens' VolumeSaleInfoOffersItemRetailPrice (Maybe Double)
+vsioirpAmountInMicros
+  = lens _vsioirpAmountInMicros
+      (\ s a -> s{_vsioirpAmountInMicros = a})
+      . mapping _Coerce
+
+instance FromJSON VolumeSaleInfoOffersItemRetailPrice
+         where
+        parseJSON
+          = withObject "VolumeSaleInfoOffersItemRetailPrice"
+              (\ o ->
+                 VolumeSaleInfoOffersItemRetailPrice' <$>
+                   (o .:? "currencyCode") <*> (o .:? "amountInMicros"))
+
+instance ToJSON VolumeSaleInfoOffersItemRetailPrice
+         where
+        toJSON VolumeSaleInfoOffersItemRetailPrice'{..}
+          = object
+              (catMaybes
+                 [("currencyCode" .=) <$> _vsioirpCurrencyCode,
+                  ("amountInMicros" .=) <$> _vsioirpAmountInMicros])
+
+-- | Information on the ability to share with the family.
+--
+-- /See:/ 'volumeUserInfoFamilySharing' smart constructor.
+data VolumeUserInfoFamilySharing = VolumeUserInfoFamilySharing'
+    { _vuifsFamilyRole             :: !(Maybe Text)
+    , _vuifsIsSharingAllowed       :: !(Maybe Bool)
+    , _vuifsIsSharingDisabledByFop :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumeUserInfoFamilySharing' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vuifsFamilyRole'
+--
+-- * 'vuifsIsSharingAllowed'
+--
+-- * 'vuifsIsSharingDisabledByFop'
+volumeUserInfoFamilySharing
+    :: VolumeUserInfoFamilySharing
+volumeUserInfoFamilySharing =
+    VolumeUserInfoFamilySharing'
+    { _vuifsFamilyRole = Nothing
+    , _vuifsIsSharingAllowed = Nothing
+    , _vuifsIsSharingDisabledByFop = Nothing
+    }
+
+-- | The role of the user in the family.
+vuifsFamilyRole :: Lens' VolumeUserInfoFamilySharing (Maybe Text)
+vuifsFamilyRole
+  = lens _vuifsFamilyRole
+      (\ s a -> s{_vuifsFamilyRole = a})
+
+-- | Whether or not this volume can be shared with the family by the user.
+-- This includes sharing eligibility of both the volume and the user. If
+-- the value is true, the user can initiate a family sharing action.
+vuifsIsSharingAllowed :: Lens' VolumeUserInfoFamilySharing (Maybe Bool)
+vuifsIsSharingAllowed
+  = lens _vuifsIsSharingAllowed
+      (\ s a -> s{_vuifsIsSharingAllowed = a})
+
+-- | Whether or not sharing this volume is temporarily disabled due to issues
+-- with the Family Wallet.
+vuifsIsSharingDisabledByFop :: Lens' VolumeUserInfoFamilySharing (Maybe Bool)
+vuifsIsSharingDisabledByFop
+  = lens _vuifsIsSharingDisabledByFop
+      (\ s a -> s{_vuifsIsSharingDisabledByFop = a})
+
+instance FromJSON VolumeUserInfoFamilySharing where
+        parseJSON
+          = withObject "VolumeUserInfoFamilySharing"
+              (\ o ->
+                 VolumeUserInfoFamilySharing' <$>
+                   (o .:? "familyRole") <*> (o .:? "isSharingAllowed")
+                     <*> (o .:? "isSharingDisabledByFop"))
+
+instance ToJSON VolumeUserInfoFamilySharing where
+        toJSON VolumeUserInfoFamilySharing'{..}
+          = object
+              (catMaybes
+                 [("familyRole" .=) <$> _vuifsFamilyRole,
+                  ("isSharingAllowed" .=) <$> _vuifsIsSharingAllowed,
+                  ("isSharingDisabledByFop" .=) <$>
+                    _vuifsIsSharingDisabledByFop])
+
+--
+-- /See:/ 'volumeVolumeInfoIndustryIdentifiersItem' smart constructor.
+data VolumeVolumeInfoIndustryIdentifiersItem = VolumeVolumeInfoIndustryIdentifiersItem'
+    { _vviiiiIdentifier :: !(Maybe Text)
+    , _vviiiiType       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumeVolumeInfoIndustryIdentifiersItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vviiiiIdentifier'
+--
+-- * 'vviiiiType'
+volumeVolumeInfoIndustryIdentifiersItem
+    :: VolumeVolumeInfoIndustryIdentifiersItem
+volumeVolumeInfoIndustryIdentifiersItem =
+    VolumeVolumeInfoIndustryIdentifiersItem'
+    { _vviiiiIdentifier = Nothing
+    , _vviiiiType = Nothing
+    }
+
+-- | Industry specific volume identifier.
+vviiiiIdentifier :: Lens' VolumeVolumeInfoIndustryIdentifiersItem (Maybe Text)
+vviiiiIdentifier
+  = lens _vviiiiIdentifier
+      (\ s a -> s{_vviiiiIdentifier = a})
+
+-- | Identifier type. Possible values are ISBN_10, ISBN_13, ISSN and OTHER.
+vviiiiType :: Lens' VolumeVolumeInfoIndustryIdentifiersItem (Maybe Text)
+vviiiiType
+  = lens _vviiiiType (\ s a -> s{_vviiiiType = a})
+
+instance FromJSON
+         VolumeVolumeInfoIndustryIdentifiersItem where
+        parseJSON
+          = withObject
+              "VolumeVolumeInfoIndustryIdentifiersItem"
+              (\ o ->
+                 VolumeVolumeInfoIndustryIdentifiersItem' <$>
+                   (o .:? "identifier") <*> (o .:? "type"))
+
+instance ToJSON
+         VolumeVolumeInfoIndustryIdentifiersItem where
+        toJSON VolumeVolumeInfoIndustryIdentifiersItem'{..}
+          = object
+              (catMaybes
+                 [("identifier" .=) <$> _vviiiiIdentifier,
+                  ("type" .=) <$> _vviiiiType])
+
+--
+-- /See:/ 'booksAnnotationsRange' smart constructor.
+data BooksAnnotationsRange = BooksAnnotationsRange'
+    { _barStartOffSet   :: !(Maybe Text)
+    , _barEndOffSet     :: !(Maybe Text)
+    , _barEndPosition   :: !(Maybe Text)
+    , _barStartPosition :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BooksAnnotationsRange' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'barStartOffSet'
+--
+-- * 'barEndOffSet'
+--
+-- * 'barEndPosition'
+--
+-- * 'barStartPosition'
+booksAnnotationsRange
+    :: BooksAnnotationsRange
+booksAnnotationsRange =
+    BooksAnnotationsRange'
+    { _barStartOffSet = Nothing
+    , _barEndOffSet = Nothing
+    , _barEndPosition = Nothing
+    , _barStartPosition = Nothing
+    }
+
+-- | The offset from the starting position.
+barStartOffSet :: Lens' BooksAnnotationsRange (Maybe Text)
+barStartOffSet
+  = lens _barStartOffSet
+      (\ s a -> s{_barStartOffSet = a})
+
+-- | The offset from the ending position.
+barEndOffSet :: Lens' BooksAnnotationsRange (Maybe Text)
+barEndOffSet
+  = lens _barEndOffSet (\ s a -> s{_barEndOffSet = a})
+
+-- | The ending position for the range.
+barEndPosition :: Lens' BooksAnnotationsRange (Maybe Text)
+barEndPosition
+  = lens _barEndPosition
+      (\ s a -> s{_barEndPosition = a})
+
+-- | The starting position for the range.
+barStartPosition :: Lens' BooksAnnotationsRange (Maybe Text)
+barStartPosition
+  = lens _barStartPosition
+      (\ s a -> s{_barStartPosition = a})
+
+instance FromJSON BooksAnnotationsRange where
+        parseJSON
+          = withObject "BooksAnnotationsRange"
+              (\ o ->
+                 BooksAnnotationsRange' <$>
+                   (o .:? "startOffset") <*> (o .:? "endOffset") <*>
+                     (o .:? "endPosition")
+                     <*> (o .:? "startPosition"))
+
+instance ToJSON BooksAnnotationsRange where
+        toJSON BooksAnnotationsRange'{..}
+          = object
+              (catMaybes
+                 [("startOffset" .=) <$> _barStartOffSet,
+                  ("endOffset" .=) <$> _barEndOffSet,
+                  ("endPosition" .=) <$> _barEndPosition,
+                  ("startPosition" .=) <$> _barStartPosition])
+
+--
+-- /See:/ 'layersummaries' smart constructor.
+data Layersummaries = Layersummaries'
+    { _layTotalItems :: !(Maybe (Textual Int32))
+    , _layKind       :: !Text
+    , _layItems      :: !(Maybe [Layersummary])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Layersummaries' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'layTotalItems'
+--
+-- * 'layKind'
+--
+-- * 'layItems'
+layersummaries
+    :: Layersummaries
+layersummaries =
+    Layersummaries'
+    { _layTotalItems = Nothing
+    , _layKind = "books#layersummaries"
+    , _layItems = Nothing
+    }
+
+-- | The total number of layer summaries found.
+layTotalItems :: Lens' Layersummaries (Maybe Int32)
+layTotalItems
+  = lens _layTotalItems
+      (\ s a -> s{_layTotalItems = a})
+      . mapping _Coerce
+
+-- | Resource type.
+layKind :: Lens' Layersummaries Text
+layKind = lens _layKind (\ s a -> s{_layKind = a})
+
+-- | A list of layer summary items.
+layItems :: Lens' Layersummaries [Layersummary]
+layItems
+  = lens _layItems (\ s a -> s{_layItems = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON Layersummaries where
+        parseJSON
+          = withObject "Layersummaries"
+              (\ o ->
+                 Layersummaries' <$>
+                   (o .:? "totalItems") <*>
+                     (o .:? "kind" .!= "books#layersummaries")
+                     <*> (o .:? "items" .!= mempty))
+
+instance ToJSON Layersummaries where
+        toJSON Layersummaries'{..}
           = object
               (catMaybes
                  [("totalItems" .=) <$> _layTotalItems,
diff --git a/gen/Network/Google/Books/Types/Sum.hs b/gen/Network/Google/Books/Types/Sum.hs
--- a/gen/Network/Google/Books/Types/Sum.hs
+++ b/gen/Network/Google/Books/Types/Sum.hs
@@ -8,7 +8,7 @@
 
 -- |
 -- Module      : Network.Google.Books.Types.Sum
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -26,18 +26,18 @@
     | Lite
       -- ^ @lite@
       -- Includes a subset of fields in volumeInfo and accessInfo.
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
 
 instance Hashable VolumesListProjection
 
-instance FromText VolumesListProjection where
-    fromText = \case
-        "full" -> Just Full
-        "lite" -> Just Lite
-        _ -> Nothing
+instance FromHttpApiData VolumesListProjection where
+    parseQueryParam = \case
+        "full" -> Right Full
+        "lite" -> Right Lite
+        x -> Left ("Unable to parse VolumesListProjection from: " <> x)
 
-instance ToText VolumesListProjection where
-    toText = \case
+instance ToHttpApiData VolumesListProjection where
+    toQueryParam = \case
         Full -> "full"
         Lite -> "lite"
 
@@ -55,18 +55,18 @@
     | MLBVLPLite
       -- ^ @lite@
       -- Includes a subset of fields in volumeInfo and accessInfo.
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
 
 instance Hashable MyLibraryBookshelvesVolumesListProjection
 
-instance FromText MyLibraryBookshelvesVolumesListProjection where
-    fromText = \case
-        "full" -> Just MLBVLPFull
-        "lite" -> Just MLBVLPLite
-        _ -> Nothing
+instance FromHttpApiData MyLibraryBookshelvesVolumesListProjection where
+    parseQueryParam = \case
+        "full" -> Right MLBVLPFull
+        "lite" -> Right MLBVLPLite
+        x -> Left ("Unable to parse MyLibraryBookshelvesVolumesListProjection from: " <> x)
 
-instance ToText MyLibraryBookshelvesVolumesListProjection where
-    toText = \case
+instance ToHttpApiData MyLibraryBookshelvesVolumesListProjection where
+    toQueryParam = \case
         MLBVLPFull -> "full"
         MLBVLPLite -> "lite"
 
@@ -84,18 +84,18 @@
     | Relevance
       -- ^ @relevance@
       -- Relevance to search terms.
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
 
 instance Hashable VolumesListOrderBy
 
-instance FromText VolumesListOrderBy where
-    fromText = \case
-        "newest" -> Just Newest
-        "relevance" -> Just Relevance
-        _ -> Nothing
+instance FromHttpApiData VolumesListOrderBy where
+    parseQueryParam = \case
+        "newest" -> Right Newest
+        "relevance" -> Right Relevance
+        x -> Left ("Unable to parse VolumesListOrderBy from: " <> x)
 
-instance ToText VolumesListOrderBy where
-    toText = \case
+instance ToHttpApiData VolumesListOrderBy where
+    toQueryParam = \case
         Newest -> "newest"
         Relevance -> "relevance"
 
@@ -113,18 +113,18 @@
     | NoRestrict
       -- ^ @no-restrict@
       -- Do not restrict based on user\'s library.
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
 
 instance Hashable VolumesListLibraryRestrict
 
-instance FromText VolumesListLibraryRestrict where
-    fromText = \case
-        "my-library" -> Just MyLibrary
-        "no-restrict" -> Just NoRestrict
-        _ -> Nothing
+instance FromHttpApiData VolumesListLibraryRestrict where
+    parseQueryParam = \case
+        "my-library" -> Right MyLibrary
+        "no-restrict" -> Right NoRestrict
+        x -> Left ("Unable to parse VolumesListLibraryRestrict from: " <> x)
 
-instance ToText VolumesListLibraryRestrict where
-    toText = \case
+instance ToHttpApiData VolumesListLibraryRestrict where
+    toQueryParam = \case
         MyLibrary -> "my-library"
         NoRestrict -> "no-restrict"
 
@@ -139,17 +139,17 @@
     = Onboarding
       -- ^ @ONBOARDING@
       -- Samples removed from the Onboarding flow.
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
 
 instance Hashable MyLibraryBookshelvesRemoveVolumeReason
 
-instance FromText MyLibraryBookshelvesRemoveVolumeReason where
-    fromText = \case
-        "ONBOARDING" -> Just Onboarding
-        _ -> Nothing
+instance FromHttpApiData MyLibraryBookshelvesRemoveVolumeReason where
+    parseQueryParam = \case
+        "ONBOARDING" -> Right Onboarding
+        x -> Left ("Unable to parse MyLibraryBookshelvesRemoveVolumeReason from: " <> x)
 
-instance ToText MyLibraryBookshelvesRemoveVolumeReason where
-    toText = \case
+instance ToHttpApiData MyLibraryBookshelvesRemoveVolumeReason where
+    toQueryParam = \case
         Onboarding -> "ONBOARDING"
 
 instance FromJSON MyLibraryBookshelvesRemoveVolumeReason where
@@ -167,18 +167,18 @@
     | NotMature
       -- ^ @not-mature@
       -- Show books which are rated not mature.
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
 
 instance Hashable OnboardingListCategoryVolumesMaxAllowedMaturityRating
 
-instance FromText OnboardingListCategoryVolumesMaxAllowedMaturityRating where
-    fromText = \case
-        "mature" -> Just Mature
-        "not-mature" -> Just NotMature
-        _ -> Nothing
+instance FromHttpApiData OnboardingListCategoryVolumesMaxAllowedMaturityRating where
+    parseQueryParam = \case
+        "mature" -> Right Mature
+        "not-mature" -> Right NotMature
+        x -> Left ("Unable to parse OnboardingListCategoryVolumesMaxAllowedMaturityRating from: " <> x)
 
-instance ToText OnboardingListCategoryVolumesMaxAllowedMaturityRating where
-    toText = \case
+instance ToHttpApiData OnboardingListCategoryVolumesMaxAllowedMaturityRating where
+    toQueryParam = \case
         Mature -> "mature"
         NotMature -> "not-mature"
 
@@ -193,17 +193,17 @@
     = Epub
       -- ^ @epub@
       -- All volumes with epub.
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
 
 instance Hashable VolumesListDownload
 
-instance FromText VolumesListDownload where
-    fromText = \case
-        "epub" -> Just Epub
-        _ -> Nothing
+instance FromHttpApiData VolumesListDownload where
+    parseQueryParam = \case
+        "epub" -> Right Epub
+        x -> Left ("Unable to parse VolumesListDownload from: " <> x)
 
-instance ToText VolumesListDownload where
-    toText = \case
+instance ToHttpApiData VolumesListDownload where
+    toQueryParam = \case
         Epub -> "epub"
 
 instance FromJSON VolumesListDownload where
@@ -220,18 +220,18 @@
     | VGPLite
       -- ^ @lite@
       -- Includes a subset of fields in volumeInfo and accessInfo.
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
 
 instance Hashable VolumesGetProjection
 
-instance FromText VolumesGetProjection where
-    fromText = \case
-        "full" -> Just VGPFull
-        "lite" -> Just VGPLite
-        _ -> Nothing
+instance FromHttpApiData VolumesGetProjection where
+    parseQueryParam = \case
+        "full" -> Right VGPFull
+        "lite" -> Right VGPLite
+        x -> Left ("Unable to parse VolumesGetProjection from: " <> x)
 
-instance ToText VolumesGetProjection where
-    toText = \case
+instance ToHttpApiData VolumesGetProjection where
+    toQueryParam = \case
         VGPFull -> "full"
         VGPLite -> "lite"
 
@@ -252,19 +252,19 @@
     | RelatedForPlay
       -- ^ @related-for-play@
       -- Related volumes for Play Store.
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
 
 instance Hashable VolumesAssociatedListAssociation
 
-instance FromText VolumesAssociatedListAssociation where
-    fromText = \case
-        "end-of-sample" -> Just EndOfSample
-        "end-of-volume" -> Just EndOfVolume
-        "related-for-play" -> Just RelatedForPlay
-        _ -> Nothing
+instance FromHttpApiData VolumesAssociatedListAssociation where
+    parseQueryParam = \case
+        "end-of-sample" -> Right EndOfSample
+        "end-of-volume" -> Right EndOfVolume
+        "related-for-play" -> Right RelatedForPlay
+        x -> Left ("Unable to parse VolumesAssociatedListAssociation from: " <> x)
 
-instance ToText VolumesAssociatedListAssociation where
-    toText = \case
+instance ToHttpApiData VolumesAssociatedListAssociation where
+    toQueryParam = \case
         EndOfSample -> "end-of-sample"
         EndOfVolume -> "end-of-volume"
         RelatedForPlay -> "related-for-play"
@@ -283,18 +283,18 @@
     | NotInterested
       -- ^ @NOT_INTERESTED@
       -- Rating indicating a negative dismissal of a volume.
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
 
 instance Hashable VolumesRecommendedRateRating
 
-instance FromText VolumesRecommendedRateRating where
-    fromText = \case
-        "HAVE_IT" -> Just HaveIt
-        "NOT_INTERESTED" -> Just NotInterested
-        _ -> Nothing
+instance FromHttpApiData VolumesRecommendedRateRating where
+    parseQueryParam = \case
+        "HAVE_IT" -> Right HaveIt
+        "NOT_INTERESTED" -> Right NotInterested
+        x -> Left ("Unable to parse VolumesRecommendedRateRating from: " <> x)
 
-instance ToText VolumesRecommendedRateRating where
-    toText = \case
+instance ToHttpApiData VolumesRecommendedRateRating where
+    toQueryParam = \case
         HaveIt -> "HAVE_IT"
         NotInterested -> "NOT_INTERESTED"
 
@@ -315,19 +315,19 @@
     | Running
       -- ^ @RUNNING@
       -- The volume processing is not completed.
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
 
 instance Hashable VolumesUserUploadedListProcessingState
 
-instance FromText VolumesUserUploadedListProcessingState where
-    fromText = \case
-        "COMPLETED_FAILED" -> Just CompletedFailed
-        "COMPLETED_SUCCESS" -> Just CompletedSuccess
-        "RUNNING" -> Just Running
-        _ -> Nothing
+instance FromHttpApiData VolumesUserUploadedListProcessingState where
+    parseQueryParam = \case
+        "COMPLETED_FAILED" -> Right CompletedFailed
+        "COMPLETED_SUCCESS" -> Right CompletedSuccess
+        "RUNNING" -> Right Running
+        x -> Left ("Unable to parse VolumesUserUploadedListProcessingState from: " <> x)
 
-instance ToText VolumesUserUploadedListProcessingState where
-    toText = \case
+instance ToHttpApiData VolumesUserUploadedListProcessingState where
+    toQueryParam = \case
         CompletedFailed -> "COMPLETED_FAILED"
         CompletedSuccess -> "COMPLETED_SUCCESS"
         Running -> "RUNNING"
@@ -343,17 +343,17 @@
     = Rentals
       -- ^ @RENTALS@
       -- Client supports rentals.
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
 
 instance Hashable MyConfigSyncVolumeLicensesFeatures
 
-instance FromText MyConfigSyncVolumeLicensesFeatures where
-    fromText = \case
-        "RENTALS" -> Just Rentals
-        _ -> Nothing
+instance FromHttpApiData MyConfigSyncVolumeLicensesFeatures where
+    parseQueryParam = \case
+        "RENTALS" -> Right Rentals
+        x -> Left ("Unable to parse MyConfigSyncVolumeLicensesFeatures from: " <> x)
 
-instance ToText MyConfigSyncVolumeLicensesFeatures where
-    toText = \case
+instance ToHttpApiData MyConfigSyncVolumeLicensesFeatures where
+    toQueryParam = \case
         Rentals -> "RENTALS"
 
 instance FromJSON MyConfigSyncVolumeLicensesFeatures where
@@ -371,18 +371,18 @@
     | VALMAMRNotMature
       -- ^ @not-mature@
       -- Show books which are rated not mature.
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
 
 instance Hashable VolumesAssociatedListMaxAllowedMaturityRating
 
-instance FromText VolumesAssociatedListMaxAllowedMaturityRating where
-    fromText = \case
-        "mature" -> Just VALMAMRMature
-        "not-mature" -> Just VALMAMRNotMature
-        _ -> Nothing
+instance FromHttpApiData VolumesAssociatedListMaxAllowedMaturityRating where
+    parseQueryParam = \case
+        "mature" -> Right VALMAMRMature
+        "not-mature" -> Right VALMAMRNotMature
+        x -> Left ("Unable to parse VolumesAssociatedListMaxAllowedMaturityRating from: " <> x)
 
-instance ToText VolumesAssociatedListMaxAllowedMaturityRating where
-    toText = \case
+instance ToHttpApiData VolumesAssociatedListMaxAllowedMaturityRating where
+    toQueryParam = \case
         VALMAMRMature -> "mature"
         VALMAMRNotMature -> "not-mature"
 
@@ -409,21 +409,21 @@
     | VLFPartial
       -- ^ @partial@
       -- Public able to see parts of text.
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
 
 instance Hashable VolumesListFilter
 
-instance FromText VolumesListFilter where
-    fromText = \case
-        "ebooks" -> Just VLFEbooks
-        "free-ebooks" -> Just VLFFreeEbooks
-        "full" -> Just VLFFull
-        "paid-ebooks" -> Just VLFPaidEbooks
-        "partial" -> Just VLFPartial
-        _ -> Nothing
+instance FromHttpApiData VolumesListFilter where
+    parseQueryParam = \case
+        "ebooks" -> Right VLFEbooks
+        "free-ebooks" -> Right VLFFreeEbooks
+        "full" -> Right VLFFull
+        "paid-ebooks" -> Right VLFPaidEbooks
+        "partial" -> Right VLFPartial
+        x -> Left ("Unable to parse VolumesListFilter from: " <> x)
 
-instance ToText VolumesListFilter where
-    toText = \case
+instance ToHttpApiData VolumesListFilter where
+    toQueryParam = \case
         VLFEbooks -> "ebooks"
         VLFFreeEbooks -> "free-ebooks"
         VLFFull -> "full"
@@ -445,18 +445,18 @@
     | VRLMAMRNotMature
       -- ^ @not-mature@
       -- Show books which are rated not mature.
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
 
 instance Hashable VolumesRecommendedListMaxAllowedMaturityRating
 
-instance FromText VolumesRecommendedListMaxAllowedMaturityRating where
-    fromText = \case
-        "mature" -> Just VRLMAMRMature
-        "not-mature" -> Just VRLMAMRNotMature
-        _ -> Nothing
+instance FromHttpApiData VolumesRecommendedListMaxAllowedMaturityRating where
+    parseQueryParam = \case
+        "mature" -> Right VRLMAMRMature
+        "not-mature" -> Right VRLMAMRNotMature
+        x -> Left ("Unable to parse VolumesRecommendedListMaxAllowedMaturityRating from: " <> x)
 
-instance ToText VolumesRecommendedListMaxAllowedMaturityRating where
-    toText = \case
+instance ToHttpApiData VolumesRecommendedListMaxAllowedMaturityRating where
+    toQueryParam = \case
         VRLMAMRMature -> "mature"
         VRLMAMRNotMature -> "not-mature"
 
@@ -477,19 +477,19 @@
     | MLBAVROnboarding
       -- ^ @ONBOARDING@
       -- Volumes added from the Onboarding flow.
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
 
 instance Hashable MyLibraryBookshelvesAddVolumeReason
 
-instance FromText MyLibraryBookshelvesAddVolumeReason where
-    fromText = \case
-        "IOS_PREX" -> Just MLBAVRIosPrex
-        "IOS_SEARCH" -> Just MLBAVRIosSearch
-        "ONBOARDING" -> Just MLBAVROnboarding
-        _ -> Nothing
+instance FromHttpApiData MyLibraryBookshelvesAddVolumeReason where
+    parseQueryParam = \case
+        "IOS_PREX" -> Right MLBAVRIosPrex
+        "IOS_SEARCH" -> Right MLBAVRIosSearch
+        "ONBOARDING" -> Right MLBAVROnboarding
+        x -> Left ("Unable to parse MyLibraryBookshelvesAddVolumeReason from: " <> x)
 
-instance ToText MyLibraryBookshelvesAddVolumeReason where
-    toText = \case
+instance ToHttpApiData MyLibraryBookshelvesAddVolumeReason where
+    toQueryParam = \case
         MLBAVRIosPrex -> "IOS_PREX"
         MLBAVRIosSearch -> "IOS_SEARCH"
         MLBAVROnboarding -> "ONBOARDING"
@@ -523,23 +523,23 @@
     | Uploaded
       -- ^ @UPLOADED@
       -- User uploaded books
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
 
 instance Hashable VolumesMybooksListAcquireMethod
 
-instance FromText VolumesMybooksListAcquireMethod where
-    fromText = \case
-        "PREORDERED" -> Just PreOrdered
-        "PREVIOUSLY_RENTED" -> Just PreviouslyRented
-        "PUBLIC_DOMAIN" -> Just PublicDomain
-        "PURCHASED" -> Just Purchased
-        "RENTED" -> Just Rented
-        "SAMPLE" -> Just Sample
-        "UPLOADED" -> Just Uploaded
-        _ -> Nothing
+instance FromHttpApiData VolumesMybooksListAcquireMethod where
+    parseQueryParam = \case
+        "PREORDERED" -> Right PreOrdered
+        "PREVIOUSLY_RENTED" -> Right PreviouslyRented
+        "PUBLIC_DOMAIN" -> Right PublicDomain
+        "PURCHASED" -> Right Purchased
+        "RENTED" -> Right Rented
+        "SAMPLE" -> Right Sample
+        "UPLOADED" -> Right Uploaded
+        x -> Left ("Unable to parse VolumesMybooksListAcquireMethod from: " <> x)
 
-instance ToText VolumesMybooksListAcquireMethod where
-    toText = \case
+instance ToHttpApiData VolumesMybooksListAcquireMethod where
+    toQueryParam = \case
         PreOrdered -> "PREORDERED"
         PreviouslyRented -> "PREVIOUSLY_RENTED"
         PublicDomain -> "PUBLIC_DOMAIN"
@@ -563,18 +563,18 @@
     | PGMAMRNotMature
       -- ^ @not-mature@
       -- Show books which are rated not mature.
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
 
 instance Hashable PersonalizedstreamGetMaxAllowedMaturityRating
 
-instance FromText PersonalizedstreamGetMaxAllowedMaturityRating where
-    fromText = \case
-        "mature" -> Just PGMAMRMature
-        "not-mature" -> Just PGMAMRNotMature
-        _ -> Nothing
+instance FromHttpApiData PersonalizedstreamGetMaxAllowedMaturityRating where
+    parseQueryParam = \case
+        "mature" -> Right PGMAMRMature
+        "not-mature" -> Right PGMAMRNotMature
+        x -> Left ("Unable to parse PersonalizedstreamGetMaxAllowedMaturityRating from: " <> x)
 
-instance ToText PersonalizedstreamGetMaxAllowedMaturityRating where
-    toText = \case
+instance ToHttpApiData PersonalizedstreamGetMaxAllowedMaturityRating where
+    toQueryParam = \case
         PGMAMRMature -> "mature"
         PGMAMRNotMature -> "not-mature"
 
@@ -595,19 +595,19 @@
     | Magazines
       -- ^ @magazines@
       -- Just magazines.
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
 
 instance Hashable VolumesListPrintType
 
-instance FromText VolumesListPrintType where
-    fromText = \case
-        "all" -> Just All
-        "books" -> Just Books
-        "magazines" -> Just Magazines
-        _ -> Nothing
+instance FromHttpApiData VolumesListPrintType where
+    parseQueryParam = \case
+        "all" -> Right All
+        "books" -> Right Books
+        "magazines" -> Right Magazines
+        x -> Left ("Unable to parse VolumesListPrintType from: " <> x)
 
-instance ToText VolumesListPrintType where
-    toText = \case
+instance ToHttpApiData VolumesListPrintType where
+    toQueryParam = \case
         All -> "all"
         Books -> "books"
         Magazines -> "magazines"
@@ -630,19 +630,19 @@
     | VMLPSRunning
       -- ^ @RUNNING@
       -- The volume processing is not completed.
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
 
 instance Hashable VolumesMybooksListProcessingState
 
-instance FromText VolumesMybooksListProcessingState where
-    fromText = \case
-        "COMPLETED_FAILED" -> Just VMLPSCompletedFailed
-        "COMPLETED_SUCCESS" -> Just VMLPSCompletedSuccess
-        "RUNNING" -> Just VMLPSRunning
-        _ -> Nothing
+instance FromHttpApiData VolumesMybooksListProcessingState where
+    parseQueryParam = \case
+        "COMPLETED_FAILED" -> Right VMLPSCompletedFailed
+        "COMPLETED_SUCCESS" -> Right VMLPSCompletedSuccess
+        "RUNNING" -> Right VMLPSRunning
+        x -> Left ("Unable to parse VolumesMybooksListProcessingState from: " <> x)
 
-instance ToText VolumesMybooksListProcessingState where
-    toText = \case
+instance ToHttpApiData VolumesMybooksListProcessingState where
+    toQueryParam = \case
         VMLPSCompletedFailed -> "COMPLETED_FAILED"
         VMLPSCompletedSuccess -> "COMPLETED_SUCCESS"
         VMLPSRunning -> "RUNNING"
@@ -665,19 +665,19 @@
     | Download
       -- ^ @DOWNLOAD@
       -- Offline download access license.
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
 
 instance Hashable MyConfigRequestAccessLicenseTypes
 
-instance FromText MyConfigRequestAccessLicenseTypes where
-    fromText = \case
-        "BOTH" -> Just Both
-        "CONCURRENT" -> Just Concurrent
-        "DOWNLOAD" -> Just Download
-        _ -> Nothing
+instance FromHttpApiData MyConfigRequestAccessLicenseTypes where
+    parseQueryParam = \case
+        "BOTH" -> Right Both
+        "CONCURRENT" -> Right Concurrent
+        "DOWNLOAD" -> Right Download
+        x -> Left ("Unable to parse MyConfigRequestAccessLicenseTypes from: " <> x)
 
-instance ToText MyConfigRequestAccessLicenseTypes where
-    toText = \case
+instance ToHttpApiData MyConfigRequestAccessLicenseTypes where
+    toQueryParam = \case
         Both -> "BOTH"
         Concurrent -> "CONCURRENT"
         Download -> "DOWNLOAD"
@@ -708,22 +708,22 @@
     | Search
       -- ^ @search@
       -- User chose search results within volume.
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
 
 instance Hashable MyLibraryReadingPositionsSetPositionAction
 
-instance FromText MyLibraryReadingPositionsSetPositionAction where
-    fromText = \case
-        "bookmark" -> Just Bookmark
-        "chapter" -> Just Chapter
-        "next-page" -> Just NextPage
-        "prev-page" -> Just PrevPage
-        "scroll" -> Just Scroll
-        "search" -> Just Search
-        _ -> Nothing
+instance FromHttpApiData MyLibraryReadingPositionsSetPositionAction where
+    parseQueryParam = \case
+        "bookmark" -> Right Bookmark
+        "chapter" -> Right Chapter
+        "next-page" -> Right NextPage
+        "prev-page" -> Right PrevPage
+        "scroll" -> Right Scroll
+        "search" -> Right Search
+        x -> Left ("Unable to parse MyLibraryReadingPositionsSetPositionAction from: " <> x)
 
-instance ToText MyLibraryReadingPositionsSetPositionAction where
-    toText = \case
+instance ToHttpApiData MyLibraryReadingPositionsSetPositionAction where
+    toQueryParam = \case
         Bookmark -> "bookmark"
         Chapter -> "chapter"
         NextPage -> "next-page"
diff --git a/gen/Network/Google/Resource/Books/Bookshelves/Get.hs b/gen/Network/Google/Resource/Books/Bookshelves/Get.hs
--- a/gen/Network/Google/Resource/Books/Bookshelves/Get.hs
+++ b/gen/Network/Google/Resource/Books/Bookshelves/Get.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Books.Bookshelves.Get
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -56,7 +56,7 @@
 -- | Retrieves metadata for a specific bookshelf for the specified user.
 --
 -- /See:/ 'bookshelvesGet' smart constructor.
-data BookshelvesGet = BookshelvesGet
+data BookshelvesGet = BookshelvesGet'
     { _bgUserId :: !Text
     , _bgShelf  :: !Text
     , _bgSource :: !(Maybe Text)
@@ -76,7 +76,7 @@
     -> Text -- ^ 'bgShelf'
     -> BookshelvesGet
 bookshelvesGet pBgUserId_ pBgShelf_ =
-    BookshelvesGet
+    BookshelvesGet'
     { _bgUserId = pBgUserId_
     , _bgShelf = pBgShelf_
     , _bgSource = Nothing
@@ -96,7 +96,9 @@
 
 instance GoogleRequest BookshelvesGet where
         type Rs BookshelvesGet = Bookshelf
-        requestClient BookshelvesGet{..}
+        type Scopes BookshelvesGet =
+             '["https://www.googleapis.com/auth/books"]
+        requestClient BookshelvesGet'{..}
           = go _bgUserId _bgShelf _bgSource (Just AltJSON)
               booksService
           where go
diff --git a/gen/Network/Google/Resource/Books/Bookshelves/List.hs b/gen/Network/Google/Resource/Books/Bookshelves/List.hs
--- a/gen/Network/Google/Resource/Books/Bookshelves/List.hs
+++ b/gen/Network/Google/Resource/Books/Bookshelves/List.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Books.Bookshelves.List
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -54,7 +54,7 @@
 -- | Retrieves a list of public bookshelves for the specified user.
 --
 -- /See:/ 'bookshelvesList' smart constructor.
-data BookshelvesList = BookshelvesList
+data BookshelvesList = BookshelvesList'
     { _blUserId :: !Text
     , _blSource :: !(Maybe Text)
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -70,7 +70,7 @@
     :: Text -- ^ 'blUserId'
     -> BookshelvesList
 bookshelvesList pBlUserId_ =
-    BookshelvesList
+    BookshelvesList'
     { _blUserId = pBlUserId_
     , _blSource = Nothing
     }
@@ -85,7 +85,9 @@
 
 instance GoogleRequest BookshelvesList where
         type Rs BookshelvesList = Bookshelves
-        requestClient BookshelvesList{..}
+        type Scopes BookshelvesList =
+             '["https://www.googleapis.com/auth/books"]
+        requestClient BookshelvesList'{..}
           = go _blUserId _blSource (Just AltJSON) booksService
           where go
                   = buildClient
diff --git a/gen/Network/Google/Resource/Books/Bookshelves/Volumes/List.hs b/gen/Network/Google/Resource/Books/Bookshelves/Volumes/List.hs
--- a/gen/Network/Google/Resource/Books/Bookshelves/Volumes/List.hs
+++ b/gen/Network/Google/Resource/Books/Bookshelves/Volumes/List.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Books.Bookshelves.Volumes.List
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -63,7 +63,7 @@
 -- | Retrieves volumes in a specific bookshelf for the specified user.
 --
 -- /See:/ 'bookshelvesVolumesList' smart constructor.
-data BookshelvesVolumesList = BookshelvesVolumesList
+data BookshelvesVolumesList = BookshelvesVolumesList'
     { _bvlUserId        :: !Text
     , _bvlShelf         :: !Text
     , _bvlSource        :: !(Maybe Text)
@@ -92,7 +92,7 @@
     -> Text -- ^ 'bvlShelf'
     -> BookshelvesVolumesList
 bookshelvesVolumesList pBvlUserId_ pBvlShelf_ =
-    BookshelvesVolumesList
+    BookshelvesVolumesList'
     { _bvlUserId = pBvlUserId_
     , _bvlShelf = pBvlShelf_
     , _bvlSource = Nothing
@@ -137,7 +137,9 @@
 
 instance GoogleRequest BookshelvesVolumesList where
         type Rs BookshelvesVolumesList = Volumes
-        requestClient BookshelvesVolumesList{..}
+        type Scopes BookshelvesVolumesList =
+             '["https://www.googleapis.com/auth/books"]
+        requestClient BookshelvesVolumesList'{..}
           = go _bvlUserId _bvlShelf _bvlSource _bvlStartIndex
               _bvlMaxResults
               _bvlShowPreOrders
diff --git a/gen/Network/Google/Resource/Books/CloudLoading/AddBook.hs b/gen/Network/Google/Resource/Books/CloudLoading/AddBook.hs
--- a/gen/Network/Google/Resource/Books/CloudLoading/AddBook.hs
+++ b/gen/Network/Google/Resource/Books/CloudLoading/AddBook.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Books.CloudLoading.AddBook
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -59,7 +59,7 @@
 -- |
 --
 -- /See:/ 'cloudLoadingAddBook' smart constructor.
-data CloudLoadingAddBook = CloudLoadingAddBook
+data CloudLoadingAddBook = CloudLoadingAddBook'
     { _clabMimeType          :: !(Maybe Text)
     , _clabUploadClientToken :: !(Maybe Text)
     , _clabName              :: !(Maybe Text)
@@ -80,7 +80,7 @@
 cloudLoadingAddBook
     :: CloudLoadingAddBook
 cloudLoadingAddBook =
-    CloudLoadingAddBook
+    CloudLoadingAddBook'
     { _clabMimeType = Nothing
     , _clabUploadClientToken = Nothing
     , _clabName = Nothing
@@ -111,7 +111,9 @@
 instance GoogleRequest CloudLoadingAddBook where
         type Rs CloudLoadingAddBook =
              BooksCloudLoadingResource
-        requestClient CloudLoadingAddBook{..}
+        type Scopes CloudLoadingAddBook =
+             '["https://www.googleapis.com/auth/books"]
+        requestClient CloudLoadingAddBook'{..}
           = go _clabMimeType _clabUploadClientToken _clabName
               _clabDriveDocumentId
               (Just AltJSON)
diff --git a/gen/Network/Google/Resource/Books/CloudLoading/DeleteBook.hs b/gen/Network/Google/Resource/Books/CloudLoading/DeleteBook.hs
--- a/gen/Network/Google/Resource/Books/CloudLoading/DeleteBook.hs
+++ b/gen/Network/Google/Resource/Books/CloudLoading/DeleteBook.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Books.CloudLoading.DeleteBook
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -52,7 +52,7 @@
 -- | Remove the book and its contents
 --
 -- /See:/ 'cloudLoadingDeleteBook' smart constructor.
-newtype CloudLoadingDeleteBook = CloudLoadingDeleteBook
+newtype CloudLoadingDeleteBook = CloudLoadingDeleteBook'
     { _cldbVolumeId :: Text
     } deriving (Eq,Show,Data,Typeable,Generic)
 
@@ -65,7 +65,7 @@
     :: Text -- ^ 'cldbVolumeId'
     -> CloudLoadingDeleteBook
 cloudLoadingDeleteBook pCldbVolumeId_ =
-    CloudLoadingDeleteBook
+    CloudLoadingDeleteBook'
     { _cldbVolumeId = pCldbVolumeId_
     }
 
@@ -76,7 +76,9 @@
 
 instance GoogleRequest CloudLoadingDeleteBook where
         type Rs CloudLoadingDeleteBook = ()
-        requestClient CloudLoadingDeleteBook{..}
+        type Scopes CloudLoadingDeleteBook =
+             '["https://www.googleapis.com/auth/books"]
+        requestClient CloudLoadingDeleteBook'{..}
           = go (Just _cldbVolumeId) (Just AltJSON) booksService
           where go
                   = buildClient
diff --git a/gen/Network/Google/Resource/Books/CloudLoading/UpdateBook.hs b/gen/Network/Google/Resource/Books/CloudLoading/UpdateBook.hs
--- a/gen/Network/Google/Resource/Books/CloudLoading/UpdateBook.hs
+++ b/gen/Network/Google/Resource/Books/CloudLoading/UpdateBook.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Books.CloudLoading.UpdateBook
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -53,7 +53,7 @@
 -- |
 --
 -- /See:/ 'cloudLoadingUpdateBook' smart constructor.
-newtype CloudLoadingUpdateBook = CloudLoadingUpdateBook
+newtype CloudLoadingUpdateBook = CloudLoadingUpdateBook'
     { _clubPayload :: BooksCloudLoadingResource
     } deriving (Eq,Show,Data,Typeable,Generic)
 
@@ -66,7 +66,7 @@
     :: BooksCloudLoadingResource -- ^ 'clubPayload'
     -> CloudLoadingUpdateBook
 cloudLoadingUpdateBook pClubPayload_ =
-    CloudLoadingUpdateBook
+    CloudLoadingUpdateBook'
     { _clubPayload = pClubPayload_
     }
 
@@ -78,7 +78,9 @@
 instance GoogleRequest CloudLoadingUpdateBook where
         type Rs CloudLoadingUpdateBook =
              BooksCloudLoadingResource
-        requestClient CloudLoadingUpdateBook{..}
+        type Scopes CloudLoadingUpdateBook =
+             '["https://www.googleapis.com/auth/books"]
+        requestClient CloudLoadingUpdateBook'{..}
           = go (Just AltJSON) _clubPayload booksService
           where go
                   = buildClient
diff --git a/gen/Network/Google/Resource/Books/Dictionary/ListOfflineMetadata.hs b/gen/Network/Google/Resource/Books/Dictionary/ListOfflineMetadata.hs
--- a/gen/Network/Google/Resource/Books/Dictionary/ListOfflineMetadata.hs
+++ b/gen/Network/Google/Resource/Books/Dictionary/ListOfflineMetadata.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Books.Dictionary.ListOfflineMetadata
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -52,7 +52,7 @@
 -- | Returns a list of offline dictionary metadata available
 --
 -- /See:/ 'dictionaryListOfflineMetadata' smart constructor.
-newtype DictionaryListOfflineMetadata = DictionaryListOfflineMetadata
+newtype DictionaryListOfflineMetadata = DictionaryListOfflineMetadata'
     { _dlomCpksver :: Text
     } deriving (Eq,Show,Data,Typeable,Generic)
 
@@ -65,7 +65,7 @@
     :: Text -- ^ 'dlomCpksver'
     -> DictionaryListOfflineMetadata
 dictionaryListOfflineMetadata pDlomCpksver_ =
-    DictionaryListOfflineMetadata
+    DictionaryListOfflineMetadata'
     { _dlomCpksver = pDlomCpksver_
     }
 
@@ -77,7 +77,9 @@
 instance GoogleRequest DictionaryListOfflineMetadata
          where
         type Rs DictionaryListOfflineMetadata = Metadata
-        requestClient DictionaryListOfflineMetadata{..}
+        type Scopes DictionaryListOfflineMetadata =
+             '["https://www.googleapis.com/auth/books"]
+        requestClient DictionaryListOfflineMetadata'{..}
           = go (Just _dlomCpksver) (Just AltJSON) booksService
           where go
                   = buildClient
diff --git a/gen/Network/Google/Resource/Books/Layers/AnnotationData/Get.hs b/gen/Network/Google/Resource/Books/Layers/AnnotationData/Get.hs
--- a/gen/Network/Google/Resource/Books/Layers/AnnotationData/Get.hs
+++ b/gen/Network/Google/Resource/Books/Layers/AnnotationData/Get.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Books.Layers.AnnotationData.Get
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -72,7 +72,7 @@
 -- | Gets the annotation data.
 --
 -- /See:/ 'layersAnnotationDataGet' smart constructor.
-data LayersAnnotationDataGet = LayersAnnotationDataGet
+data LayersAnnotationDataGet = LayersAnnotationDataGet'
     { _ladgW                   :: !(Maybe (Textual Int32))
     , _ladgScale               :: !(Maybe (Textual Int32))
     , _ladgLocale              :: !(Maybe Text)
@@ -115,7 +115,7 @@
     -> Text -- ^ 'ladgLayerId'
     -> LayersAnnotationDataGet
 layersAnnotationDataGet pLadgContentVersion_ pLadgAnnotationDataId_ pLadgVolumeId_ pLadgLayerId_ =
-    LayersAnnotationDataGet
+    LayersAnnotationDataGet'
     { _ladgW = Nothing
     , _ladgScale = Nothing
     , _ladgLocale = Nothing
@@ -189,7 +189,9 @@
 
 instance GoogleRequest LayersAnnotationDataGet where
         type Rs LayersAnnotationDataGet = AnnotationData
-        requestClient LayersAnnotationDataGet{..}
+        type Scopes LayersAnnotationDataGet =
+             '["https://www.googleapis.com/auth/books"]
+        requestClient LayersAnnotationDataGet'{..}
           = go _ladgVolumeId _ladgLayerId _ladgAnnotationDataId
               (Just _ladgContentVersion)
               _ladgW
diff --git a/gen/Network/Google/Resource/Books/Layers/AnnotationData/List.hs b/gen/Network/Google/Resource/Books/Layers/AnnotationData/List.hs
--- a/gen/Network/Google/Resource/Books/Layers/AnnotationData/List.hs
+++ b/gen/Network/Google/Resource/Books/Layers/AnnotationData/List.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Books.Layers.AnnotationData.List
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -79,7 +79,7 @@
 -- | Gets the annotation data for a volume and layer.
 --
 -- /See:/ 'layersAnnotationDataList' smart constructor.
-data LayersAnnotationDataList = LayersAnnotationDataList
+data LayersAnnotationDataList = LayersAnnotationDataList'
     { _ladlW                :: !(Maybe (Textual Int32))
     , _ladlScale            :: !(Maybe (Textual Int32))
     , _ladlLocale           :: !(Maybe Text)
@@ -130,7 +130,7 @@
     -> Text -- ^ 'ladlLayerId'
     -> LayersAnnotationDataList
 layersAnnotationDataList pLadlContentVersion_ pLadlVolumeId_ pLadlLayerId_ =
-    LayersAnnotationDataList
+    LayersAnnotationDataList'
     { _ladlW = Nothing
     , _ladlScale = Nothing
     , _ladlLocale = Nothing
@@ -231,7 +231,9 @@
 
 instance GoogleRequest LayersAnnotationDataList where
         type Rs LayersAnnotationDataList = AnnotationsData
-        requestClient LayersAnnotationDataList{..}
+        type Scopes LayersAnnotationDataList =
+             '["https://www.googleapis.com/auth/books"]
+        requestClient LayersAnnotationDataList'{..}
           = go _ladlVolumeId _ladlLayerId
               (Just _ladlContentVersion)
               _ladlW
diff --git a/gen/Network/Google/Resource/Books/Layers/Get.hs b/gen/Network/Google/Resource/Books/Layers/Get.hs
--- a/gen/Network/Google/Resource/Books/Layers/Get.hs
+++ b/gen/Network/Google/Resource/Books/Layers/Get.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Books.Layers.Get
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -58,7 +58,7 @@
 -- | Gets the layer summary for a volume.
 --
 -- /See:/ 'layersGet' smart constructor.
-data LayersGet = LayersGet
+data LayersGet = LayersGet'
     { _lgContentVersion :: !(Maybe Text)
     , _lgVolumeId       :: !Text
     , _lgSource         :: !(Maybe Text)
@@ -81,7 +81,7 @@
     -> Text -- ^ 'lgSummaryId'
     -> LayersGet
 layersGet pLgVolumeId_ pLgSummaryId_ =
-    LayersGet
+    LayersGet'
     { _lgContentVersion = Nothing
     , _lgVolumeId = pLgVolumeId_
     , _lgSource = Nothing
@@ -110,7 +110,9 @@
 
 instance GoogleRequest LayersGet where
         type Rs LayersGet = Layersummary
-        requestClient LayersGet{..}
+        type Scopes LayersGet =
+             '["https://www.googleapis.com/auth/books"]
+        requestClient LayersGet'{..}
           = go _lgVolumeId _lgSummaryId _lgContentVersion
               _lgSource
               (Just AltJSON)
diff --git a/gen/Network/Google/Resource/Books/Layers/List.hs b/gen/Network/Google/Resource/Books/Layers/List.hs
--- a/gen/Network/Google/Resource/Books/Layers/List.hs
+++ b/gen/Network/Google/Resource/Books/Layers/List.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Books.Layers.List
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -61,7 +61,7 @@
 -- | List the layer summaries for a volume.
 --
 -- /See:/ 'layersList' smart constructor.
-data LayersList = LayersList
+data LayersList = LayersList'
     { _llContentVersion :: !(Maybe Text)
     , _llVolumeId       :: !Text
     , _llSource         :: !(Maybe Text)
@@ -86,7 +86,7 @@
     :: Text -- ^ 'llVolumeId'
     -> LayersList
 layersList pLlVolumeId_ =
-    LayersList
+    LayersList'
     { _llContentVersion = Nothing
     , _llVolumeId = pLlVolumeId_
     , _llSource = Nothing
@@ -122,7 +122,9 @@
 
 instance GoogleRequest LayersList where
         type Rs LayersList = Layersummaries
-        requestClient LayersList{..}
+        type Scopes LayersList =
+             '["https://www.googleapis.com/auth/books"]
+        requestClient LayersList'{..}
           = go _llVolumeId _llContentVersion _llSource
               _llPageToken
               _llMaxResults
diff --git a/gen/Network/Google/Resource/Books/Layers/VolumeAnnotations/Get.hs b/gen/Network/Google/Resource/Books/Layers/VolumeAnnotations/Get.hs
--- a/gen/Network/Google/Resource/Books/Layers/VolumeAnnotations/Get.hs
+++ b/gen/Network/Google/Resource/Books/Layers/VolumeAnnotations/Get.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Books.Layers.VolumeAnnotations.Get
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -62,7 +62,7 @@
 -- | Gets the volume annotation.
 --
 -- /See:/ 'layersVolumeAnnotationsGet' smart constructor.
-data LayersVolumeAnnotationsGet = LayersVolumeAnnotationsGet
+data LayersVolumeAnnotationsGet = LayersVolumeAnnotationsGet'
     { _lvagLocale       :: !(Maybe Text)
     , _lvagAnnotationId :: !Text
     , _lvagVolumeId     :: !Text
@@ -89,7 +89,7 @@
     -> Text -- ^ 'lvagLayerId'
     -> LayersVolumeAnnotationsGet
 layersVolumeAnnotationsGet pLvagAnnotationId_ pLvagVolumeId_ pLvagLayerId_ =
-    LayersVolumeAnnotationsGet
+    LayersVolumeAnnotationsGet'
     { _lvagLocale = Nothing
     , _lvagAnnotationId = pLvagAnnotationId_
     , _lvagVolumeId = pLvagVolumeId_
@@ -127,7 +127,9 @@
 instance GoogleRequest LayersVolumeAnnotationsGet
          where
         type Rs LayersVolumeAnnotationsGet = Volumeannotation
-        requestClient LayersVolumeAnnotationsGet{..}
+        type Scopes LayersVolumeAnnotationsGet =
+             '["https://www.googleapis.com/auth/books"]
+        requestClient LayersVolumeAnnotationsGet'{..}
           = go _lvagVolumeId _lvagLayerId _lvagAnnotationId
               _lvagLocale
               _lvagSource
diff --git a/gen/Network/Google/Resource/Books/Layers/VolumeAnnotations/List.hs b/gen/Network/Google/Resource/Books/Layers/VolumeAnnotations/List.hs
--- a/gen/Network/Google/Resource/Books/Layers/VolumeAnnotations/List.hs
+++ b/gen/Network/Google/Resource/Books/Layers/VolumeAnnotations/List.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Books.Layers.VolumeAnnotations.List
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -82,7 +82,7 @@
 -- | Gets the volume annotations for a volume and layer.
 --
 -- /See:/ 'layersVolumeAnnotationsList' smart constructor.
-data LayersVolumeAnnotationsList = LayersVolumeAnnotationsList
+data LayersVolumeAnnotationsList = LayersVolumeAnnotationsList'
     { _lvalStartOffSet              :: !(Maybe Text)
     , _lvalLocale                   :: !(Maybe Text)
     , _lvalContentVersion           :: !Text
@@ -139,7 +139,7 @@
     -> Text -- ^ 'lvalLayerId'
     -> LayersVolumeAnnotationsList
 layersVolumeAnnotationsList pLvalContentVersion_ pLvalVolumeId_ pLvalLayerId_ =
-    LayersVolumeAnnotationsList
+    LayersVolumeAnnotationsList'
     { _lvalStartOffSet = Nothing
     , _lvalLocale = Nothing
     , _lvalContentVersion = pLvalContentVersion_
@@ -252,7 +252,9 @@
          where
         type Rs LayersVolumeAnnotationsList =
              Volumeannotations
-        requestClient LayersVolumeAnnotationsList{..}
+        type Scopes LayersVolumeAnnotationsList =
+             '["https://www.googleapis.com/auth/books"]
+        requestClient LayersVolumeAnnotationsList'{..}
           = go _lvalVolumeId _lvalLayerId
               (Just _lvalContentVersion)
               _lvalStartOffSet
diff --git a/gen/Network/Google/Resource/Books/MyConfig/GetUserSettings.hs b/gen/Network/Google/Resource/Books/MyConfig/GetUserSettings.hs
--- a/gen/Network/Google/Resource/Books/MyConfig/GetUserSettings.hs
+++ b/gen/Network/Google/Resource/Books/MyConfig/GetUserSettings.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Books.MyConfig.GetUserSettings
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -50,18 +50,20 @@
 --
 -- /See:/ 'myConfigGetUserSettings' smart constructor.
 data MyConfigGetUserSettings =
-    MyConfigGetUserSettings
+    MyConfigGetUserSettings'
     deriving (Eq,Show,Data,Typeable,Generic)
 
 -- | Creates a value of 'MyConfigGetUserSettings' with the minimum fields required to make a request.
 --
 myConfigGetUserSettings
     :: MyConfigGetUserSettings
-myConfigGetUserSettings = MyConfigGetUserSettings
+myConfigGetUserSettings = MyConfigGetUserSettings'
 
 instance GoogleRequest MyConfigGetUserSettings where
         type Rs MyConfigGetUserSettings = UserSettings
-        requestClient MyConfigGetUserSettings{}
+        type Scopes MyConfigGetUserSettings =
+             '["https://www.googleapis.com/auth/books"]
+        requestClient MyConfigGetUserSettings'{}
           = go (Just AltJSON) booksService
           where go
                   = buildClient
diff --git a/gen/Network/Google/Resource/Books/MyConfig/ReleaseDownloadAccess.hs b/gen/Network/Google/Resource/Books/MyConfig/ReleaseDownloadAccess.hs
--- a/gen/Network/Google/Resource/Books/MyConfig/ReleaseDownloadAccess.hs
+++ b/gen/Network/Google/Resource/Books/MyConfig/ReleaseDownloadAccess.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Books.MyConfig.ReleaseDownloadAccess
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -59,7 +59,7 @@
 -- | Release downloaded content access restriction.
 --
 -- /See:/ 'myConfigReleaseDownloadAccess' smart constructor.
-data MyConfigReleaseDownloadAccess = MyConfigReleaseDownloadAccess
+data MyConfigReleaseDownloadAccess = MyConfigReleaseDownloadAccess'
     { _mcrdaCpksver   :: !Text
     , _mcrdaLocale    :: !(Maybe Text)
     , _mcrdaVolumeIds :: ![Text]
@@ -82,7 +82,7 @@
     -> [Text] -- ^ 'mcrdaVolumeIds'
     -> MyConfigReleaseDownloadAccess
 myConfigReleaseDownloadAccess pMcrdaCpksver_ pMcrdaVolumeIds_ =
-    MyConfigReleaseDownloadAccess
+    MyConfigReleaseDownloadAccess'
     { _mcrdaCpksver = pMcrdaCpksver_
     , _mcrdaLocale = Nothing
     , _mcrdaVolumeIds = _Coerce # pMcrdaVolumeIds_
@@ -115,7 +115,9 @@
          where
         type Rs MyConfigReleaseDownloadAccess =
              DownloadAccesses
-        requestClient MyConfigReleaseDownloadAccess{..}
+        type Scopes MyConfigReleaseDownloadAccess =
+             '["https://www.googleapis.com/auth/books"]
+        requestClient MyConfigReleaseDownloadAccess'{..}
           = go _mcrdaVolumeIds (Just _mcrdaCpksver)
               _mcrdaLocale
               _mcrdaSource
diff --git a/gen/Network/Google/Resource/Books/MyConfig/RequestAccess.hs b/gen/Network/Google/Resource/Books/MyConfig/RequestAccess.hs
--- a/gen/Network/Google/Resource/Books/MyConfig/RequestAccess.hs
+++ b/gen/Network/Google/Resource/Books/MyConfig/RequestAccess.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Books.MyConfig.RequestAccess
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -65,7 +65,7 @@
 -- | Request concurrent and download access restrictions.
 --
 -- /See:/ 'myConfigRequestAccess' smart constructor.
-data MyConfigRequestAccess = MyConfigRequestAccess
+data MyConfigRequestAccess = MyConfigRequestAccess'
     { _mcraCpksver      :: !Text
     , _mcraLocale       :: !(Maybe Text)
     , _mcraLicenseTypes :: !(Maybe MyConfigRequestAccessLicenseTypes)
@@ -96,7 +96,7 @@
     -> Text -- ^ 'mcraNonce'
     -> MyConfigRequestAccess
 myConfigRequestAccess pMcraCpksver_ pMcraVolumeId_ pMcraSource_ pMcraNonce_ =
-    MyConfigRequestAccess
+    MyConfigRequestAccess'
     { _mcraCpksver = pMcraCpksver_
     , _mcraLocale = Nothing
     , _mcraLicenseTypes = Nothing
@@ -139,7 +139,9 @@
 
 instance GoogleRequest MyConfigRequestAccess where
         type Rs MyConfigRequestAccess = RequestAccess
-        requestClient MyConfigRequestAccess{..}
+        type Scopes MyConfigRequestAccess =
+             '["https://www.googleapis.com/auth/books"]
+        requestClient MyConfigRequestAccess'{..}
           = go (Just _mcraSource) (Just _mcraVolumeId)
               (Just _mcraNonce)
               (Just _mcraCpksver)
diff --git a/gen/Network/Google/Resource/Books/MyConfig/SyncVolumeLicenses.hs b/gen/Network/Google/Resource/Books/MyConfig/SyncVolumeLicenses.hs
--- a/gen/Network/Google/Resource/Books/MyConfig/SyncVolumeLicenses.hs
+++ b/gen/Network/Google/Resource/Books/MyConfig/SyncVolumeLicenses.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Books.MyConfig.SyncVolumeLicenses
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -36,6 +36,7 @@
     -- * Request Lenses
     , mcsvlCpksver
     , mcsvlLocale
+    , mcsvlIncludeNonComicsSeries
     , mcsvlVolumeIds
     , mcsvlFeatures
     , mcsvlSource
@@ -57,25 +58,27 @@
                QueryParam "nonce" Text :>
                  QueryParam "cpksver" Text :>
                    QueryParam "locale" Text :>
-                     QueryParams "volumeIds" Text :>
-                       QueryParams "features"
-                         MyConfigSyncVolumeLicensesFeatures
-                         :>
-                         QueryParam "showPreorders" Bool :>
-                           QueryParam "alt" AltJSON :> Post '[JSON] Volumes
+                     QueryParam "includeNonComicsSeries" Bool :>
+                       QueryParams "volumeIds" Text :>
+                         QueryParams "features"
+                           MyConfigSyncVolumeLicensesFeatures
+                           :>
+                           QueryParam "showPreorders" Bool :>
+                             QueryParam "alt" AltJSON :> Post '[JSON] Volumes
 
 -- | Request downloaded content access for specified volumes on the My eBooks
 -- shelf.
 --
 -- /See:/ 'myConfigSyncVolumeLicenses' smart constructor.
-data MyConfigSyncVolumeLicenses = MyConfigSyncVolumeLicenses
-    { _mcsvlCpksver       :: !Text
-    , _mcsvlLocale        :: !(Maybe Text)
-    , _mcsvlVolumeIds     :: !(Maybe [Text])
-    , _mcsvlFeatures      :: !(Maybe [MyConfigSyncVolumeLicensesFeatures])
-    , _mcsvlSource        :: !Text
-    , _mcsvlShowPreOrders :: !(Maybe Bool)
-    , _mcsvlNonce         :: !Text
+data MyConfigSyncVolumeLicenses = MyConfigSyncVolumeLicenses'
+    { _mcsvlCpksver                :: !Text
+    , _mcsvlLocale                 :: !(Maybe Text)
+    , _mcsvlIncludeNonComicsSeries :: !(Maybe Bool)
+    , _mcsvlVolumeIds              :: !(Maybe [Text])
+    , _mcsvlFeatures               :: !(Maybe [MyConfigSyncVolumeLicensesFeatures])
+    , _mcsvlSource                 :: !Text
+    , _mcsvlShowPreOrders          :: !(Maybe Bool)
+    , _mcsvlNonce                  :: !Text
     } deriving (Eq,Show,Data,Typeable,Generic)
 
 -- | Creates a value of 'MyConfigSyncVolumeLicenses' with the minimum fields required to make a request.
@@ -86,6 +89,8 @@
 --
 -- * 'mcsvlLocale'
 --
+-- * 'mcsvlIncludeNonComicsSeries'
+--
 -- * 'mcsvlVolumeIds'
 --
 -- * 'mcsvlFeatures'
@@ -101,9 +106,10 @@
     -> Text -- ^ 'mcsvlNonce'
     -> MyConfigSyncVolumeLicenses
 myConfigSyncVolumeLicenses pMcsvlCpksver_ pMcsvlSource_ pMcsvlNonce_ =
-    MyConfigSyncVolumeLicenses
+    MyConfigSyncVolumeLicenses'
     { _mcsvlCpksver = pMcsvlCpksver_
     , _mcsvlLocale = Nothing
+    , _mcsvlIncludeNonComicsSeries = Nothing
     , _mcsvlVolumeIds = Nothing
     , _mcsvlFeatures = Nothing
     , _mcsvlSource = pMcsvlSource_
@@ -121,6 +127,12 @@
 mcsvlLocale
   = lens _mcsvlLocale (\ s a -> s{_mcsvlLocale = a})
 
+-- | Set to true to include non-comics series. Defaults to false.
+mcsvlIncludeNonComicsSeries :: Lens' MyConfigSyncVolumeLicenses (Maybe Bool)
+mcsvlIncludeNonComicsSeries
+  = lens _mcsvlIncludeNonComicsSeries
+      (\ s a -> s{_mcsvlIncludeNonComicsSeries = a})
+
 -- | The volume(s) to request download restrictions for.
 mcsvlVolumeIds :: Lens' MyConfigSyncVolumeLicenses [Text]
 mcsvlVolumeIds
@@ -156,10 +168,13 @@
 instance GoogleRequest MyConfigSyncVolumeLicenses
          where
         type Rs MyConfigSyncVolumeLicenses = Volumes
-        requestClient MyConfigSyncVolumeLicenses{..}
+        type Scopes MyConfigSyncVolumeLicenses =
+             '["https://www.googleapis.com/auth/books"]
+        requestClient MyConfigSyncVolumeLicenses'{..}
           = go (Just _mcsvlSource) (Just _mcsvlNonce)
               (Just _mcsvlCpksver)
               _mcsvlLocale
+              _mcsvlIncludeNonComicsSeries
               (_mcsvlVolumeIds ^. _Default)
               (_mcsvlFeatures ^. _Default)
               _mcsvlShowPreOrders
diff --git a/gen/Network/Google/Resource/Books/MyConfig/UpdateUserSettings.hs b/gen/Network/Google/Resource/Books/MyConfig/UpdateUserSettings.hs
--- a/gen/Network/Google/Resource/Books/MyConfig/UpdateUserSettings.hs
+++ b/gen/Network/Google/Resource/Books/MyConfig/UpdateUserSettings.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Books.MyConfig.UpdateUserSettings
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -57,7 +57,7 @@
 -- sub-objects will retain the existing value.
 --
 -- /See:/ 'myConfigUpdateUserSettings' smart constructor.
-newtype MyConfigUpdateUserSettings = MyConfigUpdateUserSettings
+newtype MyConfigUpdateUserSettings = MyConfigUpdateUserSettings'
     { _mcuusPayload :: UserSettings
     } deriving (Eq,Show,Data,Typeable,Generic)
 
@@ -70,7 +70,7 @@
     :: UserSettings -- ^ 'mcuusPayload'
     -> MyConfigUpdateUserSettings
 myConfigUpdateUserSettings pMcuusPayload_ =
-    MyConfigUpdateUserSettings
+    MyConfigUpdateUserSettings'
     { _mcuusPayload = pMcuusPayload_
     }
 
@@ -82,7 +82,9 @@
 instance GoogleRequest MyConfigUpdateUserSettings
          where
         type Rs MyConfigUpdateUserSettings = UserSettings
-        requestClient MyConfigUpdateUserSettings{..}
+        type Scopes MyConfigUpdateUserSettings =
+             '["https://www.googleapis.com/auth/books"]
+        requestClient MyConfigUpdateUserSettings'{..}
           = go (Just AltJSON) _mcuusPayload booksService
           where go
                   = buildClient
diff --git a/gen/Network/Google/Resource/Books/MyLibrary/Annotations/Delete.hs b/gen/Network/Google/Resource/Books/MyLibrary/Annotations/Delete.hs
--- a/gen/Network/Google/Resource/Books/MyLibrary/Annotations/Delete.hs
+++ b/gen/Network/Google/Resource/Books/MyLibrary/Annotations/Delete.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Books.MyLibrary.Annotations.Delete
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -54,7 +54,7 @@
 -- | Deletes an annotation.
 --
 -- /See:/ 'myLibraryAnnotationsDelete' smart constructor.
-data MyLibraryAnnotationsDelete = MyLibraryAnnotationsDelete
+data MyLibraryAnnotationsDelete = MyLibraryAnnotationsDelete'
     { _mladAnnotationId :: !Text
     , _mladSource       :: !(Maybe Text)
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -70,7 +70,7 @@
     :: Text -- ^ 'mladAnnotationId'
     -> MyLibraryAnnotationsDelete
 myLibraryAnnotationsDelete pMladAnnotationId_ =
-    MyLibraryAnnotationsDelete
+    MyLibraryAnnotationsDelete'
     { _mladAnnotationId = pMladAnnotationId_
     , _mladSource = Nothing
     }
@@ -89,7 +89,9 @@
 instance GoogleRequest MyLibraryAnnotationsDelete
          where
         type Rs MyLibraryAnnotationsDelete = ()
-        requestClient MyLibraryAnnotationsDelete{..}
+        type Scopes MyLibraryAnnotationsDelete =
+             '["https://www.googleapis.com/auth/books"]
+        requestClient MyLibraryAnnotationsDelete'{..}
           = go _mladAnnotationId _mladSource (Just AltJSON)
               booksService
           where go
diff --git a/gen/Network/Google/Resource/Books/MyLibrary/Annotations/Insert.hs b/gen/Network/Google/Resource/Books/MyLibrary/Annotations/Insert.hs
--- a/gen/Network/Google/Resource/Books/MyLibrary/Annotations/Insert.hs
+++ b/gen/Network/Google/Resource/Books/MyLibrary/Annotations/Insert.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Books.MyLibrary.Annotations.Insert
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -58,7 +58,7 @@
 -- | Inserts a new annotation.
 --
 -- /See:/ 'myLibraryAnnotationsInsert' smart constructor.
-data MyLibraryAnnotationsInsert = MyLibraryAnnotationsInsert
+data MyLibraryAnnotationsInsert = MyLibraryAnnotationsInsert'
     { _mlaiCountry                   :: !(Maybe Text)
     , _mlaiPayload                   :: !Annotation
     , _mlaiShowOnlySummaryInResponse :: !(Maybe Bool)
@@ -80,7 +80,7 @@
     :: Annotation -- ^ 'mlaiPayload'
     -> MyLibraryAnnotationsInsert
 myLibraryAnnotationsInsert pMlaiPayload_ =
-    MyLibraryAnnotationsInsert
+    MyLibraryAnnotationsInsert'
     { _mlaiCountry = Nothing
     , _mlaiPayload = pMlaiPayload_
     , _mlaiShowOnlySummaryInResponse = Nothing
@@ -112,7 +112,9 @@
 instance GoogleRequest MyLibraryAnnotationsInsert
          where
         type Rs MyLibraryAnnotationsInsert = Annotation
-        requestClient MyLibraryAnnotationsInsert{..}
+        type Scopes MyLibraryAnnotationsInsert =
+             '["https://www.googleapis.com/auth/books"]
+        requestClient MyLibraryAnnotationsInsert'{..}
           = go _mlaiCountry _mlaiShowOnlySummaryInResponse
               _mlaiSource
               (Just AltJSON)
diff --git a/gen/Network/Google/Resource/Books/MyLibrary/Annotations/List.hs b/gen/Network/Google/Resource/Books/MyLibrary/Annotations/List.hs
--- a/gen/Network/Google/Resource/Books/MyLibrary/Annotations/List.hs
+++ b/gen/Network/Google/Resource/Books/MyLibrary/Annotations/List.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Books.MyLibrary.Annotations.List
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -71,7 +71,7 @@
 -- | Retrieves a list of annotations, possibly filtered.
 --
 -- /See:/ 'myLibraryAnnotationsList' smart constructor.
-data MyLibraryAnnotationsList = MyLibraryAnnotationsList
+data MyLibraryAnnotationsList = MyLibraryAnnotationsList'
     { _mlalContentVersion :: !(Maybe Text)
     , _mlalShowDeleted    :: !(Maybe Bool)
     , _mlalUpdatedMax     :: !(Maybe Text)
@@ -110,7 +110,7 @@
 myLibraryAnnotationsList
     :: MyLibraryAnnotationsList
 myLibraryAnnotationsList =
-    MyLibraryAnnotationsList
+    MyLibraryAnnotationsList'
     { _mlalContentVersion = Nothing
     , _mlalShowDeleted = Nothing
     , _mlalUpdatedMax = Nothing
@@ -187,7 +187,9 @@
 
 instance GoogleRequest MyLibraryAnnotationsList where
         type Rs MyLibraryAnnotationsList = Annotations
-        requestClient MyLibraryAnnotationsList{..}
+        type Scopes MyLibraryAnnotationsList =
+             '["https://www.googleapis.com/auth/books"]
+        requestClient MyLibraryAnnotationsList'{..}
           = go _mlalContentVersion _mlalShowDeleted
               _mlalUpdatedMax
               _mlalUpdatedMin
diff --git a/gen/Network/Google/Resource/Books/MyLibrary/Annotations/Summary.hs b/gen/Network/Google/Resource/Books/MyLibrary/Annotations/Summary.hs
--- a/gen/Network/Google/Resource/Books/MyLibrary/Annotations/Summary.hs
+++ b/gen/Network/Google/Resource/Books/MyLibrary/Annotations/Summary.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Books.MyLibrary.Annotations.Summary
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -56,7 +56,7 @@
 -- | Gets the summary of specified layers.
 --
 -- /See:/ 'myLibraryAnnotationsSummary' smart constructor.
-data MyLibraryAnnotationsSummary = MyLibraryAnnotationsSummary
+data MyLibraryAnnotationsSummary = MyLibraryAnnotationsSummary'
     { _mlasLayerIds :: ![Text]
     , _mlasVolumeId :: !Text
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -73,7 +73,7 @@
     -> Text -- ^ 'mlasVolumeId'
     -> MyLibraryAnnotationsSummary
 myLibraryAnnotationsSummary pMlasLayerIds_ pMlasVolumeId_ =
-    MyLibraryAnnotationsSummary
+    MyLibraryAnnotationsSummary'
     { _mlasLayerIds = _Coerce # pMlasLayerIds_
     , _mlasVolumeId = pMlasVolumeId_
     }
@@ -93,7 +93,9 @@
          where
         type Rs MyLibraryAnnotationsSummary =
              AnnotationsSummary
-        requestClient MyLibraryAnnotationsSummary{..}
+        type Scopes MyLibraryAnnotationsSummary =
+             '["https://www.googleapis.com/auth/books"]
+        requestClient MyLibraryAnnotationsSummary'{..}
           = go _mlasLayerIds (Just _mlasVolumeId)
               (Just AltJSON)
               booksService
diff --git a/gen/Network/Google/Resource/Books/MyLibrary/Annotations/Update.hs b/gen/Network/Google/Resource/Books/MyLibrary/Annotations/Update.hs
--- a/gen/Network/Google/Resource/Books/MyLibrary/Annotations/Update.hs
+++ b/gen/Network/Google/Resource/Books/MyLibrary/Annotations/Update.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Books.MyLibrary.Annotations.Update
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -56,7 +56,7 @@
 -- | Updates an existing annotation.
 --
 -- /See:/ 'myLibraryAnnotationsUpdate' smart constructor.
-data MyLibraryAnnotationsUpdate = MyLibraryAnnotationsUpdate
+data MyLibraryAnnotationsUpdate = MyLibraryAnnotationsUpdate'
     { _mlauPayload      :: !Annotation
     , _mlauAnnotationId :: !Text
     , _mlauSource       :: !(Maybe Text)
@@ -76,7 +76,7 @@
     -> Text -- ^ 'mlauAnnotationId'
     -> MyLibraryAnnotationsUpdate
 myLibraryAnnotationsUpdate pMlauPayload_ pMlauAnnotationId_ =
-    MyLibraryAnnotationsUpdate
+    MyLibraryAnnotationsUpdate'
     { _mlauPayload = pMlauPayload_
     , _mlauAnnotationId = pMlauAnnotationId_
     , _mlauSource = Nothing
@@ -101,7 +101,9 @@
 instance GoogleRequest MyLibraryAnnotationsUpdate
          where
         type Rs MyLibraryAnnotationsUpdate = Annotation
-        requestClient MyLibraryAnnotationsUpdate{..}
+        type Scopes MyLibraryAnnotationsUpdate =
+             '["https://www.googleapis.com/auth/books"]
+        requestClient MyLibraryAnnotationsUpdate'{..}
           = go _mlauAnnotationId _mlauSource (Just AltJSON)
               _mlauPayload
               booksService
diff --git a/gen/Network/Google/Resource/Books/MyLibrary/Bookshelves/AddVolume.hs b/gen/Network/Google/Resource/Books/MyLibrary/Bookshelves/AddVolume.hs
--- a/gen/Network/Google/Resource/Books/MyLibrary/Bookshelves/AddVolume.hs
+++ b/gen/Network/Google/Resource/Books/MyLibrary/Bookshelves/AddVolume.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Books.MyLibrary.Bookshelves.AddVolume
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -61,7 +61,7 @@
 -- | Adds a volume to a bookshelf.
 --
 -- /See:/ 'myLibraryBookshelvesAddVolume' smart constructor.
-data MyLibraryBookshelvesAddVolume = MyLibraryBookshelvesAddVolume
+data MyLibraryBookshelvesAddVolume = MyLibraryBookshelvesAddVolume'
     { _mlbavReason   :: !(Maybe MyLibraryBookshelvesAddVolumeReason)
     , _mlbavShelf    :: !Text
     , _mlbavVolumeId :: !Text
@@ -84,7 +84,7 @@
     -> Text -- ^ 'mlbavVolumeId'
     -> MyLibraryBookshelvesAddVolume
 myLibraryBookshelvesAddVolume pMlbavShelf_ pMlbavVolumeId_ =
-    MyLibraryBookshelvesAddVolume
+    MyLibraryBookshelvesAddVolume'
     { _mlbavReason = Nothing
     , _mlbavShelf = pMlbavShelf_
     , _mlbavVolumeId = pMlbavVolumeId_
@@ -115,7 +115,9 @@
 instance GoogleRequest MyLibraryBookshelvesAddVolume
          where
         type Rs MyLibraryBookshelvesAddVolume = ()
-        requestClient MyLibraryBookshelvesAddVolume{..}
+        type Scopes MyLibraryBookshelvesAddVolume =
+             '["https://www.googleapis.com/auth/books"]
+        requestClient MyLibraryBookshelvesAddVolume'{..}
           = go _mlbavShelf (Just _mlbavVolumeId) _mlbavReason
               _mlbavSource
               (Just AltJSON)
diff --git a/gen/Network/Google/Resource/Books/MyLibrary/Bookshelves/ClearVolumes.hs b/gen/Network/Google/Resource/Books/MyLibrary/Bookshelves/ClearVolumes.hs
--- a/gen/Network/Google/Resource/Books/MyLibrary/Bookshelves/ClearVolumes.hs
+++ b/gen/Network/Google/Resource/Books/MyLibrary/Bookshelves/ClearVolumes.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Books.MyLibrary.Bookshelves.ClearVolumes
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -55,7 +55,7 @@
 -- | Clears all volumes from a bookshelf.
 --
 -- /See:/ 'myLibraryBookshelvesClearVolumes' smart constructor.
-data MyLibraryBookshelvesClearVolumes = MyLibraryBookshelvesClearVolumes
+data MyLibraryBookshelvesClearVolumes = MyLibraryBookshelvesClearVolumes'
     { _mlbcvShelf  :: !Text
     , _mlbcvSource :: !(Maybe Text)
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -71,7 +71,7 @@
     :: Text -- ^ 'mlbcvShelf'
     -> MyLibraryBookshelvesClearVolumes
 myLibraryBookshelvesClearVolumes pMlbcvShelf_ =
-    MyLibraryBookshelvesClearVolumes
+    MyLibraryBookshelvesClearVolumes'
     { _mlbcvShelf = pMlbcvShelf_
     , _mlbcvSource = Nothing
     }
@@ -89,7 +89,9 @@
 instance GoogleRequest
          MyLibraryBookshelvesClearVolumes where
         type Rs MyLibraryBookshelvesClearVolumes = ()
-        requestClient MyLibraryBookshelvesClearVolumes{..}
+        type Scopes MyLibraryBookshelvesClearVolumes =
+             '["https://www.googleapis.com/auth/books"]
+        requestClient MyLibraryBookshelvesClearVolumes'{..}
           = go _mlbcvShelf _mlbcvSource (Just AltJSON)
               booksService
           where go
diff --git a/gen/Network/Google/Resource/Books/MyLibrary/Bookshelves/Get.hs b/gen/Network/Google/Resource/Books/MyLibrary/Bookshelves/Get.hs
--- a/gen/Network/Google/Resource/Books/MyLibrary/Bookshelves/Get.hs
+++ b/gen/Network/Google/Resource/Books/MyLibrary/Bookshelves/Get.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Books.MyLibrary.Bookshelves.Get
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -56,7 +56,7 @@
 -- authenticated user.
 --
 -- /See:/ 'myLibraryBookshelvesGet' smart constructor.
-data MyLibraryBookshelvesGet = MyLibraryBookshelvesGet
+data MyLibraryBookshelvesGet = MyLibraryBookshelvesGet'
     { _mlbgShelf  :: !Text
     , _mlbgSource :: !(Maybe Text)
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -72,7 +72,7 @@
     :: Text -- ^ 'mlbgShelf'
     -> MyLibraryBookshelvesGet
 myLibraryBookshelvesGet pMlbgShelf_ =
-    MyLibraryBookshelvesGet
+    MyLibraryBookshelvesGet'
     { _mlbgShelf = pMlbgShelf_
     , _mlbgSource = Nothing
     }
@@ -89,7 +89,9 @@
 
 instance GoogleRequest MyLibraryBookshelvesGet where
         type Rs MyLibraryBookshelvesGet = Bookshelf
-        requestClient MyLibraryBookshelvesGet{..}
+        type Scopes MyLibraryBookshelvesGet =
+             '["https://www.googleapis.com/auth/books"]
+        requestClient MyLibraryBookshelvesGet'{..}
           = go _mlbgShelf _mlbgSource (Just AltJSON)
               booksService
           where go
diff --git a/gen/Network/Google/Resource/Books/MyLibrary/Bookshelves/List.hs b/gen/Network/Google/Resource/Books/MyLibrary/Bookshelves/List.hs
--- a/gen/Network/Google/Resource/Books/MyLibrary/Bookshelves/List.hs
+++ b/gen/Network/Google/Resource/Books/MyLibrary/Bookshelves/List.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Books.MyLibrary.Bookshelves.List
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -52,7 +52,7 @@
 -- | Retrieves a list of bookshelves belonging to the authenticated user.
 --
 -- /See:/ 'myLibraryBookshelvesList' smart constructor.
-newtype MyLibraryBookshelvesList = MyLibraryBookshelvesList
+newtype MyLibraryBookshelvesList = MyLibraryBookshelvesList'
     { _mlblSource :: Maybe Text
     } deriving (Eq,Show,Data,Typeable,Generic)
 
@@ -64,7 +64,7 @@
 myLibraryBookshelvesList
     :: MyLibraryBookshelvesList
 myLibraryBookshelvesList =
-    MyLibraryBookshelvesList
+    MyLibraryBookshelvesList'
     { _mlblSource = Nothing
     }
 
@@ -75,7 +75,9 @@
 
 instance GoogleRequest MyLibraryBookshelvesList where
         type Rs MyLibraryBookshelvesList = Bookshelves
-        requestClient MyLibraryBookshelvesList{..}
+        type Scopes MyLibraryBookshelvesList =
+             '["https://www.googleapis.com/auth/books"]
+        requestClient MyLibraryBookshelvesList'{..}
           = go _mlblSource (Just AltJSON) booksService
           where go
                   = buildClient
diff --git a/gen/Network/Google/Resource/Books/MyLibrary/Bookshelves/MoveVolume.hs b/gen/Network/Google/Resource/Books/MyLibrary/Bookshelves/MoveVolume.hs
--- a/gen/Network/Google/Resource/Books/MyLibrary/Bookshelves/MoveVolume.hs
+++ b/gen/Network/Google/Resource/Books/MyLibrary/Bookshelves/MoveVolume.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Books.MyLibrary.Bookshelves.MoveVolume
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -59,7 +59,7 @@
 -- | Moves a volume within a bookshelf.
 --
 -- /See:/ 'myLibraryBookshelvesMoveVolume' smart constructor.
-data MyLibraryBookshelvesMoveVolume = MyLibraryBookshelvesMoveVolume
+data MyLibraryBookshelvesMoveVolume = MyLibraryBookshelvesMoveVolume'
     { _mlbmvShelf          :: !Text
     , _mlbmvVolumeId       :: !Text
     , _mlbmvSource         :: !(Maybe Text)
@@ -83,7 +83,7 @@
     -> Int32 -- ^ 'mlbmvVolumePosition'
     -> MyLibraryBookshelvesMoveVolume
 myLibraryBookshelvesMoveVolume pMlbmvShelf_ pMlbmvVolumeId_ pMlbmvVolumePosition_ =
-    MyLibraryBookshelvesMoveVolume
+    MyLibraryBookshelvesMoveVolume'
     { _mlbmvShelf = pMlbmvShelf_
     , _mlbmvVolumeId = pMlbmvVolumeId_
     , _mlbmvSource = Nothing
@@ -117,7 +117,9 @@
 instance GoogleRequest MyLibraryBookshelvesMoveVolume
          where
         type Rs MyLibraryBookshelvesMoveVolume = ()
-        requestClient MyLibraryBookshelvesMoveVolume{..}
+        type Scopes MyLibraryBookshelvesMoveVolume =
+             '["https://www.googleapis.com/auth/books"]
+        requestClient MyLibraryBookshelvesMoveVolume'{..}
           = go _mlbmvShelf (Just _mlbmvVolumeId)
               (Just _mlbmvVolumePosition)
               _mlbmvSource
diff --git a/gen/Network/Google/Resource/Books/MyLibrary/Bookshelves/RemoveVolume.hs b/gen/Network/Google/Resource/Books/MyLibrary/Bookshelves/RemoveVolume.hs
--- a/gen/Network/Google/Resource/Books/MyLibrary/Bookshelves/RemoveVolume.hs
+++ b/gen/Network/Google/Resource/Books/MyLibrary/Bookshelves/RemoveVolume.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Books.MyLibrary.Bookshelves.RemoveVolume
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -61,7 +61,7 @@
 -- | Removes a volume from a bookshelf.
 --
 -- /See:/ 'myLibraryBookshelvesRemoveVolume' smart constructor.
-data MyLibraryBookshelvesRemoveVolume = MyLibraryBookshelvesRemoveVolume
+data MyLibraryBookshelvesRemoveVolume = MyLibraryBookshelvesRemoveVolume'
     { _mlbrvReason   :: !(Maybe MyLibraryBookshelvesRemoveVolumeReason)
     , _mlbrvShelf    :: !Text
     , _mlbrvVolumeId :: !Text
@@ -84,7 +84,7 @@
     -> Text -- ^ 'mlbrvVolumeId'
     -> MyLibraryBookshelvesRemoveVolume
 myLibraryBookshelvesRemoveVolume pMlbrvShelf_ pMlbrvVolumeId_ =
-    MyLibraryBookshelvesRemoveVolume
+    MyLibraryBookshelvesRemoveVolume'
     { _mlbrvReason = Nothing
     , _mlbrvShelf = pMlbrvShelf_
     , _mlbrvVolumeId = pMlbrvVolumeId_
@@ -115,7 +115,9 @@
 instance GoogleRequest
          MyLibraryBookshelvesRemoveVolume where
         type Rs MyLibraryBookshelvesRemoveVolume = ()
-        requestClient MyLibraryBookshelvesRemoveVolume{..}
+        type Scopes MyLibraryBookshelvesRemoveVolume =
+             '["https://www.googleapis.com/auth/books"]
+        requestClient MyLibraryBookshelvesRemoveVolume'{..}
           = go _mlbrvShelf (Just _mlbrvVolumeId) _mlbrvReason
               _mlbrvSource
               (Just AltJSON)
diff --git a/gen/Network/Google/Resource/Books/MyLibrary/Bookshelves/Volumes/List.hs b/gen/Network/Google/Resource/Books/MyLibrary/Bookshelves/Volumes/List.hs
--- a/gen/Network/Google/Resource/Books/MyLibrary/Bookshelves/Volumes/List.hs
+++ b/gen/Network/Google/Resource/Books/MyLibrary/Bookshelves/Volumes/List.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Books.MyLibrary.Bookshelves.Volumes.List
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -69,7 +69,7 @@
 -- | Gets volume information for volumes on a bookshelf.
 --
 -- /See:/ 'myLibraryBookshelvesVolumesList' smart constructor.
-data MyLibraryBookshelvesVolumesList = MyLibraryBookshelvesVolumesList
+data MyLibraryBookshelvesVolumesList = MyLibraryBookshelvesVolumesList'
     { _mlbvlCountry       :: !(Maybe Text)
     , _mlbvlQ             :: !(Maybe Text)
     , _mlbvlShelf         :: !Text
@@ -103,7 +103,7 @@
     :: Text -- ^ 'mlbvlShelf'
     -> MyLibraryBookshelvesVolumesList
 myLibraryBookshelvesVolumesList pMlbvlShelf_ =
-    MyLibraryBookshelvesVolumesList
+    MyLibraryBookshelvesVolumesList'
     { _mlbvlCountry = Nothing
     , _mlbvlQ = Nothing
     , _mlbvlShelf = pMlbvlShelf_
@@ -162,7 +162,9 @@
 instance GoogleRequest
          MyLibraryBookshelvesVolumesList where
         type Rs MyLibraryBookshelvesVolumesList = Volumes
-        requestClient MyLibraryBookshelvesVolumesList{..}
+        type Scopes MyLibraryBookshelvesVolumesList =
+             '["https://www.googleapis.com/auth/books"]
+        requestClient MyLibraryBookshelvesVolumesList'{..}
           = go _mlbvlShelf _mlbvlCountry _mlbvlQ _mlbvlSource
               _mlbvlProjection
               _mlbvlStartIndex
diff --git a/gen/Network/Google/Resource/Books/MyLibrary/ReadingPositions/Get.hs b/gen/Network/Google/Resource/Books/MyLibrary/ReadingPositions/Get.hs
--- a/gen/Network/Google/Resource/Books/MyLibrary/ReadingPositions/Get.hs
+++ b/gen/Network/Google/Resource/Books/MyLibrary/ReadingPositions/Get.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Books.MyLibrary.ReadingPositions.Get
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -57,7 +57,7 @@
 -- | Retrieves my reading position information for a volume.
 --
 -- /See:/ 'myLibraryReadingPositionsGet' smart constructor.
-data MyLibraryReadingPositionsGet = MyLibraryReadingPositionsGet
+data MyLibraryReadingPositionsGet = MyLibraryReadingPositionsGet'
     { _mlrpgContentVersion :: !(Maybe Text)
     , _mlrpgVolumeId       :: !Text
     , _mlrpgSource         :: !(Maybe Text)
@@ -76,7 +76,7 @@
     :: Text -- ^ 'mlrpgVolumeId'
     -> MyLibraryReadingPositionsGet
 myLibraryReadingPositionsGet pMlrpgVolumeId_ =
-    MyLibraryReadingPositionsGet
+    MyLibraryReadingPositionsGet'
     { _mlrpgContentVersion = Nothing
     , _mlrpgVolumeId = pMlrpgVolumeId_
     , _mlrpgSource = Nothing
@@ -103,7 +103,9 @@
          where
         type Rs MyLibraryReadingPositionsGet =
              ReadingPosition
-        requestClient MyLibraryReadingPositionsGet{..}
+        type Scopes MyLibraryReadingPositionsGet =
+             '["https://www.googleapis.com/auth/books"]
+        requestClient MyLibraryReadingPositionsGet'{..}
           = go _mlrpgVolumeId _mlrpgContentVersion _mlrpgSource
               (Just AltJSON)
               booksService
diff --git a/gen/Network/Google/Resource/Books/MyLibrary/ReadingPositions/SetPosition.hs b/gen/Network/Google/Resource/Books/MyLibrary/ReadingPositions/SetPosition.hs
--- a/gen/Network/Google/Resource/Books/MyLibrary/ReadingPositions/SetPosition.hs
+++ b/gen/Network/Google/Resource/Books/MyLibrary/ReadingPositions/SetPosition.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Books.MyLibrary.ReadingPositions.SetPosition
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -67,7 +67,7 @@
 -- | Sets my reading position information for a volume.
 --
 -- /See:/ 'myLibraryReadingPositionsSetPosition' smart constructor.
-data MyLibraryReadingPositionsSetPosition = MyLibraryReadingPositionsSetPosition
+data MyLibraryReadingPositionsSetPosition = MyLibraryReadingPositionsSetPosition'
     { _mlrpspDeviceCookie   :: !(Maybe Text)
     , _mlrpspContentVersion :: !(Maybe Text)
     , _mlrpspAction         :: !(Maybe MyLibraryReadingPositionsSetPositionAction)
@@ -100,7 +100,7 @@
     -> Text -- ^ 'mlrpspPosition'
     -> MyLibraryReadingPositionsSetPosition
 myLibraryReadingPositionsSetPosition pMlrpspVolumeId_ pMlrpspTimestamp_ pMlrpspPosition_ =
-    MyLibraryReadingPositionsSetPosition
+    MyLibraryReadingPositionsSetPosition'
     { _mlrpspDeviceCookie = Nothing
     , _mlrpspContentVersion = Nothing
     , _mlrpspAction = Nothing
@@ -153,8 +153,10 @@
 instance GoogleRequest
          MyLibraryReadingPositionsSetPosition where
         type Rs MyLibraryReadingPositionsSetPosition = ()
+        type Scopes MyLibraryReadingPositionsSetPosition =
+             '["https://www.googleapis.com/auth/books"]
         requestClient
-          MyLibraryReadingPositionsSetPosition{..}
+          MyLibraryReadingPositionsSetPosition'{..}
           = go _mlrpspVolumeId (Just _mlrpspTimestamp)
               (Just _mlrpspPosition)
               _mlrpspDeviceCookie
diff --git a/gen/Network/Google/Resource/Books/Notification/Get.hs b/gen/Network/Google/Resource/Books/Notification/Get.hs
--- a/gen/Network/Google/Resource/Books/Notification/Get.hs
+++ b/gen/Network/Google/Resource/Books/Notification/Get.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Books.Notification.Get
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -56,7 +56,7 @@
 -- | Returns notification details for a given notification id.
 --
 -- /See:/ 'notificationGet' smart constructor.
-data NotificationGet = NotificationGet
+data NotificationGet = NotificationGet'
     { _ngLocale         :: !(Maybe Text)
     , _ngNotificationId :: !Text
     , _ngSource         :: !(Maybe Text)
@@ -75,7 +75,7 @@
     :: Text -- ^ 'ngNotificationId'
     -> NotificationGet
 notificationGet pNgNotificationId_ =
-    NotificationGet
+    NotificationGet'
     { _ngLocale = Nothing
     , _ngNotificationId = pNgNotificationId_
     , _ngSource = Nothing
@@ -98,7 +98,9 @@
 
 instance GoogleRequest NotificationGet where
         type Rs NotificationGet = Notification
-        requestClient NotificationGet{..}
+        type Scopes NotificationGet =
+             '["https://www.googleapis.com/auth/books"]
+        requestClient NotificationGet'{..}
           = go (Just _ngNotificationId) _ngLocale _ngSource
               (Just AltJSON)
               booksService
diff --git a/gen/Network/Google/Resource/Books/Onboarding/ListCategories.hs b/gen/Network/Google/Resource/Books/Onboarding/ListCategories.hs
--- a/gen/Network/Google/Resource/Books/Onboarding/ListCategories.hs
+++ b/gen/Network/Google/Resource/Books/Onboarding/ListCategories.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Books.Onboarding.ListCategories
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -52,7 +52,7 @@
 -- | List categories for onboarding experience.
 --
 -- /See:/ 'onboardingListCategories' smart constructor.
-newtype OnboardingListCategories = OnboardingListCategories
+newtype OnboardingListCategories = OnboardingListCategories'
     { _olcLocale :: Maybe Text
     } deriving (Eq,Show,Data,Typeable,Generic)
 
@@ -64,7 +64,7 @@
 onboardingListCategories
     :: OnboardingListCategories
 onboardingListCategories =
-    OnboardingListCategories
+    OnboardingListCategories'
     { _olcLocale = Nothing
     }
 
@@ -76,7 +76,9 @@
 
 instance GoogleRequest OnboardingListCategories where
         type Rs OnboardingListCategories = Category
-        requestClient OnboardingListCategories{..}
+        type Scopes OnboardingListCategories =
+             '["https://www.googleapis.com/auth/books"]
+        requestClient OnboardingListCategories'{..}
           = go _olcLocale (Just AltJSON) booksService
           where go
                   = buildClient
diff --git a/gen/Network/Google/Resource/Books/Onboarding/ListCategoryVolumes.hs b/gen/Network/Google/Resource/Books/Onboarding/ListCategoryVolumes.hs
--- a/gen/Network/Google/Resource/Books/Onboarding/ListCategoryVolumes.hs
+++ b/gen/Network/Google/Resource/Books/Onboarding/ListCategoryVolumes.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Books.Onboarding.ListCategoryVolumes
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -62,7 +62,7 @@
 -- | List available volumes under categories for onboarding experience.
 --
 -- /See:/ 'onboardingListCategoryVolumes' smart constructor.
-data OnboardingListCategoryVolumes = OnboardingListCategoryVolumes
+data OnboardingListCategoryVolumes = OnboardingListCategoryVolumes'
     { _olcvLocale                   :: !(Maybe Text)
     , _olcvMaxAllowedMaturityRating :: !(Maybe OnboardingListCategoryVolumesMaxAllowedMaturityRating)
     , _olcvCategoryId               :: !(Maybe [Text])
@@ -86,7 +86,7 @@
 onboardingListCategoryVolumes
     :: OnboardingListCategoryVolumes
 onboardingListCategoryVolumes =
-    OnboardingListCategoryVolumes
+    OnboardingListCategoryVolumes'
     { _olcvLocale = Nothing
     , _olcvMaxAllowedMaturityRating = Nothing
     , _olcvCategoryId = Nothing
@@ -130,7 +130,9 @@
 instance GoogleRequest OnboardingListCategoryVolumes
          where
         type Rs OnboardingListCategoryVolumes = Volume2
-        requestClient OnboardingListCategoryVolumes{..}
+        type Scopes OnboardingListCategoryVolumes =
+             '["https://www.googleapis.com/auth/books"]
+        requestClient OnboardingListCategoryVolumes'{..}
           = go _olcvLocale _olcvMaxAllowedMaturityRating
               (_olcvCategoryId ^. _Default)
               _olcvPageToken
diff --git a/gen/Network/Google/Resource/Books/Personalizedstream/Get.hs b/gen/Network/Google/Resource/Books/Personalizedstream/Get.hs
--- a/gen/Network/Google/Resource/Books/Personalizedstream/Get.hs
+++ b/gen/Network/Google/Resource/Books/Personalizedstream/Get.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Books.Personalizedstream.Get
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -59,7 +59,7 @@
 -- | Returns a stream of personalized book clusters
 --
 -- /See:/ 'personalizedstreamGet' smart constructor.
-data PersonalizedstreamGet = PersonalizedstreamGet
+data PersonalizedstreamGet = PersonalizedstreamGet'
     { _pgLocale                   :: !(Maybe Text)
     , _pgMaxAllowedMaturityRating :: !(Maybe PersonalizedstreamGetMaxAllowedMaturityRating)
     , _pgSource                   :: !(Maybe Text)
@@ -77,7 +77,7 @@
 personalizedstreamGet
     :: PersonalizedstreamGet
 personalizedstreamGet =
-    PersonalizedstreamGet
+    PersonalizedstreamGet'
     { _pgLocale = Nothing
     , _pgMaxAllowedMaturityRating = Nothing
     , _pgSource = Nothing
@@ -101,7 +101,9 @@
 
 instance GoogleRequest PersonalizedstreamGet where
         type Rs PersonalizedstreamGet = Discoveryclusters
-        requestClient PersonalizedstreamGet{..}
+        type Scopes PersonalizedstreamGet =
+             '["https://www.googleapis.com/auth/books"]
+        requestClient PersonalizedstreamGet'{..}
           = go _pgLocale _pgMaxAllowedMaturityRating _pgSource
               (Just AltJSON)
               booksService
diff --git a/gen/Network/Google/Resource/Books/PromoOffer/Accept.hs b/gen/Network/Google/Resource/Books/PromoOffer/Accept.hs
--- a/gen/Network/Google/Resource/Books/PromoOffer/Accept.hs
+++ b/gen/Network/Google/Resource/Books/PromoOffer/Accept.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Books.PromoOffer.Accept
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -66,7 +66,7 @@
 -- |
 --
 -- /See:/ 'promoOfferAccept' smart constructor.
-data PromoOfferAccept = PromoOfferAccept
+data PromoOfferAccept = PromoOfferAccept'
     { _poaManufacturer :: !(Maybe Text)
     , _poaSerial       :: !(Maybe Text)
     , _poaDevice       :: !(Maybe Text)
@@ -99,7 +99,7 @@
 promoOfferAccept
     :: PromoOfferAccept
 promoOfferAccept =
-    PromoOfferAccept
+    PromoOfferAccept'
     { _poaManufacturer = Nothing
     , _poaSerial = Nothing
     , _poaDevice = Nothing
@@ -151,7 +151,9 @@
 
 instance GoogleRequest PromoOfferAccept where
         type Rs PromoOfferAccept = ()
-        requestClient PromoOfferAccept{..}
+        type Scopes PromoOfferAccept =
+             '["https://www.googleapis.com/auth/books"]
+        requestClient PromoOfferAccept'{..}
           = go _poaManufacturer _poaSerial _poaDevice _poaModel
               _poaVolumeId
               _poaOfferId
diff --git a/gen/Network/Google/Resource/Books/PromoOffer/Dismiss.hs b/gen/Network/Google/Resource/Books/PromoOffer/Dismiss.hs
--- a/gen/Network/Google/Resource/Books/PromoOffer/Dismiss.hs
+++ b/gen/Network/Google/Resource/Books/PromoOffer/Dismiss.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Books.PromoOffer.Dismiss
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -64,7 +64,7 @@
 -- |
 --
 -- /See:/ 'promoOfferDismiss' smart constructor.
-data PromoOfferDismiss = PromoOfferDismiss
+data PromoOfferDismiss = PromoOfferDismiss'
     { _podManufacturer :: !(Maybe Text)
     , _podSerial       :: !(Maybe Text)
     , _podDevice       :: !(Maybe Text)
@@ -94,7 +94,7 @@
 promoOfferDismiss
     :: PromoOfferDismiss
 promoOfferDismiss =
-    PromoOfferDismiss
+    PromoOfferDismiss'
     { _podManufacturer = Nothing
     , _podSerial = Nothing
     , _podDevice = Nothing
@@ -141,7 +141,9 @@
 
 instance GoogleRequest PromoOfferDismiss where
         type Rs PromoOfferDismiss = ()
-        requestClient PromoOfferDismiss{..}
+        type Scopes PromoOfferDismiss =
+             '["https://www.googleapis.com/auth/books"]
+        requestClient PromoOfferDismiss'{..}
           = go _podManufacturer _podSerial _podDevice _podModel
               _podOfferId
               _podProduct
diff --git a/gen/Network/Google/Resource/Books/PromoOffer/Get.hs b/gen/Network/Google/Resource/Books/PromoOffer/Get.hs
--- a/gen/Network/Google/Resource/Books/PromoOffer/Get.hs
+++ b/gen/Network/Google/Resource/Books/PromoOffer/Get.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Books.PromoOffer.Get
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -62,7 +62,7 @@
 -- | Returns a list of promo offers available to the user
 --
 -- /See:/ 'promoOfferGet' smart constructor.
-data PromoOfferGet = PromoOfferGet
+data PromoOfferGet = PromoOfferGet'
     { _pogManufacturer :: !(Maybe Text)
     , _pogSerial       :: !(Maybe Text)
     , _pogDevice       :: !(Maybe Text)
@@ -89,7 +89,7 @@
 promoOfferGet
     :: PromoOfferGet
 promoOfferGet =
-    PromoOfferGet
+    PromoOfferGet'
     { _pogManufacturer = Nothing
     , _pogSerial = Nothing
     , _pogDevice = Nothing
@@ -130,7 +130,9 @@
 
 instance GoogleRequest PromoOfferGet where
         type Rs PromoOfferGet = Offers
-        requestClient PromoOfferGet{..}
+        type Scopes PromoOfferGet =
+             '["https://www.googleapis.com/auth/books"]
+        requestClient PromoOfferGet'{..}
           = go _pogManufacturer _pogSerial _pogDevice _pogModel
               _pogProduct
               _pogAndroidId
diff --git a/gen/Network/Google/Resource/Books/Series/Get.hs b/gen/Network/Google/Resource/Books/Series/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Books/Series/Get.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Books.Series.Get
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns Series metadata for the given series ids.
+--
+-- /See:/ <https://developers.google.com/books/docs/v1/getting_started Books API Reference> for @books.series.get@.
+module Network.Google.Resource.Books.Series.Get
+    (
+    -- * REST Resource
+      SeriesGetResource
+
+    -- * Creating a Request
+    , seriesGet
+    , SeriesGet
+
+    -- * Request Lenses
+    , sgSeriesId
+    ) where
+
+import           Network.Google.Books.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @books.series.get@ method which the
+-- 'SeriesGet' request conforms to.
+type SeriesGetResource =
+     "books" :>
+       "v1" :>
+         "series" :>
+           "get" :>
+             QueryParams "series_id" Text :>
+               QueryParam "alt" AltJSON :> Get '[JSON] Series
+
+-- | Returns Series metadata for the given series ids.
+--
+-- /See:/ 'seriesGet' smart constructor.
+newtype SeriesGet = SeriesGet'
+    { _sgSeriesId :: [Text]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SeriesGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sgSeriesId'
+seriesGet
+    :: [Text] -- ^ 'sgSeriesId'
+    -> SeriesGet
+seriesGet pSgSeriesId_ =
+    SeriesGet'
+    { _sgSeriesId = _Coerce # pSgSeriesId_
+    }
+
+-- | String that identifies the series
+sgSeriesId :: Lens' SeriesGet [Text]
+sgSeriesId
+  = lens _sgSeriesId (\ s a -> s{_sgSeriesId = a}) .
+      _Coerce
+
+instance GoogleRequest SeriesGet where
+        type Rs SeriesGet = Series
+        type Scopes SeriesGet =
+             '["https://www.googleapis.com/auth/books"]
+        requestClient SeriesGet'{..}
+          = go _sgSeriesId (Just AltJSON) booksService
+          where go
+                  = buildClient (Proxy :: Proxy SeriesGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Books/Series/Membership/Get.hs b/gen/Network/Google/Resource/Books/Series/Membership/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Books/Series/Membership/Get.hs
@@ -0,0 +1,113 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Books.Series.Membership.Get
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns Series membership data given the series id.
+--
+-- /See:/ <https://developers.google.com/books/docs/v1/getting_started Books API Reference> for @books.series.membership.get@.
+module Network.Google.Resource.Books.Series.Membership.Get
+    (
+    -- * REST Resource
+      SeriesMembershipGetResource
+
+    -- * Creating a Request
+    , seriesMembershipGet
+    , SeriesMembershipGet
+
+    -- * Request Lenses
+    , smgPageToken
+    , smgPageSize
+    , smgSeriesId
+    ) where
+
+import           Network.Google.Books.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @books.series.membership.get@ method which the
+-- 'SeriesMembershipGet' request conforms to.
+type SeriesMembershipGetResource =
+     "books" :>
+       "v1" :>
+         "series" :>
+           "membership" :>
+             "get" :>
+               QueryParam "series_id" Text :>
+                 QueryParam "page_token" Text :>
+                   QueryParam "page_size" (Textual Word32) :>
+                     QueryParam "alt" AltJSON :>
+                       Get '[JSON] Seriesmembership
+
+-- | Returns Series membership data given the series id.
+--
+-- /See:/ 'seriesMembershipGet' smart constructor.
+data SeriesMembershipGet = SeriesMembershipGet'
+    { _smgPageToken :: !(Maybe Text)
+    , _smgPageSize  :: !(Maybe (Textual Word32))
+    , _smgSeriesId  :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SeriesMembershipGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'smgPageToken'
+--
+-- * 'smgPageSize'
+--
+-- * 'smgSeriesId'
+seriesMembershipGet
+    :: Text -- ^ 'smgSeriesId'
+    -> SeriesMembershipGet
+seriesMembershipGet pSmgSeriesId_ =
+    SeriesMembershipGet'
+    { _smgPageToken = Nothing
+    , _smgPageSize = Nothing
+    , _smgSeriesId = pSmgSeriesId_
+    }
+
+-- | The value of the nextToken from the previous page.
+smgPageToken :: Lens' SeriesMembershipGet (Maybe Text)
+smgPageToken
+  = lens _smgPageToken (\ s a -> s{_smgPageToken = a})
+
+-- | Number of maximum results per page to be included in the response.
+smgPageSize :: Lens' SeriesMembershipGet (Maybe Word32)
+smgPageSize
+  = lens _smgPageSize (\ s a -> s{_smgPageSize = a}) .
+      mapping _Coerce
+
+-- | String that identifies the series
+smgSeriesId :: Lens' SeriesMembershipGet Text
+smgSeriesId
+  = lens _smgSeriesId (\ s a -> s{_smgSeriesId = a})
+
+instance GoogleRequest SeriesMembershipGet where
+        type Rs SeriesMembershipGet = Seriesmembership
+        type Scopes SeriesMembershipGet =
+             '["https://www.googleapis.com/auth/books"]
+        requestClient SeriesMembershipGet'{..}
+          = go (Just _smgSeriesId) _smgPageToken _smgPageSize
+              (Just AltJSON)
+              booksService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy SeriesMembershipGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Books/Volumes/Associated/List.hs b/gen/Network/Google/Resource/Books/Volumes/Associated/List.hs
--- a/gen/Network/Google/Resource/Books/Volumes/Associated/List.hs
+++ b/gen/Network/Google/Resource/Books/Volumes/Associated/List.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Books.Volumes.Associated.List
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -63,7 +63,7 @@
 -- | Return a list of associated books.
 --
 -- /See:/ 'volumesAssociatedList' smart constructor.
-data VolumesAssociatedList = VolumesAssociatedList
+data VolumesAssociatedList = VolumesAssociatedList'
     { _valLocale                   :: !(Maybe Text)
     , _valMaxAllowedMaturityRating :: !(Maybe VolumesAssociatedListMaxAllowedMaturityRating)
     , _valVolumeId                 :: !Text
@@ -88,7 +88,7 @@
     :: Text -- ^ 'valVolumeId'
     -> VolumesAssociatedList
 volumesAssociatedList pValVolumeId_ =
-    VolumesAssociatedList
+    VolumesAssociatedList'
     { _valLocale = Nothing
     , _valMaxAllowedMaturityRating = Nothing
     , _valVolumeId = pValVolumeId_
@@ -127,7 +127,9 @@
 
 instance GoogleRequest VolumesAssociatedList where
         type Rs VolumesAssociatedList = Volumes
-        requestClient VolumesAssociatedList{..}
+        type Scopes VolumesAssociatedList =
+             '["https://www.googleapis.com/auth/books"]
+        requestClient VolumesAssociatedList'{..}
           = go _valVolumeId _valLocale
               _valMaxAllowedMaturityRating
               _valSource
diff --git a/gen/Network/Google/Resource/Books/Volumes/Get.hs b/gen/Network/Google/Resource/Books/Volumes/Get.hs
--- a/gen/Network/Google/Resource/Books/Volumes/Get.hs
+++ b/gen/Network/Google/Resource/Books/Volumes/Get.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Books.Volumes.Get
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -34,6 +34,7 @@
 
     -- * Request Lenses
     , vgCountry
+    , vgIncludeNonComicsSeries
     , vgPartner
     , vgVolumeId
     , vgSource
@@ -52,17 +53,19 @@
          "volumes" :>
            Capture "volumeId" Text :>
              QueryParam "country" Text :>
-               QueryParam "partner" Text :>
-                 QueryParam "source" Text :>
-                   QueryParam "projection" VolumesGetProjection :>
-                     QueryParam "user_library_consistent_read" Bool :>
-                       QueryParam "alt" AltJSON :> Get '[JSON] Volume
+               QueryParam "includeNonComicsSeries" Bool :>
+                 QueryParam "partner" Text :>
+                   QueryParam "source" Text :>
+                     QueryParam "projection" VolumesGetProjection :>
+                       QueryParam "user_library_consistent_read" Bool :>
+                         QueryParam "alt" AltJSON :> Get '[JSON] Volume
 
 -- | Gets volume information for a single volume.
 --
 -- /See:/ 'volumesGet' smart constructor.
-data VolumesGet = VolumesGet
+data VolumesGet = VolumesGet'
     { _vgCountry                   :: !(Maybe Text)
+    , _vgIncludeNonComicsSeries    :: !(Maybe Bool)
     , _vgPartner                   :: !(Maybe Text)
     , _vgVolumeId                  :: !Text
     , _vgSource                    :: !(Maybe Text)
@@ -76,6 +79,8 @@
 --
 -- * 'vgCountry'
 --
+-- * 'vgIncludeNonComicsSeries'
+--
 -- * 'vgPartner'
 --
 -- * 'vgVolumeId'
@@ -89,8 +94,9 @@
     :: Text -- ^ 'vgVolumeId'
     -> VolumesGet
 volumesGet pVgVolumeId_ =
-    VolumesGet
+    VolumesGet'
     { _vgCountry = Nothing
+    , _vgIncludeNonComicsSeries = Nothing
     , _vgPartner = Nothing
     , _vgVolumeId = pVgVolumeId_
     , _vgSource = Nothing
@@ -103,6 +109,12 @@
 vgCountry
   = lens _vgCountry (\ s a -> s{_vgCountry = a})
 
+-- | Set to true to include non-comics series. Defaults to false.
+vgIncludeNonComicsSeries :: Lens' VolumesGet (Maybe Bool)
+vgIncludeNonComicsSeries
+  = lens _vgIncludeNonComicsSeries
+      (\ s a -> s{_vgIncludeNonComicsSeries = a})
+
 -- | Brand results for partner ID.
 vgPartner :: Lens' VolumesGet (Maybe Text)
 vgPartner
@@ -129,8 +141,12 @@
 
 instance GoogleRequest VolumesGet where
         type Rs VolumesGet = Volume
-        requestClient VolumesGet{..}
-          = go _vgVolumeId _vgCountry _vgPartner _vgSource
+        type Scopes VolumesGet =
+             '["https://www.googleapis.com/auth/books"]
+        requestClient VolumesGet'{..}
+          = go _vgVolumeId _vgCountry _vgIncludeNonComicsSeries
+              _vgPartner
+              _vgSource
               _vgProjection
               _vgUserLibraryConsistentRead
               (Just AltJSON)
diff --git a/gen/Network/Google/Resource/Books/Volumes/List.hs b/gen/Network/Google/Resource/Books/Volumes/List.hs
--- a/gen/Network/Google/Resource/Books/Volumes/List.hs
+++ b/gen/Network/Google/Resource/Books/Volumes/List.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Books.Volumes.List
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -79,7 +79,7 @@
 -- | Performs a book search.
 --
 -- /See:/ 'volumesList' smart constructor.
-data VolumesList = VolumesList
+data VolumesList = VolumesList'
     { _vlOrderBy         :: !(Maybe VolumesListOrderBy)
     , _vlLibraryRestrict :: !(Maybe VolumesListLibraryRestrict)
     , _vlPartner         :: !(Maybe Text)
@@ -128,7 +128,7 @@
     :: Text -- ^ 'vlQ'
     -> VolumesList
 volumesList pVlQ_ =
-    VolumesList
+    VolumesList'
     { _vlOrderBy = Nothing
     , _vlLibraryRestrict = Nothing
     , _vlPartner = Nothing
@@ -213,7 +213,9 @@
 
 instance GoogleRequest VolumesList where
         type Rs VolumesList = Volumes
-        requestClient VolumesList{..}
+        type Scopes VolumesList =
+             '["https://www.googleapis.com/auth/books"]
+        requestClient VolumesList'{..}
           = go (Just _vlQ) _vlOrderBy _vlLibraryRestrict
               _vlPartner
               _vlDownload
diff --git a/gen/Network/Google/Resource/Books/Volumes/Mybooks/List.hs b/gen/Network/Google/Resource/Books/Volumes/Mybooks/List.hs
--- a/gen/Network/Google/Resource/Books/Volumes/Mybooks/List.hs
+++ b/gen/Network/Google/Resource/Books/Volumes/Mybooks/List.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Books.Volumes.Mybooks.List
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -35,6 +35,7 @@
     -- * Request Lenses
     , vmlProcessingState
     , vmlAcquireMethod
+    , vmlCountry
     , vmlLocale
     , vmlSource
     , vmlStartIndex
@@ -57,18 +58,20 @@
                QueryParams "acquireMethod"
                  VolumesMybooksListAcquireMethod
                  :>
-                 QueryParam "locale" Text :>
-                   QueryParam "source" Text :>
-                     QueryParam "startIndex" (Textual Word32) :>
-                       QueryParam "maxResults" (Textual Word32) :>
-                         QueryParam "alt" AltJSON :> Get '[JSON] Volumes
+                 QueryParam "country" Text :>
+                   QueryParam "locale" Text :>
+                     QueryParam "source" Text :>
+                       QueryParam "startIndex" (Textual Word32) :>
+                         QueryParam "maxResults" (Textual Word32) :>
+                           QueryParam "alt" AltJSON :> Get '[JSON] Volumes
 
 -- | Return a list of books in My Library.
 --
 -- /See:/ 'volumesMybooksList' smart constructor.
-data VolumesMybooksList = VolumesMybooksList
+data VolumesMybooksList = VolumesMybooksList'
     { _vmlProcessingState :: !(Maybe [VolumesMybooksListProcessingState])
     , _vmlAcquireMethod   :: !(Maybe [VolumesMybooksListAcquireMethod])
+    , _vmlCountry         :: !(Maybe Text)
     , _vmlLocale          :: !(Maybe Text)
     , _vmlSource          :: !(Maybe Text)
     , _vmlStartIndex      :: !(Maybe (Textual Word32))
@@ -83,6 +86,8 @@
 --
 -- * 'vmlAcquireMethod'
 --
+-- * 'vmlCountry'
+--
 -- * 'vmlLocale'
 --
 -- * 'vmlSource'
@@ -93,9 +98,10 @@
 volumesMybooksList
     :: VolumesMybooksList
 volumesMybooksList =
-    VolumesMybooksList
+    VolumesMybooksList'
     { _vmlProcessingState = Nothing
     , _vmlAcquireMethod = Nothing
+    , _vmlCountry = Nothing
     , _vmlLocale = Nothing
     , _vmlSource = Nothing
     , _vmlStartIndex = Nothing
@@ -119,6 +125,11 @@
       . _Default
       . _Coerce
 
+-- | ISO-3166-1 code to override the IP-based location.
+vmlCountry :: Lens' VolumesMybooksList (Maybe Text)
+vmlCountry
+  = lens _vmlCountry (\ s a -> s{_vmlCountry = a})
+
 -- | ISO-639-1 language and ISO-3166-1 country code. Ex:\'en_US\'. Used for
 -- generating recommendations.
 vmlLocale :: Lens' VolumesMybooksList (Maybe Text)
@@ -146,9 +157,12 @@
 
 instance GoogleRequest VolumesMybooksList where
         type Rs VolumesMybooksList = Volumes
-        requestClient VolumesMybooksList{..}
+        type Scopes VolumesMybooksList =
+             '["https://www.googleapis.com/auth/books"]
+        requestClient VolumesMybooksList'{..}
           = go (_vmlProcessingState ^. _Default)
               (_vmlAcquireMethod ^. _Default)
+              _vmlCountry
               _vmlLocale
               _vmlSource
               _vmlStartIndex
diff --git a/gen/Network/Google/Resource/Books/Volumes/Recommended/List.hs b/gen/Network/Google/Resource/Books/Volumes/Recommended/List.hs
--- a/gen/Network/Google/Resource/Books/Volumes/Recommended/List.hs
+++ b/gen/Network/Google/Resource/Books/Volumes/Recommended/List.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Books.Volumes.Recommended.List
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -58,7 +58,7 @@
 -- | Return a list of recommended books for the current user.
 --
 -- /See:/ 'volumesRecommendedList' smart constructor.
-data VolumesRecommendedList = VolumesRecommendedList
+data VolumesRecommendedList = VolumesRecommendedList'
     { _vrlLocale                   :: !(Maybe Text)
     , _vrlMaxAllowedMaturityRating :: !(Maybe VolumesRecommendedListMaxAllowedMaturityRating)
     , _vrlSource                   :: !(Maybe Text)
@@ -76,7 +76,7 @@
 volumesRecommendedList
     :: VolumesRecommendedList
 volumesRecommendedList =
-    VolumesRecommendedList
+    VolumesRecommendedList'
     { _vrlLocale = Nothing
     , _vrlMaxAllowedMaturityRating = Nothing
     , _vrlSource = Nothing
@@ -102,7 +102,9 @@
 
 instance GoogleRequest VolumesRecommendedList where
         type Rs VolumesRecommendedList = Volumes
-        requestClient VolumesRecommendedList{..}
+        type Scopes VolumesRecommendedList =
+             '["https://www.googleapis.com/auth/books"]
+        requestClient VolumesRecommendedList'{..}
           = go _vrlLocale _vrlMaxAllowedMaturityRating
               _vrlSource
               (Just AltJSON)
diff --git a/gen/Network/Google/Resource/Books/Volumes/Recommended/Rate.hs b/gen/Network/Google/Resource/Books/Volumes/Recommended/Rate.hs
--- a/gen/Network/Google/Resource/Books/Volumes/Recommended/Rate.hs
+++ b/gen/Network/Google/Resource/Books/Volumes/Recommended/Rate.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Books.Volumes.Recommended.Rate
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -60,7 +60,7 @@
 -- | Rate a recommended book for the current user.
 --
 -- /See:/ 'volumesRecommendedRate' smart constructor.
-data VolumesRecommendedRate = VolumesRecommendedRate
+data VolumesRecommendedRate = VolumesRecommendedRate'
     { _vrrRating   :: !VolumesRecommendedRateRating
     , _vrrLocale   :: !(Maybe Text)
     , _vrrVolumeId :: !Text
@@ -83,7 +83,7 @@
     -> Text -- ^ 'vrrVolumeId'
     -> VolumesRecommendedRate
 volumesRecommendedRate pVrrRating_ pVrrVolumeId_ =
-    VolumesRecommendedRate
+    VolumesRecommendedRate'
     { _vrrRating = pVrrRating_
     , _vrrLocale = Nothing
     , _vrrVolumeId = pVrrVolumeId_
@@ -114,7 +114,9 @@
 instance GoogleRequest VolumesRecommendedRate where
         type Rs VolumesRecommendedRate =
              BooksVolumesRecommendedRateResponse
-        requestClient VolumesRecommendedRate{..}
+        type Scopes VolumesRecommendedRate =
+             '["https://www.googleapis.com/auth/books"]
+        requestClient VolumesRecommendedRate'{..}
           = go (Just _vrrRating) (Just _vrrVolumeId) _vrrLocale
               _vrrSource
               (Just AltJSON)
diff --git a/gen/Network/Google/Resource/Books/Volumes/UserUploaded/List.hs b/gen/Network/Google/Resource/Books/Volumes/UserUploaded/List.hs
--- a/gen/Network/Google/Resource/Books/Volumes/UserUploaded/List.hs
+++ b/gen/Network/Google/Resource/Books/Volumes/UserUploaded/List.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Books.Volumes.UserUploaded.List
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -64,7 +64,7 @@
 -- | Return a list of books uploaded by the current user.
 --
 -- /See:/ 'volumesUserUploadedList' smart constructor.
-data VolumesUserUploadedList = VolumesUserUploadedList
+data VolumesUserUploadedList = VolumesUserUploadedList'
     { _vuulProcessingState :: !(Maybe [VolumesUserUploadedListProcessingState])
     , _vuulLocale          :: !(Maybe Text)
     , _vuulVolumeId        :: !(Maybe [Text])
@@ -91,7 +91,7 @@
 volumesUserUploadedList
     :: VolumesUserUploadedList
 volumesUserUploadedList =
-    VolumesUserUploadedList
+    VolumesUserUploadedList'
     { _vuulProcessingState = Nothing
     , _vuulLocale = Nothing
     , _vuulVolumeId = Nothing
@@ -143,7 +143,9 @@
 
 instance GoogleRequest VolumesUserUploadedList where
         type Rs VolumesUserUploadedList = Volumes
-        requestClient VolumesUserUploadedList{..}
+        type Scopes VolumesUserUploadedList =
+             '["https://www.googleapis.com/auth/books"]
+        requestClient VolumesUserUploadedList'{..}
           = go (_vuulProcessingState ^. _Default) _vuulLocale
               (_vuulVolumeId ^. _Default)
               _vuulSource
diff --git a/gogol-books.cabal b/gogol-books.cabal
--- a/gogol-books.cabal
+++ b/gogol-books.cabal
@@ -1,5 +1,5 @@
 name:                  gogol-books
-version:               0.0.1
+version:               0.1.0
 synopsis:              Google Books SDK.
 homepage:              https://github.com/brendanhay/gogol
 bug-reports:           https://github.com/brendanhay/gogol/issues
@@ -7,7 +7,7 @@
 license-file:          LICENSE
 author:                Brendan Hay
 maintainer:            Brendan Hay <brendan.g.hay@gmail.com>
-copyright:             Copyright (c) 2015 Brendan Hay
+copyright:             Copyright (c) 2015-2016 Brendan Hay
 category:              Network, Google, Cloud
 build-type:            Simple
 cabal-version:         >= 1.10
@@ -74,6 +74,8 @@
         , Network.Google.Resource.Books.PromoOffer.Accept
         , Network.Google.Resource.Books.PromoOffer.Dismiss
         , Network.Google.Resource.Books.PromoOffer.Get
+        , Network.Google.Resource.Books.Series.Get
+        , Network.Google.Resource.Books.Series.Membership.Get
         , Network.Google.Resource.Books.Volumes.Associated.List
         , Network.Google.Resource.Books.Volumes.Get
         , Network.Google.Resource.Books.Volumes.List
@@ -87,5 +89,5 @@
         , Network.Google.Books.Types.Sum
 
     build-depends:
-          gogol-core == 0.0.1.*
+          gogol-core == 0.1.0.*
         , base       >= 4.7 && < 5
