diff --git a/gen/Network/Google/Drive.hs b/gen/Network/Google/Drive.hs
--- a/gen/Network/Google/Drive.hs
+++ b/gen/Network/Google/Drive.hs
@@ -139,15 +139,54 @@
     -- ** drive.revisions.update
     , module Network.Google.Resource.Drive.Revisions.Update
 
+    -- ** drive.teamdrives.create
+    , module Network.Google.Resource.Drive.Teamdrives.Create
+
+    -- ** drive.teamdrives.delete
+    , module Network.Google.Resource.Drive.Teamdrives.Delete
+
+    -- ** drive.teamdrives.get
+    , module Network.Google.Resource.Drive.Teamdrives.Get
+
+    -- ** drive.teamdrives.list
+    , module Network.Google.Resource.Drive.Teamdrives.List
+
+    -- ** drive.teamdrives.update
+    , module Network.Google.Resource.Drive.Teamdrives.Update
+
     -- * Types
 
     -- ** FileList
     , FileList
     , fileList
     , flNextPageToken
+    , flIncompleteSearch
     , flKind
     , flFiles
 
+    -- ** TeamDriveCapabilities
+    , TeamDriveCapabilities
+    , teamDriveCapabilities
+    , tdcCanRename
+    , tdcCanChangeTeamMembersOnlyRestriction
+    , tdcCanComment
+    , tdcCanRenameTeamDrive
+    , tdcCanChangeTeamDriveBackgRound
+    , tdcCanDownload
+    , tdcCanChangeDomainUsersOnlyRestriction
+    , tdcCanTrashChildren
+    , tdcCanAddChildren
+    , tdcCanRemoveChildren
+    , tdcCanChangeCopyRequiresWriterPermissionRestriction
+    , tdcCanDeleteTeamDrive
+    , tdcCanListChildren
+    , tdcCanEdit
+    , tdcCanManageMembers
+    , tdcCanReadRevisions
+    , tdcCanDeleteChildren
+    , tdcCanCopy
+    , tdcCanShare
+
     -- ** FilesListCorpus
     , FilesListCorpus (..)
 
@@ -186,9 +225,28 @@
     -- ** FileCapabilities
     , FileCapabilities
     , fileCapabilities
+    , fcCanRename
     , fcCanComment
+    , fcCanMoveChildrenWithinTeamDrive
+    , fcCanDelete
+    , fcCanMoveItemIntoTeamDrive
+    , fcCanDownload
+    , fcCanTrash
+    , fcCanUntrash
+    , fcCanTrashChildren
+    , fcCanAddChildren
+    , fcCanRemoveChildren
+    , fcCanMoveTeamDriveItem
+    , fcCanMoveItemWithinTeamDrive
+    , fcCanReadTeamDrive
+    , fcCanChangeCopyRequiresWriterPermission
+    , fcCanListChildren
+    , fcCanMoveChildrenOutOfTeamDrive
     , fcCanEdit
+    , fcCanChangeViewersCanCopyContent
     , fcCanReadRevisions
+    , fcCanDeleteChildren
+    , fcCanMoveItemOutOfTeamDrive
     , fcCanCopy
     , fcCanShare
 
@@ -205,6 +263,13 @@
     , fchtImage
     , fchtMimeType
 
+    -- ** TeamDriveList
+    , TeamDriveList
+    , teamDriveList
+    , tdlNextPageToken
+    , tdlTeamDrives
+    , tdlKind
+
     -- ** Channel
     , Channel
     , channel
@@ -219,6 +284,29 @@
     , cId
     , cType
 
+    -- ** AboutTeamDriveThemesItem
+    , AboutTeamDriveThemesItem
+    , aboutTeamDriveThemesItem
+    , atdtiColorRgb
+    , atdtiBackgRoundImageLink
+    , atdtiId
+
+    -- ** TeamDriveRestrictions
+    , TeamDriveRestrictions
+    , teamDriveRestrictions
+    , tdrTeamMembersOnly
+    , tdrAdminManagedRestrictions
+    , tdrCopyRequiresWriterPermission
+    , tdrDomainUsersOnly
+
+    -- ** TeamDriveBackgRoundImageFile
+    , TeamDriveBackgRoundImageFile
+    , teamDriveBackgRoundImageFile
+    , tdbrifXCoordinate
+    , tdbrifYCoordinate
+    , tdbrifWidth
+    , tdbrifId
+
     -- ** FileVideoMediaMetadata
     , FileVideoMediaMetadata
     , fileVideoMediaMetadata
@@ -237,9 +325,26 @@
     , chaRemoved
     , chaTime
     , chaKind
+    , chaTeamDrive
+    , chaTeamDriveId
+    , chaType
     , chaFileId
     , chaFile
 
+    -- ** TeamDrive
+    , TeamDrive
+    , teamDrive
+    , tdThemeId
+    , tdBackgRoundImageFile
+    , tdColorRgb
+    , tdCreatedTime
+    , tdKind
+    , tdBackgRoundImageLink
+    , tdName
+    , tdRestrictions
+    , tdId
+    , tdCapabilities
+
     -- ** AboutExportFormats
     , AboutExportFormats
     , aboutExportFormats
@@ -263,6 +368,11 @@
     , clChanges
     , clKind
 
+    -- ** RevisionExportLinks
+    , RevisionExportLinks
+    , revisionExportLinks
+    , relAddtional
+
     -- ** FileContentHints
     , FileContentHints
     , fileContentHints
@@ -289,12 +399,14 @@
     , about
     , aExportFormats
     , aMaxImportSizes
+    , aCanCreateTeamDrives
     , aImportFormats
     , aKind
     , aAppInstalled
     , aUser
     , aStorageQuota
     , aMaxUploadSize
+    , aTeamDriveThemes
     , aFolderColorPalette
 
     -- ** FileImageMediaMetadataLocation
@@ -364,6 +476,7 @@
     , revMD5Checksum
     , revKeepForever
     , revMimeType
+    , revExportLinks
     , revPublishedOutsideDomain
     , revId
 
@@ -371,6 +484,7 @@
     , Permission
     , permission
     , pPhotoLink
+    , pTeamDrivePermissionDetails
     , pKind
     , pDomain
     , pRole
@@ -378,6 +492,7 @@
     , pAllowFileDiscovery
     , pDisplayName
     , pId
+    , pDeleted
     , pType
     , pExpirationTime
 
@@ -398,6 +513,7 @@
     , fTrashed
     , fWebViewLink
     , fCreatedTime
+    , fTrashedTime
     , fOriginalFilename
     , fKind
     , fLastModifyingUser
@@ -408,16 +524,22 @@
     , fExplicitlyTrashed
     , fShared
     , fMD5Checksum
+    , fTeamDriveId
     , fFolderColorRgb
     , fMimeType
     , fIsAppAuthorized
+    , fCopyRequiresWriterPermission
     , fName
+    , fExportLinks
     , fParents
     , fStarred
     , fSpaces
     , fVersion
+    , fHasAugmentedPermissions
     , fWritersCanShare
+    , fTrashingUser
     , fId
+    , fPermissionIds
     , fPermissions
     , fQuotaBytesUsed
     , fAppProperties
@@ -432,6 +554,14 @@
     , fContentHints
     , fProperties
 
+    -- ** PermissionTeamDrivePermissionDetailsItem
+    , PermissionTeamDrivePermissionDetailsItem
+    , permissionTeamDrivePermissionDetailsItem
+    , ptdpdiInherited
+    , ptdpdiTeamDrivePermissionType
+    , ptdpdiRole
+    , ptdpdiInheritedFrom
+
     -- ** GeneratedIds
     , GeneratedIds
     , generatedIds
@@ -439,6 +569,11 @@
     , giKind
     , giIds
 
+    -- ** FileExportLinks
+    , FileExportLinks
+    , fileExportLinks
+    , felAddtional
+
     -- ** CommentList
     , CommentList
     , commentList
@@ -456,6 +591,7 @@
     -- ** PermissionList
     , PermissionList
     , permissionList
+    , plNextPageToken
     , plKind
     , plPermissions
     ) where
@@ -496,6 +632,11 @@
 import           Network.Google.Resource.Drive.Revisions.Get
 import           Network.Google.Resource.Drive.Revisions.List
 import           Network.Google.Resource.Drive.Revisions.Update
+import           Network.Google.Resource.Drive.Teamdrives.Create
+import           Network.Google.Resource.Drive.Teamdrives.Delete
+import           Network.Google.Resource.Drive.Teamdrives.Get
+import           Network.Google.Resource.Drive.Teamdrives.List
+import           Network.Google.Resource.Drive.Teamdrives.Update
 
 {- $resources
 TODO
@@ -503,8 +644,12 @@
 
 -- | Represents the entirety of the methods and resources available for the Drive API service.
 type DriveAPI =
-     ChangesListResource :<|>
-       ChangesGetStartPageTokenResource
+     TeamdrivesListResource :<|> TeamdrivesGetResource
+       :<|> TeamdrivesCreateResource
+       :<|> TeamdrivesDeleteResource
+       :<|> TeamdrivesUpdateResource
+       :<|> ChangesListResource
+       :<|> ChangesGetStartPageTokenResource
        :<|> ChangesWatchResource
        :<|> ChannelsStopResource
        :<|> RepliesListResource
diff --git a/gen/Network/Google/Drive/Types.hs b/gen/Network/Google/Drive/Types.hs
--- a/gen/Network/Google/Drive/Types.hs
+++ b/gen/Network/Google/Drive/Types.hs
@@ -33,9 +33,33 @@
     , FileList
     , fileList
     , flNextPageToken
+    , flIncompleteSearch
     , flKind
     , flFiles
 
+    -- * TeamDriveCapabilities
+    , TeamDriveCapabilities
+    , teamDriveCapabilities
+    , tdcCanRename
+    , tdcCanChangeTeamMembersOnlyRestriction
+    , tdcCanComment
+    , tdcCanRenameTeamDrive
+    , tdcCanChangeTeamDriveBackgRound
+    , tdcCanDownload
+    , tdcCanChangeDomainUsersOnlyRestriction
+    , tdcCanTrashChildren
+    , tdcCanAddChildren
+    , tdcCanRemoveChildren
+    , tdcCanChangeCopyRequiresWriterPermissionRestriction
+    , tdcCanDeleteTeamDrive
+    , tdcCanListChildren
+    , tdcCanEdit
+    , tdcCanManageMembers
+    , tdcCanReadRevisions
+    , tdcCanDeleteChildren
+    , tdcCanCopy
+    , tdcCanShare
+
     -- * FilesListCorpus
     , FilesListCorpus (..)
 
@@ -74,9 +98,28 @@
     -- * FileCapabilities
     , FileCapabilities
     , fileCapabilities
+    , fcCanRename
     , fcCanComment
+    , fcCanMoveChildrenWithinTeamDrive
+    , fcCanDelete
+    , fcCanMoveItemIntoTeamDrive
+    , fcCanDownload
+    , fcCanTrash
+    , fcCanUntrash
+    , fcCanTrashChildren
+    , fcCanAddChildren
+    , fcCanRemoveChildren
+    , fcCanMoveTeamDriveItem
+    , fcCanMoveItemWithinTeamDrive
+    , fcCanReadTeamDrive
+    , fcCanChangeCopyRequiresWriterPermission
+    , fcCanListChildren
+    , fcCanMoveChildrenOutOfTeamDrive
     , fcCanEdit
+    , fcCanChangeViewersCanCopyContent
     , fcCanReadRevisions
+    , fcCanDeleteChildren
+    , fcCanMoveItemOutOfTeamDrive
     , fcCanCopy
     , fcCanShare
 
@@ -93,6 +136,13 @@
     , fchtImage
     , fchtMimeType
 
+    -- * TeamDriveList
+    , TeamDriveList
+    , teamDriveList
+    , tdlNextPageToken
+    , tdlTeamDrives
+    , tdlKind
+
     -- * Channel
     , Channel
     , channel
@@ -107,6 +157,29 @@
     , cId
     , cType
 
+    -- * AboutTeamDriveThemesItem
+    , AboutTeamDriveThemesItem
+    , aboutTeamDriveThemesItem
+    , atdtiColorRgb
+    , atdtiBackgRoundImageLink
+    , atdtiId
+
+    -- * TeamDriveRestrictions
+    , TeamDriveRestrictions
+    , teamDriveRestrictions
+    , tdrTeamMembersOnly
+    , tdrAdminManagedRestrictions
+    , tdrCopyRequiresWriterPermission
+    , tdrDomainUsersOnly
+
+    -- * TeamDriveBackgRoundImageFile
+    , TeamDriveBackgRoundImageFile
+    , teamDriveBackgRoundImageFile
+    , tdbrifXCoordinate
+    , tdbrifYCoordinate
+    , tdbrifWidth
+    , tdbrifId
+
     -- * FileVideoMediaMetadata
     , FileVideoMediaMetadata
     , fileVideoMediaMetadata
@@ -125,9 +198,26 @@
     , chaRemoved
     , chaTime
     , chaKind
+    , chaTeamDrive
+    , chaTeamDriveId
+    , chaType
     , chaFileId
     , chaFile
 
+    -- * TeamDrive
+    , TeamDrive
+    , teamDrive
+    , tdThemeId
+    , tdBackgRoundImageFile
+    , tdColorRgb
+    , tdCreatedTime
+    , tdKind
+    , tdBackgRoundImageLink
+    , tdName
+    , tdRestrictions
+    , tdId
+    , tdCapabilities
+
     -- * AboutExportFormats
     , AboutExportFormats
     , aboutExportFormats
@@ -151,6 +241,11 @@
     , clChanges
     , clKind
 
+    -- * RevisionExportLinks
+    , RevisionExportLinks
+    , revisionExportLinks
+    , relAddtional
+
     -- * FileContentHints
     , FileContentHints
     , fileContentHints
@@ -177,12 +272,14 @@
     , about
     , aExportFormats
     , aMaxImportSizes
+    , aCanCreateTeamDrives
     , aImportFormats
     , aKind
     , aAppInstalled
     , aUser
     , aStorageQuota
     , aMaxUploadSize
+    , aTeamDriveThemes
     , aFolderColorPalette
 
     -- * FileImageMediaMetadataLocation
@@ -252,6 +349,7 @@
     , revMD5Checksum
     , revKeepForever
     , revMimeType
+    , revExportLinks
     , revPublishedOutsideDomain
     , revId
 
@@ -259,6 +357,7 @@
     , Permission
     , permission
     , pPhotoLink
+    , pTeamDrivePermissionDetails
     , pKind
     , pDomain
     , pRole
@@ -266,6 +365,7 @@
     , pAllowFileDiscovery
     , pDisplayName
     , pId
+    , pDeleted
     , pType
     , pExpirationTime
 
@@ -286,6 +386,7 @@
     , fTrashed
     , fWebViewLink
     , fCreatedTime
+    , fTrashedTime
     , fOriginalFilename
     , fKind
     , fLastModifyingUser
@@ -296,16 +397,22 @@
     , fExplicitlyTrashed
     , fShared
     , fMD5Checksum
+    , fTeamDriveId
     , fFolderColorRgb
     , fMimeType
     , fIsAppAuthorized
+    , fCopyRequiresWriterPermission
     , fName
+    , fExportLinks
     , fParents
     , fStarred
     , fSpaces
     , fVersion
+    , fHasAugmentedPermissions
     , fWritersCanShare
+    , fTrashingUser
     , fId
+    , fPermissionIds
     , fPermissions
     , fQuotaBytesUsed
     , fAppProperties
@@ -320,6 +427,14 @@
     , fContentHints
     , fProperties
 
+    -- * PermissionTeamDrivePermissionDetailsItem
+    , PermissionTeamDrivePermissionDetailsItem
+    , permissionTeamDrivePermissionDetailsItem
+    , ptdpdiInherited
+    , ptdpdiTeamDrivePermissionType
+    , ptdpdiRole
+    , ptdpdiInheritedFrom
+
     -- * GeneratedIds
     , GeneratedIds
     , generatedIds
@@ -327,6 +442,11 @@
     , giKind
     , giIds
 
+    -- * FileExportLinks
+    , FileExportLinks
+    , fileExportLinks
+    , felAddtional
+
     -- * CommentList
     , CommentList
     , commentList
@@ -344,6 +464,7 @@
     -- * PermissionList
     , PermissionList
     , permissionList
+    , plNextPageToken
     , plKind
     , plPermissions
     ) where
@@ -370,11 +491,11 @@
 driveAppDataScope :: Proxy '["https://www.googleapis.com/auth/drive.appdata"]
 driveAppDataScope = Proxy;
 
--- | View the files in your Google Drive
+-- | See and download all your Google Drive files
 driveReadOnlyScope :: Proxy '["https://www.googleapis.com/auth/drive.readonly"]
 driveReadOnlyScope = Proxy;
 
--- | View and manage the files in your Google Drive
+-- | See, edit, create, and delete all of your Google Drive files
 driveScope :: Proxy '["https://www.googleapis.com/auth/drive"]
 driveScope = Proxy;
 
diff --git a/gen/Network/Google/Drive/Types/Product.hs b/gen/Network/Google/Drive/Types/Product.hs
--- a/gen/Network/Google/Drive/Types/Product.hs
+++ b/gen/Network/Google/Drive/Types/Product.hs
@@ -24,3081 +24,4450 @@
 --
 -- /See:/ 'fileList' smart constructor.
 data FileList = FileList'
-    { _flNextPageToken :: !(Maybe Text)
-    , _flKind          :: !Text
-    , _flFiles         :: !(Maybe [File])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'FileList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'flNextPageToken'
---
--- * 'flKind'
---
--- * 'flFiles'
-fileList
-    :: FileList
-fileList =
-    FileList'
-    { _flNextPageToken = Nothing
-    , _flKind = "drive#fileList"
-    , _flFiles = Nothing
-    }
-
--- | The page token for the next page of files. This will be absent if the
--- end of the files list has been reached. If the token is rejected for any
--- reason, it should be discarded, and pagination should be restarted from
--- the first page of results.
-flNextPageToken :: Lens' FileList (Maybe Text)
-flNextPageToken
-  = lens _flNextPageToken
-      (\ s a -> s{_flNextPageToken = a})
-
--- | Identifies what kind of resource this is. Value: the fixed string
--- \"drive#fileList\".
-flKind :: Lens' FileList Text
-flKind = lens _flKind (\ s a -> s{_flKind = a})
-
--- | The list of files. If nextPageToken is populated, then this list may be
--- incomplete and an additional page of results should be fetched.
-flFiles :: Lens' FileList [File]
-flFiles
-  = lens _flFiles (\ s a -> s{_flFiles = a}) . _Default
-      . _Coerce
-
-instance FromJSON FileList where
-        parseJSON
-          = withObject "FileList"
-              (\ o ->
-                 FileList' <$>
-                   (o .:? "nextPageToken") <*>
-                     (o .:? "kind" .!= "drive#fileList")
-                     <*> (o .:? "files" .!= mempty))
-
-instance ToJSON FileList where
-        toJSON FileList'{..}
-          = object
-              (catMaybes
-                 [("nextPageToken" .=) <$> _flNextPageToken,
-                  Just ("kind" .= _flKind), ("files" .=) <$> _flFiles])
-
--- | The file content to which the comment refers, typically within the
--- anchor region. For a text file, for example, this would be the text at
--- the location of the comment.
---
--- /See:/ 'commentQuotedFileContent' smart constructor.
-data CommentQuotedFileContent = CommentQuotedFileContent'
-    { _cqfcValue    :: !(Maybe Text)
-    , _cqfcMimeType :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CommentQuotedFileContent' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cqfcValue'
---
--- * 'cqfcMimeType'
-commentQuotedFileContent
-    :: CommentQuotedFileContent
-commentQuotedFileContent =
-    CommentQuotedFileContent'
-    { _cqfcValue = Nothing
-    , _cqfcMimeType = Nothing
-    }
-
--- | The quoted content itself. This is interpreted as plain text if set
--- through the API.
-cqfcValue :: Lens' CommentQuotedFileContent (Maybe Text)
-cqfcValue
-  = lens _cqfcValue (\ s a -> s{_cqfcValue = a})
-
--- | The MIME type of the quoted content.
-cqfcMimeType :: Lens' CommentQuotedFileContent (Maybe Text)
-cqfcMimeType
-  = lens _cqfcMimeType (\ s a -> s{_cqfcMimeType = a})
-
-instance FromJSON CommentQuotedFileContent where
-        parseJSON
-          = withObject "CommentQuotedFileContent"
-              (\ o ->
-                 CommentQuotedFileContent' <$>
-                   (o .:? "value") <*> (o .:? "mimeType"))
-
-instance ToJSON CommentQuotedFileContent where
-        toJSON CommentQuotedFileContent'{..}
-          = object
-              (catMaybes
-                 [("value" .=) <$> _cqfcValue,
-                  ("mimeType" .=) <$> _cqfcMimeType])
-
--- | The user\'s storage quota limits and usage. All fields are measured in
--- bytes.
---
--- /See:/ 'aboutStorageQuota' smart constructor.
-data AboutStorageQuota = AboutStorageQuota'
-    { _asqUsageInDriveTrash :: !(Maybe (Textual Int64))
-    , _asqLimit             :: !(Maybe (Textual Int64))
-    , _asqUsage             :: !(Maybe (Textual Int64))
-    , _asqUsageInDrive      :: !(Maybe (Textual Int64))
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AboutStorageQuota' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'asqUsageInDriveTrash'
---
--- * 'asqLimit'
---
--- * 'asqUsage'
---
--- * 'asqUsageInDrive'
-aboutStorageQuota
-    :: AboutStorageQuota
-aboutStorageQuota =
-    AboutStorageQuota'
-    { _asqUsageInDriveTrash = Nothing
-    , _asqLimit = Nothing
-    , _asqUsage = Nothing
-    , _asqUsageInDrive = Nothing
-    }
-
--- | The usage by trashed files in Google Drive.
-asqUsageInDriveTrash :: Lens' AboutStorageQuota (Maybe Int64)
-asqUsageInDriveTrash
-  = lens _asqUsageInDriveTrash
-      (\ s a -> s{_asqUsageInDriveTrash = a})
-      . mapping _Coerce
-
--- | The usage limit, if applicable. This will not be present if the user has
--- unlimited storage.
-asqLimit :: Lens' AboutStorageQuota (Maybe Int64)
-asqLimit
-  = lens _asqLimit (\ s a -> s{_asqLimit = a}) .
-      mapping _Coerce
-
--- | The total usage across all services.
-asqUsage :: Lens' AboutStorageQuota (Maybe Int64)
-asqUsage
-  = lens _asqUsage (\ s a -> s{_asqUsage = a}) .
-      mapping _Coerce
-
--- | The usage by all files in Google Drive.
-asqUsageInDrive :: Lens' AboutStorageQuota (Maybe Int64)
-asqUsageInDrive
-  = lens _asqUsageInDrive
-      (\ s a -> s{_asqUsageInDrive = a})
-      . mapping _Coerce
-
-instance FromJSON AboutStorageQuota where
-        parseJSON
-          = withObject "AboutStorageQuota"
-              (\ o ->
-                 AboutStorageQuota' <$>
-                   (o .:? "usageInDriveTrash") <*> (o .:? "limit") <*>
-                     (o .:? "usage")
-                     <*> (o .:? "usageInDrive"))
-
-instance ToJSON AboutStorageQuota where
-        toJSON AboutStorageQuota'{..}
-          = object
-              (catMaybes
-                 [("usageInDriveTrash" .=) <$> _asqUsageInDriveTrash,
-                  ("limit" .=) <$> _asqLimit,
-                  ("usage" .=) <$> _asqUsage,
-                  ("usageInDrive" .=) <$> _asqUsageInDrive])
-
--- | A reply to a comment on a file.
---
--- /See:/ 'reply' smart constructor.
-data Reply = Reply'
-    { _rHTMLContent  :: !(Maybe Text)
-    , _rModifiedTime :: !(Maybe DateTime')
-    , _rCreatedTime  :: !(Maybe DateTime')
-    , _rKind         :: !Text
-    , _rAction       :: !(Maybe Text)
-    , _rContent      :: !(Maybe Text)
-    , _rAuthor       :: !(Maybe User)
-    , _rId           :: !(Maybe Text)
-    , _rDeleted      :: !(Maybe Bool)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Reply' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rHTMLContent'
---
--- * 'rModifiedTime'
---
--- * 'rCreatedTime'
---
--- * 'rKind'
---
--- * 'rAction'
---
--- * 'rContent'
---
--- * 'rAuthor'
---
--- * 'rId'
---
--- * 'rDeleted'
-reply
-    :: Reply
-reply =
-    Reply'
-    { _rHTMLContent = Nothing
-    , _rModifiedTime = Nothing
-    , _rCreatedTime = Nothing
-    , _rKind = "drive#reply"
-    , _rAction = Nothing
-    , _rContent = Nothing
-    , _rAuthor = Nothing
-    , _rId = Nothing
-    , _rDeleted = Nothing
-    }
-
--- | The content of the reply with HTML formatting.
-rHTMLContent :: Lens' Reply (Maybe Text)
-rHTMLContent
-  = lens _rHTMLContent (\ s a -> s{_rHTMLContent = a})
-
--- | The last time the reply was modified (RFC 3339 date-time).
-rModifiedTime :: Lens' Reply (Maybe UTCTime)
-rModifiedTime
-  = lens _rModifiedTime
-      (\ s a -> s{_rModifiedTime = a})
-      . mapping _DateTime
-
--- | The time at which the reply was created (RFC 3339 date-time).
-rCreatedTime :: Lens' Reply (Maybe UTCTime)
-rCreatedTime
-  = lens _rCreatedTime (\ s a -> s{_rCreatedTime = a})
-      . mapping _DateTime
-
--- | Identifies what kind of resource this is. Value: the fixed string
--- \"drive#reply\".
-rKind :: Lens' Reply Text
-rKind = lens _rKind (\ s a -> s{_rKind = a})
-
--- | The action the reply performed to the parent comment. Valid values are:
--- - resolve - reopen
-rAction :: Lens' Reply (Maybe Text)
-rAction = lens _rAction (\ s a -> s{_rAction = a})
-
--- | The plain text content of the reply. This field is used for setting the
--- content, while htmlContent should be displayed. This is required on
--- creates if no action is specified.
-rContent :: Lens' Reply (Maybe Text)
-rContent = lens _rContent (\ s a -> s{_rContent = a})
-
--- | The user who created the reply.
-rAuthor :: Lens' Reply (Maybe User)
-rAuthor = lens _rAuthor (\ s a -> s{_rAuthor = a})
-
--- | The ID of the reply.
-rId :: Lens' Reply (Maybe Text)
-rId = lens _rId (\ s a -> s{_rId = a})
-
--- | Whether the reply has been deleted. A deleted reply has no content.
-rDeleted :: Lens' Reply (Maybe Bool)
-rDeleted = lens _rDeleted (\ s a -> s{_rDeleted = a})
-
-instance FromJSON Reply where
-        parseJSON
-          = withObject "Reply"
-              (\ o ->
-                 Reply' <$>
-                   (o .:? "htmlContent") <*> (o .:? "modifiedTime") <*>
-                     (o .:? "createdTime")
-                     <*> (o .:? "kind" .!= "drive#reply")
-                     <*> (o .:? "action")
-                     <*> (o .:? "content")
-                     <*> (o .:? "author")
-                     <*> (o .:? "id")
-                     <*> (o .:? "deleted"))
-
-instance ToJSON Reply where
-        toJSON Reply'{..}
-          = object
-              (catMaybes
-                 [("htmlContent" .=) <$> _rHTMLContent,
-                  ("modifiedTime" .=) <$> _rModifiedTime,
-                  ("createdTime" .=) <$> _rCreatedTime,
-                  Just ("kind" .= _rKind), ("action" .=) <$> _rAction,
-                  ("content" .=) <$> _rContent,
-                  ("author" .=) <$> _rAuthor, ("id" .=) <$> _rId,
-                  ("deleted" .=) <$> _rDeleted])
-
--- | A map of source MIME type to possible targets for all supported imports.
---
--- /See:/ 'aboutImportFormats' smart constructor.
-newtype AboutImportFormats = AboutImportFormats'
-    { _aifAddtional :: HashMap Text [Text]
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AboutImportFormats' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'aifAddtional'
-aboutImportFormats
-    :: HashMap Text [Text] -- ^ 'aifAddtional'
-    -> AboutImportFormats
-aboutImportFormats pAifAddtional_ =
-    AboutImportFormats'
-    { _aifAddtional = _Coerce # pAifAddtional_
-    }
-
-aifAddtional :: Lens' AboutImportFormats (HashMap Text [Text])
-aifAddtional
-  = lens _aifAddtional (\ s a -> s{_aifAddtional = a})
-      . _Coerce
-
-instance FromJSON AboutImportFormats where
-        parseJSON
-          = withObject "AboutImportFormats"
-              (\ o -> AboutImportFormats' <$> (parseJSONObject o))
-
-instance ToJSON AboutImportFormats where
-        toJSON = toJSON . _aifAddtional
-
--- | Capabilities the current user has on the file.
---
--- /See:/ 'fileCapabilities' smart constructor.
-data FileCapabilities = FileCapabilities'
-    { _fcCanComment       :: !(Maybe Bool)
-    , _fcCanEdit          :: !(Maybe Bool)
-    , _fcCanReadRevisions :: !(Maybe Bool)
-    , _fcCanCopy          :: !(Maybe Bool)
-    , _fcCanShare         :: !(Maybe Bool)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'FileCapabilities' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'fcCanComment'
---
--- * 'fcCanEdit'
---
--- * 'fcCanReadRevisions'
---
--- * 'fcCanCopy'
---
--- * 'fcCanShare'
-fileCapabilities
-    :: FileCapabilities
-fileCapabilities =
-    FileCapabilities'
-    { _fcCanComment = Nothing
-    , _fcCanEdit = Nothing
-    , _fcCanReadRevisions = Nothing
-    , _fcCanCopy = Nothing
-    , _fcCanShare = Nothing
-    }
-
--- | Whether the user can comment on the file.
-fcCanComment :: Lens' FileCapabilities (Maybe Bool)
-fcCanComment
-  = lens _fcCanComment (\ s a -> s{_fcCanComment = a})
-
--- | Whether the user can edit the file\'s content.
-fcCanEdit :: Lens' FileCapabilities (Maybe Bool)
-fcCanEdit
-  = lens _fcCanEdit (\ s a -> s{_fcCanEdit = a})
-
--- | Whether the current user has read access to the Revisions resource of
--- the file.
-fcCanReadRevisions :: Lens' FileCapabilities (Maybe Bool)
-fcCanReadRevisions
-  = lens _fcCanReadRevisions
-      (\ s a -> s{_fcCanReadRevisions = a})
-
--- | Whether the user can copy the file.
-fcCanCopy :: Lens' FileCapabilities (Maybe Bool)
-fcCanCopy
-  = lens _fcCanCopy (\ s a -> s{_fcCanCopy = a})
-
--- | Whether the user can modify the file\'s permissions and sharing
--- settings.
-fcCanShare :: Lens' FileCapabilities (Maybe Bool)
-fcCanShare
-  = lens _fcCanShare (\ s a -> s{_fcCanShare = a})
-
-instance FromJSON FileCapabilities where
-        parseJSON
-          = withObject "FileCapabilities"
-              (\ o ->
-                 FileCapabilities' <$>
-                   (o .:? "canComment") <*> (o .:? "canEdit") <*>
-                     (o .:? "canReadRevisions")
-                     <*> (o .:? "canCopy")
-                     <*> (o .:? "canShare"))
-
-instance ToJSON FileCapabilities where
-        toJSON FileCapabilities'{..}
-          = object
-              (catMaybes
-                 [("canComment" .=) <$> _fcCanComment,
-                  ("canEdit" .=) <$> _fcCanEdit,
-                  ("canReadRevisions" .=) <$> _fcCanReadRevisions,
-                  ("canCopy" .=) <$> _fcCanCopy,
-                  ("canShare" .=) <$> _fcCanShare])
-
--- | A list of replies to a comment on a file.
---
--- /See:/ 'replyList' smart constructor.
-data ReplyList = ReplyList'
-    { _rlNextPageToken :: !(Maybe Text)
-    , _rlKind          :: !Text
-    , _rlReplies       :: !(Maybe [Reply])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ReplyList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rlNextPageToken'
---
--- * 'rlKind'
---
--- * 'rlReplies'
-replyList
-    :: ReplyList
-replyList =
-    ReplyList'
-    { _rlNextPageToken = Nothing
-    , _rlKind = "drive#replyList"
-    , _rlReplies = Nothing
-    }
-
--- | The page token for the next page of replies. This will be absent if the
--- end of the replies list has been reached. If the token is rejected for
--- any reason, it should be discarded, and pagination should be restarted
--- from the first page of results.
-rlNextPageToken :: Lens' ReplyList (Maybe Text)
-rlNextPageToken
-  = lens _rlNextPageToken
-      (\ s a -> s{_rlNextPageToken = a})
-
--- | Identifies what kind of resource this is. Value: the fixed string
--- \"drive#replyList\".
-rlKind :: Lens' ReplyList Text
-rlKind = lens _rlKind (\ s a -> s{_rlKind = a})
-
--- | The list of replies. If nextPageToken is populated, then this list may
--- be incomplete and an additional page of results should be fetched.
-rlReplies :: Lens' ReplyList [Reply]
-rlReplies
-  = lens _rlReplies (\ s a -> s{_rlReplies = a}) .
-      _Default
-      . _Coerce
-
-instance FromJSON ReplyList where
-        parseJSON
-          = withObject "ReplyList"
-              (\ o ->
-                 ReplyList' <$>
-                   (o .:? "nextPageToken") <*>
-                     (o .:? "kind" .!= "drive#replyList")
-                     <*> (o .:? "replies" .!= mempty))
-
-instance ToJSON ReplyList where
-        toJSON ReplyList'{..}
-          = object
-              (catMaybes
-                 [("nextPageToken" .=) <$> _rlNextPageToken,
-                  Just ("kind" .= _rlKind),
-                  ("replies" .=) <$> _rlReplies])
-
--- | A thumbnail for the file. This will only be used if Drive cannot
--- generate a standard thumbnail.
---
--- /See:/ 'fileContentHintsThumbnail' smart constructor.
-data FileContentHintsThumbnail = FileContentHintsThumbnail'
-    { _fchtImage    :: !(Maybe Bytes)
-    , _fchtMimeType :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'FileContentHintsThumbnail' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'fchtImage'
---
--- * 'fchtMimeType'
-fileContentHintsThumbnail
-    :: FileContentHintsThumbnail
-fileContentHintsThumbnail =
-    FileContentHintsThumbnail'
-    { _fchtImage = Nothing
-    , _fchtMimeType = Nothing
-    }
-
--- | The thumbnail data encoded with URL-safe Base64 (RFC 4648 section 5).
-fchtImage :: Lens' FileContentHintsThumbnail (Maybe ByteString)
-fchtImage
-  = lens _fchtImage (\ s a -> s{_fchtImage = a}) .
-      mapping _Bytes
-
--- | The MIME type of the thumbnail.
-fchtMimeType :: Lens' FileContentHintsThumbnail (Maybe Text)
-fchtMimeType
-  = lens _fchtMimeType (\ s a -> s{_fchtMimeType = a})
-
-instance FromJSON FileContentHintsThumbnail where
-        parseJSON
-          = withObject "FileContentHintsThumbnail"
-              (\ o ->
-                 FileContentHintsThumbnail' <$>
-                   (o .:? "image") <*> (o .:? "mimeType"))
-
-instance ToJSON FileContentHintsThumbnail where
-        toJSON FileContentHintsThumbnail'{..}
-          = object
-              (catMaybes
-                 [("image" .=) <$> _fchtImage,
-                  ("mimeType" .=) <$> _fchtMimeType])
-
--- | An notification channel used to watch for resource changes.
---
--- /See:/ 'channel' smart constructor.
-data Channel = Channel'
-    { _cResourceURI :: !(Maybe Text)
-    , _cResourceId  :: !(Maybe Text)
-    , _cKind        :: !Text
-    , _cExpiration  :: !(Maybe (Textual Int64))
-    , _cToken       :: !(Maybe Text)
-    , _cAddress     :: !(Maybe Text)
-    , _cPayload     :: !(Maybe Bool)
-    , _cParams      :: !(Maybe ChannelParams)
-    , _cId          :: !(Maybe Text)
-    , _cType        :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Channel' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cResourceURI'
---
--- * 'cResourceId'
---
--- * 'cKind'
---
--- * 'cExpiration'
---
--- * 'cToken'
---
--- * 'cAddress'
---
--- * 'cPayload'
---
--- * 'cParams'
---
--- * 'cId'
---
--- * 'cType'
-channel
-    :: Channel
-channel =
-    Channel'
-    { _cResourceURI = Nothing
-    , _cResourceId = Nothing
-    , _cKind = "api#channel"
-    , _cExpiration = Nothing
-    , _cToken = Nothing
-    , _cAddress = Nothing
-    , _cPayload = Nothing
-    , _cParams = Nothing
-    , _cId = Nothing
-    , _cType = Nothing
-    }
-
--- | A version-specific identifier for the watched resource.
-cResourceURI :: Lens' Channel (Maybe Text)
-cResourceURI
-  = lens _cResourceURI (\ s a -> s{_cResourceURI = a})
-
--- | An opaque ID that identifies the resource being watched on this channel.
--- Stable across different API versions.
-cResourceId :: Lens' Channel (Maybe Text)
-cResourceId
-  = lens _cResourceId (\ s a -> s{_cResourceId = a})
-
--- | Identifies this as a notification channel used to watch for changes to a
--- resource. Value: the fixed string \"api#channel\".
-cKind :: Lens' Channel Text
-cKind = lens _cKind (\ s a -> s{_cKind = a})
-
--- | Date and time of notification channel expiration, expressed as a Unix
--- timestamp, in milliseconds. Optional.
-cExpiration :: Lens' Channel (Maybe Int64)
-cExpiration
-  = lens _cExpiration (\ s a -> s{_cExpiration = a}) .
-      mapping _Coerce
-
--- | An arbitrary string delivered to the target address with each
--- notification delivered over this channel. Optional.
-cToken :: Lens' Channel (Maybe Text)
-cToken = lens _cToken (\ s a -> s{_cToken = a})
-
--- | The address where notifications are delivered for this channel.
-cAddress :: Lens' Channel (Maybe Text)
-cAddress = lens _cAddress (\ s a -> s{_cAddress = a})
-
--- | A Boolean value to indicate whether payload is wanted. Optional.
-cPayload :: Lens' Channel (Maybe Bool)
-cPayload = lens _cPayload (\ s a -> s{_cPayload = a})
-
--- | Additional parameters controlling delivery channel behavior. Optional.
-cParams :: Lens' Channel (Maybe ChannelParams)
-cParams = lens _cParams (\ s a -> s{_cParams = a})
-
--- | A UUID or similar unique string that identifies this channel.
-cId :: Lens' Channel (Maybe Text)
-cId = lens _cId (\ s a -> s{_cId = a})
-
--- | The type of delivery mechanism used for this channel.
-cType :: Lens' Channel (Maybe Text)
-cType = lens _cType (\ s a -> s{_cType = a})
-
-instance FromJSON Channel where
-        parseJSON
-          = withObject "Channel"
-              (\ o ->
-                 Channel' <$>
-                   (o .:? "resourceUri") <*> (o .:? "resourceId") <*>
-                     (o .:? "kind" .!= "api#channel")
-                     <*> (o .:? "expiration")
-                     <*> (o .:? "token")
-                     <*> (o .:? "address")
-                     <*> (o .:? "payload")
-                     <*> (o .:? "params")
-                     <*> (o .:? "id")
-                     <*> (o .:? "type"))
-
-instance ToJSON Channel where
-        toJSON Channel'{..}
-          = object
-              (catMaybes
-                 [("resourceUri" .=) <$> _cResourceURI,
-                  ("resourceId" .=) <$> _cResourceId,
-                  Just ("kind" .= _cKind),
-                  ("expiration" .=) <$> _cExpiration,
-                  ("token" .=) <$> _cToken,
-                  ("address" .=) <$> _cAddress,
-                  ("payload" .=) <$> _cPayload,
-                  ("params" .=) <$> _cParams, ("id" .=) <$> _cId,
-                  ("type" .=) <$> _cType])
-
--- | Additional metadata about video media. This may not be available
--- immediately upon upload.
---
--- /See:/ 'fileVideoMediaMetadata' smart constructor.
-data FileVideoMediaMetadata = FileVideoMediaMetadata'
-    { _fvmmHeight         :: !(Maybe (Textual Int32))
-    , _fvmmWidth          :: !(Maybe (Textual Int32))
-    , _fvmmDurationMillis :: !(Maybe (Textual Int64))
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'FileVideoMediaMetadata' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'fvmmHeight'
---
--- * 'fvmmWidth'
---
--- * 'fvmmDurationMillis'
-fileVideoMediaMetadata
-    :: FileVideoMediaMetadata
-fileVideoMediaMetadata =
-    FileVideoMediaMetadata'
-    { _fvmmHeight = Nothing
-    , _fvmmWidth = Nothing
-    , _fvmmDurationMillis = Nothing
-    }
-
--- | The height of the video in pixels.
-fvmmHeight :: Lens' FileVideoMediaMetadata (Maybe Int32)
-fvmmHeight
-  = lens _fvmmHeight (\ s a -> s{_fvmmHeight = a}) .
-      mapping _Coerce
-
--- | The width of the video in pixels.
-fvmmWidth :: Lens' FileVideoMediaMetadata (Maybe Int32)
-fvmmWidth
-  = lens _fvmmWidth (\ s a -> s{_fvmmWidth = a}) .
-      mapping _Coerce
-
--- | The duration of the video in milliseconds.
-fvmmDurationMillis :: Lens' FileVideoMediaMetadata (Maybe Int64)
-fvmmDurationMillis
-  = lens _fvmmDurationMillis
-      (\ s a -> s{_fvmmDurationMillis = a})
-      . mapping _Coerce
-
-instance FromJSON FileVideoMediaMetadata where
-        parseJSON
-          = withObject "FileVideoMediaMetadata"
-              (\ o ->
-                 FileVideoMediaMetadata' <$>
-                   (o .:? "height") <*> (o .:? "width") <*>
-                     (o .:? "durationMillis"))
-
-instance ToJSON FileVideoMediaMetadata where
-        toJSON FileVideoMediaMetadata'{..}
-          = object
-              (catMaybes
-                 [("height" .=) <$> _fvmmHeight,
-                  ("width" .=) <$> _fvmmWidth,
-                  ("durationMillis" .=) <$> _fvmmDurationMillis])
-
--- | A collection of arbitrary key-value pairs which are private to the
--- requesting app. Entries with null values are cleared in update and copy
--- requests.
---
--- /See:/ 'fileAppProperties' smart constructor.
-newtype FileAppProperties = FileAppProperties'
-    { _fapAddtional :: HashMap Text Text
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'FileAppProperties' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'fapAddtional'
-fileAppProperties
-    :: HashMap Text Text -- ^ 'fapAddtional'
-    -> FileAppProperties
-fileAppProperties pFapAddtional_ =
-    FileAppProperties'
-    { _fapAddtional = _Coerce # pFapAddtional_
-    }
-
-fapAddtional :: Lens' FileAppProperties (HashMap Text Text)
-fapAddtional
-  = lens _fapAddtional (\ s a -> s{_fapAddtional = a})
-      . _Coerce
-
-instance FromJSON FileAppProperties where
-        parseJSON
-          = withObject "FileAppProperties"
-              (\ o -> FileAppProperties' <$> (parseJSONObject o))
-
-instance ToJSON FileAppProperties where
-        toJSON = toJSON . _fapAddtional
-
--- | A change to a file.
---
--- /See:/ 'change' smart constructor.
-data Change = Change'
-    { _chaRemoved :: !(Maybe Bool)
-    , _chaTime    :: !(Maybe DateTime')
-    , _chaKind    :: !Text
-    , _chaFileId  :: !(Maybe Text)
-    , _chaFile    :: !(Maybe File)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Change' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'chaRemoved'
---
--- * 'chaTime'
---
--- * 'chaKind'
---
--- * 'chaFileId'
---
--- * 'chaFile'
-change
-    :: Change
-change =
-    Change'
-    { _chaRemoved = Nothing
-    , _chaTime = Nothing
-    , _chaKind = "drive#change"
-    , _chaFileId = Nothing
-    , _chaFile = Nothing
-    }
-
--- | Whether the file has been removed from the view of the changes list, for
--- example by deletion or lost access.
-chaRemoved :: Lens' Change (Maybe Bool)
-chaRemoved
-  = lens _chaRemoved (\ s a -> s{_chaRemoved = a})
-
--- | The time of this change (RFC 3339 date-time).
-chaTime :: Lens' Change (Maybe UTCTime)
-chaTime
-  = lens _chaTime (\ s a -> s{_chaTime = a}) .
-      mapping _DateTime
-
--- | Identifies what kind of resource this is. Value: the fixed string
--- \"drive#change\".
-chaKind :: Lens' Change Text
-chaKind = lens _chaKind (\ s a -> s{_chaKind = a})
-
--- | The ID of the file which has changed.
-chaFileId :: Lens' Change (Maybe Text)
-chaFileId
-  = lens _chaFileId (\ s a -> s{_chaFileId = a})
-
--- | The updated state of the file. Present if the file has not been removed.
-chaFile :: Lens' Change (Maybe File)
-chaFile = lens _chaFile (\ s a -> s{_chaFile = a})
-
-instance FromJSON Change where
-        parseJSON
-          = withObject "Change"
-              (\ o ->
-                 Change' <$>
-                   (o .:? "removed") <*> (o .:? "time") <*>
-                     (o .:? "kind" .!= "drive#change")
-                     <*> (o .:? "fileId")
-                     <*> (o .:? "file"))
-
-instance ToJSON Change where
-        toJSON Change'{..}
-          = object
-              (catMaybes
-                 [("removed" .=) <$> _chaRemoved,
-                  ("time" .=) <$> _chaTime, Just ("kind" .= _chaKind),
-                  ("fileId" .=) <$> _chaFileId,
-                  ("file" .=) <$> _chaFile])
-
--- | A map of source MIME type to possible targets for all supported exports.
---
--- /See:/ 'aboutExportFormats' smart constructor.
-newtype AboutExportFormats = AboutExportFormats'
-    { _aefAddtional :: HashMap Text [Text]
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AboutExportFormats' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'aefAddtional'
-aboutExportFormats
-    :: HashMap Text [Text] -- ^ 'aefAddtional'
-    -> AboutExportFormats
-aboutExportFormats pAefAddtional_ =
-    AboutExportFormats'
-    { _aefAddtional = _Coerce # pAefAddtional_
-    }
-
-aefAddtional :: Lens' AboutExportFormats (HashMap Text [Text])
-aefAddtional
-  = lens _aefAddtional (\ s a -> s{_aefAddtional = a})
-      . _Coerce
-
-instance FromJSON AboutExportFormats where
-        parseJSON
-          = withObject "AboutExportFormats"
-              (\ o -> AboutExportFormats' <$> (parseJSONObject o))
-
-instance ToJSON AboutExportFormats where
-        toJSON = toJSON . _aefAddtional
-
--- | Information about a Drive user.
---
--- /See:/ 'user' smart constructor.
-data User = User'
-    { _uPhotoLink    :: !(Maybe Text)
-    , _uMe           :: !(Maybe Bool)
-    , _uKind         :: !Text
-    , _uEmailAddress :: !(Maybe Text)
-    , _uDisplayName  :: !(Maybe Text)
-    , _uPermissionId :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'User' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'uPhotoLink'
---
--- * 'uMe'
---
--- * 'uKind'
---
--- * 'uEmailAddress'
---
--- * 'uDisplayName'
---
--- * 'uPermissionId'
-user
-    :: User
-user =
-    User'
-    { _uPhotoLink = Nothing
-    , _uMe = Nothing
-    , _uKind = "drive#user"
-    , _uEmailAddress = Nothing
-    , _uDisplayName = Nothing
-    , _uPermissionId = Nothing
-    }
-
--- | A link to the user\'s profile photo, if available.
-uPhotoLink :: Lens' User (Maybe Text)
-uPhotoLink
-  = lens _uPhotoLink (\ s a -> s{_uPhotoLink = a})
-
--- | Whether this user is the requesting user.
-uMe :: Lens' User (Maybe Bool)
-uMe = lens _uMe (\ s a -> s{_uMe = a})
-
--- | Identifies what kind of resource this is. Value: the fixed string
--- \"drive#user\".
-uKind :: Lens' User Text
-uKind = lens _uKind (\ s a -> s{_uKind = a})
-
--- | The email address of the user. This may not be present in certain
--- contexts if the user has not made their email address visible to the
--- requester.
-uEmailAddress :: Lens' User (Maybe Text)
-uEmailAddress
-  = lens _uEmailAddress
-      (\ s a -> s{_uEmailAddress = a})
-
--- | A plain text displayable name for this user.
-uDisplayName :: Lens' User (Maybe Text)
-uDisplayName
-  = lens _uDisplayName (\ s a -> s{_uDisplayName = a})
-
--- | The user\'s ID as visible in Permission resources.
-uPermissionId :: Lens' User (Maybe Text)
-uPermissionId
-  = lens _uPermissionId
-      (\ s a -> s{_uPermissionId = a})
-
-instance FromJSON User where
-        parseJSON
-          = withObject "User"
-              (\ o ->
-                 User' <$>
-                   (o .:? "photoLink") <*> (o .:? "me") <*>
-                     (o .:? "kind" .!= "drive#user")
-                     <*> (o .:? "emailAddress")
-                     <*> (o .:? "displayName")
-                     <*> (o .:? "permissionId"))
-
-instance ToJSON User where
-        toJSON User'{..}
-          = object
-              (catMaybes
-                 [("photoLink" .=) <$> _uPhotoLink,
-                  ("me" .=) <$> _uMe, Just ("kind" .= _uKind),
-                  ("emailAddress" .=) <$> _uEmailAddress,
-                  ("displayName" .=) <$> _uDisplayName,
-                  ("permissionId" .=) <$> _uPermissionId])
-
--- | A list of changes for a user.
---
--- /See:/ 'changeList' smart constructor.
-data ChangeList = ChangeList'
-    { _clNewStartPageToken :: !(Maybe Text)
-    , _clNextPageToken     :: !(Maybe Text)
-    , _clChanges           :: !(Maybe [Change])
-    , _clKind              :: !Text
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ChangeList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'clNewStartPageToken'
---
--- * 'clNextPageToken'
---
--- * 'clChanges'
---
--- * 'clKind'
-changeList
-    :: ChangeList
-changeList =
-    ChangeList'
-    { _clNewStartPageToken = Nothing
-    , _clNextPageToken = Nothing
-    , _clChanges = Nothing
-    , _clKind = "drive#changeList"
-    }
-
--- | The starting page token for future changes. This will be present only if
--- the end of the current changes list has been reached.
-clNewStartPageToken :: Lens' ChangeList (Maybe Text)
-clNewStartPageToken
-  = lens _clNewStartPageToken
-      (\ s a -> s{_clNewStartPageToken = a})
-
--- | The page token for the next page of changes. This will be absent if the
--- end of the changes list has been reached. If the token is rejected for
--- any reason, it should be discarded, and pagination should be restarted
--- from the first page of results.
-clNextPageToken :: Lens' ChangeList (Maybe Text)
-clNextPageToken
-  = lens _clNextPageToken
-      (\ s a -> s{_clNextPageToken = a})
-
--- | The list of changes. If nextPageToken is populated, then this list may
--- be incomplete and an additional page of results should be fetched.
-clChanges :: Lens' ChangeList [Change]
-clChanges
-  = lens _clChanges (\ s a -> s{_clChanges = a}) .
-      _Default
-      . _Coerce
-
--- | Identifies what kind of resource this is. Value: the fixed string
--- \"drive#changeList\".
-clKind :: Lens' ChangeList Text
-clKind = lens _clKind (\ s a -> s{_clKind = a})
-
-instance FromJSON ChangeList where
-        parseJSON
-          = withObject "ChangeList"
-              (\ o ->
-                 ChangeList' <$>
-                   (o .:? "newStartPageToken") <*>
-                     (o .:? "nextPageToken")
-                     <*> (o .:? "changes" .!= mempty)
-                     <*> (o .:? "kind" .!= "drive#changeList"))
-
-instance ToJSON ChangeList where
-        toJSON ChangeList'{..}
-          = object
-              (catMaybes
-                 [("newStartPageToken" .=) <$> _clNewStartPageToken,
-                  ("nextPageToken" .=) <$> _clNextPageToken,
-                  ("changes" .=) <$> _clChanges,
-                  Just ("kind" .= _clKind)])
-
--- | Additional information about the content of the file. These fields are
--- never populated in responses.
---
--- /See:/ 'fileContentHints' smart constructor.
-data FileContentHints = FileContentHints'
-    { _fchThumbnail     :: !(Maybe FileContentHintsThumbnail)
-    , _fchIndexableText :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'FileContentHints' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'fchThumbnail'
---
--- * 'fchIndexableText'
-fileContentHints
-    :: FileContentHints
-fileContentHints =
-    FileContentHints'
-    { _fchThumbnail = Nothing
-    , _fchIndexableText = Nothing
-    }
-
--- | A thumbnail for the file. This will only be used if Drive cannot
--- generate a standard thumbnail.
-fchThumbnail :: Lens' FileContentHints (Maybe FileContentHintsThumbnail)
-fchThumbnail
-  = lens _fchThumbnail (\ s a -> s{_fchThumbnail = a})
-
--- | Text to be indexed for the file to improve fullText queries. This is
--- limited to 128KB in length and may contain HTML elements.
-fchIndexableText :: Lens' FileContentHints (Maybe Text)
-fchIndexableText
-  = lens _fchIndexableText
-      (\ s a -> s{_fchIndexableText = a})
-
-instance FromJSON FileContentHints where
-        parseJSON
-          = withObject "FileContentHints"
-              (\ o ->
-                 FileContentHints' <$>
-                   (o .:? "thumbnail") <*> (o .:? "indexableText"))
-
-instance ToJSON FileContentHints where
-        toJSON FileContentHints'{..}
-          = object
-              (catMaybes
-                 [("thumbnail" .=) <$> _fchThumbnail,
-                  ("indexableText" .=) <$> _fchIndexableText])
-
--- | Additional parameters controlling delivery channel behavior. Optional.
---
--- /See:/ 'channelParams' smart constructor.
-newtype ChannelParams = ChannelParams'
-    { _cpAddtional :: HashMap Text Text
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ChannelParams' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cpAddtional'
-channelParams
-    :: HashMap Text Text -- ^ 'cpAddtional'
-    -> ChannelParams
-channelParams pCpAddtional_ =
-    ChannelParams'
-    { _cpAddtional = _Coerce # pCpAddtional_
-    }
-
--- | Declares a new parameter by name.
-cpAddtional :: Lens' ChannelParams (HashMap Text Text)
-cpAddtional
-  = lens _cpAddtional (\ s a -> s{_cpAddtional = a}) .
-      _Coerce
-
-instance FromJSON ChannelParams where
-        parseJSON
-          = withObject "ChannelParams"
-              (\ o -> ChannelParams' <$> (parseJSONObject o))
-
-instance ToJSON ChannelParams where
-        toJSON = toJSON . _cpAddtional
-
--- | A collection of arbitrary key-value pairs which are visible to all apps.
--- Entries with null values are cleared in update and copy requests.
---
--- /See:/ 'fileProperties' smart constructor.
-newtype FileProperties = FileProperties'
-    { _fpAddtional :: HashMap Text Text
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'FileProperties' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'fpAddtional'
-fileProperties
-    :: HashMap Text Text -- ^ 'fpAddtional'
-    -> FileProperties
-fileProperties pFpAddtional_ =
-    FileProperties'
-    { _fpAddtional = _Coerce # pFpAddtional_
-    }
-
-fpAddtional :: Lens' FileProperties (HashMap Text Text)
-fpAddtional
-  = lens _fpAddtional (\ s a -> s{_fpAddtional = a}) .
-      _Coerce
-
-instance FromJSON FileProperties where
-        parseJSON
-          = withObject "FileProperties"
-              (\ o -> FileProperties' <$> (parseJSONObject o))
-
-instance ToJSON FileProperties where
-        toJSON = toJSON . _fpAddtional
-
--- | A map of maximum import sizes by MIME type, in bytes.
---
--- /See:/ 'aboutMaxImportSizes' smart constructor.
-newtype AboutMaxImportSizes = AboutMaxImportSizes'
-    { _amisAddtional :: HashMap Text (Textual Int64)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AboutMaxImportSizes' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'amisAddtional'
-aboutMaxImportSizes
-    :: HashMap Text Int64 -- ^ 'amisAddtional'
-    -> AboutMaxImportSizes
-aboutMaxImportSizes pAmisAddtional_ =
-    AboutMaxImportSizes'
-    { _amisAddtional = _Coerce # pAmisAddtional_
-    }
-
-amisAddtional :: Lens' AboutMaxImportSizes (HashMap Text Int64)
-amisAddtional
-  = lens _amisAddtional
-      (\ s a -> s{_amisAddtional = a})
-      . _Coerce
-
-instance FromJSON AboutMaxImportSizes where
-        parseJSON
-          = withObject "AboutMaxImportSizes"
-              (\ o -> AboutMaxImportSizes' <$> (parseJSONObject o))
-
-instance ToJSON AboutMaxImportSizes where
-        toJSON = toJSON . _amisAddtional
-
--- | Information about the user, the user\'s Drive, and system capabilities.
---
--- /See:/ 'about' smart constructor.
-data About = About'
-    { _aExportFormats      :: !(Maybe AboutExportFormats)
-    , _aMaxImportSizes     :: !(Maybe AboutMaxImportSizes)
-    , _aImportFormats      :: !(Maybe AboutImportFormats)
-    , _aKind               :: !Text
-    , _aAppInstalled       :: !(Maybe Bool)
-    , _aUser               :: !(Maybe User)
-    , _aStorageQuota       :: !(Maybe AboutStorageQuota)
-    , _aMaxUploadSize      :: !(Maybe (Textual Int64))
-    , _aFolderColorPalette :: !(Maybe [Text])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'About' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'aExportFormats'
---
--- * 'aMaxImportSizes'
---
--- * 'aImportFormats'
---
--- * 'aKind'
---
--- * 'aAppInstalled'
---
--- * 'aUser'
---
--- * 'aStorageQuota'
---
--- * 'aMaxUploadSize'
---
--- * 'aFolderColorPalette'
-about
-    :: About
-about =
-    About'
-    { _aExportFormats = Nothing
-    , _aMaxImportSizes = Nothing
-    , _aImportFormats = Nothing
-    , _aKind = "drive#about"
-    , _aAppInstalled = Nothing
-    , _aUser = Nothing
-    , _aStorageQuota = Nothing
-    , _aMaxUploadSize = Nothing
-    , _aFolderColorPalette = Nothing
-    }
-
--- | A map of source MIME type to possible targets for all supported exports.
-aExportFormats :: Lens' About (Maybe AboutExportFormats)
-aExportFormats
-  = lens _aExportFormats
-      (\ s a -> s{_aExportFormats = a})
-
--- | A map of maximum import sizes by MIME type, in bytes.
-aMaxImportSizes :: Lens' About (Maybe AboutMaxImportSizes)
-aMaxImportSizes
-  = lens _aMaxImportSizes
-      (\ s a -> s{_aMaxImportSizes = a})
-
--- | A map of source MIME type to possible targets for all supported imports.
-aImportFormats :: Lens' About (Maybe AboutImportFormats)
-aImportFormats
-  = lens _aImportFormats
-      (\ s a -> s{_aImportFormats = a})
-
--- | Identifies what kind of resource this is. Value: the fixed string
--- \"drive#about\".
-aKind :: Lens' About Text
-aKind = lens _aKind (\ s a -> s{_aKind = a})
-
--- | Whether the user has installed the requesting app.
-aAppInstalled :: Lens' About (Maybe Bool)
-aAppInstalled
-  = lens _aAppInstalled
-      (\ s a -> s{_aAppInstalled = a})
-
--- | The authenticated user.
-aUser :: Lens' About (Maybe User)
-aUser = lens _aUser (\ s a -> s{_aUser = a})
-
--- | The user\'s storage quota limits and usage. All fields are measured in
--- bytes.
-aStorageQuota :: Lens' About (Maybe AboutStorageQuota)
-aStorageQuota
-  = lens _aStorageQuota
-      (\ s a -> s{_aStorageQuota = a})
-
--- | The maximum upload size in bytes.
-aMaxUploadSize :: Lens' About (Maybe Int64)
-aMaxUploadSize
-  = lens _aMaxUploadSize
-      (\ s a -> s{_aMaxUploadSize = a})
-      . mapping _Coerce
-
--- | The currently supported folder colors as RGB hex strings.
-aFolderColorPalette :: Lens' About [Text]
-aFolderColorPalette
-  = lens _aFolderColorPalette
-      (\ s a -> s{_aFolderColorPalette = a})
-      . _Default
-      . _Coerce
-
-instance FromJSON About where
-        parseJSON
-          = withObject "About"
-              (\ o ->
-                 About' <$>
-                   (o .:? "exportFormats") <*> (o .:? "maxImportSizes")
-                     <*> (o .:? "importFormats")
-                     <*> (o .:? "kind" .!= "drive#about")
-                     <*> (o .:? "appInstalled")
-                     <*> (o .:? "user")
-                     <*> (o .:? "storageQuota")
-                     <*> (o .:? "maxUploadSize")
-                     <*> (o .:? "folderColorPalette" .!= mempty))
-
-instance ToJSON About where
-        toJSON About'{..}
-          = object
-              (catMaybes
-                 [("exportFormats" .=) <$> _aExportFormats,
-                  ("maxImportSizes" .=) <$> _aMaxImportSizes,
-                  ("importFormats" .=) <$> _aImportFormats,
-                  Just ("kind" .= _aKind),
-                  ("appInstalled" .=) <$> _aAppInstalled,
-                  ("user" .=) <$> _aUser,
-                  ("storageQuota" .=) <$> _aStorageQuota,
-                  ("maxUploadSize" .=) <$> _aMaxUploadSize,
-                  ("folderColorPalette" .=) <$> _aFolderColorPalette])
-
--- | Geographic location information stored in the image.
---
--- /See:/ 'fileImageMediaMetadataLocation' smart constructor.
-data FileImageMediaMetadataLocation = FileImageMediaMetadataLocation'
-    { _fimmlLatitude  :: !(Maybe (Textual Double))
-    , _fimmlAltitude  :: !(Maybe (Textual Double))
-    , _fimmlLongitude :: !(Maybe (Textual Double))
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'FileImageMediaMetadataLocation' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'fimmlLatitude'
---
--- * 'fimmlAltitude'
---
--- * 'fimmlLongitude'
-fileImageMediaMetadataLocation
-    :: FileImageMediaMetadataLocation
-fileImageMediaMetadataLocation =
-    FileImageMediaMetadataLocation'
-    { _fimmlLatitude = Nothing
-    , _fimmlAltitude = Nothing
-    , _fimmlLongitude = Nothing
-    }
-
--- | The latitude stored in the image.
-fimmlLatitude :: Lens' FileImageMediaMetadataLocation (Maybe Double)
-fimmlLatitude
-  = lens _fimmlLatitude
-      (\ s a -> s{_fimmlLatitude = a})
-      . mapping _Coerce
-
--- | The altitude stored in the image.
-fimmlAltitude :: Lens' FileImageMediaMetadataLocation (Maybe Double)
-fimmlAltitude
-  = lens _fimmlAltitude
-      (\ s a -> s{_fimmlAltitude = a})
-      . mapping _Coerce
-
--- | The longitude stored in the image.
-fimmlLongitude :: Lens' FileImageMediaMetadataLocation (Maybe Double)
-fimmlLongitude
-  = lens _fimmlLongitude
-      (\ s a -> s{_fimmlLongitude = a})
-      . mapping _Coerce
-
-instance FromJSON FileImageMediaMetadataLocation
-         where
-        parseJSON
-          = withObject "FileImageMediaMetadataLocation"
-              (\ o ->
-                 FileImageMediaMetadataLocation' <$>
-                   (o .:? "latitude") <*> (o .:? "altitude") <*>
-                     (o .:? "longitude"))
-
-instance ToJSON FileImageMediaMetadataLocation where
-        toJSON FileImageMediaMetadataLocation'{..}
-          = object
-              (catMaybes
-                 [("latitude" .=) <$> _fimmlLatitude,
-                  ("altitude" .=) <$> _fimmlAltitude,
-                  ("longitude" .=) <$> _fimmlLongitude])
-
---
--- /See:/ 'startPageToken' smart constructor.
-data StartPageToken = StartPageToken'
-    { _sptKind           :: !Text
-    , _sptStartPageToken :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'StartPageToken' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sptKind'
---
--- * 'sptStartPageToken'
-startPageToken
-    :: StartPageToken
-startPageToken =
-    StartPageToken'
-    { _sptKind = "drive#startPageToken"
-    , _sptStartPageToken = Nothing
-    }
-
--- | Identifies what kind of resource this is. Value: the fixed string
--- \"drive#startPageToken\".
-sptKind :: Lens' StartPageToken Text
-sptKind = lens _sptKind (\ s a -> s{_sptKind = a})
-
--- | The starting page token for listing changes.
-sptStartPageToken :: Lens' StartPageToken (Maybe Text)
-sptStartPageToken
-  = lens _sptStartPageToken
-      (\ s a -> s{_sptStartPageToken = a})
-
-instance FromJSON StartPageToken where
-        parseJSON
-          = withObject "StartPageToken"
-              (\ o ->
-                 StartPageToken' <$>
-                   (o .:? "kind" .!= "drive#startPageToken") <*>
-                     (o .:? "startPageToken"))
-
-instance ToJSON StartPageToken where
-        toJSON StartPageToken'{..}
-          = object
-              (catMaybes
-                 [Just ("kind" .= _sptKind),
-                  ("startPageToken" .=) <$> _sptStartPageToken])
-
--- | Additional metadata about image media, if available.
---
--- /See:/ 'fileImageMediaMetadata' smart constructor.
-data FileImageMediaMetadata = FileImageMediaMetadata'
-    { _fimmRotation         :: !(Maybe (Textual Int32))
-    , _fimmHeight           :: !(Maybe (Textual Int32))
-    , _fimmSubjectDistance  :: !(Maybe (Textual Int32))
-    , _fimmMaxApertureValue :: !(Maybe (Textual Double))
-    , _fimmIsoSpeed         :: !(Maybe (Textual Int32))
-    , _fimmTime             :: !(Maybe Text)
-    , _fimmLocation         :: !(Maybe FileImageMediaMetadataLocation)
-    , _fimmAperture         :: !(Maybe (Textual Double))
-    , _fimmFocalLength      :: !(Maybe (Textual Double))
-    , _fimmCameraMake       :: !(Maybe Text)
-    , _fimmWidth            :: !(Maybe (Textual Int32))
-    , _fimmExposureTime     :: !(Maybe (Textual Double))
-    , _fimmCameraModel      :: !(Maybe Text)
-    , _fimmWhiteBalance     :: !(Maybe Text)
-    , _fimmLens             :: !(Maybe Text)
-    , _fimmFlashUsed        :: !(Maybe Bool)
-    , _fimmExposureBias     :: !(Maybe (Textual Double))
-    , _fimmMeteringMode     :: !(Maybe Text)
-    , _fimmExposureMode     :: !(Maybe Text)
-    , _fimmSensor           :: !(Maybe Text)
-    , _fimmColorSpace       :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'FileImageMediaMetadata' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'fimmRotation'
---
--- * 'fimmHeight'
---
--- * 'fimmSubjectDistance'
---
--- * 'fimmMaxApertureValue'
---
--- * 'fimmIsoSpeed'
---
--- * 'fimmTime'
---
--- * 'fimmLocation'
---
--- * 'fimmAperture'
---
--- * 'fimmFocalLength'
---
--- * 'fimmCameraMake'
---
--- * 'fimmWidth'
---
--- * 'fimmExposureTime'
---
--- * 'fimmCameraModel'
---
--- * 'fimmWhiteBalance'
---
--- * 'fimmLens'
---
--- * 'fimmFlashUsed'
---
--- * 'fimmExposureBias'
---
--- * 'fimmMeteringMode'
---
--- * 'fimmExposureMode'
---
--- * 'fimmSensor'
---
--- * 'fimmColorSpace'
-fileImageMediaMetadata
-    :: FileImageMediaMetadata
-fileImageMediaMetadata =
-    FileImageMediaMetadata'
-    { _fimmRotation = Nothing
-    , _fimmHeight = Nothing
-    , _fimmSubjectDistance = Nothing
-    , _fimmMaxApertureValue = Nothing
-    , _fimmIsoSpeed = Nothing
-    , _fimmTime = Nothing
-    , _fimmLocation = Nothing
-    , _fimmAperture = Nothing
-    , _fimmFocalLength = Nothing
-    , _fimmCameraMake = Nothing
-    , _fimmWidth = Nothing
-    , _fimmExposureTime = Nothing
-    , _fimmCameraModel = Nothing
-    , _fimmWhiteBalance = Nothing
-    , _fimmLens = Nothing
-    , _fimmFlashUsed = Nothing
-    , _fimmExposureBias = Nothing
-    , _fimmMeteringMode = Nothing
-    , _fimmExposureMode = Nothing
-    , _fimmSensor = Nothing
-    , _fimmColorSpace = Nothing
-    }
-
--- | The rotation in clockwise degrees from the image\'s original
--- orientation.
-fimmRotation :: Lens' FileImageMediaMetadata (Maybe Int32)
-fimmRotation
-  = lens _fimmRotation (\ s a -> s{_fimmRotation = a})
-      . mapping _Coerce
-
--- | The height of the image in pixels.
-fimmHeight :: Lens' FileImageMediaMetadata (Maybe Int32)
-fimmHeight
-  = lens _fimmHeight (\ s a -> s{_fimmHeight = a}) .
-      mapping _Coerce
-
--- | The distance to the subject of the photo, in meters.
-fimmSubjectDistance :: Lens' FileImageMediaMetadata (Maybe Int32)
-fimmSubjectDistance
-  = lens _fimmSubjectDistance
-      (\ s a -> s{_fimmSubjectDistance = a})
-      . mapping _Coerce
-
--- | The smallest f-number of the lens at the focal length used to create the
--- photo (APEX value).
-fimmMaxApertureValue :: Lens' FileImageMediaMetadata (Maybe Double)
-fimmMaxApertureValue
-  = lens _fimmMaxApertureValue
-      (\ s a -> s{_fimmMaxApertureValue = a})
-      . mapping _Coerce
-
--- | The ISO speed used to create the photo.
-fimmIsoSpeed :: Lens' FileImageMediaMetadata (Maybe Int32)
-fimmIsoSpeed
-  = lens _fimmIsoSpeed (\ s a -> s{_fimmIsoSpeed = a})
-      . mapping _Coerce
-
--- | The date and time the photo was taken (EXIF DateTime).
-fimmTime :: Lens' FileImageMediaMetadata (Maybe Text)
-fimmTime = lens _fimmTime (\ s a -> s{_fimmTime = a})
-
--- | Geographic location information stored in the image.
-fimmLocation :: Lens' FileImageMediaMetadata (Maybe FileImageMediaMetadataLocation)
-fimmLocation
-  = lens _fimmLocation (\ s a -> s{_fimmLocation = a})
-
--- | The aperture used to create the photo (f-number).
-fimmAperture :: Lens' FileImageMediaMetadata (Maybe Double)
-fimmAperture
-  = lens _fimmAperture (\ s a -> s{_fimmAperture = a})
-      . mapping _Coerce
-
--- | The focal length used to create the photo, in millimeters.
-fimmFocalLength :: Lens' FileImageMediaMetadata (Maybe Double)
-fimmFocalLength
-  = lens _fimmFocalLength
-      (\ s a -> s{_fimmFocalLength = a})
-      . mapping _Coerce
-
--- | The make of the camera used to create the photo.
-fimmCameraMake :: Lens' FileImageMediaMetadata (Maybe Text)
-fimmCameraMake
-  = lens _fimmCameraMake
-      (\ s a -> s{_fimmCameraMake = a})
-
--- | The width of the image in pixels.
-fimmWidth :: Lens' FileImageMediaMetadata (Maybe Int32)
-fimmWidth
-  = lens _fimmWidth (\ s a -> s{_fimmWidth = a}) .
-      mapping _Coerce
-
--- | The length of the exposure, in seconds.
-fimmExposureTime :: Lens' FileImageMediaMetadata (Maybe Double)
-fimmExposureTime
-  = lens _fimmExposureTime
-      (\ s a -> s{_fimmExposureTime = a})
-      . mapping _Coerce
-
--- | The model of the camera used to create the photo.
-fimmCameraModel :: Lens' FileImageMediaMetadata (Maybe Text)
-fimmCameraModel
-  = lens _fimmCameraModel
-      (\ s a -> s{_fimmCameraModel = a})
-
--- | The white balance mode used to create the photo.
-fimmWhiteBalance :: Lens' FileImageMediaMetadata (Maybe Text)
-fimmWhiteBalance
-  = lens _fimmWhiteBalance
-      (\ s a -> s{_fimmWhiteBalance = a})
-
--- | The lens used to create the photo.
-fimmLens :: Lens' FileImageMediaMetadata (Maybe Text)
-fimmLens = lens _fimmLens (\ s a -> s{_fimmLens = a})
-
--- | Whether a flash was used to create the photo.
-fimmFlashUsed :: Lens' FileImageMediaMetadata (Maybe Bool)
-fimmFlashUsed
-  = lens _fimmFlashUsed
-      (\ s a -> s{_fimmFlashUsed = a})
-
--- | The exposure bias of the photo (APEX value).
-fimmExposureBias :: Lens' FileImageMediaMetadata (Maybe Double)
-fimmExposureBias
-  = lens _fimmExposureBias
-      (\ s a -> s{_fimmExposureBias = a})
-      . mapping _Coerce
-
--- | The metering mode used to create the photo.
-fimmMeteringMode :: Lens' FileImageMediaMetadata (Maybe Text)
-fimmMeteringMode
-  = lens _fimmMeteringMode
-      (\ s a -> s{_fimmMeteringMode = a})
-
--- | The exposure mode used to create the photo.
-fimmExposureMode :: Lens' FileImageMediaMetadata (Maybe Text)
-fimmExposureMode
-  = lens _fimmExposureMode
-      (\ s a -> s{_fimmExposureMode = a})
-
--- | The type of sensor used to create the photo.
-fimmSensor :: Lens' FileImageMediaMetadata (Maybe Text)
-fimmSensor
-  = lens _fimmSensor (\ s a -> s{_fimmSensor = a})
-
--- | The color space of the photo.
-fimmColorSpace :: Lens' FileImageMediaMetadata (Maybe Text)
-fimmColorSpace
-  = lens _fimmColorSpace
-      (\ s a -> s{_fimmColorSpace = a})
-
-instance FromJSON FileImageMediaMetadata where
-        parseJSON
-          = withObject "FileImageMediaMetadata"
-              (\ o ->
-                 FileImageMediaMetadata' <$>
-                   (o .:? "rotation") <*> (o .:? "height") <*>
-                     (o .:? "subjectDistance")
-                     <*> (o .:? "maxApertureValue")
-                     <*> (o .:? "isoSpeed")
-                     <*> (o .:? "time")
-                     <*> (o .:? "location")
-                     <*> (o .:? "aperture")
-                     <*> (o .:? "focalLength")
-                     <*> (o .:? "cameraMake")
-                     <*> (o .:? "width")
-                     <*> (o .:? "exposureTime")
-                     <*> (o .:? "cameraModel")
-                     <*> (o .:? "whiteBalance")
-                     <*> (o .:? "lens")
-                     <*> (o .:? "flashUsed")
-                     <*> (o .:? "exposureBias")
-                     <*> (o .:? "meteringMode")
-                     <*> (o .:? "exposureMode")
-                     <*> (o .:? "sensor")
-                     <*> (o .:? "colorSpace"))
-
-instance ToJSON FileImageMediaMetadata where
-        toJSON FileImageMediaMetadata'{..}
-          = object
-              (catMaybes
-                 [("rotation" .=) <$> _fimmRotation,
-                  ("height" .=) <$> _fimmHeight,
-                  ("subjectDistance" .=) <$> _fimmSubjectDistance,
-                  ("maxApertureValue" .=) <$> _fimmMaxApertureValue,
-                  ("isoSpeed" .=) <$> _fimmIsoSpeed,
-                  ("time" .=) <$> _fimmTime,
-                  ("location" .=) <$> _fimmLocation,
-                  ("aperture" .=) <$> _fimmAperture,
-                  ("focalLength" .=) <$> _fimmFocalLength,
-                  ("cameraMake" .=) <$> _fimmCameraMake,
-                  ("width" .=) <$> _fimmWidth,
-                  ("exposureTime" .=) <$> _fimmExposureTime,
-                  ("cameraModel" .=) <$> _fimmCameraModel,
-                  ("whiteBalance" .=) <$> _fimmWhiteBalance,
-                  ("lens" .=) <$> _fimmLens,
-                  ("flashUsed" .=) <$> _fimmFlashUsed,
-                  ("exposureBias" .=) <$> _fimmExposureBias,
-                  ("meteringMode" .=) <$> _fimmMeteringMode,
-                  ("exposureMode" .=) <$> _fimmExposureMode,
-                  ("sensor" .=) <$> _fimmSensor,
-                  ("colorSpace" .=) <$> _fimmColorSpace])
-
--- | A comment on a file.
---
--- /See:/ 'comment' smart constructor.
-data Comment = Comment'
-    { _comHTMLContent       :: !(Maybe Text)
-    , _comModifiedTime      :: !(Maybe DateTime')
-    , _comCreatedTime       :: !(Maybe DateTime')
-    , _comKind              :: !Text
-    , _comResolved          :: !(Maybe Bool)
-    , _comQuotedFileContent :: !(Maybe CommentQuotedFileContent)
-    , _comAnchor            :: !(Maybe Text)
-    , _comContent           :: !(Maybe Text)
-    , _comReplies           :: !(Maybe [Reply])
-    , _comAuthor            :: !(Maybe User)
-    , _comId                :: !(Maybe Text)
-    , _comDeleted           :: !(Maybe Bool)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Comment' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'comHTMLContent'
---
--- * 'comModifiedTime'
---
--- * 'comCreatedTime'
---
--- * 'comKind'
---
--- * 'comResolved'
---
--- * 'comQuotedFileContent'
---
--- * 'comAnchor'
---
--- * 'comContent'
---
--- * 'comReplies'
---
--- * 'comAuthor'
---
--- * 'comId'
---
--- * 'comDeleted'
-comment
-    :: Comment
-comment =
-    Comment'
-    { _comHTMLContent = Nothing
-    , _comModifiedTime = Nothing
-    , _comCreatedTime = Nothing
-    , _comKind = "drive#comment"
-    , _comResolved = Nothing
-    , _comQuotedFileContent = Nothing
-    , _comAnchor = Nothing
-    , _comContent = Nothing
-    , _comReplies = Nothing
-    , _comAuthor = Nothing
-    , _comId = Nothing
-    , _comDeleted = Nothing
-    }
-
--- | The content of the comment with HTML formatting.
-comHTMLContent :: Lens' Comment (Maybe Text)
-comHTMLContent
-  = lens _comHTMLContent
-      (\ s a -> s{_comHTMLContent = a})
-
--- | The last time the comment or any of its replies was modified (RFC 3339
--- date-time).
-comModifiedTime :: Lens' Comment (Maybe UTCTime)
-comModifiedTime
-  = lens _comModifiedTime
-      (\ s a -> s{_comModifiedTime = a})
-      . mapping _DateTime
-
--- | The time at which the comment was created (RFC 3339 date-time).
-comCreatedTime :: Lens' Comment (Maybe UTCTime)
-comCreatedTime
-  = lens _comCreatedTime
-      (\ s a -> s{_comCreatedTime = a})
-      . mapping _DateTime
-
--- | Identifies what kind of resource this is. Value: the fixed string
--- \"drive#comment\".
-comKind :: Lens' Comment Text
-comKind = lens _comKind (\ s a -> s{_comKind = a})
-
--- | Whether the comment has been resolved by one of its replies.
-comResolved :: Lens' Comment (Maybe Bool)
-comResolved
-  = lens _comResolved (\ s a -> s{_comResolved = a})
-
--- | The file content to which the comment refers, typically within the
--- anchor region. For a text file, for example, this would be the text at
--- the location of the comment.
-comQuotedFileContent :: Lens' Comment (Maybe CommentQuotedFileContent)
-comQuotedFileContent
-  = lens _comQuotedFileContent
-      (\ s a -> s{_comQuotedFileContent = a})
-
--- | A region of the document represented as a JSON string. See anchor
--- documentation for details on how to define and interpret anchor
--- properties.
-comAnchor :: Lens' Comment (Maybe Text)
-comAnchor
-  = lens _comAnchor (\ s a -> s{_comAnchor = a})
-
--- | The plain text content of the comment. This field is used for setting
--- the content, while htmlContent should be displayed.
-comContent :: Lens' Comment (Maybe Text)
-comContent
-  = lens _comContent (\ s a -> s{_comContent = a})
-
--- | The full list of replies to the comment in chronological order.
-comReplies :: Lens' Comment [Reply]
-comReplies
-  = lens _comReplies (\ s a -> s{_comReplies = a}) .
-      _Default
-      . _Coerce
-
--- | The user who created the comment.
-comAuthor :: Lens' Comment (Maybe User)
-comAuthor
-  = lens _comAuthor (\ s a -> s{_comAuthor = a})
-
--- | The ID of the comment.
-comId :: Lens' Comment (Maybe Text)
-comId = lens _comId (\ s a -> s{_comId = a})
-
--- | Whether the comment has been deleted. A deleted comment has no content.
-comDeleted :: Lens' Comment (Maybe Bool)
-comDeleted
-  = lens _comDeleted (\ s a -> s{_comDeleted = a})
-
-instance FromJSON Comment where
-        parseJSON
-          = withObject "Comment"
-              (\ o ->
-                 Comment' <$>
-                   (o .:? "htmlContent") <*> (o .:? "modifiedTime") <*>
-                     (o .:? "createdTime")
-                     <*> (o .:? "kind" .!= "drive#comment")
-                     <*> (o .:? "resolved")
-                     <*> (o .:? "quotedFileContent")
-                     <*> (o .:? "anchor")
-                     <*> (o .:? "content")
-                     <*> (o .:? "replies" .!= mempty)
-                     <*> (o .:? "author")
-                     <*> (o .:? "id")
-                     <*> (o .:? "deleted"))
-
-instance ToJSON Comment where
-        toJSON Comment'{..}
-          = object
-              (catMaybes
-                 [("htmlContent" .=) <$> _comHTMLContent,
-                  ("modifiedTime" .=) <$> _comModifiedTime,
-                  ("createdTime" .=) <$> _comCreatedTime,
-                  Just ("kind" .= _comKind),
-                  ("resolved" .=) <$> _comResolved,
-                  ("quotedFileContent" .=) <$> _comQuotedFileContent,
-                  ("anchor" .=) <$> _comAnchor,
-                  ("content" .=) <$> _comContent,
-                  ("replies" .=) <$> _comReplies,
-                  ("author" .=) <$> _comAuthor, ("id" .=) <$> _comId,
-                  ("deleted" .=) <$> _comDeleted])
-
--- | The metadata for a revision to a file.
---
--- /See:/ 'revision' smart constructor.
-data Revision = Revision'
-    { _revModifiedTime           :: !(Maybe DateTime')
-    , _revSize                   :: !(Maybe (Textual Int64))
-    , _revOriginalFilename       :: !(Maybe Text)
-    , _revKind                   :: !Text
-    , _revPublished              :: !(Maybe Bool)
-    , _revLastModifyingUser      :: !(Maybe User)
-    , _revPublishAuto            :: !(Maybe Bool)
-    , _revMD5Checksum            :: !(Maybe Text)
-    , _revKeepForever            :: !(Maybe Bool)
-    , _revMimeType               :: !(Maybe Text)
-    , _revPublishedOutsideDomain :: !(Maybe Bool)
-    , _revId                     :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Revision' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'revModifiedTime'
---
--- * 'revSize'
---
--- * 'revOriginalFilename'
---
--- * 'revKind'
---
--- * 'revPublished'
---
--- * 'revLastModifyingUser'
---
--- * 'revPublishAuto'
---
--- * 'revMD5Checksum'
---
--- * 'revKeepForever'
---
--- * 'revMimeType'
---
--- * 'revPublishedOutsideDomain'
---
--- * 'revId'
-revision
-    :: Revision
-revision =
-    Revision'
-    { _revModifiedTime = Nothing
-    , _revSize = Nothing
-    , _revOriginalFilename = Nothing
-    , _revKind = "drive#revision"
-    , _revPublished = Nothing
-    , _revLastModifyingUser = Nothing
-    , _revPublishAuto = Nothing
-    , _revMD5Checksum = Nothing
-    , _revKeepForever = Nothing
-    , _revMimeType = Nothing
-    , _revPublishedOutsideDomain = Nothing
-    , _revId = Nothing
-    }
-
--- | The last time the revision was modified (RFC 3339 date-time).
-revModifiedTime :: Lens' Revision (Maybe UTCTime)
-revModifiedTime
-  = lens _revModifiedTime
-      (\ s a -> s{_revModifiedTime = a})
-      . mapping _DateTime
-
--- | The size of the revision\'s content in bytes. This is only applicable to
--- files with binary content in Drive.
-revSize :: Lens' Revision (Maybe Int64)
-revSize
-  = lens _revSize (\ s a -> s{_revSize = a}) .
-      mapping _Coerce
-
--- | The original filename used to create this revision. This is only
--- applicable to files with binary content in Drive.
-revOriginalFilename :: Lens' Revision (Maybe Text)
-revOriginalFilename
-  = lens _revOriginalFilename
-      (\ s a -> s{_revOriginalFilename = a})
-
--- | Identifies what kind of resource this is. Value: the fixed string
--- \"drive#revision\".
-revKind :: Lens' Revision Text
-revKind = lens _revKind (\ s a -> s{_revKind = a})
-
--- | Whether this revision is published. This is only applicable to Google
--- Docs.
-revPublished :: Lens' Revision (Maybe Bool)
-revPublished
-  = lens _revPublished (\ s a -> s{_revPublished = a})
-
--- | The last user to modify this revision.
-revLastModifyingUser :: Lens' Revision (Maybe User)
-revLastModifyingUser
-  = lens _revLastModifyingUser
-      (\ s a -> s{_revLastModifyingUser = a})
-
--- | Whether subsequent revisions will be automatically republished. This is
--- only applicable to Google Docs.
-revPublishAuto :: Lens' Revision (Maybe Bool)
-revPublishAuto
-  = lens _revPublishAuto
-      (\ s a -> s{_revPublishAuto = a})
-
--- | The MD5 checksum of the revision\'s content. This is only applicable to
--- files with binary content in Drive.
-revMD5Checksum :: Lens' Revision (Maybe Text)
-revMD5Checksum
-  = lens _revMD5Checksum
-      (\ s a -> s{_revMD5Checksum = a})
-
--- | Whether to keep this revision forever, even if it is no longer the head
--- revision. If not set, the revision will be automatically purged 30 days
--- after newer content is uploaded. This can be set on a maximum of 200
--- revisions for a file. This field is only applicable to files with binary
--- content in Drive.
-revKeepForever :: Lens' Revision (Maybe Bool)
-revKeepForever
-  = lens _revKeepForever
-      (\ s a -> s{_revKeepForever = a})
-
--- | The MIME type of the revision.
-revMimeType :: Lens' Revision (Maybe Text)
-revMimeType
-  = lens _revMimeType (\ s a -> s{_revMimeType = a})
-
--- | Whether this revision is published outside the domain. This is only
--- applicable to Google Docs.
-revPublishedOutsideDomain :: Lens' Revision (Maybe Bool)
-revPublishedOutsideDomain
-  = lens _revPublishedOutsideDomain
-      (\ s a -> s{_revPublishedOutsideDomain = a})
-
--- | The ID of the revision.
-revId :: Lens' Revision (Maybe Text)
-revId = lens _revId (\ s a -> s{_revId = a})
-
-instance FromJSON Revision where
-        parseJSON
-          = withObject "Revision"
-              (\ o ->
-                 Revision' <$>
-                   (o .:? "modifiedTime") <*> (o .:? "size") <*>
-                     (o .:? "originalFilename")
-                     <*> (o .:? "kind" .!= "drive#revision")
-                     <*> (o .:? "published")
-                     <*> (o .:? "lastModifyingUser")
-                     <*> (o .:? "publishAuto")
-                     <*> (o .:? "md5Checksum")
-                     <*> (o .:? "keepForever")
-                     <*> (o .:? "mimeType")
-                     <*> (o .:? "publishedOutsideDomain")
-                     <*> (o .:? "id"))
-
-instance ToJSON Revision where
-        toJSON Revision'{..}
-          = object
-              (catMaybes
-                 [("modifiedTime" .=) <$> _revModifiedTime,
-                  ("size" .=) <$> _revSize,
-                  ("originalFilename" .=) <$> _revOriginalFilename,
-                  Just ("kind" .= _revKind),
-                  ("published" .=) <$> _revPublished,
-                  ("lastModifyingUser" .=) <$> _revLastModifyingUser,
-                  ("publishAuto" .=) <$> _revPublishAuto,
-                  ("md5Checksum" .=) <$> _revMD5Checksum,
-                  ("keepForever" .=) <$> _revKeepForever,
-                  ("mimeType" .=) <$> _revMimeType,
-                  ("publishedOutsideDomain" .=) <$>
-                    _revPublishedOutsideDomain,
-                  ("id" .=) <$> _revId])
-
--- | A permission for a file. A permission grants a user, group, domain or
--- the world access to a file or a folder hierarchy.
---
--- /See:/ 'permission' smart constructor.
-data Permission = Permission'
-    { _pPhotoLink          :: !(Maybe Text)
-    , _pKind               :: !Text
-    , _pDomain             :: !(Maybe Text)
-    , _pRole               :: !(Maybe Text)
-    , _pEmailAddress       :: !(Maybe Text)
-    , _pAllowFileDiscovery :: !(Maybe Bool)
-    , _pDisplayName        :: !(Maybe Text)
-    , _pId                 :: !(Maybe Text)
-    , _pType               :: !(Maybe Text)
-    , _pExpirationTime     :: !(Maybe DateTime')
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Permission' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'pPhotoLink'
---
--- * 'pKind'
---
--- * 'pDomain'
---
--- * 'pRole'
---
--- * 'pEmailAddress'
---
--- * 'pAllowFileDiscovery'
---
--- * 'pDisplayName'
---
--- * 'pId'
---
--- * 'pType'
---
--- * 'pExpirationTime'
-permission
-    :: Permission
-permission =
-    Permission'
-    { _pPhotoLink = Nothing
-    , _pKind = "drive#permission"
-    , _pDomain = Nothing
-    , _pRole = Nothing
-    , _pEmailAddress = Nothing
-    , _pAllowFileDiscovery = Nothing
-    , _pDisplayName = Nothing
-    , _pId = Nothing
-    , _pType = Nothing
-    , _pExpirationTime = Nothing
-    }
-
--- | A link to the user\'s profile photo, if available.
-pPhotoLink :: Lens' Permission (Maybe Text)
-pPhotoLink
-  = lens _pPhotoLink (\ s a -> s{_pPhotoLink = a})
-
--- | Identifies what kind of resource this is. Value: the fixed string
--- \"drive#permission\".
-pKind :: Lens' Permission Text
-pKind = lens _pKind (\ s a -> s{_pKind = a})
-
--- | The domain to which this permission refers.
-pDomain :: Lens' Permission (Maybe Text)
-pDomain = lens _pDomain (\ s a -> s{_pDomain = a})
-
--- | The role granted by this permission. Valid values are: - owner - writer
--- - commenter - reader
-pRole :: Lens' Permission (Maybe Text)
-pRole = lens _pRole (\ s a -> s{_pRole = a})
-
--- | The email address of the user or group to which this permission refers.
-pEmailAddress :: Lens' Permission (Maybe Text)
-pEmailAddress
-  = lens _pEmailAddress
-      (\ s a -> s{_pEmailAddress = a})
-
--- | Whether the permission allows the file to be discovered through search.
--- This is only applicable for permissions of type domain or anyone.
-pAllowFileDiscovery :: Lens' Permission (Maybe Bool)
-pAllowFileDiscovery
-  = lens _pAllowFileDiscovery
-      (\ s a -> s{_pAllowFileDiscovery = a})
-
--- | A displayable name for users, groups or domains.
-pDisplayName :: Lens' Permission (Maybe Text)
-pDisplayName
-  = lens _pDisplayName (\ s a -> s{_pDisplayName = a})
-
--- | The ID of this permission. This is a unique identifier for the grantee,
--- and is published in User resources as permissionId.
-pId :: Lens' Permission (Maybe Text)
-pId = lens _pId (\ s a -> s{_pId = a})
-
--- | The type of the grantee. Valid values are: - user - group - domain -
--- anyone
-pType :: Lens' Permission (Maybe Text)
-pType = lens _pType (\ s a -> s{_pType = a})
-
--- | The time at which this permission will expire (RFC 3339 date-time).
-pExpirationTime :: Lens' Permission (Maybe UTCTime)
-pExpirationTime
-  = lens _pExpirationTime
-      (\ s a -> s{_pExpirationTime = a})
-      . mapping _DateTime
-
-instance FromJSON Permission where
-        parseJSON
-          = withObject "Permission"
-              (\ o ->
-                 Permission' <$>
-                   (o .:? "photoLink") <*>
-                     (o .:? "kind" .!= "drive#permission")
-                     <*> (o .:? "domain")
-                     <*> (o .:? "role")
-                     <*> (o .:? "emailAddress")
-                     <*> (o .:? "allowFileDiscovery")
-                     <*> (o .:? "displayName")
-                     <*> (o .:? "id")
-                     <*> (o .:? "type")
-                     <*> (o .:? "expirationTime"))
-
-instance ToJSON Permission where
-        toJSON Permission'{..}
-          = object
-              (catMaybes
-                 [("photoLink" .=) <$> _pPhotoLink,
-                  Just ("kind" .= _pKind), ("domain" .=) <$> _pDomain,
-                  ("role" .=) <$> _pRole,
-                  ("emailAddress" .=) <$> _pEmailAddress,
-                  ("allowFileDiscovery" .=) <$> _pAllowFileDiscovery,
-                  ("displayName" .=) <$> _pDisplayName,
-                  ("id" .=) <$> _pId, ("type" .=) <$> _pType,
-                  ("expirationTime" .=) <$> _pExpirationTime])
-
--- | The metadata for a file.
---
--- /See:/ 'file' smart constructor.
-data File = File'
-    { _fOwnedByMe             :: !(Maybe Bool)
-    , _fThumbnailLink         :: !(Maybe Text)
-    , _fFullFileExtension     :: !(Maybe Text)
-    , _fModifiedTime          :: !(Maybe DateTime')
-    , _fModifiedByMeTime      :: !(Maybe DateTime')
-    , _fFileExtension         :: !(Maybe Text)
-    , _fViewedByMe            :: !(Maybe Bool)
-    , _fOwners                :: !(Maybe [User])
-    , _fViewedByMeTime        :: !(Maybe DateTime')
-    , _fModifiedByMe          :: !(Maybe Bool)
-    , _fSize                  :: !(Maybe (Textual Int64))
-    , _fTrashed               :: !(Maybe Bool)
-    , _fWebViewLink           :: !(Maybe Text)
-    , _fCreatedTime           :: !(Maybe DateTime')
-    , _fOriginalFilename      :: !(Maybe Text)
-    , _fKind                  :: !Text
-    , _fLastModifyingUser     :: !(Maybe User)
-    , _fIconLink              :: !(Maybe Text)
-    , _fHasThumbnail          :: !(Maybe Bool)
-    , _fThumbnailVersion      :: !(Maybe (Textual Int64))
-    , _fImageMediaMetadata    :: !(Maybe FileImageMediaMetadata)
-    , _fExplicitlyTrashed     :: !(Maybe Bool)
-    , _fShared                :: !(Maybe Bool)
-    , _fMD5Checksum           :: !(Maybe Text)
-    , _fFolderColorRgb        :: !(Maybe Text)
-    , _fMimeType              :: !(Maybe Text)
-    , _fIsAppAuthorized       :: !(Maybe Bool)
-    , _fName                  :: !(Maybe Text)
-    , _fParents               :: !(Maybe [Text])
-    , _fStarred               :: !(Maybe Bool)
-    , _fSpaces                :: !(Maybe [Text])
-    , _fVersion               :: !(Maybe (Textual Int64))
-    , _fWritersCanShare       :: !(Maybe Bool)
-    , _fId                    :: !(Maybe Text)
-    , _fPermissions           :: !(Maybe [Permission])
-    , _fQuotaBytesUsed        :: !(Maybe (Textual Int64))
-    , _fAppProperties         :: !(Maybe FileAppProperties)
-    , _fVideoMediaMetadata    :: !(Maybe FileVideoMediaMetadata)
-    , _fSharedWithMeTime      :: !(Maybe DateTime')
-    , _fHeadRevisionId        :: !(Maybe Text)
-    , _fCapabilities          :: !(Maybe FileCapabilities)
-    , _fDescription           :: !(Maybe Text)
-    , _fViewersCanCopyContent :: !(Maybe Bool)
-    , _fSharingUser           :: !(Maybe User)
-    , _fWebContentLink        :: !(Maybe Text)
-    , _fContentHints          :: !(Maybe FileContentHints)
-    , _fProperties            :: !(Maybe FileProperties)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'File' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'fOwnedByMe'
---
--- * 'fThumbnailLink'
---
--- * 'fFullFileExtension'
---
--- * 'fModifiedTime'
---
--- * 'fModifiedByMeTime'
---
--- * 'fFileExtension'
---
--- * 'fViewedByMe'
---
--- * 'fOwners'
---
--- * 'fViewedByMeTime'
---
--- * 'fModifiedByMe'
---
--- * 'fSize'
---
--- * 'fTrashed'
---
--- * 'fWebViewLink'
---
--- * 'fCreatedTime'
---
--- * 'fOriginalFilename'
---
--- * 'fKind'
---
--- * 'fLastModifyingUser'
---
--- * 'fIconLink'
---
--- * 'fHasThumbnail'
---
--- * 'fThumbnailVersion'
---
--- * 'fImageMediaMetadata'
---
--- * 'fExplicitlyTrashed'
---
--- * 'fShared'
---
--- * 'fMD5Checksum'
---
--- * 'fFolderColorRgb'
---
--- * 'fMimeType'
---
--- * 'fIsAppAuthorized'
---
--- * 'fName'
---
--- * 'fParents'
---
--- * 'fStarred'
---
--- * 'fSpaces'
---
--- * 'fVersion'
---
--- * 'fWritersCanShare'
---
--- * 'fId'
---
--- * 'fPermissions'
---
--- * 'fQuotaBytesUsed'
---
--- * 'fAppProperties'
---
--- * 'fVideoMediaMetadata'
---
--- * 'fSharedWithMeTime'
---
--- * 'fHeadRevisionId'
---
--- * 'fCapabilities'
---
--- * 'fDescription'
---
--- * 'fViewersCanCopyContent'
---
--- * 'fSharingUser'
---
--- * 'fWebContentLink'
---
--- * 'fContentHints'
---
--- * 'fProperties'
-file
-    :: File
-file =
-    File'
-    { _fOwnedByMe = Nothing
-    , _fThumbnailLink = Nothing
-    , _fFullFileExtension = Nothing
-    , _fModifiedTime = Nothing
-    , _fModifiedByMeTime = Nothing
-    , _fFileExtension = Nothing
-    , _fViewedByMe = Nothing
-    , _fOwners = Nothing
-    , _fViewedByMeTime = Nothing
-    , _fModifiedByMe = Nothing
-    , _fSize = Nothing
-    , _fTrashed = Nothing
-    , _fWebViewLink = Nothing
-    , _fCreatedTime = Nothing
-    , _fOriginalFilename = Nothing
-    , _fKind = "drive#file"
-    , _fLastModifyingUser = Nothing
-    , _fIconLink = Nothing
-    , _fHasThumbnail = Nothing
-    , _fThumbnailVersion = Nothing
-    , _fImageMediaMetadata = Nothing
-    , _fExplicitlyTrashed = Nothing
-    , _fShared = Nothing
-    , _fMD5Checksum = Nothing
-    , _fFolderColorRgb = Nothing
-    , _fMimeType = Nothing
-    , _fIsAppAuthorized = Nothing
-    , _fName = Nothing
-    , _fParents = Nothing
-    , _fStarred = Nothing
-    , _fSpaces = Nothing
-    , _fVersion = Nothing
-    , _fWritersCanShare = Nothing
-    , _fId = Nothing
-    , _fPermissions = Nothing
-    , _fQuotaBytesUsed = Nothing
-    , _fAppProperties = Nothing
-    , _fVideoMediaMetadata = Nothing
-    , _fSharedWithMeTime = Nothing
-    , _fHeadRevisionId = Nothing
-    , _fCapabilities = Nothing
-    , _fDescription = Nothing
-    , _fViewersCanCopyContent = Nothing
-    , _fSharingUser = Nothing
-    , _fWebContentLink = Nothing
-    , _fContentHints = Nothing
-    , _fProperties = Nothing
-    }
-
--- | Whether the user owns the file.
-fOwnedByMe :: Lens' File (Maybe Bool)
-fOwnedByMe
-  = lens _fOwnedByMe (\ s a -> s{_fOwnedByMe = a})
-
--- | A short-lived link to the file\'s thumbnail, if available. Typically
--- lasts on the order of hours. Only populated when the requesting app can
--- access the file\'s content.
-fThumbnailLink :: Lens' File (Maybe Text)
-fThumbnailLink
-  = lens _fThumbnailLink
-      (\ s a -> s{_fThumbnailLink = a})
-
--- | The full file extension extracted from the name field. May contain
--- multiple concatenated extensions, such as \"tar.gz\". This is only
--- available for files with binary content in Drive. This is automatically
--- updated when the name field changes, however it is not cleared if the
--- new name does not contain a valid extension.
-fFullFileExtension :: Lens' File (Maybe Text)
-fFullFileExtension
-  = lens _fFullFileExtension
-      (\ s a -> s{_fFullFileExtension = a})
-
--- | The last time the file was modified by anyone (RFC 3339 date-time). Note
--- that setting modifiedTime will also update modifiedByMeTime for the
--- user.
-fModifiedTime :: Lens' File (Maybe UTCTime)
-fModifiedTime
-  = lens _fModifiedTime
-      (\ s a -> s{_fModifiedTime = a})
-      . mapping _DateTime
-
--- | The last time the file was modified by the user (RFC 3339 date-time).
-fModifiedByMeTime :: Lens' File (Maybe UTCTime)
-fModifiedByMeTime
-  = lens _fModifiedByMeTime
-      (\ s a -> s{_fModifiedByMeTime = a})
-      . mapping _DateTime
-
--- | The final component of fullFileExtension. This is only available for
--- files with binary content in Drive.
-fFileExtension :: Lens' File (Maybe Text)
-fFileExtension
-  = lens _fFileExtension
-      (\ s a -> s{_fFileExtension = a})
-
--- | Whether the file has been viewed by this user.
-fViewedByMe :: Lens' File (Maybe Bool)
-fViewedByMe
-  = lens _fViewedByMe (\ s a -> s{_fViewedByMe = a})
-
--- | The owners of the file. Currently, only certain legacy files may have
--- more than one owner.
-fOwners :: Lens' File [User]
-fOwners
-  = lens _fOwners (\ s a -> s{_fOwners = a}) . _Default
-      . _Coerce
-
--- | The last time the file was viewed by the user (RFC 3339 date-time).
-fViewedByMeTime :: Lens' File (Maybe UTCTime)
-fViewedByMeTime
-  = lens _fViewedByMeTime
-      (\ s a -> s{_fViewedByMeTime = a})
-      . mapping _DateTime
-
--- | Whether the file has been modified by this user.
-fModifiedByMe :: Lens' File (Maybe Bool)
-fModifiedByMe
-  = lens _fModifiedByMe
-      (\ s a -> s{_fModifiedByMe = a})
-
--- | The size of the file\'s content in bytes. This is only applicable to
--- files with binary content in Drive.
-fSize :: Lens' File (Maybe Int64)
-fSize
-  = lens _fSize (\ s a -> s{_fSize = a}) .
-      mapping _Coerce
-
--- | Whether the file has been trashed, either explicitly or from a trashed
--- parent folder. Only the owner may trash a file, and other users cannot
--- see files in the owner\'s trash.
-fTrashed :: Lens' File (Maybe Bool)
-fTrashed = lens _fTrashed (\ s a -> s{_fTrashed = a})
-
--- | A link for opening the file in a relevant Google editor or viewer in a
--- browser.
-fWebViewLink :: Lens' File (Maybe Text)
-fWebViewLink
-  = lens _fWebViewLink (\ s a -> s{_fWebViewLink = a})
-
--- | The time at which the file was created (RFC 3339 date-time).
-fCreatedTime :: Lens' File (Maybe UTCTime)
-fCreatedTime
-  = lens _fCreatedTime (\ s a -> s{_fCreatedTime = a})
-      . mapping _DateTime
-
--- | The original filename of the uploaded content if available, or else the
--- original value of the name field. This is only available for files with
--- binary content in Drive.
-fOriginalFilename :: Lens' File (Maybe Text)
-fOriginalFilename
-  = lens _fOriginalFilename
-      (\ s a -> s{_fOriginalFilename = a})
-
--- | Identifies what kind of resource this is. Value: the fixed string
--- \"drive#file\".
-fKind :: Lens' File Text
-fKind = lens _fKind (\ s a -> s{_fKind = a})
-
--- | The last user to modify the file.
-fLastModifyingUser :: Lens' File (Maybe User)
-fLastModifyingUser
-  = lens _fLastModifyingUser
-      (\ s a -> s{_fLastModifyingUser = a})
-
--- | A static, unauthenticated link to the file\'s icon.
-fIconLink :: Lens' File (Maybe Text)
-fIconLink
-  = lens _fIconLink (\ s a -> s{_fIconLink = a})
-
--- | Whether this file has a thumbnail.
-fHasThumbnail :: Lens' File (Maybe Bool)
-fHasThumbnail
-  = lens _fHasThumbnail
-      (\ s a -> s{_fHasThumbnail = a})
-
--- | The thumbnail version for use in thumbnail cache invalidation.
-fThumbnailVersion :: Lens' File (Maybe Int64)
-fThumbnailVersion
-  = lens _fThumbnailVersion
-      (\ s a -> s{_fThumbnailVersion = a})
-      . mapping _Coerce
-
--- | Additional metadata about image media, if available.
-fImageMediaMetadata :: Lens' File (Maybe FileImageMediaMetadata)
-fImageMediaMetadata
-  = lens _fImageMediaMetadata
-      (\ s a -> s{_fImageMediaMetadata = a})
-
--- | Whether the file has been explicitly trashed, as opposed to recursively
--- trashed from a parent folder.
-fExplicitlyTrashed :: Lens' File (Maybe Bool)
-fExplicitlyTrashed
-  = lens _fExplicitlyTrashed
-      (\ s a -> s{_fExplicitlyTrashed = a})
-
--- | Whether the file has been shared.
-fShared :: Lens' File (Maybe Bool)
-fShared = lens _fShared (\ s a -> s{_fShared = a})
-
--- | The MD5 checksum for the content of the file. This is only applicable to
--- files with binary content in Drive.
-fMD5Checksum :: Lens' File (Maybe Text)
-fMD5Checksum
-  = lens _fMD5Checksum (\ s a -> s{_fMD5Checksum = a})
-
--- | The color for a folder as an RGB hex string. The supported colors are
--- published in the folderColorPalette field of the About resource. If an
--- unsupported color is specified, the closest color in the palette will be
--- used instead.
-fFolderColorRgb :: Lens' File (Maybe Text)
-fFolderColorRgb
-  = lens _fFolderColorRgb
-      (\ s a -> s{_fFolderColorRgb = a})
-
--- | The MIME type of the file. Drive will attempt to automatically detect an
--- appropriate value from uploaded content if no value is provided. The
--- value cannot be changed unless a new revision is uploaded. If a file is
--- created with a Google Doc MIME type, the uploaded content will be
--- imported if possible. The supported import formats are published in the
--- About resource.
-fMimeType :: Lens' File (Maybe Text)
-fMimeType
-  = lens _fMimeType (\ s a -> s{_fMimeType = a})
-
--- | Whether the file was created or opened by the requesting app.
-fIsAppAuthorized :: Lens' File (Maybe Bool)
-fIsAppAuthorized
-  = lens _fIsAppAuthorized
-      (\ s a -> s{_fIsAppAuthorized = a})
-
--- | The name of the file. This is not necessarily unique within a folder.
-fName :: Lens' File (Maybe Text)
-fName = lens _fName (\ s a -> s{_fName = a})
-
--- | The IDs of the parent folders which contain the file. If not specified
--- as part of a create request, the file will be placed directly in the My
--- Drive folder. Update requests must use the addParents and removeParents
--- parameters to modify the values.
-fParents :: Lens' File [Text]
-fParents
-  = lens _fParents (\ s a -> s{_fParents = a}) .
-      _Default
-      . _Coerce
-
--- | Whether the user has starred the file.
-fStarred :: Lens' File (Maybe Bool)
-fStarred = lens _fStarred (\ s a -> s{_fStarred = a})
-
--- | The list of spaces which contain the file. The currently supported
--- values are \'drive\', \'appDataFolder\' and \'photos\'.
-fSpaces :: Lens' File [Text]
-fSpaces
-  = lens _fSpaces (\ s a -> s{_fSpaces = a}) . _Default
-      . _Coerce
-
--- | A monotonically increasing version number for the file. This reflects
--- every change made to the file on the server, even those not visible to
--- the user.
-fVersion :: Lens' File (Maybe Int64)
-fVersion
-  = lens _fVersion (\ s a -> s{_fVersion = a}) .
-      mapping _Coerce
-
--- | Whether users with only writer permission can modify the file\'s
--- permissions.
-fWritersCanShare :: Lens' File (Maybe Bool)
-fWritersCanShare
-  = lens _fWritersCanShare
-      (\ s a -> s{_fWritersCanShare = a})
-
--- | The ID of the file.
-fId :: Lens' File (Maybe Text)
-fId = lens _fId (\ s a -> s{_fId = a})
-
--- | The full list of permissions for the file. This is only available if the
--- requesting user can share the file.
-fPermissions :: Lens' File [Permission]
-fPermissions
-  = lens _fPermissions (\ s a -> s{_fPermissions = a})
-      . _Default
-      . _Coerce
-
--- | The number of storage quota bytes used by the file. This includes the
--- head revision as well as previous revisions with keepForever enabled.
-fQuotaBytesUsed :: Lens' File (Maybe Int64)
-fQuotaBytesUsed
-  = lens _fQuotaBytesUsed
-      (\ s a -> s{_fQuotaBytesUsed = a})
-      . mapping _Coerce
-
--- | A collection of arbitrary key-value pairs which are private to the
--- requesting app. Entries with null values are cleared in update and copy
--- requests.
-fAppProperties :: Lens' File (Maybe FileAppProperties)
-fAppProperties
-  = lens _fAppProperties
-      (\ s a -> s{_fAppProperties = a})
-
--- | Additional metadata about video media. This may not be available
--- immediately upon upload.
-fVideoMediaMetadata :: Lens' File (Maybe FileVideoMediaMetadata)
-fVideoMediaMetadata
-  = lens _fVideoMediaMetadata
-      (\ s a -> s{_fVideoMediaMetadata = a})
-
--- | The time at which the file was shared with the user, if applicable (RFC
--- 3339 date-time).
-fSharedWithMeTime :: Lens' File (Maybe UTCTime)
-fSharedWithMeTime
-  = lens _fSharedWithMeTime
-      (\ s a -> s{_fSharedWithMeTime = a})
-      . mapping _DateTime
-
--- | The ID of the file\'s head revision. This is currently only available
--- for files with binary content in Drive.
-fHeadRevisionId :: Lens' File (Maybe Text)
-fHeadRevisionId
-  = lens _fHeadRevisionId
-      (\ s a -> s{_fHeadRevisionId = a})
-
--- | Capabilities the current user has on the file.
-fCapabilities :: Lens' File (Maybe FileCapabilities)
-fCapabilities
-  = lens _fCapabilities
-      (\ s a -> s{_fCapabilities = a})
-
--- | A short description of the file.
-fDescription :: Lens' File (Maybe Text)
-fDescription
-  = lens _fDescription (\ s a -> s{_fDescription = a})
-
--- | Whether users with only reader or commenter permission can copy the
--- file\'s content. This affects copy, download, and print operations.
-fViewersCanCopyContent :: Lens' File (Maybe Bool)
-fViewersCanCopyContent
-  = lens _fViewersCanCopyContent
-      (\ s a -> s{_fViewersCanCopyContent = a})
-
--- | The user who shared the file with the requesting user, if applicable.
-fSharingUser :: Lens' File (Maybe User)
-fSharingUser
-  = lens _fSharingUser (\ s a -> s{_fSharingUser = a})
-
--- | A link for downloading the content of the file in a browser. This is
--- only available for files with binary content in Drive.
-fWebContentLink :: Lens' File (Maybe Text)
-fWebContentLink
-  = lens _fWebContentLink
-      (\ s a -> s{_fWebContentLink = a})
-
--- | Additional information about the content of the file. These fields are
--- never populated in responses.
-fContentHints :: Lens' File (Maybe FileContentHints)
-fContentHints
-  = lens _fContentHints
-      (\ s a -> s{_fContentHints = a})
-
--- | A collection of arbitrary key-value pairs which are visible to all apps.
--- Entries with null values are cleared in update and copy requests.
-fProperties :: Lens' File (Maybe FileProperties)
-fProperties
-  = lens _fProperties (\ s a -> s{_fProperties = a})
-
-instance FromJSON File where
-        parseJSON
-          = withObject "File"
-              (\ o ->
-                 File' <$>
-                   (o .:? "ownedByMe") <*> (o .:? "thumbnailLink") <*>
-                     (o .:? "fullFileExtension")
-                     <*> (o .:? "modifiedTime")
-                     <*> (o .:? "modifiedByMeTime")
-                     <*> (o .:? "fileExtension")
-                     <*> (o .:? "viewedByMe")
-                     <*> (o .:? "owners" .!= mempty)
-                     <*> (o .:? "viewedByMeTime")
-                     <*> (o .:? "modifiedByMe")
-                     <*> (o .:? "size")
-                     <*> (o .:? "trashed")
-                     <*> (o .:? "webViewLink")
-                     <*> (o .:? "createdTime")
-                     <*> (o .:? "originalFilename")
-                     <*> (o .:? "kind" .!= "drive#file")
-                     <*> (o .:? "lastModifyingUser")
-                     <*> (o .:? "iconLink")
-                     <*> (o .:? "hasThumbnail")
-                     <*> (o .:? "thumbnailVersion")
-                     <*> (o .:? "imageMediaMetadata")
-                     <*> (o .:? "explicitlyTrashed")
-                     <*> (o .:? "shared")
-                     <*> (o .:? "md5Checksum")
-                     <*> (o .:? "folderColorRgb")
-                     <*> (o .:? "mimeType")
-                     <*> (o .:? "isAppAuthorized")
-                     <*> (o .:? "name")
-                     <*> (o .:? "parents" .!= mempty)
-                     <*> (o .:? "starred")
-                     <*> (o .:? "spaces" .!= mempty)
-                     <*> (o .:? "version")
-                     <*> (o .:? "writersCanShare")
-                     <*> (o .:? "id")
-                     <*> (o .:? "permissions" .!= mempty)
-                     <*> (o .:? "quotaBytesUsed")
-                     <*> (o .:? "appProperties")
-                     <*> (o .:? "videoMediaMetadata")
-                     <*> (o .:? "sharedWithMeTime")
-                     <*> (o .:? "headRevisionId")
-                     <*> (o .:? "capabilities")
-                     <*> (o .:? "description")
-                     <*> (o .:? "viewersCanCopyContent")
-                     <*> (o .:? "sharingUser")
-                     <*> (o .:? "webContentLink")
-                     <*> (o .:? "contentHints")
-                     <*> (o .:? "properties"))
-
-instance ToJSON File where
-        toJSON File'{..}
-          = object
-              (catMaybes
-                 [("ownedByMe" .=) <$> _fOwnedByMe,
-                  ("thumbnailLink" .=) <$> _fThumbnailLink,
-                  ("fullFileExtension" .=) <$> _fFullFileExtension,
-                  ("modifiedTime" .=) <$> _fModifiedTime,
-                  ("modifiedByMeTime" .=) <$> _fModifiedByMeTime,
-                  ("fileExtension" .=) <$> _fFileExtension,
-                  ("viewedByMe" .=) <$> _fViewedByMe,
-                  ("owners" .=) <$> _fOwners,
-                  ("viewedByMeTime" .=) <$> _fViewedByMeTime,
-                  ("modifiedByMe" .=) <$> _fModifiedByMe,
-                  ("size" .=) <$> _fSize, ("trashed" .=) <$> _fTrashed,
-                  ("webViewLink" .=) <$> _fWebViewLink,
-                  ("createdTime" .=) <$> _fCreatedTime,
-                  ("originalFilename" .=) <$> _fOriginalFilename,
-                  Just ("kind" .= _fKind),
-                  ("lastModifyingUser" .=) <$> _fLastModifyingUser,
-                  ("iconLink" .=) <$> _fIconLink,
-                  ("hasThumbnail" .=) <$> _fHasThumbnail,
-                  ("thumbnailVersion" .=) <$> _fThumbnailVersion,
-                  ("imageMediaMetadata" .=) <$> _fImageMediaMetadata,
-                  ("explicitlyTrashed" .=) <$> _fExplicitlyTrashed,
-                  ("shared" .=) <$> _fShared,
-                  ("md5Checksum" .=) <$> _fMD5Checksum,
-                  ("folderColorRgb" .=) <$> _fFolderColorRgb,
-                  ("mimeType" .=) <$> _fMimeType,
-                  ("isAppAuthorized" .=) <$> _fIsAppAuthorized,
-                  ("name" .=) <$> _fName, ("parents" .=) <$> _fParents,
-                  ("starred" .=) <$> _fStarred,
-                  ("spaces" .=) <$> _fSpaces,
-                  ("version" .=) <$> _fVersion,
-                  ("writersCanShare" .=) <$> _fWritersCanShare,
-                  ("id" .=) <$> _fId,
-                  ("permissions" .=) <$> _fPermissions,
-                  ("quotaBytesUsed" .=) <$> _fQuotaBytesUsed,
-                  ("appProperties" .=) <$> _fAppProperties,
-                  ("videoMediaMetadata" .=) <$> _fVideoMediaMetadata,
-                  ("sharedWithMeTime" .=) <$> _fSharedWithMeTime,
-                  ("headRevisionId" .=) <$> _fHeadRevisionId,
-                  ("capabilities" .=) <$> _fCapabilities,
-                  ("description" .=) <$> _fDescription,
-                  ("viewersCanCopyContent" .=) <$>
-                    _fViewersCanCopyContent,
-                  ("sharingUser" .=) <$> _fSharingUser,
-                  ("webContentLink" .=) <$> _fWebContentLink,
-                  ("contentHints" .=) <$> _fContentHints,
-                  ("properties" .=) <$> _fProperties])
-
--- | A list of generated file IDs which can be provided in create requests.
---
--- /See:/ 'generatedIds' smart constructor.
-data GeneratedIds = GeneratedIds'
-    { _giSpace :: !(Maybe Text)
-    , _giKind  :: !Text
-    , _giIds   :: !(Maybe [Text])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'GeneratedIds' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'giSpace'
---
--- * 'giKind'
---
--- * 'giIds'
-generatedIds
-    :: GeneratedIds
-generatedIds =
-    GeneratedIds'
-    { _giSpace = Nothing
-    , _giKind = "drive#generatedIds"
-    , _giIds = Nothing
-    }
-
--- | The type of file that can be created with these IDs.
-giSpace :: Lens' GeneratedIds (Maybe Text)
-giSpace = lens _giSpace (\ s a -> s{_giSpace = a})
-
--- | Identifies what kind of resource this is. Value: the fixed string
--- \"drive#generatedIds\".
-giKind :: Lens' GeneratedIds Text
-giKind = lens _giKind (\ s a -> s{_giKind = a})
-
--- | The IDs generated for the requesting user in the specified space.
-giIds :: Lens' GeneratedIds [Text]
-giIds
-  = lens _giIds (\ s a -> s{_giIds = a}) . _Default .
-      _Coerce
-
-instance FromJSON GeneratedIds where
-        parseJSON
-          = withObject "GeneratedIds"
-              (\ o ->
-                 GeneratedIds' <$>
-                   (o .:? "space") <*>
-                     (o .:? "kind" .!= "drive#generatedIds")
-                     <*> (o .:? "ids" .!= mempty))
-
-instance ToJSON GeneratedIds where
-        toJSON GeneratedIds'{..}
-          = object
-              (catMaybes
-                 [("space" .=) <$> _giSpace, Just ("kind" .= _giKind),
-                  ("ids" .=) <$> _giIds])
-
--- | A list of comments on a file.
---
--- /See:/ 'commentList' smart constructor.
-data CommentList = CommentList'
-    { _cllNextPageToken :: !(Maybe Text)
-    , _cllKind          :: !Text
-    , _cllComments      :: !(Maybe [Comment])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CommentList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cllNextPageToken'
---
--- * 'cllKind'
---
--- * 'cllComments'
-commentList
-    :: CommentList
-commentList =
-    CommentList'
-    { _cllNextPageToken = Nothing
-    , _cllKind = "drive#commentList"
-    , _cllComments = Nothing
-    }
-
--- | The page token for the next page of comments. This will be absent if the
--- end of the comments list has been reached. If the token is rejected for
--- any reason, it should be discarded, and pagination should be restarted
--- from the first page of results.
-cllNextPageToken :: Lens' CommentList (Maybe Text)
-cllNextPageToken
-  = lens _cllNextPageToken
-      (\ s a -> s{_cllNextPageToken = a})
-
--- | Identifies what kind of resource this is. Value: the fixed string
--- \"drive#commentList\".
-cllKind :: Lens' CommentList Text
-cllKind = lens _cllKind (\ s a -> s{_cllKind = a})
-
--- | The list of comments. If nextPageToken is populated, then this list may
--- be incomplete and an additional page of results should be fetched.
-cllComments :: Lens' CommentList [Comment]
-cllComments
-  = lens _cllComments (\ s a -> s{_cllComments = a}) .
-      _Default
-      . _Coerce
-
-instance FromJSON CommentList where
-        parseJSON
-          = withObject "CommentList"
-              (\ o ->
-                 CommentList' <$>
-                   (o .:? "nextPageToken") <*>
-                     (o .:? "kind" .!= "drive#commentList")
-                     <*> (o .:? "comments" .!= mempty))
-
-instance ToJSON CommentList where
-        toJSON CommentList'{..}
-          = object
-              (catMaybes
-                 [("nextPageToken" .=) <$> _cllNextPageToken,
-                  Just ("kind" .= _cllKind),
-                  ("comments" .=) <$> _cllComments])
-
--- | A list of revisions of a file.
---
--- /See:/ 'revisionList' smart constructor.
-data RevisionList = RevisionList'
-    { _rllNextPageToken :: !(Maybe Text)
-    , _rllKind          :: !Text
-    , _rllRevisions     :: !(Maybe [Revision])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'RevisionList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rllNextPageToken'
---
--- * 'rllKind'
---
--- * 'rllRevisions'
-revisionList
-    :: RevisionList
-revisionList =
-    RevisionList'
-    { _rllNextPageToken = Nothing
-    , _rllKind = "drive#revisionList"
-    , _rllRevisions = Nothing
-    }
-
--- | The page token for the next page of revisions. This will be absent if
--- the end of the revisions list has been reached. If the token is rejected
--- for any reason, it should be discarded, and pagination should be
--- restarted from the first page of results.
-rllNextPageToken :: Lens' RevisionList (Maybe Text)
-rllNextPageToken
-  = lens _rllNextPageToken
-      (\ s a -> s{_rllNextPageToken = a})
-
--- | Identifies what kind of resource this is. Value: the fixed string
--- \"drive#revisionList\".
-rllKind :: Lens' RevisionList Text
-rllKind = lens _rllKind (\ s a -> s{_rllKind = a})
-
--- | The list of revisions. If nextPageToken is populated, then this list may
--- be incomplete and an additional page of results should be fetched.
-rllRevisions :: Lens' RevisionList [Revision]
-rllRevisions
-  = lens _rllRevisions (\ s a -> s{_rllRevisions = a})
-      . _Default
-      . _Coerce
-
-instance FromJSON RevisionList where
-        parseJSON
-          = withObject "RevisionList"
-              (\ o ->
-                 RevisionList' <$>
-                   (o .:? "nextPageToken") <*>
-                     (o .:? "kind" .!= "drive#revisionList")
-                     <*> (o .:? "revisions" .!= mempty))
-
-instance ToJSON RevisionList where
-        toJSON RevisionList'{..}
-          = object
-              (catMaybes
-                 [("nextPageToken" .=) <$> _rllNextPageToken,
-                  Just ("kind" .= _rllKind),
-                  ("revisions" .=) <$> _rllRevisions])
-
--- | A list of permissions for a file.
---
--- /See:/ 'permissionList' smart constructor.
-data PermissionList = PermissionList'
-    { _plKind        :: !Text
-    , _plPermissions :: !(Maybe [Permission])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'PermissionList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'plKind'
---
--- * 'plPermissions'
-permissionList
-    :: PermissionList
-permissionList =
-    PermissionList'
-    { _plKind = "drive#permissionList"
-    , _plPermissions = Nothing
-    }
-
--- | Identifies what kind of resource this is. Value: the fixed string
--- \"drive#permissionList\".
-plKind :: Lens' PermissionList Text
-plKind = lens _plKind (\ s a -> s{_plKind = a})
-
--- | The list of permissions.
-plPermissions :: Lens' PermissionList [Permission]
-plPermissions
-  = lens _plPermissions
-      (\ s a -> s{_plPermissions = a})
-      . _Default
-      . _Coerce
-
-instance FromJSON PermissionList where
-        parseJSON
-          = withObject "PermissionList"
-              (\ o ->
-                 PermissionList' <$>
-                   (o .:? "kind" .!= "drive#permissionList") <*>
-                     (o .:? "permissions" .!= mempty))
-
-instance ToJSON PermissionList where
-        toJSON PermissionList'{..}
-          = object
-              (catMaybes
-                 [Just ("kind" .= _plKind),
+    { _flNextPageToken    :: !(Maybe Text)
+    , _flIncompleteSearch :: !(Maybe Bool)
+    , _flKind             :: !Text
+    , _flFiles            :: !(Maybe [File])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FileList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'flNextPageToken'
+--
+-- * 'flIncompleteSearch'
+--
+-- * 'flKind'
+--
+-- * 'flFiles'
+fileList
+    :: FileList
+fileList =
+    FileList'
+    { _flNextPageToken = Nothing
+    , _flIncompleteSearch = Nothing
+    , _flKind = "drive#fileList"
+    , _flFiles = Nothing
+    }
+
+-- | The page token for the next page of files. This will be absent if the
+-- end of the files list has been reached. If the token is rejected for any
+-- reason, it should be discarded, and pagination should be restarted from
+-- the first page of results.
+flNextPageToken :: Lens' FileList (Maybe Text)
+flNextPageToken
+  = lens _flNextPageToken
+      (\ s a -> s{_flNextPageToken = a})
+
+-- | Whether the search process was incomplete. If true, then some search
+-- results may be missing, since all documents were not searched. This may
+-- occur when searching multiple Team Drives with the
+-- \"user,allTeamDrives\" corpora, but all corpora could not be searched.
+-- When this happens, it is suggested that clients narrow their query by
+-- choosing a different corpus such as \"user\" or \"teamDrive\".
+flIncompleteSearch :: Lens' FileList (Maybe Bool)
+flIncompleteSearch
+  = lens _flIncompleteSearch
+      (\ s a -> s{_flIncompleteSearch = a})
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"drive#fileList\".
+flKind :: Lens' FileList Text
+flKind = lens _flKind (\ s a -> s{_flKind = a})
+
+-- | The list of files. If nextPageToken is populated, then this list may be
+-- incomplete and an additional page of results should be fetched.
+flFiles :: Lens' FileList [File]
+flFiles
+  = lens _flFiles (\ s a -> s{_flFiles = a}) . _Default
+      . _Coerce
+
+instance FromJSON FileList where
+        parseJSON
+          = withObject "FileList"
+              (\ o ->
+                 FileList' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "incompleteSearch")
+                     <*> (o .:? "kind" .!= "drive#fileList")
+                     <*> (o .:? "files" .!= mempty))
+
+instance ToJSON FileList where
+        toJSON FileList'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _flNextPageToken,
+                  ("incompleteSearch" .=) <$> _flIncompleteSearch,
+                  Just ("kind" .= _flKind), ("files" .=) <$> _flFiles])
+
+-- | Capabilities the current user has on this Team Drive.
+--
+-- /See:/ 'teamDriveCapabilities' smart constructor.
+data TeamDriveCapabilities = TeamDriveCapabilities'
+    { _tdcCanRename                                        :: !(Maybe Bool)
+    , _tdcCanChangeTeamMembersOnlyRestriction              :: !(Maybe Bool)
+    , _tdcCanComment                                       :: !(Maybe Bool)
+    , _tdcCanRenameTeamDrive                               :: !(Maybe Bool)
+    , _tdcCanChangeTeamDriveBackgRound                     :: !(Maybe Bool)
+    , _tdcCanDownload                                      :: !(Maybe Bool)
+    , _tdcCanChangeDomainUsersOnlyRestriction              :: !(Maybe Bool)
+    , _tdcCanTrashChildren                                 :: !(Maybe Bool)
+    , _tdcCanAddChildren                                   :: !(Maybe Bool)
+    , _tdcCanRemoveChildren                                :: !(Maybe Bool)
+    , _tdcCanChangeCopyRequiresWriterPermissionRestriction :: !(Maybe Bool)
+    , _tdcCanDeleteTeamDrive                               :: !(Maybe Bool)
+    , _tdcCanListChildren                                  :: !(Maybe Bool)
+    , _tdcCanEdit                                          :: !(Maybe Bool)
+    , _tdcCanManageMembers                                 :: !(Maybe Bool)
+    , _tdcCanReadRevisions                                 :: !(Maybe Bool)
+    , _tdcCanDeleteChildren                                :: !(Maybe Bool)
+    , _tdcCanCopy                                          :: !(Maybe Bool)
+    , _tdcCanShare                                         :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TeamDriveCapabilities' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tdcCanRename'
+--
+-- * 'tdcCanChangeTeamMembersOnlyRestriction'
+--
+-- * 'tdcCanComment'
+--
+-- * 'tdcCanRenameTeamDrive'
+--
+-- * 'tdcCanChangeTeamDriveBackgRound'
+--
+-- * 'tdcCanDownload'
+--
+-- * 'tdcCanChangeDomainUsersOnlyRestriction'
+--
+-- * 'tdcCanTrashChildren'
+--
+-- * 'tdcCanAddChildren'
+--
+-- * 'tdcCanRemoveChildren'
+--
+-- * 'tdcCanChangeCopyRequiresWriterPermissionRestriction'
+--
+-- * 'tdcCanDeleteTeamDrive'
+--
+-- * 'tdcCanListChildren'
+--
+-- * 'tdcCanEdit'
+--
+-- * 'tdcCanManageMembers'
+--
+-- * 'tdcCanReadRevisions'
+--
+-- * 'tdcCanDeleteChildren'
+--
+-- * 'tdcCanCopy'
+--
+-- * 'tdcCanShare'
+teamDriveCapabilities
+    :: TeamDriveCapabilities
+teamDriveCapabilities =
+    TeamDriveCapabilities'
+    { _tdcCanRename = Nothing
+    , _tdcCanChangeTeamMembersOnlyRestriction = Nothing
+    , _tdcCanComment = Nothing
+    , _tdcCanRenameTeamDrive = Nothing
+    , _tdcCanChangeTeamDriveBackgRound = Nothing
+    , _tdcCanDownload = Nothing
+    , _tdcCanChangeDomainUsersOnlyRestriction = Nothing
+    , _tdcCanTrashChildren = Nothing
+    , _tdcCanAddChildren = Nothing
+    , _tdcCanRemoveChildren = Nothing
+    , _tdcCanChangeCopyRequiresWriterPermissionRestriction = Nothing
+    , _tdcCanDeleteTeamDrive = Nothing
+    , _tdcCanListChildren = Nothing
+    , _tdcCanEdit = Nothing
+    , _tdcCanManageMembers = Nothing
+    , _tdcCanReadRevisions = Nothing
+    , _tdcCanDeleteChildren = Nothing
+    , _tdcCanCopy = Nothing
+    , _tdcCanShare = Nothing
+    }
+
+-- | Whether the current user can rename files or folders in this Team Drive.
+tdcCanRename :: Lens' TeamDriveCapabilities (Maybe Bool)
+tdcCanRename
+  = lens _tdcCanRename (\ s a -> s{_tdcCanRename = a})
+
+-- | Whether the current user can change the teamMembersOnly restriction of
+-- this Team Drive.
+tdcCanChangeTeamMembersOnlyRestriction :: Lens' TeamDriveCapabilities (Maybe Bool)
+tdcCanChangeTeamMembersOnlyRestriction
+  = lens _tdcCanChangeTeamMembersOnlyRestriction
+      (\ s a ->
+         s{_tdcCanChangeTeamMembersOnlyRestriction = a})
+
+-- | Whether the current user can comment on files in this Team Drive.
+tdcCanComment :: Lens' TeamDriveCapabilities (Maybe Bool)
+tdcCanComment
+  = lens _tdcCanComment
+      (\ s a -> s{_tdcCanComment = a})
+
+-- | Whether the current user can rename this Team Drive.
+tdcCanRenameTeamDrive :: Lens' TeamDriveCapabilities (Maybe Bool)
+tdcCanRenameTeamDrive
+  = lens _tdcCanRenameTeamDrive
+      (\ s a -> s{_tdcCanRenameTeamDrive = a})
+
+-- | Whether the current user can change the background of this Team Drive.
+tdcCanChangeTeamDriveBackgRound :: Lens' TeamDriveCapabilities (Maybe Bool)
+tdcCanChangeTeamDriveBackgRound
+  = lens _tdcCanChangeTeamDriveBackgRound
+      (\ s a -> s{_tdcCanChangeTeamDriveBackgRound = a})
+
+-- | Whether the current user can download files in this Team Drive.
+tdcCanDownload :: Lens' TeamDriveCapabilities (Maybe Bool)
+tdcCanDownload
+  = lens _tdcCanDownload
+      (\ s a -> s{_tdcCanDownload = a})
+
+-- | Whether the current user can change the domainUsersOnly restriction of
+-- this Team Drive.
+tdcCanChangeDomainUsersOnlyRestriction :: Lens' TeamDriveCapabilities (Maybe Bool)
+tdcCanChangeDomainUsersOnlyRestriction
+  = lens _tdcCanChangeDomainUsersOnlyRestriction
+      (\ s a ->
+         s{_tdcCanChangeDomainUsersOnlyRestriction = a})
+
+-- | Whether the current user can trash children from folders in this Team
+-- Drive.
+tdcCanTrashChildren :: Lens' TeamDriveCapabilities (Maybe Bool)
+tdcCanTrashChildren
+  = lens _tdcCanTrashChildren
+      (\ s a -> s{_tdcCanTrashChildren = a})
+
+-- | Whether the current user can add children to folders in this Team Drive.
+tdcCanAddChildren :: Lens' TeamDriveCapabilities (Maybe Bool)
+tdcCanAddChildren
+  = lens _tdcCanAddChildren
+      (\ s a -> s{_tdcCanAddChildren = a})
+
+-- | Deprecated - use canDeleteChildren or canTrashChildren instead.
+tdcCanRemoveChildren :: Lens' TeamDriveCapabilities (Maybe Bool)
+tdcCanRemoveChildren
+  = lens _tdcCanRemoveChildren
+      (\ s a -> s{_tdcCanRemoveChildren = a})
+
+-- | Whether the current user can change the copyRequiresWriterPermission
+-- restriction of this Team Drive.
+tdcCanChangeCopyRequiresWriterPermissionRestriction :: Lens' TeamDriveCapabilities (Maybe Bool)
+tdcCanChangeCopyRequiresWriterPermissionRestriction
+  = lens
+      _tdcCanChangeCopyRequiresWriterPermissionRestriction
+      (\ s a ->
+         s{_tdcCanChangeCopyRequiresWriterPermissionRestriction
+             = a})
+
+-- | Whether the current user can delete this Team Drive. Attempting to
+-- delete the Team Drive may still fail if there are untrashed items inside
+-- the Team Drive.
+tdcCanDeleteTeamDrive :: Lens' TeamDriveCapabilities (Maybe Bool)
+tdcCanDeleteTeamDrive
+  = lens _tdcCanDeleteTeamDrive
+      (\ s a -> s{_tdcCanDeleteTeamDrive = a})
+
+-- | Whether the current user can list the children of folders in this Team
+-- Drive.
+tdcCanListChildren :: Lens' TeamDriveCapabilities (Maybe Bool)
+tdcCanListChildren
+  = lens _tdcCanListChildren
+      (\ s a -> s{_tdcCanListChildren = a})
+
+-- | Whether the current user can edit files in this Team Drive
+tdcCanEdit :: Lens' TeamDriveCapabilities (Maybe Bool)
+tdcCanEdit
+  = lens _tdcCanEdit (\ s a -> s{_tdcCanEdit = a})
+
+-- | Whether the current user can add members to this Team Drive or remove
+-- them or change their role.
+tdcCanManageMembers :: Lens' TeamDriveCapabilities (Maybe Bool)
+tdcCanManageMembers
+  = lens _tdcCanManageMembers
+      (\ s a -> s{_tdcCanManageMembers = a})
+
+-- | Whether the current user can read the revisions resource of files in
+-- this Team Drive.
+tdcCanReadRevisions :: Lens' TeamDriveCapabilities (Maybe Bool)
+tdcCanReadRevisions
+  = lens _tdcCanReadRevisions
+      (\ s a -> s{_tdcCanReadRevisions = a})
+
+-- | Whether the current user can delete children from folders in this Team
+-- Drive.
+tdcCanDeleteChildren :: Lens' TeamDriveCapabilities (Maybe Bool)
+tdcCanDeleteChildren
+  = lens _tdcCanDeleteChildren
+      (\ s a -> s{_tdcCanDeleteChildren = a})
+
+-- | Whether the current user can copy files in this Team Drive.
+tdcCanCopy :: Lens' TeamDriveCapabilities (Maybe Bool)
+tdcCanCopy
+  = lens _tdcCanCopy (\ s a -> s{_tdcCanCopy = a})
+
+-- | Whether the current user can share files or folders in this Team Drive.
+tdcCanShare :: Lens' TeamDriveCapabilities (Maybe Bool)
+tdcCanShare
+  = lens _tdcCanShare (\ s a -> s{_tdcCanShare = a})
+
+instance FromJSON TeamDriveCapabilities where
+        parseJSON
+          = withObject "TeamDriveCapabilities"
+              (\ o ->
+                 TeamDriveCapabilities' <$>
+                   (o .:? "canRename") <*>
+                     (o .:? "canChangeTeamMembersOnlyRestriction")
+                     <*> (o .:? "canComment")
+                     <*> (o .:? "canRenameTeamDrive")
+                     <*> (o .:? "canChangeTeamDriveBackground")
+                     <*> (o .:? "canDownload")
+                     <*> (o .:? "canChangeDomainUsersOnlyRestriction")
+                     <*> (o .:? "canTrashChildren")
+                     <*> (o .:? "canAddChildren")
+                     <*> (o .:? "canRemoveChildren")
+                     <*>
+                     (o .:?
+                        "canChangeCopyRequiresWriterPermissionRestriction")
+                     <*> (o .:? "canDeleteTeamDrive")
+                     <*> (o .:? "canListChildren")
+                     <*> (o .:? "canEdit")
+                     <*> (o .:? "canManageMembers")
+                     <*> (o .:? "canReadRevisions")
+                     <*> (o .:? "canDeleteChildren")
+                     <*> (o .:? "canCopy")
+                     <*> (o .:? "canShare"))
+
+instance ToJSON TeamDriveCapabilities where
+        toJSON TeamDriveCapabilities'{..}
+          = object
+              (catMaybes
+                 [("canRename" .=) <$> _tdcCanRename,
+                  ("canChangeTeamMembersOnlyRestriction" .=) <$>
+                    _tdcCanChangeTeamMembersOnlyRestriction,
+                  ("canComment" .=) <$> _tdcCanComment,
+                  ("canRenameTeamDrive" .=) <$> _tdcCanRenameTeamDrive,
+                  ("canChangeTeamDriveBackground" .=) <$>
+                    _tdcCanChangeTeamDriveBackgRound,
+                  ("canDownload" .=) <$> _tdcCanDownload,
+                  ("canChangeDomainUsersOnlyRestriction" .=) <$>
+                    _tdcCanChangeDomainUsersOnlyRestriction,
+                  ("canTrashChildren" .=) <$> _tdcCanTrashChildren,
+                  ("canAddChildren" .=) <$> _tdcCanAddChildren,
+                  ("canRemoveChildren" .=) <$> _tdcCanRemoveChildren,
+                  ("canChangeCopyRequiresWriterPermissionRestriction"
+                     .=)
+                    <$>
+                    _tdcCanChangeCopyRequiresWriterPermissionRestriction,
+                  ("canDeleteTeamDrive" .=) <$> _tdcCanDeleteTeamDrive,
+                  ("canListChildren" .=) <$> _tdcCanListChildren,
+                  ("canEdit" .=) <$> _tdcCanEdit,
+                  ("canManageMembers" .=) <$> _tdcCanManageMembers,
+                  ("canReadRevisions" .=) <$> _tdcCanReadRevisions,
+                  ("canDeleteChildren" .=) <$> _tdcCanDeleteChildren,
+                  ("canCopy" .=) <$> _tdcCanCopy,
+                  ("canShare" .=) <$> _tdcCanShare])
+
+-- | The file content to which the comment refers, typically within the
+-- anchor region. For a text file, for example, this would be the text at
+-- the location of the comment.
+--
+-- /See:/ 'commentQuotedFileContent' smart constructor.
+data CommentQuotedFileContent = CommentQuotedFileContent'
+    { _cqfcValue    :: !(Maybe Text)
+    , _cqfcMimeType :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CommentQuotedFileContent' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cqfcValue'
+--
+-- * 'cqfcMimeType'
+commentQuotedFileContent
+    :: CommentQuotedFileContent
+commentQuotedFileContent =
+    CommentQuotedFileContent'
+    { _cqfcValue = Nothing
+    , _cqfcMimeType = Nothing
+    }
+
+-- | The quoted content itself. This is interpreted as plain text if set
+-- through the API.
+cqfcValue :: Lens' CommentQuotedFileContent (Maybe Text)
+cqfcValue
+  = lens _cqfcValue (\ s a -> s{_cqfcValue = a})
+
+-- | The MIME type of the quoted content.
+cqfcMimeType :: Lens' CommentQuotedFileContent (Maybe Text)
+cqfcMimeType
+  = lens _cqfcMimeType (\ s a -> s{_cqfcMimeType = a})
+
+instance FromJSON CommentQuotedFileContent where
+        parseJSON
+          = withObject "CommentQuotedFileContent"
+              (\ o ->
+                 CommentQuotedFileContent' <$>
+                   (o .:? "value") <*> (o .:? "mimeType"))
+
+instance ToJSON CommentQuotedFileContent where
+        toJSON CommentQuotedFileContent'{..}
+          = object
+              (catMaybes
+                 [("value" .=) <$> _cqfcValue,
+                  ("mimeType" .=) <$> _cqfcMimeType])
+
+-- | The user\'s storage quota limits and usage. All fields are measured in
+-- bytes.
+--
+-- /See:/ 'aboutStorageQuota' smart constructor.
+data AboutStorageQuota = AboutStorageQuota'
+    { _asqUsageInDriveTrash :: !(Maybe (Textual Int64))
+    , _asqLimit             :: !(Maybe (Textual Int64))
+    , _asqUsage             :: !(Maybe (Textual Int64))
+    , _asqUsageInDrive      :: !(Maybe (Textual Int64))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AboutStorageQuota' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'asqUsageInDriveTrash'
+--
+-- * 'asqLimit'
+--
+-- * 'asqUsage'
+--
+-- * 'asqUsageInDrive'
+aboutStorageQuota
+    :: AboutStorageQuota
+aboutStorageQuota =
+    AboutStorageQuota'
+    { _asqUsageInDriveTrash = Nothing
+    , _asqLimit = Nothing
+    , _asqUsage = Nothing
+    , _asqUsageInDrive = Nothing
+    }
+
+-- | The usage by trashed files in Google Drive.
+asqUsageInDriveTrash :: Lens' AboutStorageQuota (Maybe Int64)
+asqUsageInDriveTrash
+  = lens _asqUsageInDriveTrash
+      (\ s a -> s{_asqUsageInDriveTrash = a})
+      . mapping _Coerce
+
+-- | The usage limit, if applicable. This will not be present if the user has
+-- unlimited storage.
+asqLimit :: Lens' AboutStorageQuota (Maybe Int64)
+asqLimit
+  = lens _asqLimit (\ s a -> s{_asqLimit = a}) .
+      mapping _Coerce
+
+-- | The total usage across all services.
+asqUsage :: Lens' AboutStorageQuota (Maybe Int64)
+asqUsage
+  = lens _asqUsage (\ s a -> s{_asqUsage = a}) .
+      mapping _Coerce
+
+-- | The usage by all files in Google Drive.
+asqUsageInDrive :: Lens' AboutStorageQuota (Maybe Int64)
+asqUsageInDrive
+  = lens _asqUsageInDrive
+      (\ s a -> s{_asqUsageInDrive = a})
+      . mapping _Coerce
+
+instance FromJSON AboutStorageQuota where
+        parseJSON
+          = withObject "AboutStorageQuota"
+              (\ o ->
+                 AboutStorageQuota' <$>
+                   (o .:? "usageInDriveTrash") <*> (o .:? "limit") <*>
+                     (o .:? "usage")
+                     <*> (o .:? "usageInDrive"))
+
+instance ToJSON AboutStorageQuota where
+        toJSON AboutStorageQuota'{..}
+          = object
+              (catMaybes
+                 [("usageInDriveTrash" .=) <$> _asqUsageInDriveTrash,
+                  ("limit" .=) <$> _asqLimit,
+                  ("usage" .=) <$> _asqUsage,
+                  ("usageInDrive" .=) <$> _asqUsageInDrive])
+
+-- | A reply to a comment on a file.
+--
+-- /See:/ 'reply' smart constructor.
+data Reply = Reply'
+    { _rHTMLContent  :: !(Maybe Text)
+    , _rModifiedTime :: !(Maybe DateTime')
+    , _rCreatedTime  :: !(Maybe DateTime')
+    , _rKind         :: !Text
+    , _rAction       :: !(Maybe Text)
+    , _rContent      :: !(Maybe Text)
+    , _rAuthor       :: !(Maybe User)
+    , _rId           :: !(Maybe Text)
+    , _rDeleted      :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Reply' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rHTMLContent'
+--
+-- * 'rModifiedTime'
+--
+-- * 'rCreatedTime'
+--
+-- * 'rKind'
+--
+-- * 'rAction'
+--
+-- * 'rContent'
+--
+-- * 'rAuthor'
+--
+-- * 'rId'
+--
+-- * 'rDeleted'
+reply
+    :: Reply
+reply =
+    Reply'
+    { _rHTMLContent = Nothing
+    , _rModifiedTime = Nothing
+    , _rCreatedTime = Nothing
+    , _rKind = "drive#reply"
+    , _rAction = Nothing
+    , _rContent = Nothing
+    , _rAuthor = Nothing
+    , _rId = Nothing
+    , _rDeleted = Nothing
+    }
+
+-- | The content of the reply with HTML formatting.
+rHTMLContent :: Lens' Reply (Maybe Text)
+rHTMLContent
+  = lens _rHTMLContent (\ s a -> s{_rHTMLContent = a})
+
+-- | The last time the reply was modified (RFC 3339 date-time).
+rModifiedTime :: Lens' Reply (Maybe UTCTime)
+rModifiedTime
+  = lens _rModifiedTime
+      (\ s a -> s{_rModifiedTime = a})
+      . mapping _DateTime
+
+-- | The time at which the reply was created (RFC 3339 date-time).
+rCreatedTime :: Lens' Reply (Maybe UTCTime)
+rCreatedTime
+  = lens _rCreatedTime (\ s a -> s{_rCreatedTime = a})
+      . mapping _DateTime
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"drive#reply\".
+rKind :: Lens' Reply Text
+rKind = lens _rKind (\ s a -> s{_rKind = a})
+
+-- | The action the reply performed to the parent comment. Valid values are:
+-- - resolve - reopen
+rAction :: Lens' Reply (Maybe Text)
+rAction = lens _rAction (\ s a -> s{_rAction = a})
+
+-- | The plain text content of the reply. This field is used for setting the
+-- content, while htmlContent should be displayed. This is required on
+-- creates if no action is specified.
+rContent :: Lens' Reply (Maybe Text)
+rContent = lens _rContent (\ s a -> s{_rContent = a})
+
+-- | The user who created the reply.
+rAuthor :: Lens' Reply (Maybe User)
+rAuthor = lens _rAuthor (\ s a -> s{_rAuthor = a})
+
+-- | The ID of the reply.
+rId :: Lens' Reply (Maybe Text)
+rId = lens _rId (\ s a -> s{_rId = a})
+
+-- | Whether the reply has been deleted. A deleted reply has no content.
+rDeleted :: Lens' Reply (Maybe Bool)
+rDeleted = lens _rDeleted (\ s a -> s{_rDeleted = a})
+
+instance FromJSON Reply where
+        parseJSON
+          = withObject "Reply"
+              (\ o ->
+                 Reply' <$>
+                   (o .:? "htmlContent") <*> (o .:? "modifiedTime") <*>
+                     (o .:? "createdTime")
+                     <*> (o .:? "kind" .!= "drive#reply")
+                     <*> (o .:? "action")
+                     <*> (o .:? "content")
+                     <*> (o .:? "author")
+                     <*> (o .:? "id")
+                     <*> (o .:? "deleted"))
+
+instance ToJSON Reply where
+        toJSON Reply'{..}
+          = object
+              (catMaybes
+                 [("htmlContent" .=) <$> _rHTMLContent,
+                  ("modifiedTime" .=) <$> _rModifiedTime,
+                  ("createdTime" .=) <$> _rCreatedTime,
+                  Just ("kind" .= _rKind), ("action" .=) <$> _rAction,
+                  ("content" .=) <$> _rContent,
+                  ("author" .=) <$> _rAuthor, ("id" .=) <$> _rId,
+                  ("deleted" .=) <$> _rDeleted])
+
+-- | A map of source MIME type to possible targets for all supported imports.
+--
+-- /See:/ 'aboutImportFormats' smart constructor.
+newtype AboutImportFormats = AboutImportFormats'
+    { _aifAddtional :: HashMap Text [Text]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AboutImportFormats' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aifAddtional'
+aboutImportFormats
+    :: HashMap Text [Text] -- ^ 'aifAddtional'
+    -> AboutImportFormats
+aboutImportFormats pAifAddtional_ =
+    AboutImportFormats'
+    { _aifAddtional = _Coerce # pAifAddtional_
+    }
+
+aifAddtional :: Lens' AboutImportFormats (HashMap Text [Text])
+aifAddtional
+  = lens _aifAddtional (\ s a -> s{_aifAddtional = a})
+      . _Coerce
+
+instance FromJSON AboutImportFormats where
+        parseJSON
+          = withObject "AboutImportFormats"
+              (\ o -> AboutImportFormats' <$> (parseJSONObject o))
+
+instance ToJSON AboutImportFormats where
+        toJSON = toJSON . _aifAddtional
+
+-- | Capabilities the current user has on this file. Each capability
+-- corresponds to a fine-grained action that a user may take.
+--
+-- /See:/ 'fileCapabilities' smart constructor.
+data FileCapabilities = FileCapabilities'
+    { _fcCanRename                             :: !(Maybe Bool)
+    , _fcCanComment                            :: !(Maybe Bool)
+    , _fcCanMoveChildrenWithinTeamDrive        :: !(Maybe Bool)
+    , _fcCanDelete                             :: !(Maybe Bool)
+    , _fcCanMoveItemIntoTeamDrive              :: !(Maybe Bool)
+    , _fcCanDownload                           :: !(Maybe Bool)
+    , _fcCanTrash                              :: !(Maybe Bool)
+    , _fcCanUntrash                            :: !(Maybe Bool)
+    , _fcCanTrashChildren                      :: !(Maybe Bool)
+    , _fcCanAddChildren                        :: !(Maybe Bool)
+    , _fcCanRemoveChildren                     :: !(Maybe Bool)
+    , _fcCanMoveTeamDriveItem                  :: !(Maybe Bool)
+    , _fcCanMoveItemWithinTeamDrive            :: !(Maybe Bool)
+    , _fcCanReadTeamDrive                      :: !(Maybe Bool)
+    , _fcCanChangeCopyRequiresWriterPermission :: !(Maybe Bool)
+    , _fcCanListChildren                       :: !(Maybe Bool)
+    , _fcCanMoveChildrenOutOfTeamDrive         :: !(Maybe Bool)
+    , _fcCanEdit                               :: !(Maybe Bool)
+    , _fcCanChangeViewersCanCopyContent        :: !(Maybe Bool)
+    , _fcCanReadRevisions                      :: !(Maybe Bool)
+    , _fcCanDeleteChildren                     :: !(Maybe Bool)
+    , _fcCanMoveItemOutOfTeamDrive             :: !(Maybe Bool)
+    , _fcCanCopy                               :: !(Maybe Bool)
+    , _fcCanShare                              :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FileCapabilities' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fcCanRename'
+--
+-- * 'fcCanComment'
+--
+-- * 'fcCanMoveChildrenWithinTeamDrive'
+--
+-- * 'fcCanDelete'
+--
+-- * 'fcCanMoveItemIntoTeamDrive'
+--
+-- * 'fcCanDownload'
+--
+-- * 'fcCanTrash'
+--
+-- * 'fcCanUntrash'
+--
+-- * 'fcCanTrashChildren'
+--
+-- * 'fcCanAddChildren'
+--
+-- * 'fcCanRemoveChildren'
+--
+-- * 'fcCanMoveTeamDriveItem'
+--
+-- * 'fcCanMoveItemWithinTeamDrive'
+--
+-- * 'fcCanReadTeamDrive'
+--
+-- * 'fcCanChangeCopyRequiresWriterPermission'
+--
+-- * 'fcCanListChildren'
+--
+-- * 'fcCanMoveChildrenOutOfTeamDrive'
+--
+-- * 'fcCanEdit'
+--
+-- * 'fcCanChangeViewersCanCopyContent'
+--
+-- * 'fcCanReadRevisions'
+--
+-- * 'fcCanDeleteChildren'
+--
+-- * 'fcCanMoveItemOutOfTeamDrive'
+--
+-- * 'fcCanCopy'
+--
+-- * 'fcCanShare'
+fileCapabilities
+    :: FileCapabilities
+fileCapabilities =
+    FileCapabilities'
+    { _fcCanRename = Nothing
+    , _fcCanComment = Nothing
+    , _fcCanMoveChildrenWithinTeamDrive = Nothing
+    , _fcCanDelete = Nothing
+    , _fcCanMoveItemIntoTeamDrive = Nothing
+    , _fcCanDownload = Nothing
+    , _fcCanTrash = Nothing
+    , _fcCanUntrash = Nothing
+    , _fcCanTrashChildren = Nothing
+    , _fcCanAddChildren = Nothing
+    , _fcCanRemoveChildren = Nothing
+    , _fcCanMoveTeamDriveItem = Nothing
+    , _fcCanMoveItemWithinTeamDrive = Nothing
+    , _fcCanReadTeamDrive = Nothing
+    , _fcCanChangeCopyRequiresWriterPermission = Nothing
+    , _fcCanListChildren = Nothing
+    , _fcCanMoveChildrenOutOfTeamDrive = Nothing
+    , _fcCanEdit = Nothing
+    , _fcCanChangeViewersCanCopyContent = Nothing
+    , _fcCanReadRevisions = Nothing
+    , _fcCanDeleteChildren = Nothing
+    , _fcCanMoveItemOutOfTeamDrive = Nothing
+    , _fcCanCopy = Nothing
+    , _fcCanShare = Nothing
+    }
+
+-- | Whether the current user can rename this file.
+fcCanRename :: Lens' FileCapabilities (Maybe Bool)
+fcCanRename
+  = lens _fcCanRename (\ s a -> s{_fcCanRename = a})
+
+-- | Whether the current user can comment on this file.
+fcCanComment :: Lens' FileCapabilities (Maybe Bool)
+fcCanComment
+  = lens _fcCanComment (\ s a -> s{_fcCanComment = a})
+
+-- | Whether the current user can move children of this folder within the
+-- Team Drive. This is false when the item is not a folder. Only populated
+-- for Team Drive items.
+fcCanMoveChildrenWithinTeamDrive :: Lens' FileCapabilities (Maybe Bool)
+fcCanMoveChildrenWithinTeamDrive
+  = lens _fcCanMoveChildrenWithinTeamDrive
+      (\ s a -> s{_fcCanMoveChildrenWithinTeamDrive = a})
+
+-- | Whether the current user can delete this file.
+fcCanDelete :: Lens' FileCapabilities (Maybe Bool)
+fcCanDelete
+  = lens _fcCanDelete (\ s a -> s{_fcCanDelete = a})
+
+-- | Whether the current user can move this item into a Team Drive. If the
+-- item is in a Team Drive, this field is equivalent to
+-- canMoveTeamDriveItem.
+fcCanMoveItemIntoTeamDrive :: Lens' FileCapabilities (Maybe Bool)
+fcCanMoveItemIntoTeamDrive
+  = lens _fcCanMoveItemIntoTeamDrive
+      (\ s a -> s{_fcCanMoveItemIntoTeamDrive = a})
+
+-- | Whether the current user can download this file.
+fcCanDownload :: Lens' FileCapabilities (Maybe Bool)
+fcCanDownload
+  = lens _fcCanDownload
+      (\ s a -> s{_fcCanDownload = a})
+
+-- | Whether the current user can move this file to trash.
+fcCanTrash :: Lens' FileCapabilities (Maybe Bool)
+fcCanTrash
+  = lens _fcCanTrash (\ s a -> s{_fcCanTrash = a})
+
+-- | Whether the current user can restore this file from trash.
+fcCanUntrash :: Lens' FileCapabilities (Maybe Bool)
+fcCanUntrash
+  = lens _fcCanUntrash (\ s a -> s{_fcCanUntrash = a})
+
+-- | Whether the current user can trash children of this folder. This is
+-- false when the item is not a folder. Only populated for Team Drive
+-- items.
+fcCanTrashChildren :: Lens' FileCapabilities (Maybe Bool)
+fcCanTrashChildren
+  = lens _fcCanTrashChildren
+      (\ s a -> s{_fcCanTrashChildren = a})
+
+-- | Whether the current user can add children to this folder. This is always
+-- false when the item is not a folder.
+fcCanAddChildren :: Lens' FileCapabilities (Maybe Bool)
+fcCanAddChildren
+  = lens _fcCanAddChildren
+      (\ s a -> s{_fcCanAddChildren = a})
+
+-- | Whether the current user can remove children from this folder. This is
+-- always false when the item is not a folder. For Team Drive items, use
+-- canDeleteChildren or canTrashChildren instead.
+fcCanRemoveChildren :: Lens' FileCapabilities (Maybe Bool)
+fcCanRemoveChildren
+  = lens _fcCanRemoveChildren
+      (\ s a -> s{_fcCanRemoveChildren = a})
+
+-- | Deprecated - use canMoveItemWithinTeamDrive or canMoveItemOutOfTeamDrive
+-- instead.
+fcCanMoveTeamDriveItem :: Lens' FileCapabilities (Maybe Bool)
+fcCanMoveTeamDriveItem
+  = lens _fcCanMoveTeamDriveItem
+      (\ s a -> s{_fcCanMoveTeamDriveItem = a})
+
+-- | Whether the current user can move this Team Drive item within this Team
+-- Drive. Note that a request to change the parent of the item may still
+-- fail depending on the new parent that is being added. Only populated for
+-- Team Drive items.
+fcCanMoveItemWithinTeamDrive :: Lens' FileCapabilities (Maybe Bool)
+fcCanMoveItemWithinTeamDrive
+  = lens _fcCanMoveItemWithinTeamDrive
+      (\ s a -> s{_fcCanMoveItemWithinTeamDrive = a})
+
+-- | Whether the current user can read the Team Drive to which this file
+-- belongs. Only populated for Team Drive files.
+fcCanReadTeamDrive :: Lens' FileCapabilities (Maybe Bool)
+fcCanReadTeamDrive
+  = lens _fcCanReadTeamDrive
+      (\ s a -> s{_fcCanReadTeamDrive = a})
+
+-- | Whether the current user can change the copyRequiresWriterPermission
+-- restriction of this file.
+fcCanChangeCopyRequiresWriterPermission :: Lens' FileCapabilities (Maybe Bool)
+fcCanChangeCopyRequiresWriterPermission
+  = lens _fcCanChangeCopyRequiresWriterPermission
+      (\ s a ->
+         s{_fcCanChangeCopyRequiresWriterPermission = a})
+
+-- | Whether the current user can list the children of this folder. This is
+-- always false when the item is not a folder.
+fcCanListChildren :: Lens' FileCapabilities (Maybe Bool)
+fcCanListChildren
+  = lens _fcCanListChildren
+      (\ s a -> s{_fcCanListChildren = a})
+
+-- | Whether the current user can move children of this folder outside of the
+-- Team Drive. This is false when the item is not a folder. Only populated
+-- for Team Drive items.
+fcCanMoveChildrenOutOfTeamDrive :: Lens' FileCapabilities (Maybe Bool)
+fcCanMoveChildrenOutOfTeamDrive
+  = lens _fcCanMoveChildrenOutOfTeamDrive
+      (\ s a -> s{_fcCanMoveChildrenOutOfTeamDrive = a})
+
+-- | Whether the current user can edit this file.
+fcCanEdit :: Lens' FileCapabilities (Maybe Bool)
+fcCanEdit
+  = lens _fcCanEdit (\ s a -> s{_fcCanEdit = a})
+
+-- | Deprecated
+fcCanChangeViewersCanCopyContent :: Lens' FileCapabilities (Maybe Bool)
+fcCanChangeViewersCanCopyContent
+  = lens _fcCanChangeViewersCanCopyContent
+      (\ s a -> s{_fcCanChangeViewersCanCopyContent = a})
+
+-- | Whether the current user can read the revisions resource of this file.
+-- For a Team Drive item, whether revisions of non-folder descendants of
+-- this item, or this item itself if it is not a folder, can be read.
+fcCanReadRevisions :: Lens' FileCapabilities (Maybe Bool)
+fcCanReadRevisions
+  = lens _fcCanReadRevisions
+      (\ s a -> s{_fcCanReadRevisions = a})
+
+-- | Whether the current user can delete children of this folder. This is
+-- false when the item is not a folder. Only populated for Team Drive
+-- items.
+fcCanDeleteChildren :: Lens' FileCapabilities (Maybe Bool)
+fcCanDeleteChildren
+  = lens _fcCanDeleteChildren
+      (\ s a -> s{_fcCanDeleteChildren = a})
+
+-- | Whether the current user can move this Team Drive item outside of this
+-- Team Drive by changing its parent. Note that a request to change the
+-- parent of the item may still fail depending on the new parent that is
+-- being added. Only populated for Team Drive items.
+fcCanMoveItemOutOfTeamDrive :: Lens' FileCapabilities (Maybe Bool)
+fcCanMoveItemOutOfTeamDrive
+  = lens _fcCanMoveItemOutOfTeamDrive
+      (\ s a -> s{_fcCanMoveItemOutOfTeamDrive = a})
+
+-- | Whether the current user can copy this file. For a Team Drive item,
+-- whether the current user can copy non-folder descendants of this item,
+-- or this item itself if it is not a folder.
+fcCanCopy :: Lens' FileCapabilities (Maybe Bool)
+fcCanCopy
+  = lens _fcCanCopy (\ s a -> s{_fcCanCopy = a})
+
+-- | Whether the current user can modify the sharing settings for this file.
+fcCanShare :: Lens' FileCapabilities (Maybe Bool)
+fcCanShare
+  = lens _fcCanShare (\ s a -> s{_fcCanShare = a})
+
+instance FromJSON FileCapabilities where
+        parseJSON
+          = withObject "FileCapabilities"
+              (\ o ->
+                 FileCapabilities' <$>
+                   (o .:? "canRename") <*> (o .:? "canComment") <*>
+                     (o .:? "canMoveChildrenWithinTeamDrive")
+                     <*> (o .:? "canDelete")
+                     <*> (o .:? "canMoveItemIntoTeamDrive")
+                     <*> (o .:? "canDownload")
+                     <*> (o .:? "canTrash")
+                     <*> (o .:? "canUntrash")
+                     <*> (o .:? "canTrashChildren")
+                     <*> (o .:? "canAddChildren")
+                     <*> (o .:? "canRemoveChildren")
+                     <*> (o .:? "canMoveTeamDriveItem")
+                     <*> (o .:? "canMoveItemWithinTeamDrive")
+                     <*> (o .:? "canReadTeamDrive")
+                     <*> (o .:? "canChangeCopyRequiresWriterPermission")
+                     <*> (o .:? "canListChildren")
+                     <*> (o .:? "canMoveChildrenOutOfTeamDrive")
+                     <*> (o .:? "canEdit")
+                     <*> (o .:? "canChangeViewersCanCopyContent")
+                     <*> (o .:? "canReadRevisions")
+                     <*> (o .:? "canDeleteChildren")
+                     <*> (o .:? "canMoveItemOutOfTeamDrive")
+                     <*> (o .:? "canCopy")
+                     <*> (o .:? "canShare"))
+
+instance ToJSON FileCapabilities where
+        toJSON FileCapabilities'{..}
+          = object
+              (catMaybes
+                 [("canRename" .=) <$> _fcCanRename,
+                  ("canComment" .=) <$> _fcCanComment,
+                  ("canMoveChildrenWithinTeamDrive" .=) <$>
+                    _fcCanMoveChildrenWithinTeamDrive,
+                  ("canDelete" .=) <$> _fcCanDelete,
+                  ("canMoveItemIntoTeamDrive" .=) <$>
+                    _fcCanMoveItemIntoTeamDrive,
+                  ("canDownload" .=) <$> _fcCanDownload,
+                  ("canTrash" .=) <$> _fcCanTrash,
+                  ("canUntrash" .=) <$> _fcCanUntrash,
+                  ("canTrashChildren" .=) <$> _fcCanTrashChildren,
+                  ("canAddChildren" .=) <$> _fcCanAddChildren,
+                  ("canRemoveChildren" .=) <$> _fcCanRemoveChildren,
+                  ("canMoveTeamDriveItem" .=) <$>
+                    _fcCanMoveTeamDriveItem,
+                  ("canMoveItemWithinTeamDrive" .=) <$>
+                    _fcCanMoveItemWithinTeamDrive,
+                  ("canReadTeamDrive" .=) <$> _fcCanReadTeamDrive,
+                  ("canChangeCopyRequiresWriterPermission" .=) <$>
+                    _fcCanChangeCopyRequiresWriterPermission,
+                  ("canListChildren" .=) <$> _fcCanListChildren,
+                  ("canMoveChildrenOutOfTeamDrive" .=) <$>
+                    _fcCanMoveChildrenOutOfTeamDrive,
+                  ("canEdit" .=) <$> _fcCanEdit,
+                  ("canChangeViewersCanCopyContent" .=) <$>
+                    _fcCanChangeViewersCanCopyContent,
+                  ("canReadRevisions" .=) <$> _fcCanReadRevisions,
+                  ("canDeleteChildren" .=) <$> _fcCanDeleteChildren,
+                  ("canMoveItemOutOfTeamDrive" .=) <$>
+                    _fcCanMoveItemOutOfTeamDrive,
+                  ("canCopy" .=) <$> _fcCanCopy,
+                  ("canShare" .=) <$> _fcCanShare])
+
+-- | A list of replies to a comment on a file.
+--
+-- /See:/ 'replyList' smart constructor.
+data ReplyList = ReplyList'
+    { _rlNextPageToken :: !(Maybe Text)
+    , _rlKind          :: !Text
+    , _rlReplies       :: !(Maybe [Reply])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ReplyList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rlNextPageToken'
+--
+-- * 'rlKind'
+--
+-- * 'rlReplies'
+replyList
+    :: ReplyList
+replyList =
+    ReplyList'
+    { _rlNextPageToken = Nothing
+    , _rlKind = "drive#replyList"
+    , _rlReplies = Nothing
+    }
+
+-- | The page token for the next page of replies. This will be absent if the
+-- end of the replies list has been reached. If the token is rejected for
+-- any reason, it should be discarded, and pagination should be restarted
+-- from the first page of results.
+rlNextPageToken :: Lens' ReplyList (Maybe Text)
+rlNextPageToken
+  = lens _rlNextPageToken
+      (\ s a -> s{_rlNextPageToken = a})
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"drive#replyList\".
+rlKind :: Lens' ReplyList Text
+rlKind = lens _rlKind (\ s a -> s{_rlKind = a})
+
+-- | The list of replies. If nextPageToken is populated, then this list may
+-- be incomplete and an additional page of results should be fetched.
+rlReplies :: Lens' ReplyList [Reply]
+rlReplies
+  = lens _rlReplies (\ s a -> s{_rlReplies = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON ReplyList where
+        parseJSON
+          = withObject "ReplyList"
+              (\ o ->
+                 ReplyList' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "drive#replyList")
+                     <*> (o .:? "replies" .!= mempty))
+
+instance ToJSON ReplyList where
+        toJSON ReplyList'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _rlNextPageToken,
+                  Just ("kind" .= _rlKind),
+                  ("replies" .=) <$> _rlReplies])
+
+-- | A thumbnail for the file. This will only be used if Drive cannot
+-- generate a standard thumbnail.
+--
+-- /See:/ 'fileContentHintsThumbnail' smart constructor.
+data FileContentHintsThumbnail = FileContentHintsThumbnail'
+    { _fchtImage    :: !(Maybe Bytes)
+    , _fchtMimeType :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FileContentHintsThumbnail' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fchtImage'
+--
+-- * 'fchtMimeType'
+fileContentHintsThumbnail
+    :: FileContentHintsThumbnail
+fileContentHintsThumbnail =
+    FileContentHintsThumbnail'
+    { _fchtImage = Nothing
+    , _fchtMimeType = Nothing
+    }
+
+-- | The thumbnail data encoded with URL-safe Base64 (RFC 4648 section 5).
+fchtImage :: Lens' FileContentHintsThumbnail (Maybe ByteString)
+fchtImage
+  = lens _fchtImage (\ s a -> s{_fchtImage = a}) .
+      mapping _Bytes
+
+-- | The MIME type of the thumbnail.
+fchtMimeType :: Lens' FileContentHintsThumbnail (Maybe Text)
+fchtMimeType
+  = lens _fchtMimeType (\ s a -> s{_fchtMimeType = a})
+
+instance FromJSON FileContentHintsThumbnail where
+        parseJSON
+          = withObject "FileContentHintsThumbnail"
+              (\ o ->
+                 FileContentHintsThumbnail' <$>
+                   (o .:? "image") <*> (o .:? "mimeType"))
+
+instance ToJSON FileContentHintsThumbnail where
+        toJSON FileContentHintsThumbnail'{..}
+          = object
+              (catMaybes
+                 [("image" .=) <$> _fchtImage,
+                  ("mimeType" .=) <$> _fchtMimeType])
+
+-- | A list of Team Drives.
+--
+-- /See:/ 'teamDriveList' smart constructor.
+data TeamDriveList = TeamDriveList'
+    { _tdlNextPageToken :: !(Maybe Text)
+    , _tdlTeamDrives    :: !(Maybe [TeamDrive])
+    , _tdlKind          :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TeamDriveList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tdlNextPageToken'
+--
+-- * 'tdlTeamDrives'
+--
+-- * 'tdlKind'
+teamDriveList
+    :: TeamDriveList
+teamDriveList =
+    TeamDriveList'
+    { _tdlNextPageToken = Nothing
+    , _tdlTeamDrives = Nothing
+    , _tdlKind = "drive#teamDriveList"
+    }
+
+-- | The page token for the next page of Team Drives. This will be absent if
+-- the end of the Team Drives list has been reached. If the token is
+-- rejected for any reason, it should be discarded, and pagination should
+-- be restarted from the first page of results.
+tdlNextPageToken :: Lens' TeamDriveList (Maybe Text)
+tdlNextPageToken
+  = lens _tdlNextPageToken
+      (\ s a -> s{_tdlNextPageToken = a})
+
+-- | The list of Team Drives. If nextPageToken is populated, then this list
+-- may be incomplete and an additional page of results should be fetched.
+tdlTeamDrives :: Lens' TeamDriveList [TeamDrive]
+tdlTeamDrives
+  = lens _tdlTeamDrives
+      (\ s a -> s{_tdlTeamDrives = a})
+      . _Default
+      . _Coerce
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"drive#teamDriveList\".
+tdlKind :: Lens' TeamDriveList Text
+tdlKind = lens _tdlKind (\ s a -> s{_tdlKind = a})
+
+instance FromJSON TeamDriveList where
+        parseJSON
+          = withObject "TeamDriveList"
+              (\ o ->
+                 TeamDriveList' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "teamDrives" .!= mempty)
+                     <*> (o .:? "kind" .!= "drive#teamDriveList"))
+
+instance ToJSON TeamDriveList where
+        toJSON TeamDriveList'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _tdlNextPageToken,
+                  ("teamDrives" .=) <$> _tdlTeamDrives,
+                  Just ("kind" .= _tdlKind)])
+
+-- | An notification channel used to watch for resource changes.
+--
+-- /See:/ 'channel' smart constructor.
+data Channel = Channel'
+    { _cResourceURI :: !(Maybe Text)
+    , _cResourceId  :: !(Maybe Text)
+    , _cKind        :: !Text
+    , _cExpiration  :: !(Maybe (Textual Int64))
+    , _cToken       :: !(Maybe Text)
+    , _cAddress     :: !(Maybe Text)
+    , _cPayload     :: !(Maybe Bool)
+    , _cParams      :: !(Maybe ChannelParams)
+    , _cId          :: !(Maybe Text)
+    , _cType        :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Channel' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cResourceURI'
+--
+-- * 'cResourceId'
+--
+-- * 'cKind'
+--
+-- * 'cExpiration'
+--
+-- * 'cToken'
+--
+-- * 'cAddress'
+--
+-- * 'cPayload'
+--
+-- * 'cParams'
+--
+-- * 'cId'
+--
+-- * 'cType'
+channel
+    :: Channel
+channel =
+    Channel'
+    { _cResourceURI = Nothing
+    , _cResourceId = Nothing
+    , _cKind = "api#channel"
+    , _cExpiration = Nothing
+    , _cToken = Nothing
+    , _cAddress = Nothing
+    , _cPayload = Nothing
+    , _cParams = Nothing
+    , _cId = Nothing
+    , _cType = Nothing
+    }
+
+-- | A version-specific identifier for the watched resource.
+cResourceURI :: Lens' Channel (Maybe Text)
+cResourceURI
+  = lens _cResourceURI (\ s a -> s{_cResourceURI = a})
+
+-- | An opaque ID that identifies the resource being watched on this channel.
+-- Stable across different API versions.
+cResourceId :: Lens' Channel (Maybe Text)
+cResourceId
+  = lens _cResourceId (\ s a -> s{_cResourceId = a})
+
+-- | Identifies this as a notification channel used to watch for changes to a
+-- resource. Value: the fixed string \"api#channel\".
+cKind :: Lens' Channel Text
+cKind = lens _cKind (\ s a -> s{_cKind = a})
+
+-- | Date and time of notification channel expiration, expressed as a Unix
+-- timestamp, in milliseconds. Optional.
+cExpiration :: Lens' Channel (Maybe Int64)
+cExpiration
+  = lens _cExpiration (\ s a -> s{_cExpiration = a}) .
+      mapping _Coerce
+
+-- | An arbitrary string delivered to the target address with each
+-- notification delivered over this channel. Optional.
+cToken :: Lens' Channel (Maybe Text)
+cToken = lens _cToken (\ s a -> s{_cToken = a})
+
+-- | The address where notifications are delivered for this channel.
+cAddress :: Lens' Channel (Maybe Text)
+cAddress = lens _cAddress (\ s a -> s{_cAddress = a})
+
+-- | A Boolean value to indicate whether payload is wanted. Optional.
+cPayload :: Lens' Channel (Maybe Bool)
+cPayload = lens _cPayload (\ s a -> s{_cPayload = a})
+
+-- | Additional parameters controlling delivery channel behavior. Optional.
+cParams :: Lens' Channel (Maybe ChannelParams)
+cParams = lens _cParams (\ s a -> s{_cParams = a})
+
+-- | A UUID or similar unique string that identifies this channel.
+cId :: Lens' Channel (Maybe Text)
+cId = lens _cId (\ s a -> s{_cId = a})
+
+-- | The type of delivery mechanism used for this channel.
+cType :: Lens' Channel (Maybe Text)
+cType = lens _cType (\ s a -> s{_cType = a})
+
+instance FromJSON Channel where
+        parseJSON
+          = withObject "Channel"
+              (\ o ->
+                 Channel' <$>
+                   (o .:? "resourceUri") <*> (o .:? "resourceId") <*>
+                     (o .:? "kind" .!= "api#channel")
+                     <*> (o .:? "expiration")
+                     <*> (o .:? "token")
+                     <*> (o .:? "address")
+                     <*> (o .:? "payload")
+                     <*> (o .:? "params")
+                     <*> (o .:? "id")
+                     <*> (o .:? "type"))
+
+instance ToJSON Channel where
+        toJSON Channel'{..}
+          = object
+              (catMaybes
+                 [("resourceUri" .=) <$> _cResourceURI,
+                  ("resourceId" .=) <$> _cResourceId,
+                  Just ("kind" .= _cKind),
+                  ("expiration" .=) <$> _cExpiration,
+                  ("token" .=) <$> _cToken,
+                  ("address" .=) <$> _cAddress,
+                  ("payload" .=) <$> _cPayload,
+                  ("params" .=) <$> _cParams, ("id" .=) <$> _cId,
+                  ("type" .=) <$> _cType])
+
+--
+-- /See:/ 'aboutTeamDriveThemesItem' smart constructor.
+data AboutTeamDriveThemesItem = AboutTeamDriveThemesItem'
+    { _atdtiColorRgb            :: !(Maybe Text)
+    , _atdtiBackgRoundImageLink :: !(Maybe Text)
+    , _atdtiId                  :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AboutTeamDriveThemesItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'atdtiColorRgb'
+--
+-- * 'atdtiBackgRoundImageLink'
+--
+-- * 'atdtiId'
+aboutTeamDriveThemesItem
+    :: AboutTeamDriveThemesItem
+aboutTeamDriveThemesItem =
+    AboutTeamDriveThemesItem'
+    { _atdtiColorRgb = Nothing
+    , _atdtiBackgRoundImageLink = Nothing
+    , _atdtiId = Nothing
+    }
+
+-- | The color of this Team Drive theme as an RGB hex string.
+atdtiColorRgb :: Lens' AboutTeamDriveThemesItem (Maybe Text)
+atdtiColorRgb
+  = lens _atdtiColorRgb
+      (\ s a -> s{_atdtiColorRgb = a})
+
+-- | A link to this Team Drive theme\'s background image.
+atdtiBackgRoundImageLink :: Lens' AboutTeamDriveThemesItem (Maybe Text)
+atdtiBackgRoundImageLink
+  = lens _atdtiBackgRoundImageLink
+      (\ s a -> s{_atdtiBackgRoundImageLink = a})
+
+-- | The ID of the theme.
+atdtiId :: Lens' AboutTeamDriveThemesItem (Maybe Text)
+atdtiId = lens _atdtiId (\ s a -> s{_atdtiId = a})
+
+instance FromJSON AboutTeamDriveThemesItem where
+        parseJSON
+          = withObject "AboutTeamDriveThemesItem"
+              (\ o ->
+                 AboutTeamDriveThemesItem' <$>
+                   (o .:? "colorRgb") <*> (o .:? "backgroundImageLink")
+                     <*> (o .:? "id"))
+
+instance ToJSON AboutTeamDriveThemesItem where
+        toJSON AboutTeamDriveThemesItem'{..}
+          = object
+              (catMaybes
+                 [("colorRgb" .=) <$> _atdtiColorRgb,
+                  ("backgroundImageLink" .=) <$>
+                    _atdtiBackgRoundImageLink,
+                  ("id" .=) <$> _atdtiId])
+
+-- | A set of restrictions that apply to this Team Drive or items inside this
+-- Team Drive.
+--
+-- /See:/ 'teamDriveRestrictions' smart constructor.
+data TeamDriveRestrictions = TeamDriveRestrictions'
+    { _tdrTeamMembersOnly              :: !(Maybe Bool)
+    , _tdrAdminManagedRestrictions     :: !(Maybe Bool)
+    , _tdrCopyRequiresWriterPermission :: !(Maybe Bool)
+    , _tdrDomainUsersOnly              :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TeamDriveRestrictions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tdrTeamMembersOnly'
+--
+-- * 'tdrAdminManagedRestrictions'
+--
+-- * 'tdrCopyRequiresWriterPermission'
+--
+-- * 'tdrDomainUsersOnly'
+teamDriveRestrictions
+    :: TeamDriveRestrictions
+teamDriveRestrictions =
+    TeamDriveRestrictions'
+    { _tdrTeamMembersOnly = Nothing
+    , _tdrAdminManagedRestrictions = Nothing
+    , _tdrCopyRequiresWriterPermission = Nothing
+    , _tdrDomainUsersOnly = Nothing
+    }
+
+-- | Whether access to items inside this Team Drive is restricted to members
+-- of this Team Drive.
+tdrTeamMembersOnly :: Lens' TeamDriveRestrictions (Maybe Bool)
+tdrTeamMembersOnly
+  = lens _tdrTeamMembersOnly
+      (\ s a -> s{_tdrTeamMembersOnly = a})
+
+-- | Whether administrative privileges on this Team Drive are required to
+-- modify restrictions.
+tdrAdminManagedRestrictions :: Lens' TeamDriveRestrictions (Maybe Bool)
+tdrAdminManagedRestrictions
+  = lens _tdrAdminManagedRestrictions
+      (\ s a -> s{_tdrAdminManagedRestrictions = a})
+
+-- | Whether the options to copy, print, or download files inside this Team
+-- Drive, should be disabled for readers and commenters. When this
+-- restriction is set to true, it will override the similarly named field
+-- to true for any file inside this Team Drive.
+tdrCopyRequiresWriterPermission :: Lens' TeamDriveRestrictions (Maybe Bool)
+tdrCopyRequiresWriterPermission
+  = lens _tdrCopyRequiresWriterPermission
+      (\ s a -> s{_tdrCopyRequiresWriterPermission = a})
+
+-- | Whether access to this Team Drive and items inside this Team Drive is
+-- restricted to users of the domain to which this Team Drive belongs. This
+-- restriction may be overridden by other sharing policies controlled
+-- outside of this Team Drive.
+tdrDomainUsersOnly :: Lens' TeamDriveRestrictions (Maybe Bool)
+tdrDomainUsersOnly
+  = lens _tdrDomainUsersOnly
+      (\ s a -> s{_tdrDomainUsersOnly = a})
+
+instance FromJSON TeamDriveRestrictions where
+        parseJSON
+          = withObject "TeamDriveRestrictions"
+              (\ o ->
+                 TeamDriveRestrictions' <$>
+                   (o .:? "teamMembersOnly") <*>
+                     (o .:? "adminManagedRestrictions")
+                     <*> (o .:? "copyRequiresWriterPermission")
+                     <*> (o .:? "domainUsersOnly"))
+
+instance ToJSON TeamDriveRestrictions where
+        toJSON TeamDriveRestrictions'{..}
+          = object
+              (catMaybes
+                 [("teamMembersOnly" .=) <$> _tdrTeamMembersOnly,
+                  ("adminManagedRestrictions" .=) <$>
+                    _tdrAdminManagedRestrictions,
+                  ("copyRequiresWriterPermission" .=) <$>
+                    _tdrCopyRequiresWriterPermission,
+                  ("domainUsersOnly" .=) <$> _tdrDomainUsersOnly])
+
+-- | An image file and cropping parameters from which a background image for
+-- this Team Drive is set. This is a write only field; it can only be set
+-- on drive.teamdrives.update requests that don\'t set themeId. When
+-- specified, all fields of the backgroundImageFile must be set.
+--
+-- /See:/ 'teamDriveBackgRoundImageFile' smart constructor.
+data TeamDriveBackgRoundImageFile = TeamDriveBackgRoundImageFile'
+    { _tdbrifXCoordinate :: !(Maybe (Textual Double))
+    , _tdbrifYCoordinate :: !(Maybe (Textual Double))
+    , _tdbrifWidth       :: !(Maybe (Textual Double))
+    , _tdbrifId          :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TeamDriveBackgRoundImageFile' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tdbrifXCoordinate'
+--
+-- * 'tdbrifYCoordinate'
+--
+-- * 'tdbrifWidth'
+--
+-- * 'tdbrifId'
+teamDriveBackgRoundImageFile
+    :: TeamDriveBackgRoundImageFile
+teamDriveBackgRoundImageFile =
+    TeamDriveBackgRoundImageFile'
+    { _tdbrifXCoordinate = Nothing
+    , _tdbrifYCoordinate = Nothing
+    , _tdbrifWidth = Nothing
+    , _tdbrifId = Nothing
+    }
+
+-- | The X coordinate of the upper left corner of the cropping area in the
+-- background image. This is a value in the closed range of 0 to 1. This
+-- value represents the horizontal distance from the left side of the
+-- entire image to the left side of the cropping area divided by the width
+-- of the entire image.
+tdbrifXCoordinate :: Lens' TeamDriveBackgRoundImageFile (Maybe Double)
+tdbrifXCoordinate
+  = lens _tdbrifXCoordinate
+      (\ s a -> s{_tdbrifXCoordinate = a})
+      . mapping _Coerce
+
+-- | The Y coordinate of the upper left corner of the cropping area in the
+-- background image. This is a value in the closed range of 0 to 1. This
+-- value represents the vertical distance from the top side of the entire
+-- image to the top side of the cropping area divided by the height of the
+-- entire image.
+tdbrifYCoordinate :: Lens' TeamDriveBackgRoundImageFile (Maybe Double)
+tdbrifYCoordinate
+  = lens _tdbrifYCoordinate
+      (\ s a -> s{_tdbrifYCoordinate = a})
+      . mapping _Coerce
+
+-- | The width of the cropped image in the closed range of 0 to 1. This value
+-- represents the width of the cropped image divided by the width of the
+-- entire image. The height is computed by applying a width to height
+-- aspect ratio of 80 to 9. The resulting image must be at least 1280
+-- pixels wide and 144 pixels high.
+tdbrifWidth :: Lens' TeamDriveBackgRoundImageFile (Maybe Double)
+tdbrifWidth
+  = lens _tdbrifWidth (\ s a -> s{_tdbrifWidth = a}) .
+      mapping _Coerce
+
+-- | The ID of an image file in Drive to use for the background image.
+tdbrifId :: Lens' TeamDriveBackgRoundImageFile (Maybe Text)
+tdbrifId = lens _tdbrifId (\ s a -> s{_tdbrifId = a})
+
+instance FromJSON TeamDriveBackgRoundImageFile where
+        parseJSON
+          = withObject "TeamDriveBackgRoundImageFile"
+              (\ o ->
+                 TeamDriveBackgRoundImageFile' <$>
+                   (o .:? "xCoordinate") <*> (o .:? "yCoordinate") <*>
+                     (o .:? "width")
+                     <*> (o .:? "id"))
+
+instance ToJSON TeamDriveBackgRoundImageFile where
+        toJSON TeamDriveBackgRoundImageFile'{..}
+          = object
+              (catMaybes
+                 [("xCoordinate" .=) <$> _tdbrifXCoordinate,
+                  ("yCoordinate" .=) <$> _tdbrifYCoordinate,
+                  ("width" .=) <$> _tdbrifWidth,
+                  ("id" .=) <$> _tdbrifId])
+
+-- | Additional metadata about video media. This may not be available
+-- immediately upon upload.
+--
+-- /See:/ 'fileVideoMediaMetadata' smart constructor.
+data FileVideoMediaMetadata = FileVideoMediaMetadata'
+    { _fvmmHeight         :: !(Maybe (Textual Int32))
+    , _fvmmWidth          :: !(Maybe (Textual Int32))
+    , _fvmmDurationMillis :: !(Maybe (Textual Int64))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FileVideoMediaMetadata' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fvmmHeight'
+--
+-- * 'fvmmWidth'
+--
+-- * 'fvmmDurationMillis'
+fileVideoMediaMetadata
+    :: FileVideoMediaMetadata
+fileVideoMediaMetadata =
+    FileVideoMediaMetadata'
+    { _fvmmHeight = Nothing
+    , _fvmmWidth = Nothing
+    , _fvmmDurationMillis = Nothing
+    }
+
+-- | The height of the video in pixels.
+fvmmHeight :: Lens' FileVideoMediaMetadata (Maybe Int32)
+fvmmHeight
+  = lens _fvmmHeight (\ s a -> s{_fvmmHeight = a}) .
+      mapping _Coerce
+
+-- | The width of the video in pixels.
+fvmmWidth :: Lens' FileVideoMediaMetadata (Maybe Int32)
+fvmmWidth
+  = lens _fvmmWidth (\ s a -> s{_fvmmWidth = a}) .
+      mapping _Coerce
+
+-- | The duration of the video in milliseconds.
+fvmmDurationMillis :: Lens' FileVideoMediaMetadata (Maybe Int64)
+fvmmDurationMillis
+  = lens _fvmmDurationMillis
+      (\ s a -> s{_fvmmDurationMillis = a})
+      . mapping _Coerce
+
+instance FromJSON FileVideoMediaMetadata where
+        parseJSON
+          = withObject "FileVideoMediaMetadata"
+              (\ o ->
+                 FileVideoMediaMetadata' <$>
+                   (o .:? "height") <*> (o .:? "width") <*>
+                     (o .:? "durationMillis"))
+
+instance ToJSON FileVideoMediaMetadata where
+        toJSON FileVideoMediaMetadata'{..}
+          = object
+              (catMaybes
+                 [("height" .=) <$> _fvmmHeight,
+                  ("width" .=) <$> _fvmmWidth,
+                  ("durationMillis" .=) <$> _fvmmDurationMillis])
+
+-- | A collection of arbitrary key-value pairs which are private to the
+-- requesting app. Entries with null values are cleared in update and copy
+-- requests.
+--
+-- /See:/ 'fileAppProperties' smart constructor.
+newtype FileAppProperties = FileAppProperties'
+    { _fapAddtional :: HashMap Text Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FileAppProperties' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fapAddtional'
+fileAppProperties
+    :: HashMap Text Text -- ^ 'fapAddtional'
+    -> FileAppProperties
+fileAppProperties pFapAddtional_ =
+    FileAppProperties'
+    { _fapAddtional = _Coerce # pFapAddtional_
+    }
+
+fapAddtional :: Lens' FileAppProperties (HashMap Text Text)
+fapAddtional
+  = lens _fapAddtional (\ s a -> s{_fapAddtional = a})
+      . _Coerce
+
+instance FromJSON FileAppProperties where
+        parseJSON
+          = withObject "FileAppProperties"
+              (\ o -> FileAppProperties' <$> (parseJSONObject o))
+
+instance ToJSON FileAppProperties where
+        toJSON = toJSON . _fapAddtional
+
+-- | A change to a file or Team Drive.
+--
+-- /See:/ 'change' smart constructor.
+data Change = Change'
+    { _chaRemoved     :: !(Maybe Bool)
+    , _chaTime        :: !(Maybe DateTime')
+    , _chaKind        :: !Text
+    , _chaTeamDrive   :: !(Maybe TeamDrive)
+    , _chaTeamDriveId :: !(Maybe Text)
+    , _chaType        :: !(Maybe Text)
+    , _chaFileId      :: !(Maybe Text)
+    , _chaFile        :: !(Maybe File)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Change' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'chaRemoved'
+--
+-- * 'chaTime'
+--
+-- * 'chaKind'
+--
+-- * 'chaTeamDrive'
+--
+-- * 'chaTeamDriveId'
+--
+-- * 'chaType'
+--
+-- * 'chaFileId'
+--
+-- * 'chaFile'
+change
+    :: Change
+change =
+    Change'
+    { _chaRemoved = Nothing
+    , _chaTime = Nothing
+    , _chaKind = "drive#change"
+    , _chaTeamDrive = Nothing
+    , _chaTeamDriveId = Nothing
+    , _chaType = Nothing
+    , _chaFileId = Nothing
+    , _chaFile = Nothing
+    }
+
+-- | Whether the file or Team Drive has been removed from this list of
+-- changes, for example by deletion or loss of access.
+chaRemoved :: Lens' Change (Maybe Bool)
+chaRemoved
+  = lens _chaRemoved (\ s a -> s{_chaRemoved = a})
+
+-- | The time of this change (RFC 3339 date-time).
+chaTime :: Lens' Change (Maybe UTCTime)
+chaTime
+  = lens _chaTime (\ s a -> s{_chaTime = a}) .
+      mapping _DateTime
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"drive#change\".
+chaKind :: Lens' Change Text
+chaKind = lens _chaKind (\ s a -> s{_chaKind = a})
+
+-- | The updated state of the Team Drive. Present if the type is teamDrive,
+-- the user is still a member of the Team Drive, and the Team Drive has not
+-- been removed.
+chaTeamDrive :: Lens' Change (Maybe TeamDrive)
+chaTeamDrive
+  = lens _chaTeamDrive (\ s a -> s{_chaTeamDrive = a})
+
+-- | The ID of the Team Drive associated with this change.
+chaTeamDriveId :: Lens' Change (Maybe Text)
+chaTeamDriveId
+  = lens _chaTeamDriveId
+      (\ s a -> s{_chaTeamDriveId = a})
+
+-- | The type of the change. Possible values are file and teamDrive.
+chaType :: Lens' Change (Maybe Text)
+chaType = lens _chaType (\ s a -> s{_chaType = a})
+
+-- | The ID of the file which has changed.
+chaFileId :: Lens' Change (Maybe Text)
+chaFileId
+  = lens _chaFileId (\ s a -> s{_chaFileId = a})
+
+-- | The updated state of the file. Present if the type is file and the file
+-- has not been removed from this list of changes.
+chaFile :: Lens' Change (Maybe File)
+chaFile = lens _chaFile (\ s a -> s{_chaFile = a})
+
+instance FromJSON Change where
+        parseJSON
+          = withObject "Change"
+              (\ o ->
+                 Change' <$>
+                   (o .:? "removed") <*> (o .:? "time") <*>
+                     (o .:? "kind" .!= "drive#change")
+                     <*> (o .:? "teamDrive")
+                     <*> (o .:? "teamDriveId")
+                     <*> (o .:? "type")
+                     <*> (o .:? "fileId")
+                     <*> (o .:? "file"))
+
+instance ToJSON Change where
+        toJSON Change'{..}
+          = object
+              (catMaybes
+                 [("removed" .=) <$> _chaRemoved,
+                  ("time" .=) <$> _chaTime, Just ("kind" .= _chaKind),
+                  ("teamDrive" .=) <$> _chaTeamDrive,
+                  ("teamDriveId" .=) <$> _chaTeamDriveId,
+                  ("type" .=) <$> _chaType,
+                  ("fileId" .=) <$> _chaFileId,
+                  ("file" .=) <$> _chaFile])
+
+-- | Representation of a Team Drive.
+--
+-- /See:/ 'teamDrive' smart constructor.
+data TeamDrive = TeamDrive'
+    { _tdThemeId             :: !(Maybe Text)
+    , _tdBackgRoundImageFile :: !(Maybe TeamDriveBackgRoundImageFile)
+    , _tdColorRgb            :: !(Maybe Text)
+    , _tdCreatedTime         :: !(Maybe DateTime')
+    , _tdKind                :: !Text
+    , _tdBackgRoundImageLink :: !(Maybe Text)
+    , _tdName                :: !(Maybe Text)
+    , _tdRestrictions        :: !(Maybe TeamDriveRestrictions)
+    , _tdId                  :: !(Maybe Text)
+    , _tdCapabilities        :: !(Maybe TeamDriveCapabilities)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TeamDrive' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tdThemeId'
+--
+-- * 'tdBackgRoundImageFile'
+--
+-- * 'tdColorRgb'
+--
+-- * 'tdCreatedTime'
+--
+-- * 'tdKind'
+--
+-- * 'tdBackgRoundImageLink'
+--
+-- * 'tdName'
+--
+-- * 'tdRestrictions'
+--
+-- * 'tdId'
+--
+-- * 'tdCapabilities'
+teamDrive
+    :: TeamDrive
+teamDrive =
+    TeamDrive'
+    { _tdThemeId = Nothing
+    , _tdBackgRoundImageFile = Nothing
+    , _tdColorRgb = Nothing
+    , _tdCreatedTime = Nothing
+    , _tdKind = "drive#teamDrive"
+    , _tdBackgRoundImageLink = Nothing
+    , _tdName = Nothing
+    , _tdRestrictions = Nothing
+    , _tdId = Nothing
+    , _tdCapabilities = Nothing
+    }
+
+-- | The ID of the theme from which the background image and color will be
+-- set. The set of possible teamDriveThemes can be retrieved from a
+-- drive.about.get response. When not specified on a
+-- drive.teamdrives.create request, a random theme is chosen from which the
+-- background image and color are set. This is a write-only field; it can
+-- only be set on requests that don\'t set colorRgb or backgroundImageFile.
+tdThemeId :: Lens' TeamDrive (Maybe Text)
+tdThemeId
+  = lens _tdThemeId (\ s a -> s{_tdThemeId = a})
+
+-- | An image file and cropping parameters from which a background image for
+-- this Team Drive is set. This is a write only field; it can only be set
+-- on drive.teamdrives.update requests that don\'t set themeId. When
+-- specified, all fields of the backgroundImageFile must be set.
+tdBackgRoundImageFile :: Lens' TeamDrive (Maybe TeamDriveBackgRoundImageFile)
+tdBackgRoundImageFile
+  = lens _tdBackgRoundImageFile
+      (\ s a -> s{_tdBackgRoundImageFile = a})
+
+-- | The color of this Team Drive as an RGB hex string. It can only be set on
+-- a drive.teamdrives.update request that does not set themeId.
+tdColorRgb :: Lens' TeamDrive (Maybe Text)
+tdColorRgb
+  = lens _tdColorRgb (\ s a -> s{_tdColorRgb = a})
+
+-- | The time at which the Team Drive was created (RFC 3339 date-time).
+tdCreatedTime :: Lens' TeamDrive (Maybe UTCTime)
+tdCreatedTime
+  = lens _tdCreatedTime
+      (\ s a -> s{_tdCreatedTime = a})
+      . mapping _DateTime
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"drive#teamDrive\".
+tdKind :: Lens' TeamDrive Text
+tdKind = lens _tdKind (\ s a -> s{_tdKind = a})
+
+-- | A short-lived link to this Team Drive\'s background image.
+tdBackgRoundImageLink :: Lens' TeamDrive (Maybe Text)
+tdBackgRoundImageLink
+  = lens _tdBackgRoundImageLink
+      (\ s a -> s{_tdBackgRoundImageLink = a})
+
+-- | The name of this Team Drive.
+tdName :: Lens' TeamDrive (Maybe Text)
+tdName = lens _tdName (\ s a -> s{_tdName = a})
+
+-- | A set of restrictions that apply to this Team Drive or items inside this
+-- Team Drive.
+tdRestrictions :: Lens' TeamDrive (Maybe TeamDriveRestrictions)
+tdRestrictions
+  = lens _tdRestrictions
+      (\ s a -> s{_tdRestrictions = a})
+
+-- | The ID of this Team Drive which is also the ID of the top level folder
+-- of this Team Drive.
+tdId :: Lens' TeamDrive (Maybe Text)
+tdId = lens _tdId (\ s a -> s{_tdId = a})
+
+-- | Capabilities the current user has on this Team Drive.
+tdCapabilities :: Lens' TeamDrive (Maybe TeamDriveCapabilities)
+tdCapabilities
+  = lens _tdCapabilities
+      (\ s a -> s{_tdCapabilities = a})
+
+instance FromJSON TeamDrive where
+        parseJSON
+          = withObject "TeamDrive"
+              (\ o ->
+                 TeamDrive' <$>
+                   (o .:? "themeId") <*> (o .:? "backgroundImageFile")
+                     <*> (o .:? "colorRgb")
+                     <*> (o .:? "createdTime")
+                     <*> (o .:? "kind" .!= "drive#teamDrive")
+                     <*> (o .:? "backgroundImageLink")
+                     <*> (o .:? "name")
+                     <*> (o .:? "restrictions")
+                     <*> (o .:? "id")
+                     <*> (o .:? "capabilities"))
+
+instance ToJSON TeamDrive where
+        toJSON TeamDrive'{..}
+          = object
+              (catMaybes
+                 [("themeId" .=) <$> _tdThemeId,
+                  ("backgroundImageFile" .=) <$>
+                    _tdBackgRoundImageFile,
+                  ("colorRgb" .=) <$> _tdColorRgb,
+                  ("createdTime" .=) <$> _tdCreatedTime,
+                  Just ("kind" .= _tdKind),
+                  ("backgroundImageLink" .=) <$>
+                    _tdBackgRoundImageLink,
+                  ("name" .=) <$> _tdName,
+                  ("restrictions" .=) <$> _tdRestrictions,
+                  ("id" .=) <$> _tdId,
+                  ("capabilities" .=) <$> _tdCapabilities])
+
+-- | A map of source MIME type to possible targets for all supported exports.
+--
+-- /See:/ 'aboutExportFormats' smart constructor.
+newtype AboutExportFormats = AboutExportFormats'
+    { _aefAddtional :: HashMap Text [Text]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AboutExportFormats' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aefAddtional'
+aboutExportFormats
+    :: HashMap Text [Text] -- ^ 'aefAddtional'
+    -> AboutExportFormats
+aboutExportFormats pAefAddtional_ =
+    AboutExportFormats'
+    { _aefAddtional = _Coerce # pAefAddtional_
+    }
+
+aefAddtional :: Lens' AboutExportFormats (HashMap Text [Text])
+aefAddtional
+  = lens _aefAddtional (\ s a -> s{_aefAddtional = a})
+      . _Coerce
+
+instance FromJSON AboutExportFormats where
+        parseJSON
+          = withObject "AboutExportFormats"
+              (\ o -> AboutExportFormats' <$> (parseJSONObject o))
+
+instance ToJSON AboutExportFormats where
+        toJSON = toJSON . _aefAddtional
+
+-- | Information about a Drive user.
+--
+-- /See:/ 'user' smart constructor.
+data User = User'
+    { _uPhotoLink    :: !(Maybe Text)
+    , _uMe           :: !(Maybe Bool)
+    , _uKind         :: !Text
+    , _uEmailAddress :: !(Maybe Text)
+    , _uDisplayName  :: !(Maybe Text)
+    , _uPermissionId :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'User' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uPhotoLink'
+--
+-- * 'uMe'
+--
+-- * 'uKind'
+--
+-- * 'uEmailAddress'
+--
+-- * 'uDisplayName'
+--
+-- * 'uPermissionId'
+user
+    :: User
+user =
+    User'
+    { _uPhotoLink = Nothing
+    , _uMe = Nothing
+    , _uKind = "drive#user"
+    , _uEmailAddress = Nothing
+    , _uDisplayName = Nothing
+    , _uPermissionId = Nothing
+    }
+
+-- | A link to the user\'s profile photo, if available.
+uPhotoLink :: Lens' User (Maybe Text)
+uPhotoLink
+  = lens _uPhotoLink (\ s a -> s{_uPhotoLink = a})
+
+-- | Whether this user is the requesting user.
+uMe :: Lens' User (Maybe Bool)
+uMe = lens _uMe (\ s a -> s{_uMe = a})
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"drive#user\".
+uKind :: Lens' User Text
+uKind = lens _uKind (\ s a -> s{_uKind = a})
+
+-- | The email address of the user. This may not be present in certain
+-- contexts if the user has not made their email address visible to the
+-- requester.
+uEmailAddress :: Lens' User (Maybe Text)
+uEmailAddress
+  = lens _uEmailAddress
+      (\ s a -> s{_uEmailAddress = a})
+
+-- | A plain text displayable name for this user.
+uDisplayName :: Lens' User (Maybe Text)
+uDisplayName
+  = lens _uDisplayName (\ s a -> s{_uDisplayName = a})
+
+-- | The user\'s ID as visible in Permission resources.
+uPermissionId :: Lens' User (Maybe Text)
+uPermissionId
+  = lens _uPermissionId
+      (\ s a -> s{_uPermissionId = a})
+
+instance FromJSON User where
+        parseJSON
+          = withObject "User"
+              (\ o ->
+                 User' <$>
+                   (o .:? "photoLink") <*> (o .:? "me") <*>
+                     (o .:? "kind" .!= "drive#user")
+                     <*> (o .:? "emailAddress")
+                     <*> (o .:? "displayName")
+                     <*> (o .:? "permissionId"))
+
+instance ToJSON User where
+        toJSON User'{..}
+          = object
+              (catMaybes
+                 [("photoLink" .=) <$> _uPhotoLink,
+                  ("me" .=) <$> _uMe, Just ("kind" .= _uKind),
+                  ("emailAddress" .=) <$> _uEmailAddress,
+                  ("displayName" .=) <$> _uDisplayName,
+                  ("permissionId" .=) <$> _uPermissionId])
+
+-- | A list of changes for a user.
+--
+-- /See:/ 'changeList' smart constructor.
+data ChangeList = ChangeList'
+    { _clNewStartPageToken :: !(Maybe Text)
+    , _clNextPageToken     :: !(Maybe Text)
+    , _clChanges           :: !(Maybe [Change])
+    , _clKind              :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ChangeList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'clNewStartPageToken'
+--
+-- * 'clNextPageToken'
+--
+-- * 'clChanges'
+--
+-- * 'clKind'
+changeList
+    :: ChangeList
+changeList =
+    ChangeList'
+    { _clNewStartPageToken = Nothing
+    , _clNextPageToken = Nothing
+    , _clChanges = Nothing
+    , _clKind = "drive#changeList"
+    }
+
+-- | The starting page token for future changes. This will be present only if
+-- the end of the current changes list has been reached.
+clNewStartPageToken :: Lens' ChangeList (Maybe Text)
+clNewStartPageToken
+  = lens _clNewStartPageToken
+      (\ s a -> s{_clNewStartPageToken = a})
+
+-- | The page token for the next page of changes. This will be absent if the
+-- end of the changes list has been reached. If the token is rejected for
+-- any reason, it should be discarded, and pagination should be restarted
+-- from the first page of results.
+clNextPageToken :: Lens' ChangeList (Maybe Text)
+clNextPageToken
+  = lens _clNextPageToken
+      (\ s a -> s{_clNextPageToken = a})
+
+-- | The list of changes. If nextPageToken is populated, then this list may
+-- be incomplete and an additional page of results should be fetched.
+clChanges :: Lens' ChangeList [Change]
+clChanges
+  = lens _clChanges (\ s a -> s{_clChanges = a}) .
+      _Default
+      . _Coerce
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"drive#changeList\".
+clKind :: Lens' ChangeList Text
+clKind = lens _clKind (\ s a -> s{_clKind = a})
+
+instance FromJSON ChangeList where
+        parseJSON
+          = withObject "ChangeList"
+              (\ o ->
+                 ChangeList' <$>
+                   (o .:? "newStartPageToken") <*>
+                     (o .:? "nextPageToken")
+                     <*> (o .:? "changes" .!= mempty)
+                     <*> (o .:? "kind" .!= "drive#changeList"))
+
+instance ToJSON ChangeList where
+        toJSON ChangeList'{..}
+          = object
+              (catMaybes
+                 [("newStartPageToken" .=) <$> _clNewStartPageToken,
+                  ("nextPageToken" .=) <$> _clNextPageToken,
+                  ("changes" .=) <$> _clChanges,
+                  Just ("kind" .= _clKind)])
+
+-- | Links for exporting Google Docs to specific formats.
+--
+-- /See:/ 'revisionExportLinks' smart constructor.
+newtype RevisionExportLinks = RevisionExportLinks'
+    { _relAddtional :: HashMap Text Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RevisionExportLinks' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'relAddtional'
+revisionExportLinks
+    :: HashMap Text Text -- ^ 'relAddtional'
+    -> RevisionExportLinks
+revisionExportLinks pRelAddtional_ =
+    RevisionExportLinks'
+    { _relAddtional = _Coerce # pRelAddtional_
+    }
+
+-- | A mapping from export format to URL
+relAddtional :: Lens' RevisionExportLinks (HashMap Text Text)
+relAddtional
+  = lens _relAddtional (\ s a -> s{_relAddtional = a})
+      . _Coerce
+
+instance FromJSON RevisionExportLinks where
+        parseJSON
+          = withObject "RevisionExportLinks"
+              (\ o -> RevisionExportLinks' <$> (parseJSONObject o))
+
+instance ToJSON RevisionExportLinks where
+        toJSON = toJSON . _relAddtional
+
+-- | Additional information about the content of the file. These fields are
+-- never populated in responses.
+--
+-- /See:/ 'fileContentHints' smart constructor.
+data FileContentHints = FileContentHints'
+    { _fchThumbnail     :: !(Maybe FileContentHintsThumbnail)
+    , _fchIndexableText :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FileContentHints' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fchThumbnail'
+--
+-- * 'fchIndexableText'
+fileContentHints
+    :: FileContentHints
+fileContentHints =
+    FileContentHints'
+    { _fchThumbnail = Nothing
+    , _fchIndexableText = Nothing
+    }
+
+-- | A thumbnail for the file. This will only be used if Drive cannot
+-- generate a standard thumbnail.
+fchThumbnail :: Lens' FileContentHints (Maybe FileContentHintsThumbnail)
+fchThumbnail
+  = lens _fchThumbnail (\ s a -> s{_fchThumbnail = a})
+
+-- | Text to be indexed for the file to improve fullText queries. This is
+-- limited to 128KB in length and may contain HTML elements.
+fchIndexableText :: Lens' FileContentHints (Maybe Text)
+fchIndexableText
+  = lens _fchIndexableText
+      (\ s a -> s{_fchIndexableText = a})
+
+instance FromJSON FileContentHints where
+        parseJSON
+          = withObject "FileContentHints"
+              (\ o ->
+                 FileContentHints' <$>
+                   (o .:? "thumbnail") <*> (o .:? "indexableText"))
+
+instance ToJSON FileContentHints where
+        toJSON FileContentHints'{..}
+          = object
+              (catMaybes
+                 [("thumbnail" .=) <$> _fchThumbnail,
+                  ("indexableText" .=) <$> _fchIndexableText])
+
+-- | Additional parameters controlling delivery channel behavior. Optional.
+--
+-- /See:/ 'channelParams' smart constructor.
+newtype ChannelParams = ChannelParams'
+    { _cpAddtional :: HashMap Text Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ChannelParams' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cpAddtional'
+channelParams
+    :: HashMap Text Text -- ^ 'cpAddtional'
+    -> ChannelParams
+channelParams pCpAddtional_ =
+    ChannelParams'
+    { _cpAddtional = _Coerce # pCpAddtional_
+    }
+
+-- | Declares a new parameter by name.
+cpAddtional :: Lens' ChannelParams (HashMap Text Text)
+cpAddtional
+  = lens _cpAddtional (\ s a -> s{_cpAddtional = a}) .
+      _Coerce
+
+instance FromJSON ChannelParams where
+        parseJSON
+          = withObject "ChannelParams"
+              (\ o -> ChannelParams' <$> (parseJSONObject o))
+
+instance ToJSON ChannelParams where
+        toJSON = toJSON . _cpAddtional
+
+-- | A collection of arbitrary key-value pairs which are visible to all apps.
+-- Entries with null values are cleared in update and copy requests.
+--
+-- /See:/ 'fileProperties' smart constructor.
+newtype FileProperties = FileProperties'
+    { _fpAddtional :: HashMap Text Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FileProperties' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fpAddtional'
+fileProperties
+    :: HashMap Text Text -- ^ 'fpAddtional'
+    -> FileProperties
+fileProperties pFpAddtional_ =
+    FileProperties'
+    { _fpAddtional = _Coerce # pFpAddtional_
+    }
+
+fpAddtional :: Lens' FileProperties (HashMap Text Text)
+fpAddtional
+  = lens _fpAddtional (\ s a -> s{_fpAddtional = a}) .
+      _Coerce
+
+instance FromJSON FileProperties where
+        parseJSON
+          = withObject "FileProperties"
+              (\ o -> FileProperties' <$> (parseJSONObject o))
+
+instance ToJSON FileProperties where
+        toJSON = toJSON . _fpAddtional
+
+-- | A map of maximum import sizes by MIME type, in bytes.
+--
+-- /See:/ 'aboutMaxImportSizes' smart constructor.
+newtype AboutMaxImportSizes = AboutMaxImportSizes'
+    { _amisAddtional :: HashMap Text (Textual Int64)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AboutMaxImportSizes' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'amisAddtional'
+aboutMaxImportSizes
+    :: HashMap Text Int64 -- ^ 'amisAddtional'
+    -> AboutMaxImportSizes
+aboutMaxImportSizes pAmisAddtional_ =
+    AboutMaxImportSizes'
+    { _amisAddtional = _Coerce # pAmisAddtional_
+    }
+
+amisAddtional :: Lens' AboutMaxImportSizes (HashMap Text Int64)
+amisAddtional
+  = lens _amisAddtional
+      (\ s a -> s{_amisAddtional = a})
+      . _Coerce
+
+instance FromJSON AboutMaxImportSizes where
+        parseJSON
+          = withObject "AboutMaxImportSizes"
+              (\ o -> AboutMaxImportSizes' <$> (parseJSONObject o))
+
+instance ToJSON AboutMaxImportSizes where
+        toJSON = toJSON . _amisAddtional
+
+-- | Information about the user, the user\'s Drive, and system capabilities.
+--
+-- /See:/ 'about' smart constructor.
+data About = About'
+    { _aExportFormats       :: !(Maybe AboutExportFormats)
+    , _aMaxImportSizes      :: !(Maybe AboutMaxImportSizes)
+    , _aCanCreateTeamDrives :: !(Maybe Bool)
+    , _aImportFormats       :: !(Maybe AboutImportFormats)
+    , _aKind                :: !Text
+    , _aAppInstalled        :: !(Maybe Bool)
+    , _aUser                :: !(Maybe User)
+    , _aStorageQuota        :: !(Maybe AboutStorageQuota)
+    , _aMaxUploadSize       :: !(Maybe (Textual Int64))
+    , _aTeamDriveThemes     :: !(Maybe [AboutTeamDriveThemesItem])
+    , _aFolderColorPalette  :: !(Maybe [Text])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'About' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aExportFormats'
+--
+-- * 'aMaxImportSizes'
+--
+-- * 'aCanCreateTeamDrives'
+--
+-- * 'aImportFormats'
+--
+-- * 'aKind'
+--
+-- * 'aAppInstalled'
+--
+-- * 'aUser'
+--
+-- * 'aStorageQuota'
+--
+-- * 'aMaxUploadSize'
+--
+-- * 'aTeamDriveThemes'
+--
+-- * 'aFolderColorPalette'
+about
+    :: About
+about =
+    About'
+    { _aExportFormats = Nothing
+    , _aMaxImportSizes = Nothing
+    , _aCanCreateTeamDrives = Nothing
+    , _aImportFormats = Nothing
+    , _aKind = "drive#about"
+    , _aAppInstalled = Nothing
+    , _aUser = Nothing
+    , _aStorageQuota = Nothing
+    , _aMaxUploadSize = Nothing
+    , _aTeamDriveThemes = Nothing
+    , _aFolderColorPalette = Nothing
+    }
+
+-- | A map of source MIME type to possible targets for all supported exports.
+aExportFormats :: Lens' About (Maybe AboutExportFormats)
+aExportFormats
+  = lens _aExportFormats
+      (\ s a -> s{_aExportFormats = a})
+
+-- | A map of maximum import sizes by MIME type, in bytes.
+aMaxImportSizes :: Lens' About (Maybe AboutMaxImportSizes)
+aMaxImportSizes
+  = lens _aMaxImportSizes
+      (\ s a -> s{_aMaxImportSizes = a})
+
+-- | Whether the user can create Team Drives.
+aCanCreateTeamDrives :: Lens' About (Maybe Bool)
+aCanCreateTeamDrives
+  = lens _aCanCreateTeamDrives
+      (\ s a -> s{_aCanCreateTeamDrives = a})
+
+-- | A map of source MIME type to possible targets for all supported imports.
+aImportFormats :: Lens' About (Maybe AboutImportFormats)
+aImportFormats
+  = lens _aImportFormats
+      (\ s a -> s{_aImportFormats = a})
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"drive#about\".
+aKind :: Lens' About Text
+aKind = lens _aKind (\ s a -> s{_aKind = a})
+
+-- | Whether the user has installed the requesting app.
+aAppInstalled :: Lens' About (Maybe Bool)
+aAppInstalled
+  = lens _aAppInstalled
+      (\ s a -> s{_aAppInstalled = a})
+
+-- | The authenticated user.
+aUser :: Lens' About (Maybe User)
+aUser = lens _aUser (\ s a -> s{_aUser = a})
+
+-- | The user\'s storage quota limits and usage. All fields are measured in
+-- bytes.
+aStorageQuota :: Lens' About (Maybe AboutStorageQuota)
+aStorageQuota
+  = lens _aStorageQuota
+      (\ s a -> s{_aStorageQuota = a})
+
+-- | The maximum upload size in bytes.
+aMaxUploadSize :: Lens' About (Maybe Int64)
+aMaxUploadSize
+  = lens _aMaxUploadSize
+      (\ s a -> s{_aMaxUploadSize = a})
+      . mapping _Coerce
+
+-- | A list of themes that are supported for Team Drives.
+aTeamDriveThemes :: Lens' About [AboutTeamDriveThemesItem]
+aTeamDriveThemes
+  = lens _aTeamDriveThemes
+      (\ s a -> s{_aTeamDriveThemes = a})
+      . _Default
+      . _Coerce
+
+-- | The currently supported folder colors as RGB hex strings.
+aFolderColorPalette :: Lens' About [Text]
+aFolderColorPalette
+  = lens _aFolderColorPalette
+      (\ s a -> s{_aFolderColorPalette = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON About where
+        parseJSON
+          = withObject "About"
+              (\ o ->
+                 About' <$>
+                   (o .:? "exportFormats") <*> (o .:? "maxImportSizes")
+                     <*> (o .:? "canCreateTeamDrives")
+                     <*> (o .:? "importFormats")
+                     <*> (o .:? "kind" .!= "drive#about")
+                     <*> (o .:? "appInstalled")
+                     <*> (o .:? "user")
+                     <*> (o .:? "storageQuota")
+                     <*> (o .:? "maxUploadSize")
+                     <*> (o .:? "teamDriveThemes" .!= mempty)
+                     <*> (o .:? "folderColorPalette" .!= mempty))
+
+instance ToJSON About where
+        toJSON About'{..}
+          = object
+              (catMaybes
+                 [("exportFormats" .=) <$> _aExportFormats,
+                  ("maxImportSizes" .=) <$> _aMaxImportSizes,
+                  ("canCreateTeamDrives" .=) <$> _aCanCreateTeamDrives,
+                  ("importFormats" .=) <$> _aImportFormats,
+                  Just ("kind" .= _aKind),
+                  ("appInstalled" .=) <$> _aAppInstalled,
+                  ("user" .=) <$> _aUser,
+                  ("storageQuota" .=) <$> _aStorageQuota,
+                  ("maxUploadSize" .=) <$> _aMaxUploadSize,
+                  ("teamDriveThemes" .=) <$> _aTeamDriveThemes,
+                  ("folderColorPalette" .=) <$> _aFolderColorPalette])
+
+-- | Geographic location information stored in the image.
+--
+-- /See:/ 'fileImageMediaMetadataLocation' smart constructor.
+data FileImageMediaMetadataLocation = FileImageMediaMetadataLocation'
+    { _fimmlLatitude  :: !(Maybe (Textual Double))
+    , _fimmlAltitude  :: !(Maybe (Textual Double))
+    , _fimmlLongitude :: !(Maybe (Textual Double))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FileImageMediaMetadataLocation' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fimmlLatitude'
+--
+-- * 'fimmlAltitude'
+--
+-- * 'fimmlLongitude'
+fileImageMediaMetadataLocation
+    :: FileImageMediaMetadataLocation
+fileImageMediaMetadataLocation =
+    FileImageMediaMetadataLocation'
+    { _fimmlLatitude = Nothing
+    , _fimmlAltitude = Nothing
+    , _fimmlLongitude = Nothing
+    }
+
+-- | The latitude stored in the image.
+fimmlLatitude :: Lens' FileImageMediaMetadataLocation (Maybe Double)
+fimmlLatitude
+  = lens _fimmlLatitude
+      (\ s a -> s{_fimmlLatitude = a})
+      . mapping _Coerce
+
+-- | The altitude stored in the image.
+fimmlAltitude :: Lens' FileImageMediaMetadataLocation (Maybe Double)
+fimmlAltitude
+  = lens _fimmlAltitude
+      (\ s a -> s{_fimmlAltitude = a})
+      . mapping _Coerce
+
+-- | The longitude stored in the image.
+fimmlLongitude :: Lens' FileImageMediaMetadataLocation (Maybe Double)
+fimmlLongitude
+  = lens _fimmlLongitude
+      (\ s a -> s{_fimmlLongitude = a})
+      . mapping _Coerce
+
+instance FromJSON FileImageMediaMetadataLocation
+         where
+        parseJSON
+          = withObject "FileImageMediaMetadataLocation"
+              (\ o ->
+                 FileImageMediaMetadataLocation' <$>
+                   (o .:? "latitude") <*> (o .:? "altitude") <*>
+                     (o .:? "longitude"))
+
+instance ToJSON FileImageMediaMetadataLocation where
+        toJSON FileImageMediaMetadataLocation'{..}
+          = object
+              (catMaybes
+                 [("latitude" .=) <$> _fimmlLatitude,
+                  ("altitude" .=) <$> _fimmlAltitude,
+                  ("longitude" .=) <$> _fimmlLongitude])
+
+--
+-- /See:/ 'startPageToken' smart constructor.
+data StartPageToken = StartPageToken'
+    { _sptKind           :: !Text
+    , _sptStartPageToken :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StartPageToken' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sptKind'
+--
+-- * 'sptStartPageToken'
+startPageToken
+    :: StartPageToken
+startPageToken =
+    StartPageToken'
+    { _sptKind = "drive#startPageToken"
+    , _sptStartPageToken = Nothing
+    }
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"drive#startPageToken\".
+sptKind :: Lens' StartPageToken Text
+sptKind = lens _sptKind (\ s a -> s{_sptKind = a})
+
+-- | The starting page token for listing changes.
+sptStartPageToken :: Lens' StartPageToken (Maybe Text)
+sptStartPageToken
+  = lens _sptStartPageToken
+      (\ s a -> s{_sptStartPageToken = a})
+
+instance FromJSON StartPageToken where
+        parseJSON
+          = withObject "StartPageToken"
+              (\ o ->
+                 StartPageToken' <$>
+                   (o .:? "kind" .!= "drive#startPageToken") <*>
+                     (o .:? "startPageToken"))
+
+instance ToJSON StartPageToken where
+        toJSON StartPageToken'{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _sptKind),
+                  ("startPageToken" .=) <$> _sptStartPageToken])
+
+-- | Additional metadata about image media, if available.
+--
+-- /See:/ 'fileImageMediaMetadata' smart constructor.
+data FileImageMediaMetadata = FileImageMediaMetadata'
+    { _fimmRotation         :: !(Maybe (Textual Int32))
+    , _fimmHeight           :: !(Maybe (Textual Int32))
+    , _fimmSubjectDistance  :: !(Maybe (Textual Int32))
+    , _fimmMaxApertureValue :: !(Maybe (Textual Double))
+    , _fimmIsoSpeed         :: !(Maybe (Textual Int32))
+    , _fimmTime             :: !(Maybe Text)
+    , _fimmLocation         :: !(Maybe FileImageMediaMetadataLocation)
+    , _fimmAperture         :: !(Maybe (Textual Double))
+    , _fimmFocalLength      :: !(Maybe (Textual Double))
+    , _fimmCameraMake       :: !(Maybe Text)
+    , _fimmWidth            :: !(Maybe (Textual Int32))
+    , _fimmExposureTime     :: !(Maybe (Textual Double))
+    , _fimmCameraModel      :: !(Maybe Text)
+    , _fimmWhiteBalance     :: !(Maybe Text)
+    , _fimmLens             :: !(Maybe Text)
+    , _fimmFlashUsed        :: !(Maybe Bool)
+    , _fimmExposureBias     :: !(Maybe (Textual Double))
+    , _fimmMeteringMode     :: !(Maybe Text)
+    , _fimmExposureMode     :: !(Maybe Text)
+    , _fimmSensor           :: !(Maybe Text)
+    , _fimmColorSpace       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FileImageMediaMetadata' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fimmRotation'
+--
+-- * 'fimmHeight'
+--
+-- * 'fimmSubjectDistance'
+--
+-- * 'fimmMaxApertureValue'
+--
+-- * 'fimmIsoSpeed'
+--
+-- * 'fimmTime'
+--
+-- * 'fimmLocation'
+--
+-- * 'fimmAperture'
+--
+-- * 'fimmFocalLength'
+--
+-- * 'fimmCameraMake'
+--
+-- * 'fimmWidth'
+--
+-- * 'fimmExposureTime'
+--
+-- * 'fimmCameraModel'
+--
+-- * 'fimmWhiteBalance'
+--
+-- * 'fimmLens'
+--
+-- * 'fimmFlashUsed'
+--
+-- * 'fimmExposureBias'
+--
+-- * 'fimmMeteringMode'
+--
+-- * 'fimmExposureMode'
+--
+-- * 'fimmSensor'
+--
+-- * 'fimmColorSpace'
+fileImageMediaMetadata
+    :: FileImageMediaMetadata
+fileImageMediaMetadata =
+    FileImageMediaMetadata'
+    { _fimmRotation = Nothing
+    , _fimmHeight = Nothing
+    , _fimmSubjectDistance = Nothing
+    , _fimmMaxApertureValue = Nothing
+    , _fimmIsoSpeed = Nothing
+    , _fimmTime = Nothing
+    , _fimmLocation = Nothing
+    , _fimmAperture = Nothing
+    , _fimmFocalLength = Nothing
+    , _fimmCameraMake = Nothing
+    , _fimmWidth = Nothing
+    , _fimmExposureTime = Nothing
+    , _fimmCameraModel = Nothing
+    , _fimmWhiteBalance = Nothing
+    , _fimmLens = Nothing
+    , _fimmFlashUsed = Nothing
+    , _fimmExposureBias = Nothing
+    , _fimmMeteringMode = Nothing
+    , _fimmExposureMode = Nothing
+    , _fimmSensor = Nothing
+    , _fimmColorSpace = Nothing
+    }
+
+-- | The rotation in clockwise degrees from the image\'s original
+-- orientation.
+fimmRotation :: Lens' FileImageMediaMetadata (Maybe Int32)
+fimmRotation
+  = lens _fimmRotation (\ s a -> s{_fimmRotation = a})
+      . mapping _Coerce
+
+-- | The height of the image in pixels.
+fimmHeight :: Lens' FileImageMediaMetadata (Maybe Int32)
+fimmHeight
+  = lens _fimmHeight (\ s a -> s{_fimmHeight = a}) .
+      mapping _Coerce
+
+-- | The distance to the subject of the photo, in meters.
+fimmSubjectDistance :: Lens' FileImageMediaMetadata (Maybe Int32)
+fimmSubjectDistance
+  = lens _fimmSubjectDistance
+      (\ s a -> s{_fimmSubjectDistance = a})
+      . mapping _Coerce
+
+-- | The smallest f-number of the lens at the focal length used to create the
+-- photo (APEX value).
+fimmMaxApertureValue :: Lens' FileImageMediaMetadata (Maybe Double)
+fimmMaxApertureValue
+  = lens _fimmMaxApertureValue
+      (\ s a -> s{_fimmMaxApertureValue = a})
+      . mapping _Coerce
+
+-- | The ISO speed used to create the photo.
+fimmIsoSpeed :: Lens' FileImageMediaMetadata (Maybe Int32)
+fimmIsoSpeed
+  = lens _fimmIsoSpeed (\ s a -> s{_fimmIsoSpeed = a})
+      . mapping _Coerce
+
+-- | The date and time the photo was taken (EXIF DateTime).
+fimmTime :: Lens' FileImageMediaMetadata (Maybe Text)
+fimmTime = lens _fimmTime (\ s a -> s{_fimmTime = a})
+
+-- | Geographic location information stored in the image.
+fimmLocation :: Lens' FileImageMediaMetadata (Maybe FileImageMediaMetadataLocation)
+fimmLocation
+  = lens _fimmLocation (\ s a -> s{_fimmLocation = a})
+
+-- | The aperture used to create the photo (f-number).
+fimmAperture :: Lens' FileImageMediaMetadata (Maybe Double)
+fimmAperture
+  = lens _fimmAperture (\ s a -> s{_fimmAperture = a})
+      . mapping _Coerce
+
+-- | The focal length used to create the photo, in millimeters.
+fimmFocalLength :: Lens' FileImageMediaMetadata (Maybe Double)
+fimmFocalLength
+  = lens _fimmFocalLength
+      (\ s a -> s{_fimmFocalLength = a})
+      . mapping _Coerce
+
+-- | The make of the camera used to create the photo.
+fimmCameraMake :: Lens' FileImageMediaMetadata (Maybe Text)
+fimmCameraMake
+  = lens _fimmCameraMake
+      (\ s a -> s{_fimmCameraMake = a})
+
+-- | The width of the image in pixels.
+fimmWidth :: Lens' FileImageMediaMetadata (Maybe Int32)
+fimmWidth
+  = lens _fimmWidth (\ s a -> s{_fimmWidth = a}) .
+      mapping _Coerce
+
+-- | The length of the exposure, in seconds.
+fimmExposureTime :: Lens' FileImageMediaMetadata (Maybe Double)
+fimmExposureTime
+  = lens _fimmExposureTime
+      (\ s a -> s{_fimmExposureTime = a})
+      . mapping _Coerce
+
+-- | The model of the camera used to create the photo.
+fimmCameraModel :: Lens' FileImageMediaMetadata (Maybe Text)
+fimmCameraModel
+  = lens _fimmCameraModel
+      (\ s a -> s{_fimmCameraModel = a})
+
+-- | The white balance mode used to create the photo.
+fimmWhiteBalance :: Lens' FileImageMediaMetadata (Maybe Text)
+fimmWhiteBalance
+  = lens _fimmWhiteBalance
+      (\ s a -> s{_fimmWhiteBalance = a})
+
+-- | The lens used to create the photo.
+fimmLens :: Lens' FileImageMediaMetadata (Maybe Text)
+fimmLens = lens _fimmLens (\ s a -> s{_fimmLens = a})
+
+-- | Whether a flash was used to create the photo.
+fimmFlashUsed :: Lens' FileImageMediaMetadata (Maybe Bool)
+fimmFlashUsed
+  = lens _fimmFlashUsed
+      (\ s a -> s{_fimmFlashUsed = a})
+
+-- | The exposure bias of the photo (APEX value).
+fimmExposureBias :: Lens' FileImageMediaMetadata (Maybe Double)
+fimmExposureBias
+  = lens _fimmExposureBias
+      (\ s a -> s{_fimmExposureBias = a})
+      . mapping _Coerce
+
+-- | The metering mode used to create the photo.
+fimmMeteringMode :: Lens' FileImageMediaMetadata (Maybe Text)
+fimmMeteringMode
+  = lens _fimmMeteringMode
+      (\ s a -> s{_fimmMeteringMode = a})
+
+-- | The exposure mode used to create the photo.
+fimmExposureMode :: Lens' FileImageMediaMetadata (Maybe Text)
+fimmExposureMode
+  = lens _fimmExposureMode
+      (\ s a -> s{_fimmExposureMode = a})
+
+-- | The type of sensor used to create the photo.
+fimmSensor :: Lens' FileImageMediaMetadata (Maybe Text)
+fimmSensor
+  = lens _fimmSensor (\ s a -> s{_fimmSensor = a})
+
+-- | The color space of the photo.
+fimmColorSpace :: Lens' FileImageMediaMetadata (Maybe Text)
+fimmColorSpace
+  = lens _fimmColorSpace
+      (\ s a -> s{_fimmColorSpace = a})
+
+instance FromJSON FileImageMediaMetadata where
+        parseJSON
+          = withObject "FileImageMediaMetadata"
+              (\ o ->
+                 FileImageMediaMetadata' <$>
+                   (o .:? "rotation") <*> (o .:? "height") <*>
+                     (o .:? "subjectDistance")
+                     <*> (o .:? "maxApertureValue")
+                     <*> (o .:? "isoSpeed")
+                     <*> (o .:? "time")
+                     <*> (o .:? "location")
+                     <*> (o .:? "aperture")
+                     <*> (o .:? "focalLength")
+                     <*> (o .:? "cameraMake")
+                     <*> (o .:? "width")
+                     <*> (o .:? "exposureTime")
+                     <*> (o .:? "cameraModel")
+                     <*> (o .:? "whiteBalance")
+                     <*> (o .:? "lens")
+                     <*> (o .:? "flashUsed")
+                     <*> (o .:? "exposureBias")
+                     <*> (o .:? "meteringMode")
+                     <*> (o .:? "exposureMode")
+                     <*> (o .:? "sensor")
+                     <*> (o .:? "colorSpace"))
+
+instance ToJSON FileImageMediaMetadata where
+        toJSON FileImageMediaMetadata'{..}
+          = object
+              (catMaybes
+                 [("rotation" .=) <$> _fimmRotation,
+                  ("height" .=) <$> _fimmHeight,
+                  ("subjectDistance" .=) <$> _fimmSubjectDistance,
+                  ("maxApertureValue" .=) <$> _fimmMaxApertureValue,
+                  ("isoSpeed" .=) <$> _fimmIsoSpeed,
+                  ("time" .=) <$> _fimmTime,
+                  ("location" .=) <$> _fimmLocation,
+                  ("aperture" .=) <$> _fimmAperture,
+                  ("focalLength" .=) <$> _fimmFocalLength,
+                  ("cameraMake" .=) <$> _fimmCameraMake,
+                  ("width" .=) <$> _fimmWidth,
+                  ("exposureTime" .=) <$> _fimmExposureTime,
+                  ("cameraModel" .=) <$> _fimmCameraModel,
+                  ("whiteBalance" .=) <$> _fimmWhiteBalance,
+                  ("lens" .=) <$> _fimmLens,
+                  ("flashUsed" .=) <$> _fimmFlashUsed,
+                  ("exposureBias" .=) <$> _fimmExposureBias,
+                  ("meteringMode" .=) <$> _fimmMeteringMode,
+                  ("exposureMode" .=) <$> _fimmExposureMode,
+                  ("sensor" .=) <$> _fimmSensor,
+                  ("colorSpace" .=) <$> _fimmColorSpace])
+
+-- | A comment on a file.
+--
+-- /See:/ 'comment' smart constructor.
+data Comment = Comment'
+    { _comHTMLContent       :: !(Maybe Text)
+    , _comModifiedTime      :: !(Maybe DateTime')
+    , _comCreatedTime       :: !(Maybe DateTime')
+    , _comKind              :: !Text
+    , _comResolved          :: !(Maybe Bool)
+    , _comQuotedFileContent :: !(Maybe CommentQuotedFileContent)
+    , _comAnchor            :: !(Maybe Text)
+    , _comContent           :: !(Maybe Text)
+    , _comReplies           :: !(Maybe [Reply])
+    , _comAuthor            :: !(Maybe User)
+    , _comId                :: !(Maybe Text)
+    , _comDeleted           :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Comment' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'comHTMLContent'
+--
+-- * 'comModifiedTime'
+--
+-- * 'comCreatedTime'
+--
+-- * 'comKind'
+--
+-- * 'comResolved'
+--
+-- * 'comQuotedFileContent'
+--
+-- * 'comAnchor'
+--
+-- * 'comContent'
+--
+-- * 'comReplies'
+--
+-- * 'comAuthor'
+--
+-- * 'comId'
+--
+-- * 'comDeleted'
+comment
+    :: Comment
+comment =
+    Comment'
+    { _comHTMLContent = Nothing
+    , _comModifiedTime = Nothing
+    , _comCreatedTime = Nothing
+    , _comKind = "drive#comment"
+    , _comResolved = Nothing
+    , _comQuotedFileContent = Nothing
+    , _comAnchor = Nothing
+    , _comContent = Nothing
+    , _comReplies = Nothing
+    , _comAuthor = Nothing
+    , _comId = Nothing
+    , _comDeleted = Nothing
+    }
+
+-- | The content of the comment with HTML formatting.
+comHTMLContent :: Lens' Comment (Maybe Text)
+comHTMLContent
+  = lens _comHTMLContent
+      (\ s a -> s{_comHTMLContent = a})
+
+-- | The last time the comment or any of its replies was modified (RFC 3339
+-- date-time).
+comModifiedTime :: Lens' Comment (Maybe UTCTime)
+comModifiedTime
+  = lens _comModifiedTime
+      (\ s a -> s{_comModifiedTime = a})
+      . mapping _DateTime
+
+-- | The time at which the comment was created (RFC 3339 date-time).
+comCreatedTime :: Lens' Comment (Maybe UTCTime)
+comCreatedTime
+  = lens _comCreatedTime
+      (\ s a -> s{_comCreatedTime = a})
+      . mapping _DateTime
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"drive#comment\".
+comKind :: Lens' Comment Text
+comKind = lens _comKind (\ s a -> s{_comKind = a})
+
+-- | Whether the comment has been resolved by one of its replies.
+comResolved :: Lens' Comment (Maybe Bool)
+comResolved
+  = lens _comResolved (\ s a -> s{_comResolved = a})
+
+-- | The file content to which the comment refers, typically within the
+-- anchor region. For a text file, for example, this would be the text at
+-- the location of the comment.
+comQuotedFileContent :: Lens' Comment (Maybe CommentQuotedFileContent)
+comQuotedFileContent
+  = lens _comQuotedFileContent
+      (\ s a -> s{_comQuotedFileContent = a})
+
+-- | A region of the document represented as a JSON string. See anchor
+-- documentation for details on how to define and interpret anchor
+-- properties.
+comAnchor :: Lens' Comment (Maybe Text)
+comAnchor
+  = lens _comAnchor (\ s a -> s{_comAnchor = a})
+
+-- | The plain text content of the comment. This field is used for setting
+-- the content, while htmlContent should be displayed.
+comContent :: Lens' Comment (Maybe Text)
+comContent
+  = lens _comContent (\ s a -> s{_comContent = a})
+
+-- | The full list of replies to the comment in chronological order.
+comReplies :: Lens' Comment [Reply]
+comReplies
+  = lens _comReplies (\ s a -> s{_comReplies = a}) .
+      _Default
+      . _Coerce
+
+-- | The user who created the comment.
+comAuthor :: Lens' Comment (Maybe User)
+comAuthor
+  = lens _comAuthor (\ s a -> s{_comAuthor = a})
+
+-- | The ID of the comment.
+comId :: Lens' Comment (Maybe Text)
+comId = lens _comId (\ s a -> s{_comId = a})
+
+-- | Whether the comment has been deleted. A deleted comment has no content.
+comDeleted :: Lens' Comment (Maybe Bool)
+comDeleted
+  = lens _comDeleted (\ s a -> s{_comDeleted = a})
+
+instance FromJSON Comment where
+        parseJSON
+          = withObject "Comment"
+              (\ o ->
+                 Comment' <$>
+                   (o .:? "htmlContent") <*> (o .:? "modifiedTime") <*>
+                     (o .:? "createdTime")
+                     <*> (o .:? "kind" .!= "drive#comment")
+                     <*> (o .:? "resolved")
+                     <*> (o .:? "quotedFileContent")
+                     <*> (o .:? "anchor")
+                     <*> (o .:? "content")
+                     <*> (o .:? "replies" .!= mempty)
+                     <*> (o .:? "author")
+                     <*> (o .:? "id")
+                     <*> (o .:? "deleted"))
+
+instance ToJSON Comment where
+        toJSON Comment'{..}
+          = object
+              (catMaybes
+                 [("htmlContent" .=) <$> _comHTMLContent,
+                  ("modifiedTime" .=) <$> _comModifiedTime,
+                  ("createdTime" .=) <$> _comCreatedTime,
+                  Just ("kind" .= _comKind),
+                  ("resolved" .=) <$> _comResolved,
+                  ("quotedFileContent" .=) <$> _comQuotedFileContent,
+                  ("anchor" .=) <$> _comAnchor,
+                  ("content" .=) <$> _comContent,
+                  ("replies" .=) <$> _comReplies,
+                  ("author" .=) <$> _comAuthor, ("id" .=) <$> _comId,
+                  ("deleted" .=) <$> _comDeleted])
+
+-- | The metadata for a revision to a file.
+--
+-- /See:/ 'revision' smart constructor.
+data Revision = Revision'
+    { _revModifiedTime           :: !(Maybe DateTime')
+    , _revSize                   :: !(Maybe (Textual Int64))
+    , _revOriginalFilename       :: !(Maybe Text)
+    , _revKind                   :: !Text
+    , _revPublished              :: !(Maybe Bool)
+    , _revLastModifyingUser      :: !(Maybe User)
+    , _revPublishAuto            :: !(Maybe Bool)
+    , _revMD5Checksum            :: !(Maybe Text)
+    , _revKeepForever            :: !(Maybe Bool)
+    , _revMimeType               :: !(Maybe Text)
+    , _revExportLinks            :: !(Maybe RevisionExportLinks)
+    , _revPublishedOutsideDomain :: !(Maybe Bool)
+    , _revId                     :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Revision' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'revModifiedTime'
+--
+-- * 'revSize'
+--
+-- * 'revOriginalFilename'
+--
+-- * 'revKind'
+--
+-- * 'revPublished'
+--
+-- * 'revLastModifyingUser'
+--
+-- * 'revPublishAuto'
+--
+-- * 'revMD5Checksum'
+--
+-- * 'revKeepForever'
+--
+-- * 'revMimeType'
+--
+-- * 'revExportLinks'
+--
+-- * 'revPublishedOutsideDomain'
+--
+-- * 'revId'
+revision
+    :: Revision
+revision =
+    Revision'
+    { _revModifiedTime = Nothing
+    , _revSize = Nothing
+    , _revOriginalFilename = Nothing
+    , _revKind = "drive#revision"
+    , _revPublished = Nothing
+    , _revLastModifyingUser = Nothing
+    , _revPublishAuto = Nothing
+    , _revMD5Checksum = Nothing
+    , _revKeepForever = Nothing
+    , _revMimeType = Nothing
+    , _revExportLinks = Nothing
+    , _revPublishedOutsideDomain = Nothing
+    , _revId = Nothing
+    }
+
+-- | The last time the revision was modified (RFC 3339 date-time).
+revModifiedTime :: Lens' Revision (Maybe UTCTime)
+revModifiedTime
+  = lens _revModifiedTime
+      (\ s a -> s{_revModifiedTime = a})
+      . mapping _DateTime
+
+-- | The size of the revision\'s content in bytes. This is only applicable to
+-- files with binary content in Drive.
+revSize :: Lens' Revision (Maybe Int64)
+revSize
+  = lens _revSize (\ s a -> s{_revSize = a}) .
+      mapping _Coerce
+
+-- | The original filename used to create this revision. This is only
+-- applicable to files with binary content in Drive.
+revOriginalFilename :: Lens' Revision (Maybe Text)
+revOriginalFilename
+  = lens _revOriginalFilename
+      (\ s a -> s{_revOriginalFilename = a})
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"drive#revision\".
+revKind :: Lens' Revision Text
+revKind = lens _revKind (\ s a -> s{_revKind = a})
+
+-- | Whether this revision is published. This is only applicable to Google
+-- Docs.
+revPublished :: Lens' Revision (Maybe Bool)
+revPublished
+  = lens _revPublished (\ s a -> s{_revPublished = a})
+
+-- | The last user to modify this revision.
+revLastModifyingUser :: Lens' Revision (Maybe User)
+revLastModifyingUser
+  = lens _revLastModifyingUser
+      (\ s a -> s{_revLastModifyingUser = a})
+
+-- | Whether subsequent revisions will be automatically republished. This is
+-- only applicable to Google Docs.
+revPublishAuto :: Lens' Revision (Maybe Bool)
+revPublishAuto
+  = lens _revPublishAuto
+      (\ s a -> s{_revPublishAuto = a})
+
+-- | The MD5 checksum of the revision\'s content. This is only applicable to
+-- files with binary content in Drive.
+revMD5Checksum :: Lens' Revision (Maybe Text)
+revMD5Checksum
+  = lens _revMD5Checksum
+      (\ s a -> s{_revMD5Checksum = a})
+
+-- | Whether to keep this revision forever, even if it is no longer the head
+-- revision. If not set, the revision will be automatically purged 30 days
+-- after newer content is uploaded. This can be set on a maximum of 200
+-- revisions for a file. This field is only applicable to files with binary
+-- content in Drive.
+revKeepForever :: Lens' Revision (Maybe Bool)
+revKeepForever
+  = lens _revKeepForever
+      (\ s a -> s{_revKeepForever = a})
+
+-- | The MIME type of the revision.
+revMimeType :: Lens' Revision (Maybe Text)
+revMimeType
+  = lens _revMimeType (\ s a -> s{_revMimeType = a})
+
+-- | Links for exporting Google Docs to specific formats.
+revExportLinks :: Lens' Revision (Maybe RevisionExportLinks)
+revExportLinks
+  = lens _revExportLinks
+      (\ s a -> s{_revExportLinks = a})
+
+-- | Whether this revision is published outside the domain. This is only
+-- applicable to Google Docs.
+revPublishedOutsideDomain :: Lens' Revision (Maybe Bool)
+revPublishedOutsideDomain
+  = lens _revPublishedOutsideDomain
+      (\ s a -> s{_revPublishedOutsideDomain = a})
+
+-- | The ID of the revision.
+revId :: Lens' Revision (Maybe Text)
+revId = lens _revId (\ s a -> s{_revId = a})
+
+instance FromJSON Revision where
+        parseJSON
+          = withObject "Revision"
+              (\ o ->
+                 Revision' <$>
+                   (o .:? "modifiedTime") <*> (o .:? "size") <*>
+                     (o .:? "originalFilename")
+                     <*> (o .:? "kind" .!= "drive#revision")
+                     <*> (o .:? "published")
+                     <*> (o .:? "lastModifyingUser")
+                     <*> (o .:? "publishAuto")
+                     <*> (o .:? "md5Checksum")
+                     <*> (o .:? "keepForever")
+                     <*> (o .:? "mimeType")
+                     <*> (o .:? "exportLinks")
+                     <*> (o .:? "publishedOutsideDomain")
+                     <*> (o .:? "id"))
+
+instance ToJSON Revision where
+        toJSON Revision'{..}
+          = object
+              (catMaybes
+                 [("modifiedTime" .=) <$> _revModifiedTime,
+                  ("size" .=) <$> _revSize,
+                  ("originalFilename" .=) <$> _revOriginalFilename,
+                  Just ("kind" .= _revKind),
+                  ("published" .=) <$> _revPublished,
+                  ("lastModifyingUser" .=) <$> _revLastModifyingUser,
+                  ("publishAuto" .=) <$> _revPublishAuto,
+                  ("md5Checksum" .=) <$> _revMD5Checksum,
+                  ("keepForever" .=) <$> _revKeepForever,
+                  ("mimeType" .=) <$> _revMimeType,
+                  ("exportLinks" .=) <$> _revExportLinks,
+                  ("publishedOutsideDomain" .=) <$>
+                    _revPublishedOutsideDomain,
+                  ("id" .=) <$> _revId])
+
+-- | A permission for a file. A permission grants a user, group, domain or
+-- the world access to a file or a folder hierarchy.
+--
+-- /See:/ 'permission' smart constructor.
+data Permission = Permission'
+    { _pPhotoLink                  :: !(Maybe Text)
+    , _pTeamDrivePermissionDetails :: !(Maybe [PermissionTeamDrivePermissionDetailsItem])
+    , _pKind                       :: !Text
+    , _pDomain                     :: !(Maybe Text)
+    , _pRole                       :: !(Maybe Text)
+    , _pEmailAddress               :: !(Maybe Text)
+    , _pAllowFileDiscovery         :: !(Maybe Bool)
+    , _pDisplayName                :: !(Maybe Text)
+    , _pId                         :: !(Maybe Text)
+    , _pDeleted                    :: !(Maybe Bool)
+    , _pType                       :: !(Maybe Text)
+    , _pExpirationTime             :: !(Maybe DateTime')
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Permission' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pPhotoLink'
+--
+-- * 'pTeamDrivePermissionDetails'
+--
+-- * 'pKind'
+--
+-- * 'pDomain'
+--
+-- * 'pRole'
+--
+-- * 'pEmailAddress'
+--
+-- * 'pAllowFileDiscovery'
+--
+-- * 'pDisplayName'
+--
+-- * 'pId'
+--
+-- * 'pDeleted'
+--
+-- * 'pType'
+--
+-- * 'pExpirationTime'
+permission
+    :: Permission
+permission =
+    Permission'
+    { _pPhotoLink = Nothing
+    , _pTeamDrivePermissionDetails = Nothing
+    , _pKind = "drive#permission"
+    , _pDomain = Nothing
+    , _pRole = Nothing
+    , _pEmailAddress = Nothing
+    , _pAllowFileDiscovery = Nothing
+    , _pDisplayName = Nothing
+    , _pId = Nothing
+    , _pDeleted = Nothing
+    , _pType = Nothing
+    , _pExpirationTime = Nothing
+    }
+
+-- | A link to the user\'s profile photo, if available.
+pPhotoLink :: Lens' Permission (Maybe Text)
+pPhotoLink
+  = lens _pPhotoLink (\ s a -> s{_pPhotoLink = a})
+
+-- | Details of whether the permissions on this Team Drive item are inherited
+-- or directly on this item. This is an output-only field which is present
+-- only for Team Drive items.
+pTeamDrivePermissionDetails :: Lens' Permission [PermissionTeamDrivePermissionDetailsItem]
+pTeamDrivePermissionDetails
+  = lens _pTeamDrivePermissionDetails
+      (\ s a -> s{_pTeamDrivePermissionDetails = a})
+      . _Default
+      . _Coerce
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"drive#permission\".
+pKind :: Lens' Permission Text
+pKind = lens _pKind (\ s a -> s{_pKind = a})
+
+-- | The domain to which this permission refers.
+pDomain :: Lens' Permission (Maybe Text)
+pDomain = lens _pDomain (\ s a -> s{_pDomain = a})
+
+-- | The role granted by this permission. While new values may be supported
+-- in the future, the following are currently allowed: - owner - organizer
+-- - fileOrganizer - writer - commenter - reader
+pRole :: Lens' Permission (Maybe Text)
+pRole = lens _pRole (\ s a -> s{_pRole = a})
+
+-- | The email address of the user or group to which this permission refers.
+pEmailAddress :: Lens' Permission (Maybe Text)
+pEmailAddress
+  = lens _pEmailAddress
+      (\ s a -> s{_pEmailAddress = a})
+
+-- | Whether the permission allows the file to be discovered through search.
+-- This is only applicable for permissions of type domain or anyone.
+pAllowFileDiscovery :: Lens' Permission (Maybe Bool)
+pAllowFileDiscovery
+  = lens _pAllowFileDiscovery
+      (\ s a -> s{_pAllowFileDiscovery = a})
+
+-- | A displayable name for users, groups or domains.
+pDisplayName :: Lens' Permission (Maybe Text)
+pDisplayName
+  = lens _pDisplayName (\ s a -> s{_pDisplayName = a})
+
+-- | The ID of this permission. This is a unique identifier for the grantee,
+-- and is published in User resources as permissionId.
+pId :: Lens' Permission (Maybe Text)
+pId = lens _pId (\ s a -> s{_pId = a})
+
+-- | Whether the account associated with this permission has been deleted.
+-- This field only pertains to user and group permissions.
+pDeleted :: Lens' Permission (Maybe Bool)
+pDeleted = lens _pDeleted (\ s a -> s{_pDeleted = a})
+
+-- | The type of the grantee. Valid values are: - user - group - domain -
+-- anyone
+pType :: Lens' Permission (Maybe Text)
+pType = lens _pType (\ s a -> s{_pType = a})
+
+-- | The time at which this permission will expire (RFC 3339 date-time).
+-- Expiration times have the following restrictions: - They can only be set
+-- on user and group permissions - The time must be in the future - The
+-- time cannot be more than a year in the future
+pExpirationTime :: Lens' Permission (Maybe UTCTime)
+pExpirationTime
+  = lens _pExpirationTime
+      (\ s a -> s{_pExpirationTime = a})
+      . mapping _DateTime
+
+instance FromJSON Permission where
+        parseJSON
+          = withObject "Permission"
+              (\ o ->
+                 Permission' <$>
+                   (o .:? "photoLink") <*>
+                     (o .:? "teamDrivePermissionDetails" .!= mempty)
+                     <*> (o .:? "kind" .!= "drive#permission")
+                     <*> (o .:? "domain")
+                     <*> (o .:? "role")
+                     <*> (o .:? "emailAddress")
+                     <*> (o .:? "allowFileDiscovery")
+                     <*> (o .:? "displayName")
+                     <*> (o .:? "id")
+                     <*> (o .:? "deleted")
+                     <*> (o .:? "type")
+                     <*> (o .:? "expirationTime"))
+
+instance ToJSON Permission where
+        toJSON Permission'{..}
+          = object
+              (catMaybes
+                 [("photoLink" .=) <$> _pPhotoLink,
+                  ("teamDrivePermissionDetails" .=) <$>
+                    _pTeamDrivePermissionDetails,
+                  Just ("kind" .= _pKind), ("domain" .=) <$> _pDomain,
+                  ("role" .=) <$> _pRole,
+                  ("emailAddress" .=) <$> _pEmailAddress,
+                  ("allowFileDiscovery" .=) <$> _pAllowFileDiscovery,
+                  ("displayName" .=) <$> _pDisplayName,
+                  ("id" .=) <$> _pId, ("deleted" .=) <$> _pDeleted,
+                  ("type" .=) <$> _pType,
+                  ("expirationTime" .=) <$> _pExpirationTime])
+
+-- | The metadata for a file.
+--
+-- /See:/ 'file' smart constructor.
+data File = File'
+    { _fOwnedByMe                    :: !(Maybe Bool)
+    , _fThumbnailLink                :: !(Maybe Text)
+    , _fFullFileExtension            :: !(Maybe Text)
+    , _fModifiedTime                 :: !(Maybe DateTime')
+    , _fModifiedByMeTime             :: !(Maybe DateTime')
+    , _fFileExtension                :: !(Maybe Text)
+    , _fViewedByMe                   :: !(Maybe Bool)
+    , _fOwners                       :: !(Maybe [User])
+    , _fViewedByMeTime               :: !(Maybe DateTime')
+    , _fModifiedByMe                 :: !(Maybe Bool)
+    , _fSize                         :: !(Maybe (Textual Int64))
+    , _fTrashed                      :: !(Maybe Bool)
+    , _fWebViewLink                  :: !(Maybe Text)
+    , _fCreatedTime                  :: !(Maybe DateTime')
+    , _fTrashedTime                  :: !(Maybe DateTime')
+    , _fOriginalFilename             :: !(Maybe Text)
+    , _fKind                         :: !Text
+    , _fLastModifyingUser            :: !(Maybe User)
+    , _fIconLink                     :: !(Maybe Text)
+    , _fHasThumbnail                 :: !(Maybe Bool)
+    , _fThumbnailVersion             :: !(Maybe (Textual Int64))
+    , _fImageMediaMetadata           :: !(Maybe FileImageMediaMetadata)
+    , _fExplicitlyTrashed            :: !(Maybe Bool)
+    , _fShared                       :: !(Maybe Bool)
+    , _fMD5Checksum                  :: !(Maybe Text)
+    , _fTeamDriveId                  :: !(Maybe Text)
+    , _fFolderColorRgb               :: !(Maybe Text)
+    , _fMimeType                     :: !(Maybe Text)
+    , _fIsAppAuthorized              :: !(Maybe Bool)
+    , _fCopyRequiresWriterPermission :: !(Maybe Bool)
+    , _fName                         :: !(Maybe Text)
+    , _fExportLinks                  :: !(Maybe FileExportLinks)
+    , _fParents                      :: !(Maybe [Text])
+    , _fStarred                      :: !(Maybe Bool)
+    , _fSpaces                       :: !(Maybe [Text])
+    , _fVersion                      :: !(Maybe (Textual Int64))
+    , _fHasAugmentedPermissions      :: !(Maybe Bool)
+    , _fWritersCanShare              :: !(Maybe Bool)
+    , _fTrashingUser                 :: !(Maybe User)
+    , _fId                           :: !(Maybe Text)
+    , _fPermissionIds                :: !(Maybe [Text])
+    , _fPermissions                  :: !(Maybe [Permission])
+    , _fQuotaBytesUsed               :: !(Maybe (Textual Int64))
+    , _fAppProperties                :: !(Maybe FileAppProperties)
+    , _fVideoMediaMetadata           :: !(Maybe FileVideoMediaMetadata)
+    , _fSharedWithMeTime             :: !(Maybe DateTime')
+    , _fHeadRevisionId               :: !(Maybe Text)
+    , _fCapabilities                 :: !(Maybe FileCapabilities)
+    , _fDescription                  :: !(Maybe Text)
+    , _fViewersCanCopyContent        :: !(Maybe Bool)
+    , _fSharingUser                  :: !(Maybe User)
+    , _fWebContentLink               :: !(Maybe Text)
+    , _fContentHints                 :: !(Maybe FileContentHints)
+    , _fProperties                   :: !(Maybe FileProperties)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'File' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fOwnedByMe'
+--
+-- * 'fThumbnailLink'
+--
+-- * 'fFullFileExtension'
+--
+-- * 'fModifiedTime'
+--
+-- * 'fModifiedByMeTime'
+--
+-- * 'fFileExtension'
+--
+-- * 'fViewedByMe'
+--
+-- * 'fOwners'
+--
+-- * 'fViewedByMeTime'
+--
+-- * 'fModifiedByMe'
+--
+-- * 'fSize'
+--
+-- * 'fTrashed'
+--
+-- * 'fWebViewLink'
+--
+-- * 'fCreatedTime'
+--
+-- * 'fTrashedTime'
+--
+-- * 'fOriginalFilename'
+--
+-- * 'fKind'
+--
+-- * 'fLastModifyingUser'
+--
+-- * 'fIconLink'
+--
+-- * 'fHasThumbnail'
+--
+-- * 'fThumbnailVersion'
+--
+-- * 'fImageMediaMetadata'
+--
+-- * 'fExplicitlyTrashed'
+--
+-- * 'fShared'
+--
+-- * 'fMD5Checksum'
+--
+-- * 'fTeamDriveId'
+--
+-- * 'fFolderColorRgb'
+--
+-- * 'fMimeType'
+--
+-- * 'fIsAppAuthorized'
+--
+-- * 'fCopyRequiresWriterPermission'
+--
+-- * 'fName'
+--
+-- * 'fExportLinks'
+--
+-- * 'fParents'
+--
+-- * 'fStarred'
+--
+-- * 'fSpaces'
+--
+-- * 'fVersion'
+--
+-- * 'fHasAugmentedPermissions'
+--
+-- * 'fWritersCanShare'
+--
+-- * 'fTrashingUser'
+--
+-- * 'fId'
+--
+-- * 'fPermissionIds'
+--
+-- * 'fPermissions'
+--
+-- * 'fQuotaBytesUsed'
+--
+-- * 'fAppProperties'
+--
+-- * 'fVideoMediaMetadata'
+--
+-- * 'fSharedWithMeTime'
+--
+-- * 'fHeadRevisionId'
+--
+-- * 'fCapabilities'
+--
+-- * 'fDescription'
+--
+-- * 'fViewersCanCopyContent'
+--
+-- * 'fSharingUser'
+--
+-- * 'fWebContentLink'
+--
+-- * 'fContentHints'
+--
+-- * 'fProperties'
+file
+    :: File
+file =
+    File'
+    { _fOwnedByMe = Nothing
+    , _fThumbnailLink = Nothing
+    , _fFullFileExtension = Nothing
+    , _fModifiedTime = Nothing
+    , _fModifiedByMeTime = Nothing
+    , _fFileExtension = Nothing
+    , _fViewedByMe = Nothing
+    , _fOwners = Nothing
+    , _fViewedByMeTime = Nothing
+    , _fModifiedByMe = Nothing
+    , _fSize = Nothing
+    , _fTrashed = Nothing
+    , _fWebViewLink = Nothing
+    , _fCreatedTime = Nothing
+    , _fTrashedTime = Nothing
+    , _fOriginalFilename = Nothing
+    , _fKind = "drive#file"
+    , _fLastModifyingUser = Nothing
+    , _fIconLink = Nothing
+    , _fHasThumbnail = Nothing
+    , _fThumbnailVersion = Nothing
+    , _fImageMediaMetadata = Nothing
+    , _fExplicitlyTrashed = Nothing
+    , _fShared = Nothing
+    , _fMD5Checksum = Nothing
+    , _fTeamDriveId = Nothing
+    , _fFolderColorRgb = Nothing
+    , _fMimeType = Nothing
+    , _fIsAppAuthorized = Nothing
+    , _fCopyRequiresWriterPermission = Nothing
+    , _fName = Nothing
+    , _fExportLinks = Nothing
+    , _fParents = Nothing
+    , _fStarred = Nothing
+    , _fSpaces = Nothing
+    , _fVersion = Nothing
+    , _fHasAugmentedPermissions = Nothing
+    , _fWritersCanShare = Nothing
+    , _fTrashingUser = Nothing
+    , _fId = Nothing
+    , _fPermissionIds = Nothing
+    , _fPermissions = Nothing
+    , _fQuotaBytesUsed = Nothing
+    , _fAppProperties = Nothing
+    , _fVideoMediaMetadata = Nothing
+    , _fSharedWithMeTime = Nothing
+    , _fHeadRevisionId = Nothing
+    , _fCapabilities = Nothing
+    , _fDescription = Nothing
+    , _fViewersCanCopyContent = Nothing
+    , _fSharingUser = Nothing
+    , _fWebContentLink = Nothing
+    , _fContentHints = Nothing
+    , _fProperties = Nothing
+    }
+
+-- | Whether the user owns the file. Not populated for Team Drive files.
+fOwnedByMe :: Lens' File (Maybe Bool)
+fOwnedByMe
+  = lens _fOwnedByMe (\ s a -> s{_fOwnedByMe = a})
+
+-- | A short-lived link to the file\'s thumbnail, if available. Typically
+-- lasts on the order of hours. Only populated when the requesting app can
+-- access the file\'s content.
+fThumbnailLink :: Lens' File (Maybe Text)
+fThumbnailLink
+  = lens _fThumbnailLink
+      (\ s a -> s{_fThumbnailLink = a})
+
+-- | The full file extension extracted from the name field. May contain
+-- multiple concatenated extensions, such as \"tar.gz\". This is only
+-- available for files with binary content in Drive. This is automatically
+-- updated when the name field changes, however it is not cleared if the
+-- new name does not contain a valid extension.
+fFullFileExtension :: Lens' File (Maybe Text)
+fFullFileExtension
+  = lens _fFullFileExtension
+      (\ s a -> s{_fFullFileExtension = a})
+
+-- | The last time the file was modified by anyone (RFC 3339 date-time). Note
+-- that setting modifiedTime will also update modifiedByMeTime for the
+-- user.
+fModifiedTime :: Lens' File (Maybe UTCTime)
+fModifiedTime
+  = lens _fModifiedTime
+      (\ s a -> s{_fModifiedTime = a})
+      . mapping _DateTime
+
+-- | The last time the file was modified by the user (RFC 3339 date-time).
+fModifiedByMeTime :: Lens' File (Maybe UTCTime)
+fModifiedByMeTime
+  = lens _fModifiedByMeTime
+      (\ s a -> s{_fModifiedByMeTime = a})
+      . mapping _DateTime
+
+-- | The final component of fullFileExtension. This is only available for
+-- files with binary content in Drive.
+fFileExtension :: Lens' File (Maybe Text)
+fFileExtension
+  = lens _fFileExtension
+      (\ s a -> s{_fFileExtension = a})
+
+-- | Whether the file has been viewed by this user.
+fViewedByMe :: Lens' File (Maybe Bool)
+fViewedByMe
+  = lens _fViewedByMe (\ s a -> s{_fViewedByMe = a})
+
+-- | The owners of the file. Currently, only certain legacy files may have
+-- more than one owner. Not populated for Team Drive files.
+fOwners :: Lens' File [User]
+fOwners
+  = lens _fOwners (\ s a -> s{_fOwners = a}) . _Default
+      . _Coerce
+
+-- | The last time the file was viewed by the user (RFC 3339 date-time).
+fViewedByMeTime :: Lens' File (Maybe UTCTime)
+fViewedByMeTime
+  = lens _fViewedByMeTime
+      (\ s a -> s{_fViewedByMeTime = a})
+      . mapping _DateTime
+
+-- | Whether the file has been modified by this user.
+fModifiedByMe :: Lens' File (Maybe Bool)
+fModifiedByMe
+  = lens _fModifiedByMe
+      (\ s a -> s{_fModifiedByMe = a})
+
+-- | The size of the file\'s content in bytes. This is only applicable to
+-- files with binary content in Drive.
+fSize :: Lens' File (Maybe Int64)
+fSize
+  = lens _fSize (\ s a -> s{_fSize = a}) .
+      mapping _Coerce
+
+-- | Whether the file has been trashed, either explicitly or from a trashed
+-- parent folder. Only the owner may trash a file, and other users cannot
+-- see files in the owner\'s trash.
+fTrashed :: Lens' File (Maybe Bool)
+fTrashed = lens _fTrashed (\ s a -> s{_fTrashed = a})
+
+-- | A link for opening the file in a relevant Google editor or viewer in a
+-- browser.
+fWebViewLink :: Lens' File (Maybe Text)
+fWebViewLink
+  = lens _fWebViewLink (\ s a -> s{_fWebViewLink = a})
+
+-- | The time at which the file was created (RFC 3339 date-time).
+fCreatedTime :: Lens' File (Maybe UTCTime)
+fCreatedTime
+  = lens _fCreatedTime (\ s a -> s{_fCreatedTime = a})
+      . mapping _DateTime
+
+-- | The time that the item was trashed (RFC 3339 date-time). Only populated
+-- for Team Drive files.
+fTrashedTime :: Lens' File (Maybe UTCTime)
+fTrashedTime
+  = lens _fTrashedTime (\ s a -> s{_fTrashedTime = a})
+      . mapping _DateTime
+
+-- | The original filename of the uploaded content if available, or else the
+-- original value of the name field. This is only available for files with
+-- binary content in Drive.
+fOriginalFilename :: Lens' File (Maybe Text)
+fOriginalFilename
+  = lens _fOriginalFilename
+      (\ s a -> s{_fOriginalFilename = a})
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"drive#file\".
+fKind :: Lens' File Text
+fKind = lens _fKind (\ s a -> s{_fKind = a})
+
+-- | The last user to modify the file.
+fLastModifyingUser :: Lens' File (Maybe User)
+fLastModifyingUser
+  = lens _fLastModifyingUser
+      (\ s a -> s{_fLastModifyingUser = a})
+
+-- | A static, unauthenticated link to the file\'s icon.
+fIconLink :: Lens' File (Maybe Text)
+fIconLink
+  = lens _fIconLink (\ s a -> s{_fIconLink = a})
+
+-- | Whether this file has a thumbnail. This does not indicate whether the
+-- requesting app has access to the thumbnail. To check access, look for
+-- the presence of the thumbnailLink field.
+fHasThumbnail :: Lens' File (Maybe Bool)
+fHasThumbnail
+  = lens _fHasThumbnail
+      (\ s a -> s{_fHasThumbnail = a})
+
+-- | The thumbnail version for use in thumbnail cache invalidation.
+fThumbnailVersion :: Lens' File (Maybe Int64)
+fThumbnailVersion
+  = lens _fThumbnailVersion
+      (\ s a -> s{_fThumbnailVersion = a})
+      . mapping _Coerce
+
+-- | Additional metadata about image media, if available.
+fImageMediaMetadata :: Lens' File (Maybe FileImageMediaMetadata)
+fImageMediaMetadata
+  = lens _fImageMediaMetadata
+      (\ s a -> s{_fImageMediaMetadata = a})
+
+-- | Whether the file has been explicitly trashed, as opposed to recursively
+-- trashed from a parent folder.
+fExplicitlyTrashed :: Lens' File (Maybe Bool)
+fExplicitlyTrashed
+  = lens _fExplicitlyTrashed
+      (\ s a -> s{_fExplicitlyTrashed = a})
+
+-- | Whether the file has been shared. Not populated for Team Drive files.
+fShared :: Lens' File (Maybe Bool)
+fShared = lens _fShared (\ s a -> s{_fShared = a})
+
+-- | The MD5 checksum for the content of the file. This is only applicable to
+-- files with binary content in Drive.
+fMD5Checksum :: Lens' File (Maybe Text)
+fMD5Checksum
+  = lens _fMD5Checksum (\ s a -> s{_fMD5Checksum = a})
+
+-- | ID of the Team Drive the file resides in.
+fTeamDriveId :: Lens' File (Maybe Text)
+fTeamDriveId
+  = lens _fTeamDriveId (\ s a -> s{_fTeamDriveId = a})
+
+-- | The color for a folder as an RGB hex string. The supported colors are
+-- published in the folderColorPalette field of the About resource. If an
+-- unsupported color is specified, the closest color in the palette will be
+-- used instead.
+fFolderColorRgb :: Lens' File (Maybe Text)
+fFolderColorRgb
+  = lens _fFolderColorRgb
+      (\ s a -> s{_fFolderColorRgb = a})
+
+-- | The MIME type of the file. Drive will attempt to automatically detect an
+-- appropriate value from uploaded content if no value is provided. The
+-- value cannot be changed unless a new revision is uploaded. If a file is
+-- created with a Google Doc MIME type, the uploaded content will be
+-- imported if possible. The supported import formats are published in the
+-- About resource.
+fMimeType :: Lens' File (Maybe Text)
+fMimeType
+  = lens _fMimeType (\ s a -> s{_fMimeType = a})
+
+-- | Whether the file was created or opened by the requesting app.
+fIsAppAuthorized :: Lens' File (Maybe Bool)
+fIsAppAuthorized
+  = lens _fIsAppAuthorized
+      (\ s a -> s{_fIsAppAuthorized = a})
+
+-- | Whether the options to copy, print, or download this file, should be
+-- disabled for readers and commenters.
+fCopyRequiresWriterPermission :: Lens' File (Maybe Bool)
+fCopyRequiresWriterPermission
+  = lens _fCopyRequiresWriterPermission
+      (\ s a -> s{_fCopyRequiresWriterPermission = a})
+
+-- | The name of the file. This is not necessarily unique within a folder.
+-- Note that for immutable items such as the top level folders of Team
+-- Drives, My Drive root folder, and Application Data folder the name is
+-- constant.
+fName :: Lens' File (Maybe Text)
+fName = lens _fName (\ s a -> s{_fName = a})
+
+-- | Links for exporting Google Docs to specific formats.
+fExportLinks :: Lens' File (Maybe FileExportLinks)
+fExportLinks
+  = lens _fExportLinks (\ s a -> s{_fExportLinks = a})
+
+-- | The IDs of the parent folders which contain the file. If not specified
+-- as part of a create request, the file will be placed directly in the
+-- user\'s My Drive folder. If not specified as part of a copy request, the
+-- file will inherit any discoverable parents of the source file. Update
+-- requests must use the addParents and removeParents parameters to modify
+-- the parents list.
+fParents :: Lens' File [Text]
+fParents
+  = lens _fParents (\ s a -> s{_fParents = a}) .
+      _Default
+      . _Coerce
+
+-- | Whether the user has starred the file.
+fStarred :: Lens' File (Maybe Bool)
+fStarred = lens _fStarred (\ s a -> s{_fStarred = a})
+
+-- | The list of spaces which contain the file. The currently supported
+-- values are \'drive\', \'appDataFolder\' and \'photos\'.
+fSpaces :: Lens' File [Text]
+fSpaces
+  = lens _fSpaces (\ s a -> s{_fSpaces = a}) . _Default
+      . _Coerce
+
+-- | A monotonically increasing version number for the file. This reflects
+-- every change made to the file on the server, even those not visible to
+-- the user.
+fVersion :: Lens' File (Maybe Int64)
+fVersion
+  = lens _fVersion (\ s a -> s{_fVersion = a}) .
+      mapping _Coerce
+
+-- | Whether any users are granted file access directly on this file. This
+-- field is only populated for Team Drive files.
+fHasAugmentedPermissions :: Lens' File (Maybe Bool)
+fHasAugmentedPermissions
+  = lens _fHasAugmentedPermissions
+      (\ s a -> s{_fHasAugmentedPermissions = a})
+
+-- | Whether users with only writer permission can modify the file\'s
+-- permissions. Not populated for Team Drive files.
+fWritersCanShare :: Lens' File (Maybe Bool)
+fWritersCanShare
+  = lens _fWritersCanShare
+      (\ s a -> s{_fWritersCanShare = a})
+
+-- | If the file has been explicitly trashed, the user who trashed it. Only
+-- populated for Team Drive files.
+fTrashingUser :: Lens' File (Maybe User)
+fTrashingUser
+  = lens _fTrashingUser
+      (\ s a -> s{_fTrashingUser = a})
+
+-- | The ID of the file.
+fId :: Lens' File (Maybe Text)
+fId = lens _fId (\ s a -> s{_fId = a})
+
+-- | List of permission IDs for users with access to this file.
+fPermissionIds :: Lens' File [Text]
+fPermissionIds
+  = lens _fPermissionIds
+      (\ s a -> s{_fPermissionIds = a})
+      . _Default
+      . _Coerce
+
+-- | The full list of permissions for the file. This is only available if the
+-- requesting user can share the file. Not populated for Team Drive files.
+fPermissions :: Lens' File [Permission]
+fPermissions
+  = lens _fPermissions (\ s a -> s{_fPermissions = a})
+      . _Default
+      . _Coerce
+
+-- | The number of storage quota bytes used by the file. This includes the
+-- head revision as well as previous revisions with keepForever enabled.
+fQuotaBytesUsed :: Lens' File (Maybe Int64)
+fQuotaBytesUsed
+  = lens _fQuotaBytesUsed
+      (\ s a -> s{_fQuotaBytesUsed = a})
+      . mapping _Coerce
+
+-- | A collection of arbitrary key-value pairs which are private to the
+-- requesting app. Entries with null values are cleared in update and copy
+-- requests.
+fAppProperties :: Lens' File (Maybe FileAppProperties)
+fAppProperties
+  = lens _fAppProperties
+      (\ s a -> s{_fAppProperties = a})
+
+-- | Additional metadata about video media. This may not be available
+-- immediately upon upload.
+fVideoMediaMetadata :: Lens' File (Maybe FileVideoMediaMetadata)
+fVideoMediaMetadata
+  = lens _fVideoMediaMetadata
+      (\ s a -> s{_fVideoMediaMetadata = a})
+
+-- | The time at which the file was shared with the user, if applicable (RFC
+-- 3339 date-time).
+fSharedWithMeTime :: Lens' File (Maybe UTCTime)
+fSharedWithMeTime
+  = lens _fSharedWithMeTime
+      (\ s a -> s{_fSharedWithMeTime = a})
+      . mapping _DateTime
+
+-- | The ID of the file\'s head revision. This is currently only available
+-- for files with binary content in Drive.
+fHeadRevisionId :: Lens' File (Maybe Text)
+fHeadRevisionId
+  = lens _fHeadRevisionId
+      (\ s a -> s{_fHeadRevisionId = a})
+
+-- | Capabilities the current user has on this file. Each capability
+-- corresponds to a fine-grained action that a user may take.
+fCapabilities :: Lens' File (Maybe FileCapabilities)
+fCapabilities
+  = lens _fCapabilities
+      (\ s a -> s{_fCapabilities = a})
+
+-- | A short description of the file.
+fDescription :: Lens' File (Maybe Text)
+fDescription
+  = lens _fDescription (\ s a -> s{_fDescription = a})
+
+-- | Deprecated - use copyRequiresWriterPermission instead.
+fViewersCanCopyContent :: Lens' File (Maybe Bool)
+fViewersCanCopyContent
+  = lens _fViewersCanCopyContent
+      (\ s a -> s{_fViewersCanCopyContent = a})
+
+-- | The user who shared the file with the requesting user, if applicable.
+fSharingUser :: Lens' File (Maybe User)
+fSharingUser
+  = lens _fSharingUser (\ s a -> s{_fSharingUser = a})
+
+-- | A link for downloading the content of the file in a browser. This is
+-- only available for files with binary content in Drive.
+fWebContentLink :: Lens' File (Maybe Text)
+fWebContentLink
+  = lens _fWebContentLink
+      (\ s a -> s{_fWebContentLink = a})
+
+-- | Additional information about the content of the file. These fields are
+-- never populated in responses.
+fContentHints :: Lens' File (Maybe FileContentHints)
+fContentHints
+  = lens _fContentHints
+      (\ s a -> s{_fContentHints = a})
+
+-- | A collection of arbitrary key-value pairs which are visible to all apps.
+-- Entries with null values are cleared in update and copy requests.
+fProperties :: Lens' File (Maybe FileProperties)
+fProperties
+  = lens _fProperties (\ s a -> s{_fProperties = a})
+
+instance FromJSON File where
+        parseJSON
+          = withObject "File"
+              (\ o ->
+                 File' <$>
+                   (o .:? "ownedByMe") <*> (o .:? "thumbnailLink") <*>
+                     (o .:? "fullFileExtension")
+                     <*> (o .:? "modifiedTime")
+                     <*> (o .:? "modifiedByMeTime")
+                     <*> (o .:? "fileExtension")
+                     <*> (o .:? "viewedByMe")
+                     <*> (o .:? "owners" .!= mempty)
+                     <*> (o .:? "viewedByMeTime")
+                     <*> (o .:? "modifiedByMe")
+                     <*> (o .:? "size")
+                     <*> (o .:? "trashed")
+                     <*> (o .:? "webViewLink")
+                     <*> (o .:? "createdTime")
+                     <*> (o .:? "trashedTime")
+                     <*> (o .:? "originalFilename")
+                     <*> (o .:? "kind" .!= "drive#file")
+                     <*> (o .:? "lastModifyingUser")
+                     <*> (o .:? "iconLink")
+                     <*> (o .:? "hasThumbnail")
+                     <*> (o .:? "thumbnailVersion")
+                     <*> (o .:? "imageMediaMetadata")
+                     <*> (o .:? "explicitlyTrashed")
+                     <*> (o .:? "shared")
+                     <*> (o .:? "md5Checksum")
+                     <*> (o .:? "teamDriveId")
+                     <*> (o .:? "folderColorRgb")
+                     <*> (o .:? "mimeType")
+                     <*> (o .:? "isAppAuthorized")
+                     <*> (o .:? "copyRequiresWriterPermission")
+                     <*> (o .:? "name")
+                     <*> (o .:? "exportLinks")
+                     <*> (o .:? "parents" .!= mempty)
+                     <*> (o .:? "starred")
+                     <*> (o .:? "spaces" .!= mempty)
+                     <*> (o .:? "version")
+                     <*> (o .:? "hasAugmentedPermissions")
+                     <*> (o .:? "writersCanShare")
+                     <*> (o .:? "trashingUser")
+                     <*> (o .:? "id")
+                     <*> (o .:? "permissionIds" .!= mempty)
+                     <*> (o .:? "permissions" .!= mempty)
+                     <*> (o .:? "quotaBytesUsed")
+                     <*> (o .:? "appProperties")
+                     <*> (o .:? "videoMediaMetadata")
+                     <*> (o .:? "sharedWithMeTime")
+                     <*> (o .:? "headRevisionId")
+                     <*> (o .:? "capabilities")
+                     <*> (o .:? "description")
+                     <*> (o .:? "viewersCanCopyContent")
+                     <*> (o .:? "sharingUser")
+                     <*> (o .:? "webContentLink")
+                     <*> (o .:? "contentHints")
+                     <*> (o .:? "properties"))
+
+instance ToJSON File where
+        toJSON File'{..}
+          = object
+              (catMaybes
+                 [("ownedByMe" .=) <$> _fOwnedByMe,
+                  ("thumbnailLink" .=) <$> _fThumbnailLink,
+                  ("fullFileExtension" .=) <$> _fFullFileExtension,
+                  ("modifiedTime" .=) <$> _fModifiedTime,
+                  ("modifiedByMeTime" .=) <$> _fModifiedByMeTime,
+                  ("fileExtension" .=) <$> _fFileExtension,
+                  ("viewedByMe" .=) <$> _fViewedByMe,
+                  ("owners" .=) <$> _fOwners,
+                  ("viewedByMeTime" .=) <$> _fViewedByMeTime,
+                  ("modifiedByMe" .=) <$> _fModifiedByMe,
+                  ("size" .=) <$> _fSize, ("trashed" .=) <$> _fTrashed,
+                  ("webViewLink" .=) <$> _fWebViewLink,
+                  ("createdTime" .=) <$> _fCreatedTime,
+                  ("trashedTime" .=) <$> _fTrashedTime,
+                  ("originalFilename" .=) <$> _fOriginalFilename,
+                  Just ("kind" .= _fKind),
+                  ("lastModifyingUser" .=) <$> _fLastModifyingUser,
+                  ("iconLink" .=) <$> _fIconLink,
+                  ("hasThumbnail" .=) <$> _fHasThumbnail,
+                  ("thumbnailVersion" .=) <$> _fThumbnailVersion,
+                  ("imageMediaMetadata" .=) <$> _fImageMediaMetadata,
+                  ("explicitlyTrashed" .=) <$> _fExplicitlyTrashed,
+                  ("shared" .=) <$> _fShared,
+                  ("md5Checksum" .=) <$> _fMD5Checksum,
+                  ("teamDriveId" .=) <$> _fTeamDriveId,
+                  ("folderColorRgb" .=) <$> _fFolderColorRgb,
+                  ("mimeType" .=) <$> _fMimeType,
+                  ("isAppAuthorized" .=) <$> _fIsAppAuthorized,
+                  ("copyRequiresWriterPermission" .=) <$>
+                    _fCopyRequiresWriterPermission,
+                  ("name" .=) <$> _fName,
+                  ("exportLinks" .=) <$> _fExportLinks,
+                  ("parents" .=) <$> _fParents,
+                  ("starred" .=) <$> _fStarred,
+                  ("spaces" .=) <$> _fSpaces,
+                  ("version" .=) <$> _fVersion,
+                  ("hasAugmentedPermissions" .=) <$>
+                    _fHasAugmentedPermissions,
+                  ("writersCanShare" .=) <$> _fWritersCanShare,
+                  ("trashingUser" .=) <$> _fTrashingUser,
+                  ("id" .=) <$> _fId,
+                  ("permissionIds" .=) <$> _fPermissionIds,
+                  ("permissions" .=) <$> _fPermissions,
+                  ("quotaBytesUsed" .=) <$> _fQuotaBytesUsed,
+                  ("appProperties" .=) <$> _fAppProperties,
+                  ("videoMediaMetadata" .=) <$> _fVideoMediaMetadata,
+                  ("sharedWithMeTime" .=) <$> _fSharedWithMeTime,
+                  ("headRevisionId" .=) <$> _fHeadRevisionId,
+                  ("capabilities" .=) <$> _fCapabilities,
+                  ("description" .=) <$> _fDescription,
+                  ("viewersCanCopyContent" .=) <$>
+                    _fViewersCanCopyContent,
+                  ("sharingUser" .=) <$> _fSharingUser,
+                  ("webContentLink" .=) <$> _fWebContentLink,
+                  ("contentHints" .=) <$> _fContentHints,
+                  ("properties" .=) <$> _fProperties])
+
+--
+-- /See:/ 'permissionTeamDrivePermissionDetailsItem' smart constructor.
+data PermissionTeamDrivePermissionDetailsItem = PermissionTeamDrivePermissionDetailsItem'
+    { _ptdpdiInherited               :: !(Maybe Bool)
+    , _ptdpdiTeamDrivePermissionType :: !(Maybe Text)
+    , _ptdpdiRole                    :: !(Maybe Text)
+    , _ptdpdiInheritedFrom           :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PermissionTeamDrivePermissionDetailsItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ptdpdiInherited'
+--
+-- * 'ptdpdiTeamDrivePermissionType'
+--
+-- * 'ptdpdiRole'
+--
+-- * 'ptdpdiInheritedFrom'
+permissionTeamDrivePermissionDetailsItem
+    :: PermissionTeamDrivePermissionDetailsItem
+permissionTeamDrivePermissionDetailsItem =
+    PermissionTeamDrivePermissionDetailsItem'
+    { _ptdpdiInherited = Nothing
+    , _ptdpdiTeamDrivePermissionType = Nothing
+    , _ptdpdiRole = Nothing
+    , _ptdpdiInheritedFrom = Nothing
+    }
+
+-- | Whether this permission is inherited. This field is always populated.
+-- This is an output-only field.
+ptdpdiInherited :: Lens' PermissionTeamDrivePermissionDetailsItem (Maybe Bool)
+ptdpdiInherited
+  = lens _ptdpdiInherited
+      (\ s a -> s{_ptdpdiInherited = a})
+
+-- | The Team Drive permission type for this user. While new values may be
+-- added in future, the following are currently possible: - file - member
+ptdpdiTeamDrivePermissionType :: Lens' PermissionTeamDrivePermissionDetailsItem (Maybe Text)
+ptdpdiTeamDrivePermissionType
+  = lens _ptdpdiTeamDrivePermissionType
+      (\ s a -> s{_ptdpdiTeamDrivePermissionType = a})
+
+-- | The primary role for this user. While new values may be added in the
+-- future, the following are currently possible: - organizer -
+-- fileOrganizer - writer - commenter - reader
+ptdpdiRole :: Lens' PermissionTeamDrivePermissionDetailsItem (Maybe Text)
+ptdpdiRole
+  = lens _ptdpdiRole (\ s a -> s{_ptdpdiRole = a})
+
+-- | The ID of the item from which this permission is inherited. This is an
+-- output-only field and is only populated for members of the Team Drive.
+ptdpdiInheritedFrom :: Lens' PermissionTeamDrivePermissionDetailsItem (Maybe Text)
+ptdpdiInheritedFrom
+  = lens _ptdpdiInheritedFrom
+      (\ s a -> s{_ptdpdiInheritedFrom = a})
+
+instance FromJSON
+         PermissionTeamDrivePermissionDetailsItem where
+        parseJSON
+          = withObject
+              "PermissionTeamDrivePermissionDetailsItem"
+              (\ o ->
+                 PermissionTeamDrivePermissionDetailsItem' <$>
+                   (o .:? "inherited") <*>
+                     (o .:? "teamDrivePermissionType")
+                     <*> (o .:? "role")
+                     <*> (o .:? "inheritedFrom"))
+
+instance ToJSON
+         PermissionTeamDrivePermissionDetailsItem where
+        toJSON PermissionTeamDrivePermissionDetailsItem'{..}
+          = object
+              (catMaybes
+                 [("inherited" .=) <$> _ptdpdiInherited,
+                  ("teamDrivePermissionType" .=) <$>
+                    _ptdpdiTeamDrivePermissionType,
+                  ("role" .=) <$> _ptdpdiRole,
+                  ("inheritedFrom" .=) <$> _ptdpdiInheritedFrom])
+
+-- | A list of generated file IDs which can be provided in create requests.
+--
+-- /See:/ 'generatedIds' smart constructor.
+data GeneratedIds = GeneratedIds'
+    { _giSpace :: !(Maybe Text)
+    , _giKind  :: !Text
+    , _giIds   :: !(Maybe [Text])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GeneratedIds' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'giSpace'
+--
+-- * 'giKind'
+--
+-- * 'giIds'
+generatedIds
+    :: GeneratedIds
+generatedIds =
+    GeneratedIds'
+    { _giSpace = Nothing
+    , _giKind = "drive#generatedIds"
+    , _giIds = Nothing
+    }
+
+-- | The type of file that can be created with these IDs.
+giSpace :: Lens' GeneratedIds (Maybe Text)
+giSpace = lens _giSpace (\ s a -> s{_giSpace = a})
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"drive#generatedIds\".
+giKind :: Lens' GeneratedIds Text
+giKind = lens _giKind (\ s a -> s{_giKind = a})
+
+-- | The IDs generated for the requesting user in the specified space.
+giIds :: Lens' GeneratedIds [Text]
+giIds
+  = lens _giIds (\ s a -> s{_giIds = a}) . _Default .
+      _Coerce
+
+instance FromJSON GeneratedIds where
+        parseJSON
+          = withObject "GeneratedIds"
+              (\ o ->
+                 GeneratedIds' <$>
+                   (o .:? "space") <*>
+                     (o .:? "kind" .!= "drive#generatedIds")
+                     <*> (o .:? "ids" .!= mempty))
+
+instance ToJSON GeneratedIds where
+        toJSON GeneratedIds'{..}
+          = object
+              (catMaybes
+                 [("space" .=) <$> _giSpace, Just ("kind" .= _giKind),
+                  ("ids" .=) <$> _giIds])
+
+-- | Links for exporting Google Docs to specific formats.
+--
+-- /See:/ 'fileExportLinks' smart constructor.
+newtype FileExportLinks = FileExportLinks'
+    { _felAddtional :: HashMap Text Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FileExportLinks' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'felAddtional'
+fileExportLinks
+    :: HashMap Text Text -- ^ 'felAddtional'
+    -> FileExportLinks
+fileExportLinks pFelAddtional_ =
+    FileExportLinks'
+    { _felAddtional = _Coerce # pFelAddtional_
+    }
+
+-- | A mapping from export format to URL
+felAddtional :: Lens' FileExportLinks (HashMap Text Text)
+felAddtional
+  = lens _felAddtional (\ s a -> s{_felAddtional = a})
+      . _Coerce
+
+instance FromJSON FileExportLinks where
+        parseJSON
+          = withObject "FileExportLinks"
+              (\ o -> FileExportLinks' <$> (parseJSONObject o))
+
+instance ToJSON FileExportLinks where
+        toJSON = toJSON . _felAddtional
+
+-- | A list of comments on a file.
+--
+-- /See:/ 'commentList' smart constructor.
+data CommentList = CommentList'
+    { _cllNextPageToken :: !(Maybe Text)
+    , _cllKind          :: !Text
+    , _cllComments      :: !(Maybe [Comment])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CommentList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cllNextPageToken'
+--
+-- * 'cllKind'
+--
+-- * 'cllComments'
+commentList
+    :: CommentList
+commentList =
+    CommentList'
+    { _cllNextPageToken = Nothing
+    , _cllKind = "drive#commentList"
+    , _cllComments = Nothing
+    }
+
+-- | The page token for the next page of comments. This will be absent if the
+-- end of the comments list has been reached. If the token is rejected for
+-- any reason, it should be discarded, and pagination should be restarted
+-- from the first page of results.
+cllNextPageToken :: Lens' CommentList (Maybe Text)
+cllNextPageToken
+  = lens _cllNextPageToken
+      (\ s a -> s{_cllNextPageToken = a})
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"drive#commentList\".
+cllKind :: Lens' CommentList Text
+cllKind = lens _cllKind (\ s a -> s{_cllKind = a})
+
+-- | The list of comments. If nextPageToken is populated, then this list may
+-- be incomplete and an additional page of results should be fetched.
+cllComments :: Lens' CommentList [Comment]
+cllComments
+  = lens _cllComments (\ s a -> s{_cllComments = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON CommentList where
+        parseJSON
+          = withObject "CommentList"
+              (\ o ->
+                 CommentList' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "drive#commentList")
+                     <*> (o .:? "comments" .!= mempty))
+
+instance ToJSON CommentList where
+        toJSON CommentList'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _cllNextPageToken,
+                  Just ("kind" .= _cllKind),
+                  ("comments" .=) <$> _cllComments])
+
+-- | A list of revisions of a file.
+--
+-- /See:/ 'revisionList' smart constructor.
+data RevisionList = RevisionList'
+    { _rllNextPageToken :: !(Maybe Text)
+    , _rllKind          :: !Text
+    , _rllRevisions     :: !(Maybe [Revision])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RevisionList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rllNextPageToken'
+--
+-- * 'rllKind'
+--
+-- * 'rllRevisions'
+revisionList
+    :: RevisionList
+revisionList =
+    RevisionList'
+    { _rllNextPageToken = Nothing
+    , _rllKind = "drive#revisionList"
+    , _rllRevisions = Nothing
+    }
+
+-- | The page token for the next page of revisions. This will be absent if
+-- the end of the revisions list has been reached. If the token is rejected
+-- for any reason, it should be discarded, and pagination should be
+-- restarted from the first page of results.
+rllNextPageToken :: Lens' RevisionList (Maybe Text)
+rllNextPageToken
+  = lens _rllNextPageToken
+      (\ s a -> s{_rllNextPageToken = a})
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"drive#revisionList\".
+rllKind :: Lens' RevisionList Text
+rllKind = lens _rllKind (\ s a -> s{_rllKind = a})
+
+-- | The list of revisions. If nextPageToken is populated, then this list may
+-- be incomplete and an additional page of results should be fetched.
+rllRevisions :: Lens' RevisionList [Revision]
+rllRevisions
+  = lens _rllRevisions (\ s a -> s{_rllRevisions = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON RevisionList where
+        parseJSON
+          = withObject "RevisionList"
+              (\ o ->
+                 RevisionList' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "drive#revisionList")
+                     <*> (o .:? "revisions" .!= mempty))
+
+instance ToJSON RevisionList where
+        toJSON RevisionList'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _rllNextPageToken,
+                  Just ("kind" .= _rllKind),
+                  ("revisions" .=) <$> _rllRevisions])
+
+-- | A list of permissions for a file.
+--
+-- /See:/ 'permissionList' smart constructor.
+data PermissionList = PermissionList'
+    { _plNextPageToken :: !(Maybe Text)
+    , _plKind          :: !Text
+    , _plPermissions   :: !(Maybe [Permission])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PermissionList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'plNextPageToken'
+--
+-- * 'plKind'
+--
+-- * 'plPermissions'
+permissionList
+    :: PermissionList
+permissionList =
+    PermissionList'
+    { _plNextPageToken = Nothing
+    , _plKind = "drive#permissionList"
+    , _plPermissions = Nothing
+    }
+
+-- | The page token for the next page of permissions. This field will be
+-- absent if the end of the permissions list has been reached. If the token
+-- is rejected for any reason, it should be discarded, and pagination
+-- should be restarted from the first page of results.
+plNextPageToken :: Lens' PermissionList (Maybe Text)
+plNextPageToken
+  = lens _plNextPageToken
+      (\ s a -> s{_plNextPageToken = a})
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"drive#permissionList\".
+plKind :: Lens' PermissionList Text
+plKind = lens _plKind (\ s a -> s{_plKind = a})
+
+-- | The list of permissions. If nextPageToken is populated, then this list
+-- may be incomplete and an additional page of results should be fetched.
+plPermissions :: Lens' PermissionList [Permission]
+plPermissions
+  = lens _plPermissions
+      (\ s a -> s{_plPermissions = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON PermissionList where
+        parseJSON
+          = withObject "PermissionList"
+              (\ o ->
+                 PermissionList' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "drive#permissionList")
+                     <*> (o .:? "permissions" .!= mempty))
+
+instance ToJSON PermissionList where
+        toJSON PermissionList'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _plNextPageToken,
+                  Just ("kind" .= _plKind),
                   ("permissions" .=) <$> _plPermissions])
diff --git a/gen/Network/Google/Drive/Types/Sum.hs b/gen/Network/Google/Drive/Types/Sum.hs
--- a/gen/Network/Google/Drive/Types/Sum.hs
+++ b/gen/Network/Google/Drive/Types/Sum.hs
@@ -16,9 +16,9 @@
 --
 module Network.Google.Drive.Types.Sum where
 
-import           Network.Google.Prelude
+import           Network.Google.Prelude hiding (Bytes)
 
--- | The source of files to list.
+-- | The source of files to list. Deprecated: use \'corpora\' instead.
 data FilesListCorpus
     = FLCDomain
       -- ^ @domain@
diff --git a/gen/Network/Google/Resource/Drive/Changes/GetStartPageToken.hs b/gen/Network/Google/Resource/Drive/Changes/GetStartPageToken.hs
--- a/gen/Network/Google/Resource/Drive/Changes/GetStartPageToken.hs
+++ b/gen/Network/Google/Resource/Drive/Changes/GetStartPageToken.hs
@@ -32,6 +32,9 @@
     , changesGetStartPageToken
     , ChangesGetStartPageToken
 
+    -- * Request Lenses
+    , cgsptTeamDriveId
+    , cgsptSupportsTeamDrives
     ) where
 
 import           Network.Google.Drive.Types
@@ -44,22 +47,47 @@
        "v3" :>
          "changes" :>
            "startPageToken" :>
-             QueryParam "alt" AltJSON :>
-               Get '[JSON] StartPageToken
+             QueryParam "teamDriveId" Text :>
+               QueryParam "supportsTeamDrives" Bool :>
+                 QueryParam "alt" AltJSON :>
+                   Get '[JSON] StartPageToken
 
 -- | Gets the starting pageToken for listing future changes.
 --
 -- /See:/ 'changesGetStartPageToken' smart constructor.
-data ChangesGetStartPageToken =
-    ChangesGetStartPageToken'
-    deriving (Eq,Show,Data,Typeable,Generic)
+data ChangesGetStartPageToken = ChangesGetStartPageToken'
+    { _cgsptTeamDriveId        :: !(Maybe Text)
+    , _cgsptSupportsTeamDrives :: !Bool
+    } deriving (Eq,Show,Data,Typeable,Generic)
 
 -- | Creates a value of 'ChangesGetStartPageToken' with the minimum fields required to make a request.
 --
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cgsptTeamDriveId'
+--
+-- * 'cgsptSupportsTeamDrives'
 changesGetStartPageToken
     :: ChangesGetStartPageToken
-changesGetStartPageToken = ChangesGetStartPageToken'
+changesGetStartPageToken =
+    ChangesGetStartPageToken'
+    { _cgsptTeamDriveId = Nothing
+    , _cgsptSupportsTeamDrives = False
+    }
 
+-- | The ID of the Team Drive for which the starting pageToken for listing
+-- future changes from that Team Drive will be returned.
+cgsptTeamDriveId :: Lens' ChangesGetStartPageToken (Maybe Text)
+cgsptTeamDriveId
+  = lens _cgsptTeamDriveId
+      (\ s a -> s{_cgsptTeamDriveId = a})
+
+-- | Whether the requesting application supports Team Drives.
+cgsptSupportsTeamDrives :: Lens' ChangesGetStartPageToken Bool
+cgsptSupportsTeamDrives
+  = lens _cgsptSupportsTeamDrives
+      (\ s a -> s{_cgsptSupportsTeamDrives = a})
+
 instance GoogleRequest ChangesGetStartPageToken where
         type Rs ChangesGetStartPageToken = StartPageToken
         type Scopes ChangesGetStartPageToken =
@@ -70,8 +98,11 @@
                "https://www.googleapis.com/auth/drive.metadata.readonly",
                "https://www.googleapis.com/auth/drive.photos.readonly",
                "https://www.googleapis.com/auth/drive.readonly"]
-        requestClient ChangesGetStartPageToken'{}
-          = go (Just AltJSON) driveService
+        requestClient ChangesGetStartPageToken'{..}
+          = go _cgsptTeamDriveId
+              (Just _cgsptSupportsTeamDrives)
+              (Just AltJSON)
+              driveService
           where go
                   = buildClient
                       (Proxy :: Proxy ChangesGetStartPageTokenResource)
diff --git a/gen/Network/Google/Resource/Drive/Changes/List.hs b/gen/Network/Google/Resource/Drive/Changes/List.hs
--- a/gen/Network/Google/Resource/Drive/Changes/List.hs
+++ b/gen/Network/Google/Resource/Drive/Changes/List.hs
@@ -20,7 +20,7 @@
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Lists changes for a user.
+-- Lists the changes for a user or Team Drive.
 --
 -- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.changes.list@.
 module Network.Google.Resource.Drive.Changes.List
@@ -33,11 +33,15 @@
     , ChangesList
 
     -- * Request Lenses
+    , clIncludeTeamDriveItems
+    , clIncludeCorpusRemovals
+    , clTeamDriveId
     , clRestrictToMyDrive
     , clSpaces
     , clPageToken
     , clPageSize
     , clIncludeRemoved
+    , clSupportsTeamDrives
     ) where
 
 import           Network.Google.Drive.Types
@@ -50,27 +54,41 @@
        "v3" :>
          "changes" :>
            QueryParam "pageToken" Text :>
-             QueryParam "restrictToMyDrive" Bool :>
-               QueryParam "spaces" Text :>
-                 QueryParam "pageSize" (Textual Int32) :>
-                   QueryParam "includeRemoved" Bool :>
-                     QueryParam "alt" AltJSON :> Get '[JSON] ChangeList
+             QueryParam "includeTeamDriveItems" Bool :>
+               QueryParam "includeCorpusRemovals" Bool :>
+                 QueryParam "teamDriveId" Text :>
+                   QueryParam "restrictToMyDrive" Bool :>
+                     QueryParam "spaces" Text :>
+                       QueryParam "pageSize" (Textual Int32) :>
+                         QueryParam "includeRemoved" Bool :>
+                           QueryParam "supportsTeamDrives" Bool :>
+                             QueryParam "alt" AltJSON :> Get '[JSON] ChangeList
 
--- | Lists changes for a user.
+-- | Lists the changes for a user or Team Drive.
 --
 -- /See:/ 'changesList' smart constructor.
 data ChangesList = ChangesList'
-    { _clRestrictToMyDrive :: !Bool
-    , _clSpaces            :: !Text
-    , _clPageToken         :: !Text
-    , _clPageSize          :: !(Textual Int32)
-    , _clIncludeRemoved    :: !Bool
+    { _clIncludeTeamDriveItems :: !Bool
+    , _clIncludeCorpusRemovals :: !Bool
+    , _clTeamDriveId           :: !(Maybe Text)
+    , _clRestrictToMyDrive     :: !Bool
+    , _clSpaces                :: !Text
+    , _clPageToken             :: !Text
+    , _clPageSize              :: !(Textual Int32)
+    , _clIncludeRemoved        :: !Bool
+    , _clSupportsTeamDrives    :: !Bool
     } deriving (Eq,Show,Data,Typeable,Generic)
 
 -- | Creates a value of 'ChangesList' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
+-- * 'clIncludeTeamDriveItems'
+--
+-- * 'clIncludeCorpusRemovals'
+--
+-- * 'clTeamDriveId'
+--
 -- * 'clRestrictToMyDrive'
 --
 -- * 'clSpaces'
@@ -80,18 +98,47 @@
 -- * 'clPageSize'
 --
 -- * 'clIncludeRemoved'
+--
+-- * 'clSupportsTeamDrives'
 changesList
     :: Text -- ^ 'clPageToken'
     -> ChangesList
 changesList pClPageToken_ =
     ChangesList'
-    { _clRestrictToMyDrive = False
+    { _clIncludeTeamDriveItems = False
+    , _clIncludeCorpusRemovals = False
+    , _clTeamDriveId = Nothing
+    , _clRestrictToMyDrive = False
     , _clSpaces = "drive"
     , _clPageToken = pClPageToken_
     , _clPageSize = 100
     , _clIncludeRemoved = True
+    , _clSupportsTeamDrives = False
     }
 
+-- | Whether Team Drive files or changes should be included in results.
+clIncludeTeamDriveItems :: Lens' ChangesList Bool
+clIncludeTeamDriveItems
+  = lens _clIncludeTeamDriveItems
+      (\ s a -> s{_clIncludeTeamDriveItems = a})
+
+-- | Whether changes should include the file resource if the file is still
+-- accessible by the user at the time of the request, even when a file was
+-- removed from the list of changes and there will be no further change
+-- entries for this file.
+clIncludeCorpusRemovals :: Lens' ChangesList Bool
+clIncludeCorpusRemovals
+  = lens _clIncludeCorpusRemovals
+      (\ s a -> s{_clIncludeCorpusRemovals = a})
+
+-- | The Team Drive from which changes will be returned. If specified the
+-- change IDs will be reflective of the Team Drive; use the combined Team
+-- Drive ID and change ID as an identifier.
+clTeamDriveId :: Lens' ChangesList (Maybe Text)
+clTeamDriveId
+  = lens _clTeamDriveId
+      (\ s a -> s{_clTeamDriveId = a})
+
 -- | Whether to restrict the results to changes inside the My Drive
 -- hierarchy. This omits changes to files such as those in the Application
 -- Data folder or shared files which have not been added to My Drive.
@@ -118,13 +165,19 @@
   = lens _clPageSize (\ s a -> s{_clPageSize = a}) .
       _Coerce
 
--- | Whether to include changes indicating that items have left the view of
--- the changes list, for example by deletion or lost access.
+-- | Whether to include changes indicating that items have been removed from
+-- the list of changes, for example by deletion or loss of access.
 clIncludeRemoved :: Lens' ChangesList Bool
 clIncludeRemoved
   = lens _clIncludeRemoved
       (\ s a -> s{_clIncludeRemoved = a})
 
+-- | Whether the requesting application supports Team Drives.
+clSupportsTeamDrives :: Lens' ChangesList Bool
+clSupportsTeamDrives
+  = lens _clSupportsTeamDrives
+      (\ s a -> s{_clSupportsTeamDrives = a})
+
 instance GoogleRequest ChangesList where
         type Rs ChangesList = ChangeList
         type Scopes ChangesList =
@@ -136,10 +189,15 @@
                "https://www.googleapis.com/auth/drive.photos.readonly",
                "https://www.googleapis.com/auth/drive.readonly"]
         requestClient ChangesList'{..}
-          = go (Just _clPageToken) (Just _clRestrictToMyDrive)
+          = go (Just _clPageToken)
+              (Just _clIncludeTeamDriveItems)
+              (Just _clIncludeCorpusRemovals)
+              _clTeamDriveId
+              (Just _clRestrictToMyDrive)
               (Just _clSpaces)
               (Just _clPageSize)
               (Just _clIncludeRemoved)
+              (Just _clSupportsTeamDrives)
               (Just AltJSON)
               driveService
           where go
diff --git a/gen/Network/Google/Resource/Drive/Changes/Watch.hs b/gen/Network/Google/Resource/Drive/Changes/Watch.hs
--- a/gen/Network/Google/Resource/Drive/Changes/Watch.hs
+++ b/gen/Network/Google/Resource/Drive/Changes/Watch.hs
@@ -33,12 +33,16 @@
     , ChangesWatch
 
     -- * Request Lenses
+    , cwIncludeTeamDriveItems
     , cwPayload
+    , cwIncludeCorpusRemovals
+    , cwTeamDriveId
     , cwRestrictToMyDrive
     , cwSpaces
     , cwPageToken
     , cwPageSize
     , cwIncludeRemoved
+    , cwSupportsTeamDrives
     ) where
 
 import           Network.Google.Drive.Types
@@ -52,31 +56,45 @@
          "changes" :>
            "watch" :>
              QueryParam "pageToken" Text :>
-               QueryParam "restrictToMyDrive" Bool :>
-                 QueryParam "spaces" Text :>
-                   QueryParam "pageSize" (Textual Int32) :>
-                     QueryParam "includeRemoved" Bool :>
-                       QueryParam "alt" AltJSON :>
-                         ReqBody '[JSON] Channel :> Post '[JSON] Channel
+               QueryParam "includeTeamDriveItems" Bool :>
+                 QueryParam "includeCorpusRemovals" Bool :>
+                   QueryParam "teamDriveId" Text :>
+                     QueryParam "restrictToMyDrive" Bool :>
+                       QueryParam "spaces" Text :>
+                         QueryParam "pageSize" (Textual Int32) :>
+                           QueryParam "includeRemoved" Bool :>
+                             QueryParam "supportsTeamDrives" Bool :>
+                               QueryParam "alt" AltJSON :>
+                                 ReqBody '[JSON] Channel :> Post '[JSON] Channel
 
 -- | Subscribes to changes for a user.
 --
 -- /See:/ 'changesWatch' smart constructor.
 data ChangesWatch = ChangesWatch'
-    { _cwPayload           :: !Channel
-    , _cwRestrictToMyDrive :: !Bool
-    , _cwSpaces            :: !Text
-    , _cwPageToken         :: !Text
-    , _cwPageSize          :: !(Textual Int32)
-    , _cwIncludeRemoved    :: !Bool
+    { _cwIncludeTeamDriveItems :: !Bool
+    , _cwPayload               :: !Channel
+    , _cwIncludeCorpusRemovals :: !Bool
+    , _cwTeamDriveId           :: !(Maybe Text)
+    , _cwRestrictToMyDrive     :: !Bool
+    , _cwSpaces                :: !Text
+    , _cwPageToken             :: !Text
+    , _cwPageSize              :: !(Textual Int32)
+    , _cwIncludeRemoved        :: !Bool
+    , _cwSupportsTeamDrives    :: !Bool
     } deriving (Eq,Show,Data,Typeable,Generic)
 
 -- | Creates a value of 'ChangesWatch' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
+-- * 'cwIncludeTeamDriveItems'
+--
 -- * 'cwPayload'
 --
+-- * 'cwIncludeCorpusRemovals'
+--
+-- * 'cwTeamDriveId'
+--
 -- * 'cwRestrictToMyDrive'
 --
 -- * 'cwSpaces'
@@ -86,25 +104,54 @@
 -- * 'cwPageSize'
 --
 -- * 'cwIncludeRemoved'
+--
+-- * 'cwSupportsTeamDrives'
 changesWatch
     :: Channel -- ^ 'cwPayload'
     -> Text -- ^ 'cwPageToken'
     -> ChangesWatch
 changesWatch pCwPayload_ pCwPageToken_ =
     ChangesWatch'
-    { _cwPayload = pCwPayload_
+    { _cwIncludeTeamDriveItems = False
+    , _cwPayload = pCwPayload_
+    , _cwIncludeCorpusRemovals = False
+    , _cwTeamDriveId = Nothing
     , _cwRestrictToMyDrive = False
     , _cwSpaces = "drive"
     , _cwPageToken = pCwPageToken_
     , _cwPageSize = 100
     , _cwIncludeRemoved = True
+    , _cwSupportsTeamDrives = False
     }
 
+-- | Whether Team Drive files or changes should be included in results.
+cwIncludeTeamDriveItems :: Lens' ChangesWatch Bool
+cwIncludeTeamDriveItems
+  = lens _cwIncludeTeamDriveItems
+      (\ s a -> s{_cwIncludeTeamDriveItems = a})
+
 -- | Multipart request metadata.
 cwPayload :: Lens' ChangesWatch Channel
 cwPayload
   = lens _cwPayload (\ s a -> s{_cwPayload = a})
 
+-- | Whether changes should include the file resource if the file is still
+-- accessible by the user at the time of the request, even when a file was
+-- removed from the list of changes and there will be no further change
+-- entries for this file.
+cwIncludeCorpusRemovals :: Lens' ChangesWatch Bool
+cwIncludeCorpusRemovals
+  = lens _cwIncludeCorpusRemovals
+      (\ s a -> s{_cwIncludeCorpusRemovals = a})
+
+-- | The Team Drive from which changes will be returned. If specified the
+-- change IDs will be reflective of the Team Drive; use the combined Team
+-- Drive ID and change ID as an identifier.
+cwTeamDriveId :: Lens' ChangesWatch (Maybe Text)
+cwTeamDriveId
+  = lens _cwTeamDriveId
+      (\ s a -> s{_cwTeamDriveId = a})
+
 -- | Whether to restrict the results to changes inside the My Drive
 -- hierarchy. This omits changes to files such as those in the Application
 -- Data folder or shared files which have not been added to My Drive.
@@ -131,13 +178,19 @@
   = lens _cwPageSize (\ s a -> s{_cwPageSize = a}) .
       _Coerce
 
--- | Whether to include changes indicating that items have left the view of
--- the changes list, for example by deletion or lost access.
+-- | Whether to include changes indicating that items have been removed from
+-- the list of changes, for example by deletion or loss of access.
 cwIncludeRemoved :: Lens' ChangesWatch Bool
 cwIncludeRemoved
   = lens _cwIncludeRemoved
       (\ s a -> s{_cwIncludeRemoved = a})
 
+-- | Whether the requesting application supports Team Drives.
+cwSupportsTeamDrives :: Lens' ChangesWatch Bool
+cwSupportsTeamDrives
+  = lens _cwSupportsTeamDrives
+      (\ s a -> s{_cwSupportsTeamDrives = a})
+
 instance GoogleRequest ChangesWatch where
         type Rs ChangesWatch = Channel
         type Scopes ChangesWatch =
@@ -149,10 +202,15 @@
                "https://www.googleapis.com/auth/drive.photos.readonly",
                "https://www.googleapis.com/auth/drive.readonly"]
         requestClient ChangesWatch'{..}
-          = go (Just _cwPageToken) (Just _cwRestrictToMyDrive)
+          = go (Just _cwPageToken)
+              (Just _cwIncludeTeamDriveItems)
+              (Just _cwIncludeCorpusRemovals)
+              _cwTeamDriveId
+              (Just _cwRestrictToMyDrive)
               (Just _cwSpaces)
               (Just _cwPageSize)
               (Just _cwIncludeRemoved)
+              (Just _cwSupportsTeamDrives)
               (Just AltJSON)
               _cwPayload
               driveService
diff --git a/gen/Network/Google/Resource/Drive/Files/Copy.hs b/gen/Network/Google/Resource/Drive/Files/Copy.hs
--- a/gen/Network/Google/Resource/Drive/Files/Copy.hs
+++ b/gen/Network/Google/Resource/Drive/Files/Copy.hs
@@ -39,6 +39,7 @@
     , fKeepRevisionForever
     , fIgnoreDefaultVisibility
     , fFileId
+    , fSupportsTeamDrives
     ) where
 
 import           Network.Google.Drive.Types
@@ -55,8 +56,9 @@
                QueryParam "ocrLanguage" Text :>
                  QueryParam "keepRevisionForever" Bool :>
                    QueryParam "ignoreDefaultVisibility" Bool :>
-                     QueryParam "alt" AltJSON :>
-                       ReqBody '[JSON] File :> Post '[JSON] File
+                     QueryParam "supportsTeamDrives" Bool :>
+                       QueryParam "alt" AltJSON :>
+                         ReqBody '[JSON] File :> Post '[JSON] File
 
 -- | Creates a copy of a file and applies any requested updates with patch
 -- semantics.
@@ -68,6 +70,7 @@
     , _fKeepRevisionForever     :: !Bool
     , _fIgnoreDefaultVisibility :: !Bool
     , _fFileId                  :: !Text
+    , _fSupportsTeamDrives      :: !Bool
     } deriving (Eq,Show,Data,Typeable,Generic)
 
 -- | Creates a value of 'FilesCopy' with the minimum fields required to make a request.
@@ -83,6 +86,8 @@
 -- * 'fIgnoreDefaultVisibility'
 --
 -- * 'fFileId'
+--
+-- * 'fSupportsTeamDrives'
 filesCopy
     :: File -- ^ 'fPayload'
     -> Text -- ^ 'fFileId'
@@ -94,6 +99,7 @@
     , _fKeepRevisionForever = False
     , _fIgnoreDefaultVisibility = False
     , _fFileId = pFFileId_
+    , _fSupportsTeamDrives = False
     }
 
 -- | Multipart request metadata.
@@ -126,6 +132,12 @@
 fFileId :: Lens' FilesCopy Text
 fFileId = lens _fFileId (\ s a -> s{_fFileId = a})
 
+-- | Whether the requesting application supports Team Drives.
+fSupportsTeamDrives :: Lens' FilesCopy Bool
+fSupportsTeamDrives
+  = lens _fSupportsTeamDrives
+      (\ s a -> s{_fSupportsTeamDrives = a})
+
 instance GoogleRequest FilesCopy where
         type Rs FilesCopy = File
         type Scopes FilesCopy =
@@ -137,6 +149,7 @@
           = go _fFileId _fOCRLanguage
               (Just _fKeepRevisionForever)
               (Just _fIgnoreDefaultVisibility)
+              (Just _fSupportsTeamDrives)
               (Just AltJSON)
               _fPayload
               driveService
diff --git a/gen/Network/Google/Resource/Drive/Files/Create.hs b/gen/Network/Google/Resource/Drive/Files/Create.hs
--- a/gen/Network/Google/Resource/Drive/Files/Create.hs
+++ b/gen/Network/Google/Resource/Drive/Files/Create.hs
@@ -38,6 +38,7 @@
     , fcOCRLanguage
     , fcKeepRevisionForever
     , fcIgnoreDefaultVisibility
+    , fcSupportsTeamDrives
     ) where
 
 import           Network.Google.Drive.Types
@@ -53,8 +54,9 @@
              QueryParam "ocrLanguage" Text :>
                QueryParam "keepRevisionForever" Bool :>
                  QueryParam "ignoreDefaultVisibility" Bool :>
-                   QueryParam "alt" AltJSON :>
-                     ReqBody '[JSON] File :> Post '[JSON] File
+                   QueryParam "supportsTeamDrives" Bool :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON] File :> Post '[JSON] File
        :<|>
        "upload" :>
          "drive" :>
@@ -64,9 +66,10 @@
                  QueryParam "ocrLanguage" Text :>
                    QueryParam "keepRevisionForever" Bool :>
                      QueryParam "ignoreDefaultVisibility" Bool :>
-                       QueryParam "alt" AltJSON :>
-                         QueryParam "uploadType" Multipart :>
-                           MultipartRelated '[JSON] File :> Post '[JSON] File
+                       QueryParam "supportsTeamDrives" Bool :>
+                         QueryParam "alt" AltJSON :>
+                           QueryParam "uploadType" Multipart :>
+                             MultipartRelated '[JSON] File :> Post '[JSON] File
 
 -- | Creates a new file.
 --
@@ -77,6 +80,7 @@
     , _fcOCRLanguage               :: !(Maybe Text)
     , _fcKeepRevisionForever       :: !Bool
     , _fcIgnoreDefaultVisibility   :: !Bool
+    , _fcSupportsTeamDrives        :: !Bool
     } deriving (Eq,Show,Data,Typeable,Generic)
 
 -- | Creates a value of 'FilesCreate' with the minimum fields required to make a request.
@@ -92,6 +96,8 @@
 -- * 'fcKeepRevisionForever'
 --
 -- * 'fcIgnoreDefaultVisibility'
+--
+-- * 'fcSupportsTeamDrives'
 filesCreate
     :: File -- ^ 'fcPayload'
     -> FilesCreate
@@ -102,6 +108,7 @@
     , _fcOCRLanguage = Nothing
     , _fcKeepRevisionForever = False
     , _fcIgnoreDefaultVisibility = False
+    , _fcSupportsTeamDrives = False
     }
 
 -- | Multipart request metadata.
@@ -138,6 +145,12 @@
   = lens _fcIgnoreDefaultVisibility
       (\ s a -> s{_fcIgnoreDefaultVisibility = a})
 
+-- | Whether the requesting application supports Team Drives.
+fcSupportsTeamDrives :: Lens' FilesCreate Bool
+fcSupportsTeamDrives
+  = lens _fcSupportsTeamDrives
+      (\ s a -> s{_fcSupportsTeamDrives = a})
+
 instance GoogleRequest FilesCreate where
         type Rs FilesCreate = File
         type Scopes FilesCreate =
@@ -149,6 +162,7 @@
               _fcOCRLanguage
               (Just _fcKeepRevisionForever)
               (Just _fcIgnoreDefaultVisibility)
+              (Just _fcSupportsTeamDrives)
               (Just AltJSON)
               _fcPayload
               driveService
@@ -166,6 +180,7 @@
               _fcOCRLanguage
               (Just _fcKeepRevisionForever)
               (Just _fcIgnoreDefaultVisibility)
+              (Just _fcSupportsTeamDrives)
               (Just AltJSON)
               (Just Multipart)
               _fcPayload
diff --git a/gen/Network/Google/Resource/Drive/Files/Delete.hs b/gen/Network/Google/Resource/Drive/Files/Delete.hs
--- a/gen/Network/Google/Resource/Drive/Files/Delete.hs
+++ b/gen/Network/Google/Resource/Drive/Files/Delete.hs
@@ -21,8 +21,9 @@
 -- Portability : non-portable (GHC extensions)
 --
 -- Permanently deletes a file owned by the user without moving it to the
--- trash. If the target is a folder, all descendants owned by the user are
--- also deleted.
+-- trash. If the file belongs to a Team Drive the user must be an organizer
+-- on the parent. If the target is a folder, all descendants owned by the
+-- user are also deleted.
 --
 -- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.files.delete@.
 module Network.Google.Resource.Drive.Files.Delete
@@ -36,6 +37,7 @@
 
     -- * Request Lenses
     , fdFileId
+    , fdSupportsTeamDrives
     ) where
 
 import           Network.Google.Drive.Types
@@ -48,15 +50,18 @@
        "v3" :>
          "files" :>
            Capture "fileId" Text :>
-             QueryParam "alt" AltJSON :> Delete '[JSON] ()
+             QueryParam "supportsTeamDrives" Bool :>
+               QueryParam "alt" AltJSON :> Delete '[JSON] ()
 
 -- | Permanently deletes a file owned by the user without moving it to the
--- trash. If the target is a folder, all descendants owned by the user are
--- also deleted.
+-- trash. If the file belongs to a Team Drive the user must be an organizer
+-- on the parent. If the target is a folder, all descendants owned by the
+-- user are also deleted.
 --
 -- /See:/ 'filesDelete' smart constructor.
-newtype FilesDelete = FilesDelete'
-    { _fdFileId :: Text
+data FilesDelete = FilesDelete'
+    { _fdFileId             :: !Text
+    , _fdSupportsTeamDrives :: !Bool
     } deriving (Eq,Show,Data,Typeable,Generic)
 
 -- | Creates a value of 'FilesDelete' with the minimum fields required to make a request.
@@ -64,18 +69,27 @@
 -- Use one of the following lenses to modify other fields as desired:
 --
 -- * 'fdFileId'
+--
+-- * 'fdSupportsTeamDrives'
 filesDelete
     :: Text -- ^ 'fdFileId'
     -> FilesDelete
 filesDelete pFdFileId_ =
     FilesDelete'
     { _fdFileId = pFdFileId_
+    , _fdSupportsTeamDrives = False
     }
 
 -- | The ID of the file.
 fdFileId :: Lens' FilesDelete Text
 fdFileId = lens _fdFileId (\ s a -> s{_fdFileId = a})
 
+-- | Whether the requesting application supports Team Drives.
+fdSupportsTeamDrives :: Lens' FilesDelete Bool
+fdSupportsTeamDrives
+  = lens _fdSupportsTeamDrives
+      (\ s a -> s{_fdSupportsTeamDrives = a})
+
 instance GoogleRequest FilesDelete where
         type Rs FilesDelete = ()
         type Scopes FilesDelete =
@@ -83,7 +97,9 @@
                "https://www.googleapis.com/auth/drive.appdata",
                "https://www.googleapis.com/auth/drive.file"]
         requestClient FilesDelete'{..}
-          = go _fdFileId (Just AltJSON) driveService
+          = go _fdFileId (Just _fdSupportsTeamDrives)
+              (Just AltJSON)
+              driveService
           where go
                   = buildClient (Proxy :: Proxy FilesDeleteResource)
                       mempty
diff --git a/gen/Network/Google/Resource/Drive/Files/Export.hs b/gen/Network/Google/Resource/Drive/Files/Export.hs
--- a/gen/Network/Google/Resource/Drive/Files/Export.hs
+++ b/gen/Network/Google/Resource/Drive/Files/Export.hs
@@ -21,7 +21,7 @@
 -- Portability : non-portable (GHC extensions)
 --
 -- Exports a Google Doc to the requested MIME type and returns the exported
--- content.
+-- content. Please note that the exported content is limited to 10MB.
 --
 -- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.files.export@.
 module Network.Google.Resource.Drive.Files.Export
@@ -62,7 +62,7 @@
                      Get '[OctetStream] Stream
 
 -- | Exports a Google Doc to the requested MIME type and returns the exported
--- content.
+-- content. Please note that the exported content is limited to 10MB.
 --
 -- /See:/ 'filesExport' smart constructor.
 data FilesExport = FilesExport'
diff --git a/gen/Network/Google/Resource/Drive/Files/Get.hs b/gen/Network/Google/Resource/Drive/Files/Get.hs
--- a/gen/Network/Google/Resource/Drive/Files/Get.hs
+++ b/gen/Network/Google/Resource/Drive/Files/Get.hs
@@ -35,6 +35,7 @@
     -- * Request Lenses
     , fgAcknowledgeAbuse
     , fgFileId
+    , fgSupportsTeamDrives
     ) where
 
 import           Network.Google.Drive.Types
@@ -48,22 +49,25 @@
          "files" :>
            Capture "fileId" Text :>
              QueryParam "acknowledgeAbuse" Bool :>
-               QueryParam "alt" AltJSON :> Get '[JSON] File
+               QueryParam "supportsTeamDrives" Bool :>
+                 QueryParam "alt" AltJSON :> Get '[JSON] File
        :<|>
        "drive" :>
          "v3" :>
            "files" :>
              Capture "fileId" Text :>
                QueryParam "acknowledgeAbuse" Bool :>
-                 QueryParam "alt" AltMedia :>
-                   Get '[OctetStream] Stream
+                 QueryParam "supportsTeamDrives" Bool :>
+                   QueryParam "alt" AltMedia :>
+                     Get '[OctetStream] Stream
 
 -- | Gets a file\'s metadata or content by ID.
 --
 -- /See:/ 'filesGet' smart constructor.
 data FilesGet = FilesGet'
-    { _fgAcknowledgeAbuse :: !Bool
-    , _fgFileId           :: !Text
+    { _fgAcknowledgeAbuse   :: !Bool
+    , _fgFileId             :: !Text
+    , _fgSupportsTeamDrives :: !Bool
     } deriving (Eq,Show,Data,Typeable,Generic)
 
 -- | Creates a value of 'FilesGet' with the minimum fields required to make a request.
@@ -73,6 +77,8 @@
 -- * 'fgAcknowledgeAbuse'
 --
 -- * 'fgFileId'
+--
+-- * 'fgSupportsTeamDrives'
 filesGet
     :: Text -- ^ 'fgFileId'
     -> FilesGet
@@ -80,6 +86,7 @@
     FilesGet'
     { _fgAcknowledgeAbuse = False
     , _fgFileId = pFgFileId_
+    , _fgSupportsTeamDrives = False
     }
 
 -- | Whether the user is acknowledging the risk of downloading known malware
@@ -93,6 +100,12 @@
 fgFileId :: Lens' FilesGet Text
 fgFileId = lens _fgFileId (\ s a -> s{_fgFileId = a})
 
+-- | Whether the requesting application supports Team Drives.
+fgSupportsTeamDrives :: Lens' FilesGet Bool
+fgSupportsTeamDrives
+  = lens _fgSupportsTeamDrives
+      (\ s a -> s{_fgSupportsTeamDrives = a})
+
 instance GoogleRequest FilesGet where
         type Rs FilesGet = File
         type Scopes FilesGet =
@@ -105,6 +118,7 @@
                "https://www.googleapis.com/auth/drive.readonly"]
         requestClient FilesGet'{..}
           = go _fgFileId (Just _fgAcknowledgeAbuse)
+              (Just _fgSupportsTeamDrives)
               (Just AltJSON)
               driveService
           where go :<|> _
@@ -117,6 +131,7 @@
              Scopes FilesGet
         requestClient (MediaDownload FilesGet'{..})
           = go _fgFileId (Just _fgAcknowledgeAbuse)
+              (Just _fgSupportsTeamDrives)
               (Just AltMedia)
               driveService
           where _ :<|> go
diff --git a/gen/Network/Google/Resource/Drive/Files/List.hs b/gen/Network/Google/Resource/Drive/Files/List.hs
--- a/gen/Network/Google/Resource/Drive/Files/List.hs
+++ b/gen/Network/Google/Resource/Drive/Files/List.hs
@@ -33,12 +33,16 @@
     , FilesList
 
     -- * Request Lenses
+    , flCorpora
     , flOrderBy
+    , flIncludeTeamDriveItems
     , flQ
+    , flTeamDriveId
     , flSpaces
     , flCorpus
     , flPageToken
     , flPageSize
+    , flSupportsTeamDrives
     ) where
 
 import           Network.Google.Drive.Types
@@ -50,34 +54,48 @@
      "drive" :>
        "v3" :>
          "files" :>
-           QueryParam "orderBy" Text :>
-             QueryParam "q" Text :>
-               QueryParam "spaces" Text :>
-                 QueryParam "corpus" FilesListCorpus :>
-                   QueryParam "pageToken" Text :>
-                     QueryParam "pageSize" (Textual Int32) :>
-                       QueryParam "alt" AltJSON :> Get '[JSON] FileList
+           QueryParam "corpora" Text :>
+             QueryParam "orderBy" Text :>
+               QueryParam "includeTeamDriveItems" Bool :>
+                 QueryParam "q" Text :>
+                   QueryParam "teamDriveId" Text :>
+                     QueryParam "spaces" Text :>
+                       QueryParam "corpus" FilesListCorpus :>
+                         QueryParam "pageToken" Text :>
+                           QueryParam "pageSize" (Textual Int32) :>
+                             QueryParam "supportsTeamDrives" Bool :>
+                               QueryParam "alt" AltJSON :> Get '[JSON] FileList
 
 -- | Lists or searches files.
 --
 -- /See:/ 'filesList' smart constructor.
 data FilesList = FilesList'
-    { _flOrderBy   :: !(Maybe Text)
-    , _flQ         :: !(Maybe Text)
-    , _flSpaces    :: !Text
-    , _flCorpus    :: !FilesListCorpus
-    , _flPageToken :: !(Maybe Text)
-    , _flPageSize  :: !(Textual Int32)
+    { _flCorpora               :: !(Maybe Text)
+    , _flOrderBy               :: !(Maybe Text)
+    , _flIncludeTeamDriveItems :: !Bool
+    , _flQ                     :: !(Maybe Text)
+    , _flTeamDriveId           :: !(Maybe Text)
+    , _flSpaces                :: !Text
+    , _flCorpus                :: !(Maybe FilesListCorpus)
+    , _flPageToken             :: !(Maybe Text)
+    , _flPageSize              :: !(Textual Int32)
+    , _flSupportsTeamDrives    :: !Bool
     } deriving (Eq,Show,Data,Typeable,Generic)
 
 -- | Creates a value of 'FilesList' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
+-- * 'flCorpora'
+--
 -- * 'flOrderBy'
 --
+-- * 'flIncludeTeamDriveItems'
+--
 -- * 'flQ'
 --
+-- * 'flTeamDriveId'
+--
 -- * 'flSpaces'
 --
 -- * 'flCorpus'
@@ -85,23 +103,38 @@
 -- * 'flPageToken'
 --
 -- * 'flPageSize'
+--
+-- * 'flSupportsTeamDrives'
 filesList
     :: FilesList
 filesList =
     FilesList'
-    { _flOrderBy = Nothing
+    { _flCorpora = Nothing
+    , _flOrderBy = Nothing
+    , _flIncludeTeamDriveItems = False
     , _flQ = Nothing
+    , _flTeamDriveId = Nothing
     , _flSpaces = "drive"
-    , _flCorpus = FLCUser
+    , _flCorpus = Nothing
     , _flPageToken = Nothing
     , _flPageSize = 100
+    , _flSupportsTeamDrives = False
     }
 
+-- | Comma-separated list of bodies of items (files\/documents) to which the
+-- query applies. Supported bodies are \'user\', \'domain\', \'teamDrive\'
+-- and \'allTeamDrives\'. \'allTeamDrives\' must be combined with \'user\';
+-- all other values must be used in isolation. Prefer \'user\' or
+-- \'teamDrive\' to \'allTeamDrives\' for efficiency.
+flCorpora :: Lens' FilesList (Maybe Text)
+flCorpora
+  = lens _flCorpora (\ s a -> s{_flCorpora = a})
+
 -- | A comma-separated list of sort keys. Valid keys are \'createdTime\',
 -- \'folder\', \'modifiedByMeTime\', \'modifiedTime\', \'name\',
--- \'quotaBytesUsed\', \'recency\', \'sharedWithMeTime\', \'starred\', and
--- \'viewedByMeTime\'. Each key sorts ascending by default, but may be
--- reversed with the \'desc\' modifier. Example usage:
+-- \'name_natural\', \'quotaBytesUsed\', \'recency\', \'sharedWithMeTime\',
+-- \'starred\', and \'viewedByMeTime\'. Each key sorts ascending by
+-- default, but may be reversed with the \'desc\' modifier. Example usage:
 -- ?orderBy=folder,modifiedTime desc,name. Please note that there is a
 -- current limitation for users with approximately one million files in
 -- which the requested sort order is ignored.
@@ -109,18 +142,30 @@
 flOrderBy
   = lens _flOrderBy (\ s a -> s{_flOrderBy = a})
 
+-- | Whether Team Drive items should be included in results.
+flIncludeTeamDriveItems :: Lens' FilesList Bool
+flIncludeTeamDriveItems
+  = lens _flIncludeTeamDriveItems
+      (\ s a -> s{_flIncludeTeamDriveItems = a})
+
 -- | A query for filtering the file results. See the \"Search for Files\"
 -- guide for supported syntax.
 flQ :: Lens' FilesList (Maybe Text)
 flQ = lens _flQ (\ s a -> s{_flQ = a})
 
+-- | ID of Team Drive to search.
+flTeamDriveId :: Lens' FilesList (Maybe Text)
+flTeamDriveId
+  = lens _flTeamDriveId
+      (\ s a -> s{_flTeamDriveId = a})
+
 -- | A comma-separated list of spaces to query within the corpus. Supported
 -- values are \'drive\', \'appDataFolder\' and \'photos\'.
 flSpaces :: Lens' FilesList Text
 flSpaces = lens _flSpaces (\ s a -> s{_flSpaces = a})
 
--- | The source of files to list.
-flCorpus :: Lens' FilesList FilesListCorpus
+-- | The source of files to list. Deprecated: use \'corpora\' instead.
+flCorpus :: Lens' FilesList (Maybe FilesListCorpus)
 flCorpus = lens _flCorpus (\ s a -> s{_flCorpus = a})
 
 -- | The token for continuing a previous list request on the next page. This
@@ -130,12 +175,20 @@
 flPageToken
   = lens _flPageToken (\ s a -> s{_flPageToken = a})
 
--- | The maximum number of files to return per page.
+-- | The maximum number of files to return per page. Partial or empty result
+-- pages are possible even before the end of the files list has been
+-- reached.
 flPageSize :: Lens' FilesList Int32
 flPageSize
   = lens _flPageSize (\ s a -> s{_flPageSize = a}) .
       _Coerce
 
+-- | Whether the requesting application supports Team Drives.
+flSupportsTeamDrives :: Lens' FilesList Bool
+flSupportsTeamDrives
+  = lens _flSupportsTeamDrives
+      (\ s a -> s{_flSupportsTeamDrives = a})
+
 instance GoogleRequest FilesList where
         type Rs FilesList = FileList
         type Scopes FilesList =
@@ -147,10 +200,15 @@
                "https://www.googleapis.com/auth/drive.photos.readonly",
                "https://www.googleapis.com/auth/drive.readonly"]
         requestClient FilesList'{..}
-          = go _flOrderBy _flQ (Just _flSpaces)
-              (Just _flCorpus)
+          = go _flCorpora _flOrderBy
+              (Just _flIncludeTeamDriveItems)
+              _flQ
+              _flTeamDriveId
+              (Just _flSpaces)
+              _flCorpus
               _flPageToken
               (Just _flPageSize)
+              (Just _flSupportsTeamDrives)
               (Just AltJSON)
               driveService
           where go
diff --git a/gen/Network/Google/Resource/Drive/Files/Update.hs b/gen/Network/Google/Resource/Drive/Files/Update.hs
--- a/gen/Network/Google/Resource/Drive/Files/Update.hs
+++ b/gen/Network/Google/Resource/Drive/Files/Update.hs
@@ -40,6 +40,7 @@
     , fuKeepRevisionForever
     , fuFileId
     , fuAddParents
+    , fuSupportsTeamDrives
     ) where
 
 import           Network.Google.Drive.Types
@@ -57,8 +58,9 @@
                  QueryParam "ocrLanguage" Text :>
                    QueryParam "keepRevisionForever" Bool :>
                      QueryParam "addParents" Text :>
-                       QueryParam "alt" AltJSON :>
-                         ReqBody '[JSON] File :> Patch '[JSON] File
+                       QueryParam "supportsTeamDrives" Bool :>
+                         QueryParam "alt" AltJSON :>
+                           ReqBody '[JSON] File :> Patch '[JSON] File
        :<|>
        "upload" :>
          "drive" :>
@@ -70,10 +72,11 @@
                      QueryParam "ocrLanguage" Text :>
                        QueryParam "keepRevisionForever" Bool :>
                          QueryParam "addParents" Text :>
-                           QueryParam "alt" AltJSON :>
-                             QueryParam "uploadType" Multipart :>
-                               MultipartRelated '[JSON] File :>
-                                 Patch '[JSON] File
+                           QueryParam "supportsTeamDrives" Bool :>
+                             QueryParam "alt" AltJSON :>
+                               QueryParam "uploadType" Multipart :>
+                                 MultipartRelated '[JSON] File :>
+                                   Patch '[JSON] File
 
 -- | Updates a file\'s metadata and\/or content with patch semantics.
 --
@@ -86,6 +89,7 @@
     , _fuKeepRevisionForever       :: !Bool
     , _fuFileId                    :: !Text
     , _fuAddParents                :: !(Maybe Text)
+    , _fuSupportsTeamDrives        :: !Bool
     } deriving (Eq,Show,Data,Typeable,Generic)
 
 -- | Creates a value of 'FilesUpdate' with the minimum fields required to make a request.
@@ -105,6 +109,8 @@
 -- * 'fuFileId'
 --
 -- * 'fuAddParents'
+--
+-- * 'fuSupportsTeamDrives'
 filesUpdate
     :: File -- ^ 'fuPayload'
     -> Text -- ^ 'fuFileId'
@@ -118,6 +124,7 @@
     , _fuKeepRevisionForever = False
     , _fuFileId = pFuFileId_
     , _fuAddParents = Nothing
+    , _fuSupportsTeamDrives = False
     }
 
 -- | Multipart request metadata.
@@ -159,6 +166,12 @@
 fuAddParents
   = lens _fuAddParents (\ s a -> s{_fuAddParents = a})
 
+-- | Whether the requesting application supports Team Drives.
+fuSupportsTeamDrives :: Lens' FilesUpdate Bool
+fuSupportsTeamDrives
+  = lens _fuSupportsTeamDrives
+      (\ s a -> s{_fuSupportsTeamDrives = a})
+
 instance GoogleRequest FilesUpdate where
         type Rs FilesUpdate = File
         type Scopes FilesUpdate =
@@ -173,6 +186,7 @@
               _fuOCRLanguage
               (Just _fuKeepRevisionForever)
               _fuAddParents
+              (Just _fuSupportsTeamDrives)
               (Just AltJSON)
               _fuPayload
               driveService
@@ -191,6 +205,7 @@
               _fuOCRLanguage
               (Just _fuKeepRevisionForever)
               _fuAddParents
+              (Just _fuSupportsTeamDrives)
               (Just AltJSON)
               (Just Multipart)
               _fuPayload
diff --git a/gen/Network/Google/Resource/Drive/Files/Watch.hs b/gen/Network/Google/Resource/Drive/Files/Watch.hs
--- a/gen/Network/Google/Resource/Drive/Files/Watch.hs
+++ b/gen/Network/Google/Resource/Drive/Files/Watch.hs
@@ -36,6 +36,7 @@
     , fwPayload
     , fwAcknowledgeAbuse
     , fwFileId
+    , fwSupportsTeamDrives
     ) where
 
 import           Network.Google.Drive.Types
@@ -50,8 +51,9 @@
            Capture "fileId" Text :>
              "watch" :>
                QueryParam "acknowledgeAbuse" Bool :>
-                 QueryParam "alt" AltJSON :>
-                   ReqBody '[JSON] Channel :> Post '[JSON] Channel
+                 QueryParam "supportsTeamDrives" Bool :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON] Channel :> Post '[JSON] Channel
        :<|>
        "drive" :>
          "v3" :>
@@ -59,16 +61,18 @@
              Capture "fileId" Text :>
                "watch" :>
                  QueryParam "acknowledgeAbuse" Bool :>
-                   QueryParam "alt" AltMedia :>
-                     Post '[OctetStream] Stream
+                   QueryParam "supportsTeamDrives" Bool :>
+                     QueryParam "alt" AltMedia :>
+                       Post '[OctetStream] Stream
 
 -- | Subscribes to changes to a file
 --
 -- /See:/ 'filesWatch' smart constructor.
 data FilesWatch = FilesWatch'
-    { _fwPayload          :: !Channel
-    , _fwAcknowledgeAbuse :: !Bool
-    , _fwFileId           :: !Text
+    { _fwPayload            :: !Channel
+    , _fwAcknowledgeAbuse   :: !Bool
+    , _fwFileId             :: !Text
+    , _fwSupportsTeamDrives :: !Bool
     } deriving (Eq,Show,Data,Typeable,Generic)
 
 -- | Creates a value of 'FilesWatch' with the minimum fields required to make a request.
@@ -80,6 +84,8 @@
 -- * 'fwAcknowledgeAbuse'
 --
 -- * 'fwFileId'
+--
+-- * 'fwSupportsTeamDrives'
 filesWatch
     :: Channel -- ^ 'fwPayload'
     -> Text -- ^ 'fwFileId'
@@ -89,6 +95,7 @@
     { _fwPayload = pFwPayload_
     , _fwAcknowledgeAbuse = False
     , _fwFileId = pFwFileId_
+    , _fwSupportsTeamDrives = False
     }
 
 -- | Multipart request metadata.
@@ -107,6 +114,12 @@
 fwFileId :: Lens' FilesWatch Text
 fwFileId = lens _fwFileId (\ s a -> s{_fwFileId = a})
 
+-- | Whether the requesting application supports Team Drives.
+fwSupportsTeamDrives :: Lens' FilesWatch Bool
+fwSupportsTeamDrives
+  = lens _fwSupportsTeamDrives
+      (\ s a -> s{_fwSupportsTeamDrives = a})
+
 instance GoogleRequest FilesWatch where
         type Rs FilesWatch = Channel
         type Scopes FilesWatch =
@@ -119,6 +132,7 @@
                "https://www.googleapis.com/auth/drive.readonly"]
         requestClient FilesWatch'{..}
           = go _fwFileId (Just _fwAcknowledgeAbuse)
+              (Just _fwSupportsTeamDrives)
               (Just AltJSON)
               _fwPayload
               driveService
@@ -133,6 +147,7 @@
              Scopes FilesWatch
         requestClient (MediaDownload FilesWatch'{..})
           = go _fwFileId (Just _fwAcknowledgeAbuse)
+              (Just _fwSupportsTeamDrives)
               (Just AltMedia)
               driveService
           where _ :<|> go
diff --git a/gen/Network/Google/Resource/Drive/Permissions/Create.hs b/gen/Network/Google/Resource/Drive/Permissions/Create.hs
--- a/gen/Network/Google/Resource/Drive/Permissions/Create.hs
+++ b/gen/Network/Google/Resource/Drive/Permissions/Create.hs
@@ -20,7 +20,7 @@
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Creates a permission for a file.
+-- Creates a permission for a file or Team Drive.
 --
 -- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.permissions.create@.
 module Network.Google.Resource.Drive.Permissions.Create
@@ -36,8 +36,10 @@
     , pcSendNotificationEmail
     , pcPayload
     , pcEmailMessage
+    , pcUseDomainAdminAccess
     , pcTransferOwnership
     , pcFileId
+    , pcSupportsTeamDrives
     ) where
 
 import           Network.Google.Drive.Types
@@ -53,19 +55,23 @@
              "permissions" :>
                QueryParam "sendNotificationEmail" Bool :>
                  QueryParam "emailMessage" Text :>
-                   QueryParam "transferOwnership" Bool :>
-                     QueryParam "alt" AltJSON :>
-                       ReqBody '[JSON] Permission :> Post '[JSON] Permission
+                   QueryParam "useDomainAdminAccess" Bool :>
+                     QueryParam "transferOwnership" Bool :>
+                       QueryParam "supportsTeamDrives" Bool :>
+                         QueryParam "alt" AltJSON :>
+                           ReqBody '[JSON] Permission :> Post '[JSON] Permission
 
--- | Creates a permission for a file.
+-- | Creates a permission for a file or Team Drive.
 --
 -- /See:/ 'permissionsCreate' smart constructor.
 data PermissionsCreate = PermissionsCreate'
     { _pcSendNotificationEmail :: !(Maybe Bool)
     , _pcPayload               :: !Permission
     , _pcEmailMessage          :: !(Maybe Text)
+    , _pcUseDomainAdminAccess  :: !Bool
     , _pcTransferOwnership     :: !Bool
     , _pcFileId                :: !Text
+    , _pcSupportsTeamDrives    :: !Bool
     } deriving (Eq,Show,Data,Typeable,Generic)
 
 -- | Creates a value of 'PermissionsCreate' with the minimum fields required to make a request.
@@ -78,9 +84,13 @@
 --
 -- * 'pcEmailMessage'
 --
+-- * 'pcUseDomainAdminAccess'
+--
 -- * 'pcTransferOwnership'
 --
 -- * 'pcFileId'
+--
+-- * 'pcSupportsTeamDrives'
 permissionsCreate
     :: Permission -- ^ 'pcPayload'
     -> Text -- ^ 'pcFileId'
@@ -90,8 +100,10 @@
     { _pcSendNotificationEmail = Nothing
     , _pcPayload = pPcPayload_
     , _pcEmailMessage = Nothing
+    , _pcUseDomainAdminAccess = False
     , _pcTransferOwnership = False
     , _pcFileId = pPcFileId_
+    , _pcSupportsTeamDrives = False
     }
 
 -- | Whether to send a notification email when sharing to users or groups.
@@ -107,12 +119,20 @@
 pcPayload
   = lens _pcPayload (\ s a -> s{_pcPayload = a})
 
--- | A custom message to include in the notification email.
+-- | A plain text custom message to include in the notification email.
 pcEmailMessage :: Lens' PermissionsCreate (Maybe Text)
 pcEmailMessage
   = lens _pcEmailMessage
       (\ s a -> s{_pcEmailMessage = a})
 
+-- | Issue the request as a domain administrator; if set to true, then the
+-- requester will be granted access if they are an administrator of the
+-- domain to which the item belongs.
+pcUseDomainAdminAccess :: Lens' PermissionsCreate Bool
+pcUseDomainAdminAccess
+  = lens _pcUseDomainAdminAccess
+      (\ s a -> s{_pcUseDomainAdminAccess = a})
+
 -- | Whether to transfer ownership to the specified user and downgrade the
 -- current owner to a writer. This parameter is required as an
 -- acknowledgement of the side effect.
@@ -121,10 +141,16 @@
   = lens _pcTransferOwnership
       (\ s a -> s{_pcTransferOwnership = a})
 
--- | The ID of the file.
+-- | The ID of the file or Team Drive.
 pcFileId :: Lens' PermissionsCreate Text
 pcFileId = lens _pcFileId (\ s a -> s{_pcFileId = a})
 
+-- | Whether the requesting application supports Team Drives.
+pcSupportsTeamDrives :: Lens' PermissionsCreate Bool
+pcSupportsTeamDrives
+  = lens _pcSupportsTeamDrives
+      (\ s a -> s{_pcSupportsTeamDrives = a})
+
 instance GoogleRequest PermissionsCreate where
         type Rs PermissionsCreate = Permission
         type Scopes PermissionsCreate =
@@ -133,7 +159,9 @@
         requestClient PermissionsCreate'{..}
           = go _pcFileId _pcSendNotificationEmail
               _pcEmailMessage
+              (Just _pcUseDomainAdminAccess)
               (Just _pcTransferOwnership)
+              (Just _pcSupportsTeamDrives)
               (Just AltJSON)
               _pcPayload
               driveService
diff --git a/gen/Network/Google/Resource/Drive/Permissions/Delete.hs b/gen/Network/Google/Resource/Drive/Permissions/Delete.hs
--- a/gen/Network/Google/Resource/Drive/Permissions/Delete.hs
+++ b/gen/Network/Google/Resource/Drive/Permissions/Delete.hs
@@ -33,7 +33,9 @@
     , PermissionsDelete
 
     -- * Request Lenses
+    , pdUseDomainAdminAccess
     , pdFileId
+    , pdSupportsTeamDrives
     , pdPermissionId
     ) where
 
@@ -49,22 +51,30 @@
            Capture "fileId" Text :>
              "permissions" :>
                Capture "permissionId" Text :>
-                 QueryParam "alt" AltJSON :> Delete '[JSON] ()
+                 QueryParam "useDomainAdminAccess" Bool :>
+                   QueryParam "supportsTeamDrives" Bool :>
+                     QueryParam "alt" AltJSON :> Delete '[JSON] ()
 
 -- | Deletes a permission.
 --
 -- /See:/ 'permissionsDelete' smart constructor.
 data PermissionsDelete = PermissionsDelete'
-    { _pdFileId       :: !Text
-    , _pdPermissionId :: !Text
+    { _pdUseDomainAdminAccess :: !Bool
+    , _pdFileId               :: !Text
+    , _pdSupportsTeamDrives   :: !Bool
+    , _pdPermissionId         :: !Text
     } deriving (Eq,Show,Data,Typeable,Generic)
 
 -- | Creates a value of 'PermissionsDelete' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
+-- * 'pdUseDomainAdminAccess'
+--
 -- * 'pdFileId'
 --
+-- * 'pdSupportsTeamDrives'
+--
 -- * 'pdPermissionId'
 permissionsDelete
     :: Text -- ^ 'pdFileId'
@@ -72,14 +82,30 @@
     -> PermissionsDelete
 permissionsDelete pPdFileId_ pPdPermissionId_ =
     PermissionsDelete'
-    { _pdFileId = pPdFileId_
+    { _pdUseDomainAdminAccess = False
+    , _pdFileId = pPdFileId_
+    , _pdSupportsTeamDrives = False
     , _pdPermissionId = pPdPermissionId_
     }
 
--- | The ID of the file.
+-- | Issue the request as a domain administrator; if set to true, then the
+-- requester will be granted access if they are an administrator of the
+-- domain to which the item belongs.
+pdUseDomainAdminAccess :: Lens' PermissionsDelete Bool
+pdUseDomainAdminAccess
+  = lens _pdUseDomainAdminAccess
+      (\ s a -> s{_pdUseDomainAdminAccess = a})
+
+-- | The ID of the file or Team Drive.
 pdFileId :: Lens' PermissionsDelete Text
 pdFileId = lens _pdFileId (\ s a -> s{_pdFileId = a})
 
+-- | Whether the requesting application supports Team Drives.
+pdSupportsTeamDrives :: Lens' PermissionsDelete Bool
+pdSupportsTeamDrives
+  = lens _pdSupportsTeamDrives
+      (\ s a -> s{_pdSupportsTeamDrives = a})
+
 -- | The ID of the permission.
 pdPermissionId :: Lens' PermissionsDelete Text
 pdPermissionId
@@ -92,7 +118,10 @@
              '["https://www.googleapis.com/auth/drive",
                "https://www.googleapis.com/auth/drive.file"]
         requestClient PermissionsDelete'{..}
-          = go _pdFileId _pdPermissionId (Just AltJSON)
+          = go _pdFileId _pdPermissionId
+              (Just _pdUseDomainAdminAccess)
+              (Just _pdSupportsTeamDrives)
+              (Just AltJSON)
               driveService
           where go
                   = buildClient
diff --git a/gen/Network/Google/Resource/Drive/Permissions/Get.hs b/gen/Network/Google/Resource/Drive/Permissions/Get.hs
--- a/gen/Network/Google/Resource/Drive/Permissions/Get.hs
+++ b/gen/Network/Google/Resource/Drive/Permissions/Get.hs
@@ -33,7 +33,9 @@
     , PermissionsGet
 
     -- * Request Lenses
+    , pgUseDomainAdminAccess
     , pgFileId
+    , pgSupportsTeamDrives
     , pgPermissionId
     ) where
 
@@ -49,22 +51,30 @@
            Capture "fileId" Text :>
              "permissions" :>
                Capture "permissionId" Text :>
-                 QueryParam "alt" AltJSON :> Get '[JSON] Permission
+                 QueryParam "useDomainAdminAccess" Bool :>
+                   QueryParam "supportsTeamDrives" Bool :>
+                     QueryParam "alt" AltJSON :> Get '[JSON] Permission
 
 -- | Gets a permission by ID.
 --
 -- /See:/ 'permissionsGet' smart constructor.
 data PermissionsGet = PermissionsGet'
-    { _pgFileId       :: !Text
-    , _pgPermissionId :: !Text
+    { _pgUseDomainAdminAccess :: !Bool
+    , _pgFileId               :: !Text
+    , _pgSupportsTeamDrives   :: !Bool
+    , _pgPermissionId         :: !Text
     } deriving (Eq,Show,Data,Typeable,Generic)
 
 -- | Creates a value of 'PermissionsGet' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
+-- * 'pgUseDomainAdminAccess'
+--
 -- * 'pgFileId'
 --
+-- * 'pgSupportsTeamDrives'
+--
 -- * 'pgPermissionId'
 permissionsGet
     :: Text -- ^ 'pgFileId'
@@ -72,14 +82,30 @@
     -> PermissionsGet
 permissionsGet pPgFileId_ pPgPermissionId_ =
     PermissionsGet'
-    { _pgFileId = pPgFileId_
+    { _pgUseDomainAdminAccess = False
+    , _pgFileId = pPgFileId_
+    , _pgSupportsTeamDrives = False
     , _pgPermissionId = pPgPermissionId_
     }
 
+-- | Issue the request as a domain administrator; if set to true, then the
+-- requester will be granted access if they are an administrator of the
+-- domain to which the item belongs.
+pgUseDomainAdminAccess :: Lens' PermissionsGet Bool
+pgUseDomainAdminAccess
+  = lens _pgUseDomainAdminAccess
+      (\ s a -> s{_pgUseDomainAdminAccess = a})
+
 -- | The ID of the file.
 pgFileId :: Lens' PermissionsGet Text
 pgFileId = lens _pgFileId (\ s a -> s{_pgFileId = a})
 
+-- | Whether the requesting application supports Team Drives.
+pgSupportsTeamDrives :: Lens' PermissionsGet Bool
+pgSupportsTeamDrives
+  = lens _pgSupportsTeamDrives
+      (\ s a -> s{_pgSupportsTeamDrives = a})
+
 -- | The ID of the permission.
 pgPermissionId :: Lens' PermissionsGet Text
 pgPermissionId
@@ -96,7 +122,10 @@
                "https://www.googleapis.com/auth/drive.photos.readonly",
                "https://www.googleapis.com/auth/drive.readonly"]
         requestClient PermissionsGet'{..}
-          = go _pgFileId _pgPermissionId (Just AltJSON)
+          = go _pgFileId _pgPermissionId
+              (Just _pgUseDomainAdminAccess)
+              (Just _pgSupportsTeamDrives)
+              (Just AltJSON)
               driveService
           where go
                   = buildClient (Proxy :: Proxy PermissionsGetResource)
diff --git a/gen/Network/Google/Resource/Drive/Permissions/List.hs b/gen/Network/Google/Resource/Drive/Permissions/List.hs
--- a/gen/Network/Google/Resource/Drive/Permissions/List.hs
+++ b/gen/Network/Google/Resource/Drive/Permissions/List.hs
@@ -20,7 +20,7 @@
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Lists a file\'s permissions.
+-- Lists a file\'s or Team Drive\'s permissions.
 --
 -- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.permissions.list@.
 module Network.Google.Resource.Drive.Permissions.List
@@ -33,7 +33,11 @@
     , PermissionsList
 
     -- * Request Lenses
+    , plPageToken
+    , plUseDomainAdminAccess
     , plFileId
+    , plPageSize
+    , plSupportsTeamDrives
     ) where
 
 import           Network.Google.Drive.Types
@@ -47,33 +51,83 @@
          "files" :>
            Capture "fileId" Text :>
              "permissions" :>
-               QueryParam "alt" AltJSON :>
-                 Get '[JSON] PermissionList
+               QueryParam "pageToken" Text :>
+                 QueryParam "useDomainAdminAccess" Bool :>
+                   QueryParam "pageSize" (Textual Int32) :>
+                     QueryParam "supportsTeamDrives" Bool :>
+                       QueryParam "alt" AltJSON :>
+                         Get '[JSON] PermissionList
 
--- | Lists a file\'s permissions.
+-- | Lists a file\'s or Team Drive\'s permissions.
 --
 -- /See:/ 'permissionsList' smart constructor.
-newtype PermissionsList = PermissionsList'
-    { _plFileId :: Text
+data PermissionsList = PermissionsList'
+    { _plPageToken            :: !(Maybe Text)
+    , _plUseDomainAdminAccess :: !Bool
+    , _plFileId               :: !Text
+    , _plPageSize             :: !(Maybe (Textual Int32))
+    , _plSupportsTeamDrives   :: !Bool
     } deriving (Eq,Show,Data,Typeable,Generic)
 
 -- | Creates a value of 'PermissionsList' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
+-- * 'plPageToken'
+--
+-- * 'plUseDomainAdminAccess'
+--
 -- * 'plFileId'
+--
+-- * 'plPageSize'
+--
+-- * 'plSupportsTeamDrives'
 permissionsList
     :: Text -- ^ 'plFileId'
     -> PermissionsList
 permissionsList pPlFileId_ =
     PermissionsList'
-    { _plFileId = pPlFileId_
+    { _plPageToken = Nothing
+    , _plUseDomainAdminAccess = False
+    , _plFileId = pPlFileId_
+    , _plPageSize = Nothing
+    , _plSupportsTeamDrives = False
     }
 
--- | The ID of the file.
+-- | The token for continuing a previous list request on the next page. This
+-- should be set to the value of \'nextPageToken\' from the previous
+-- response.
+plPageToken :: Lens' PermissionsList (Maybe Text)
+plPageToken
+  = lens _plPageToken (\ s a -> s{_plPageToken = a})
+
+-- | Issue the request as a domain administrator; if set to true, then the
+-- requester will be granted access if they are an administrator of the
+-- domain to which the item belongs.
+plUseDomainAdminAccess :: Lens' PermissionsList Bool
+plUseDomainAdminAccess
+  = lens _plUseDomainAdminAccess
+      (\ s a -> s{_plUseDomainAdminAccess = a})
+
+-- | The ID of the file or Team Drive.
 plFileId :: Lens' PermissionsList Text
 plFileId = lens _plFileId (\ s a -> s{_plFileId = a})
 
+-- | The maximum number of permissions to return per page. When not set for
+-- files in a Team Drive, at most 100 results will be returned. When not
+-- set for files that are not in a Team Drive, the entire list will be
+-- returned.
+plPageSize :: Lens' PermissionsList (Maybe Int32)
+plPageSize
+  = lens _plPageSize (\ s a -> s{_plPageSize = a}) .
+      mapping _Coerce
+
+-- | Whether the requesting application supports Team Drives.
+plSupportsTeamDrives :: Lens' PermissionsList Bool
+plSupportsTeamDrives
+  = lens _plSupportsTeamDrives
+      (\ s a -> s{_plSupportsTeamDrives = a})
+
 instance GoogleRequest PermissionsList where
         type Rs PermissionsList = PermissionList
         type Scopes PermissionsList =
@@ -84,7 +138,12 @@
                "https://www.googleapis.com/auth/drive.photos.readonly",
                "https://www.googleapis.com/auth/drive.readonly"]
         requestClient PermissionsList'{..}
-          = go _plFileId (Just AltJSON) driveService
+          = go _plFileId _plPageToken
+              (Just _plUseDomainAdminAccess)
+              _plPageSize
+              (Just _plSupportsTeamDrives)
+              (Just AltJSON)
+              driveService
           where go
                   = buildClient
                       (Proxy :: Proxy PermissionsListResource)
diff --git a/gen/Network/Google/Resource/Drive/Permissions/Update.hs b/gen/Network/Google/Resource/Drive/Permissions/Update.hs
--- a/gen/Network/Google/Resource/Drive/Permissions/Update.hs
+++ b/gen/Network/Google/Resource/Drive/Permissions/Update.hs
@@ -35,8 +35,10 @@
     -- * Request Lenses
     , puPayload
     , puRemoveExpiration
+    , puUseDomainAdminAccess
     , puTransferOwnership
     , puFileId
+    , puSupportsTeamDrives
     , puPermissionId
     ) where
 
@@ -53,20 +55,24 @@
              "permissions" :>
                Capture "permissionId" Text :>
                  QueryParam "removeExpiration" Bool :>
-                   QueryParam "transferOwnership" Bool :>
-                     QueryParam "alt" AltJSON :>
-                       ReqBody '[JSON] Permission :>
-                         Patch '[JSON] Permission
+                   QueryParam "useDomainAdminAccess" Bool :>
+                     QueryParam "transferOwnership" Bool :>
+                       QueryParam "supportsTeamDrives" Bool :>
+                         QueryParam "alt" AltJSON :>
+                           ReqBody '[JSON] Permission :>
+                             Patch '[JSON] Permission
 
 -- | Updates a permission with patch semantics.
 --
 -- /See:/ 'permissionsUpdate' smart constructor.
 data PermissionsUpdate = PermissionsUpdate'
-    { _puPayload           :: !Permission
-    , _puRemoveExpiration  :: !Bool
-    , _puTransferOwnership :: !Bool
-    , _puFileId            :: !Text
-    , _puPermissionId      :: !Text
+    { _puPayload              :: !Permission
+    , _puRemoveExpiration     :: !Bool
+    , _puUseDomainAdminAccess :: !Bool
+    , _puTransferOwnership    :: !Bool
+    , _puFileId               :: !Text
+    , _puSupportsTeamDrives   :: !Bool
+    , _puPermissionId         :: !Text
     } deriving (Eq,Show,Data,Typeable,Generic)
 
 -- | Creates a value of 'PermissionsUpdate' with the minimum fields required to make a request.
@@ -77,10 +83,14 @@
 --
 -- * 'puRemoveExpiration'
 --
+-- * 'puUseDomainAdminAccess'
+--
 -- * 'puTransferOwnership'
 --
 -- * 'puFileId'
 --
+-- * 'puSupportsTeamDrives'
+--
 -- * 'puPermissionId'
 permissionsUpdate
     :: Permission -- ^ 'puPayload'
@@ -91,8 +101,10 @@
     PermissionsUpdate'
     { _puPayload = pPuPayload_
     , _puRemoveExpiration = False
+    , _puUseDomainAdminAccess = False
     , _puTransferOwnership = False
     , _puFileId = pPuFileId_
+    , _puSupportsTeamDrives = False
     , _puPermissionId = pPuPermissionId_
     }
 
@@ -107,6 +119,14 @@
   = lens _puRemoveExpiration
       (\ s a -> s{_puRemoveExpiration = a})
 
+-- | Issue the request as a domain administrator; if set to true, then the
+-- requester will be granted access if they are an administrator of the
+-- domain to which the item belongs.
+puUseDomainAdminAccess :: Lens' PermissionsUpdate Bool
+puUseDomainAdminAccess
+  = lens _puUseDomainAdminAccess
+      (\ s a -> s{_puUseDomainAdminAccess = a})
+
 -- | Whether to transfer ownership to the specified user and downgrade the
 -- current owner to a writer. This parameter is required as an
 -- acknowledgement of the side effect.
@@ -115,10 +135,16 @@
   = lens _puTransferOwnership
       (\ s a -> s{_puTransferOwnership = a})
 
--- | The ID of the file.
+-- | The ID of the file or Team Drive.
 puFileId :: Lens' PermissionsUpdate Text
 puFileId = lens _puFileId (\ s a -> s{_puFileId = a})
 
+-- | Whether the requesting application supports Team Drives.
+puSupportsTeamDrives :: Lens' PermissionsUpdate Bool
+puSupportsTeamDrives
+  = lens _puSupportsTeamDrives
+      (\ s a -> s{_puSupportsTeamDrives = a})
+
 -- | The ID of the permission.
 puPermissionId :: Lens' PermissionsUpdate Text
 puPermissionId
@@ -133,7 +159,9 @@
         requestClient PermissionsUpdate'{..}
           = go _puFileId _puPermissionId
               (Just _puRemoveExpiration)
+              (Just _puUseDomainAdminAccess)
               (Just _puTransferOwnership)
+              (Just _puSupportsTeamDrives)
               (Just AltJSON)
               _puPayload
               driveService
diff --git a/gen/Network/Google/Resource/Drive/Teamdrives/Create.hs b/gen/Network/Google/Resource/Drive/Teamdrives/Create.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/Teamdrives/Create.hs
@@ -0,0 +1,102 @@
+{-# 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.Drive.Teamdrives.Create
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a new Team Drive.
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.teamdrives.create@.
+module Network.Google.Resource.Drive.Teamdrives.Create
+    (
+    -- * REST Resource
+      TeamdrivesCreateResource
+
+    -- * Creating a Request
+    , teamdrivesCreate
+    , TeamdrivesCreate
+
+    -- * Request Lenses
+    , tcRequestId
+    , tcPayload
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.teamdrives.create@ method which the
+-- 'TeamdrivesCreate' request conforms to.
+type TeamdrivesCreateResource =
+     "drive" :>
+       "v3" :>
+         "teamdrives" :>
+           QueryParam "requestId" Text :>
+             QueryParam "alt" AltJSON :>
+               ReqBody '[JSON] TeamDrive :> Post '[JSON] TeamDrive
+
+-- | Creates a new Team Drive.
+--
+-- /See:/ 'teamdrivesCreate' smart constructor.
+data TeamdrivesCreate = TeamdrivesCreate'
+    { _tcRequestId :: !Text
+    , _tcPayload   :: !TeamDrive
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TeamdrivesCreate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tcRequestId'
+--
+-- * 'tcPayload'
+teamdrivesCreate
+    :: Text -- ^ 'tcRequestId'
+    -> TeamDrive -- ^ 'tcPayload'
+    -> TeamdrivesCreate
+teamdrivesCreate pTcRequestId_ pTcPayload_ =
+    TeamdrivesCreate'
+    { _tcRequestId = pTcRequestId_
+    , _tcPayload = pTcPayload_
+    }
+
+-- | An ID, such as a random UUID, which uniquely identifies this user\'s
+-- request for idempotent creation of a Team Drive. A repeated request by
+-- the same user and with the same request ID will avoid creating
+-- duplicates by attempting to create the same Team Drive. If the Team
+-- Drive already exists a 409 error will be returned.
+tcRequestId :: Lens' TeamdrivesCreate Text
+tcRequestId
+  = lens _tcRequestId (\ s a -> s{_tcRequestId = a})
+
+-- | Multipart request metadata.
+tcPayload :: Lens' TeamdrivesCreate TeamDrive
+tcPayload
+  = lens _tcPayload (\ s a -> s{_tcPayload = a})
+
+instance GoogleRequest TeamdrivesCreate where
+        type Rs TeamdrivesCreate = TeamDrive
+        type Scopes TeamdrivesCreate =
+             '["https://www.googleapis.com/auth/drive"]
+        requestClient TeamdrivesCreate'{..}
+          = go (Just _tcRequestId) (Just AltJSON) _tcPayload
+              driveService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy TeamdrivesCreateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Drive/Teamdrives/Delete.hs b/gen/Network/Google/Resource/Drive/Teamdrives/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/Teamdrives/Delete.hs
@@ -0,0 +1,88 @@
+{-# 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.Drive.Teamdrives.Delete
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Permanently deletes a Team Drive for which the user is an organizer. The
+-- Team Drive cannot contain any untrashed items.
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.teamdrives.delete@.
+module Network.Google.Resource.Drive.Teamdrives.Delete
+    (
+    -- * REST Resource
+      TeamdrivesDeleteResource
+
+    -- * Creating a Request
+    , teamdrivesDelete
+    , TeamdrivesDelete
+
+    -- * Request Lenses
+    , tdTeamDriveId
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.teamdrives.delete@ method which the
+-- 'TeamdrivesDelete' request conforms to.
+type TeamdrivesDeleteResource =
+     "drive" :>
+       "v3" :>
+         "teamdrives" :>
+           Capture "teamDriveId" Text :>
+             QueryParam "alt" AltJSON :> Delete '[JSON] ()
+
+-- | Permanently deletes a Team Drive for which the user is an organizer. The
+-- Team Drive cannot contain any untrashed items.
+--
+-- /See:/ 'teamdrivesDelete' smart constructor.
+newtype TeamdrivesDelete = TeamdrivesDelete'
+    { _tdTeamDriveId :: Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TeamdrivesDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tdTeamDriveId'
+teamdrivesDelete
+    :: Text -- ^ 'tdTeamDriveId'
+    -> TeamdrivesDelete
+teamdrivesDelete pTdTeamDriveId_ =
+    TeamdrivesDelete'
+    { _tdTeamDriveId = pTdTeamDriveId_
+    }
+
+-- | The ID of the Team Drive
+tdTeamDriveId :: Lens' TeamdrivesDelete Text
+tdTeamDriveId
+  = lens _tdTeamDriveId
+      (\ s a -> s{_tdTeamDriveId = a})
+
+instance GoogleRequest TeamdrivesDelete where
+        type Rs TeamdrivesDelete = ()
+        type Scopes TeamdrivesDelete =
+             '["https://www.googleapis.com/auth/drive"]
+        requestClient TeamdrivesDelete'{..}
+          = go _tdTeamDriveId (Just AltJSON) driveService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy TeamdrivesDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Drive/Teamdrives/Get.hs b/gen/Network/Google/Resource/Drive/Teamdrives/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/Teamdrives/Get.hs
@@ -0,0 +1,102 @@
+{-# 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.Drive.Teamdrives.Get
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets a Team Drive\'s metadata by ID.
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.teamdrives.get@.
+module Network.Google.Resource.Drive.Teamdrives.Get
+    (
+    -- * REST Resource
+      TeamdrivesGetResource
+
+    -- * Creating a Request
+    , teamdrivesGet
+    , TeamdrivesGet
+
+    -- * Request Lenses
+    , tgTeamDriveId
+    , tgUseDomainAdminAccess
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.teamdrives.get@ method which the
+-- 'TeamdrivesGet' request conforms to.
+type TeamdrivesGetResource =
+     "drive" :>
+       "v3" :>
+         "teamdrives" :>
+           Capture "teamDriveId" Text :>
+             QueryParam "useDomainAdminAccess" Bool :>
+               QueryParam "alt" AltJSON :> Get '[JSON] TeamDrive
+
+-- | Gets a Team Drive\'s metadata by ID.
+--
+-- /See:/ 'teamdrivesGet' smart constructor.
+data TeamdrivesGet = TeamdrivesGet'
+    { _tgTeamDriveId          :: !Text
+    , _tgUseDomainAdminAccess :: !Bool
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TeamdrivesGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tgTeamDriveId'
+--
+-- * 'tgUseDomainAdminAccess'
+teamdrivesGet
+    :: Text -- ^ 'tgTeamDriveId'
+    -> TeamdrivesGet
+teamdrivesGet pTgTeamDriveId_ =
+    TeamdrivesGet'
+    { _tgTeamDriveId = pTgTeamDriveId_
+    , _tgUseDomainAdminAccess = False
+    }
+
+-- | The ID of the Team Drive
+tgTeamDriveId :: Lens' TeamdrivesGet Text
+tgTeamDriveId
+  = lens _tgTeamDriveId
+      (\ s a -> s{_tgTeamDriveId = a})
+
+-- | Issue the request as a domain administrator; if set to true, then the
+-- requester will be granted access if they are an administrator of the
+-- domain to which the Team Drive belongs.
+tgUseDomainAdminAccess :: Lens' TeamdrivesGet Bool
+tgUseDomainAdminAccess
+  = lens _tgUseDomainAdminAccess
+      (\ s a -> s{_tgUseDomainAdminAccess = a})
+
+instance GoogleRequest TeamdrivesGet where
+        type Rs TeamdrivesGet = TeamDrive
+        type Scopes TeamdrivesGet =
+             '["https://www.googleapis.com/auth/drive",
+               "https://www.googleapis.com/auth/drive.readonly"]
+        requestClient TeamdrivesGet'{..}
+          = go _tgTeamDriveId (Just _tgUseDomainAdminAccess)
+              (Just AltJSON)
+              driveService
+          where go
+                  = buildClient (Proxy :: Proxy TeamdrivesGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Drive/Teamdrives/List.hs b/gen/Network/Google/Resource/Drive/Teamdrives/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/Teamdrives/List.hs
@@ -0,0 +1,123 @@
+{-# 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.Drive.Teamdrives.List
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the user\'s Team Drives.
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.teamdrives.list@.
+module Network.Google.Resource.Drive.Teamdrives.List
+    (
+    -- * REST Resource
+      TeamdrivesListResource
+
+    -- * Creating a Request
+    , teamdrivesList
+    , TeamdrivesList
+
+    -- * Request Lenses
+    , tlQ
+    , tlPageToken
+    , tlUseDomainAdminAccess
+    , tlPageSize
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.teamdrives.list@ method which the
+-- 'TeamdrivesList' request conforms to.
+type TeamdrivesListResource =
+     "drive" :>
+       "v3" :>
+         "teamdrives" :>
+           QueryParam "q" Text :>
+             QueryParam "pageToken" Text :>
+               QueryParam "useDomainAdminAccess" Bool :>
+                 QueryParam "pageSize" (Textual Int32) :>
+                   QueryParam "alt" AltJSON :> Get '[JSON] TeamDriveList
+
+-- | Lists the user\'s Team Drives.
+--
+-- /See:/ 'teamdrivesList' smart constructor.
+data TeamdrivesList = TeamdrivesList'
+    { _tlQ                    :: !(Maybe Text)
+    , _tlPageToken            :: !(Maybe Text)
+    , _tlUseDomainAdminAccess :: !Bool
+    , _tlPageSize             :: !(Textual Int32)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TeamdrivesList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tlQ'
+--
+-- * 'tlPageToken'
+--
+-- * 'tlUseDomainAdminAccess'
+--
+-- * 'tlPageSize'
+teamdrivesList
+    :: TeamdrivesList
+teamdrivesList =
+    TeamdrivesList'
+    { _tlQ = Nothing
+    , _tlPageToken = Nothing
+    , _tlUseDomainAdminAccess = False
+    , _tlPageSize = 10
+    }
+
+-- | Query string for searching Team Drives.
+tlQ :: Lens' TeamdrivesList (Maybe Text)
+tlQ = lens _tlQ (\ s a -> s{_tlQ = a})
+
+-- | Page token for Team Drives.
+tlPageToken :: Lens' TeamdrivesList (Maybe Text)
+tlPageToken
+  = lens _tlPageToken (\ s a -> s{_tlPageToken = a})
+
+-- | Issue the request as a domain administrator; if set to true, then all
+-- Team Drives of the domain in which the requester is an administrator are
+-- returned.
+tlUseDomainAdminAccess :: Lens' TeamdrivesList Bool
+tlUseDomainAdminAccess
+  = lens _tlUseDomainAdminAccess
+      (\ s a -> s{_tlUseDomainAdminAccess = a})
+
+-- | Maximum number of Team Drives to return.
+tlPageSize :: Lens' TeamdrivesList Int32
+tlPageSize
+  = lens _tlPageSize (\ s a -> s{_tlPageSize = a}) .
+      _Coerce
+
+instance GoogleRequest TeamdrivesList where
+        type Rs TeamdrivesList = TeamDriveList
+        type Scopes TeamdrivesList =
+             '["https://www.googleapis.com/auth/drive",
+               "https://www.googleapis.com/auth/drive.readonly"]
+        requestClient TeamdrivesList'{..}
+          = go _tlQ _tlPageToken (Just _tlUseDomainAdminAccess)
+              (Just _tlPageSize)
+              (Just AltJSON)
+              driveService
+          where go
+                  = buildClient (Proxy :: Proxy TeamdrivesListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Drive/Teamdrives/Update.hs b/gen/Network/Google/Resource/Drive/Teamdrives/Update.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/Teamdrives/Update.hs
@@ -0,0 +1,115 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Drive.Teamdrives.Update
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates a Team Drive\'s metadata
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.teamdrives.update@.
+module Network.Google.Resource.Drive.Teamdrives.Update
+    (
+    -- * REST Resource
+      TeamdrivesUpdateResource
+
+    -- * Creating a Request
+    , teamdrivesUpdate
+    , TeamdrivesUpdate
+
+    -- * Request Lenses
+    , tuPayload
+    , tuTeamDriveId
+    , tuUseDomainAdminAccess
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.teamdrives.update@ method which the
+-- 'TeamdrivesUpdate' request conforms to.
+type TeamdrivesUpdateResource =
+     "drive" :>
+       "v3" :>
+         "teamdrives" :>
+           Capture "teamDriveId" Text :>
+             QueryParam "useDomainAdminAccess" Bool :>
+               QueryParam "alt" AltJSON :>
+                 ReqBody '[JSON] TeamDrive :> Patch '[JSON] TeamDrive
+
+-- | Updates a Team Drive\'s metadata
+--
+-- /See:/ 'teamdrivesUpdate' smart constructor.
+data TeamdrivesUpdate = TeamdrivesUpdate'
+    { _tuPayload              :: !TeamDrive
+    , _tuTeamDriveId          :: !Text
+    , _tuUseDomainAdminAccess :: !Bool
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TeamdrivesUpdate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tuPayload'
+--
+-- * 'tuTeamDriveId'
+--
+-- * 'tuUseDomainAdminAccess'
+teamdrivesUpdate
+    :: TeamDrive -- ^ 'tuPayload'
+    -> Text -- ^ 'tuTeamDriveId'
+    -> TeamdrivesUpdate
+teamdrivesUpdate pTuPayload_ pTuTeamDriveId_ =
+    TeamdrivesUpdate'
+    { _tuPayload = pTuPayload_
+    , _tuTeamDriveId = pTuTeamDriveId_
+    , _tuUseDomainAdminAccess = False
+    }
+
+-- | Multipart request metadata.
+tuPayload :: Lens' TeamdrivesUpdate TeamDrive
+tuPayload
+  = lens _tuPayload (\ s a -> s{_tuPayload = a})
+
+-- | The ID of the Team Drive
+tuTeamDriveId :: Lens' TeamdrivesUpdate Text
+tuTeamDriveId
+  = lens _tuTeamDriveId
+      (\ s a -> s{_tuTeamDriveId = a})
+
+-- | Issue the request as a domain administrator; if set to true, then the
+-- requester will be granted access if they are an administrator of the
+-- domain to which the Team Drive belongs.
+tuUseDomainAdminAccess :: Lens' TeamdrivesUpdate Bool
+tuUseDomainAdminAccess
+  = lens _tuUseDomainAdminAccess
+      (\ s a -> s{_tuUseDomainAdminAccess = a})
+
+instance GoogleRequest TeamdrivesUpdate where
+        type Rs TeamdrivesUpdate = TeamDrive
+        type Scopes TeamdrivesUpdate =
+             '["https://www.googleapis.com/auth/drive"]
+        requestClient TeamdrivesUpdate'{..}
+          = go _tuTeamDriveId (Just _tuUseDomainAdminAccess)
+              (Just AltJSON)
+              _tuPayload
+              driveService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy TeamdrivesUpdateResource)
+                      mempty
diff --git a/gogol-drive.cabal b/gogol-drive.cabal
--- a/gogol-drive.cabal
+++ b/gogol-drive.cabal
@@ -1,5 +1,5 @@
 name:                  gogol-drive
-version:               0.3.0
+version:               0.4.0
 synopsis:              Google Drive SDK.
 homepage:              https://github.com/brendanhay/gogol
 bug-reports:           https://github.com/brendanhay/gogol/issues
@@ -70,11 +70,16 @@
         , Network.Google.Resource.Drive.Revisions.Get
         , Network.Google.Resource.Drive.Revisions.List
         , Network.Google.Resource.Drive.Revisions.Update
+        , Network.Google.Resource.Drive.Teamdrives.Create
+        , Network.Google.Resource.Drive.Teamdrives.Delete
+        , Network.Google.Resource.Drive.Teamdrives.Get
+        , Network.Google.Resource.Drive.Teamdrives.List
+        , Network.Google.Resource.Drive.Teamdrives.Update
 
     other-modules:
           Network.Google.Drive.Types.Product
         , Network.Google.Drive.Types.Sum
 
     build-depends:
-          gogol-core == 0.3.0.*
+          gogol-core == 0.4.0.*
         , base       >= 4.7 && < 5
