diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,367 @@
+Mozilla Public License Version 2.0
+==================================
+
+1. Definitions
+--------------
+
+1.1. "Contributor"
+    means each individual or legal entity that creates, contributes to
+    the creation of, or owns Covered Software.
+
+1.2. "Contributor Version"
+    means the combination of the Contributions of others (if any) used
+    by a Contributor and that particular Contributor's Contribution.
+
+1.3. "Contribution"
+    means Covered Software of a particular Contributor.
+
+1.4. "Covered Software"
+    means Source Code Form to which the initial Contributor has attached
+    the notice in Exhibit A, the Executable Form of such Source Code
+    Form, and Modifications of such Source Code Form, in each case
+    including portions thereof.
+
+1.5. "Incompatible With Secondary Licenses"
+    means
+
+    (a) that the initial Contributor has attached the notice described
+        in Exhibit B to the Covered Software; or
+
+    (b) that the Covered Software was made available under the terms of
+        version 1.1 or earlier of the License, but not also under the
+        terms of a Secondary License.
+
+1.6. "Executable Form"
+    means any form of the work other than Source Code Form.
+
+1.7. "Larger Work"
+    means a work that combines Covered Software with other material, in
+    a separate file or files, that is not Covered Software.
+
+1.8. "License"
+    means this document.
+
+1.9. "Licensable"
+    means having the right to grant, to the maximum extent possible,
+    whether at the time of the initial grant or subsequently, any and
+    all of the rights conveyed by this License.
+
+1.10. "Modifications"
+    means any of the following:
+
+    (a) any file in Source Code Form that results from an addition to,
+        deletion from, or modification of the contents of Covered
+        Software; or
+
+    (b) any new file in Source Code Form that contains any Covered
+        Software.
+
+1.11. "Patent Claims" of a Contributor
+    means any patent claim(s), including without limitation, method,
+    process, and apparatus claims, in any patent Licensable by such
+    Contributor that would be infringed, but for the grant of the
+    License, by the making, using, selling, offering for sale, having
+    made, import, or transfer of either its Contributions or its
+    Contributor Version.
+
+1.12. "Secondary License"
+    means either the GNU General Public License, Version 2.0, the GNU
+    Lesser General Public License, Version 2.1, the GNU Affero General
+    Public License, Version 3.0, or any later versions of those
+    licenses.
+
+1.13. "Source Code Form"
+    means the form of the work preferred for making modifications.
+
+1.14. "You" (or "Your")
+    means an individual or a legal entity exercising rights under this
+    License. For legal entities, "You" includes any entity that
+    controls, is controlled by, or is under common control with You. For
+    purposes of this definition, "control" means (a) the power, direct
+    or indirect, to cause the direction or management of such entity,
+    whether by contract or otherwise, or (b) ownership of more than
+    fifty percent (50%) of the outstanding shares or beneficial
+    ownership of such entity.
+
+2. License Grants and Conditions
+--------------------------------
+
+2.1. Grants
+
+Each Contributor hereby grants You a world-wide, royalty-free,
+non-exclusive license:
+
+(a) under intellectual property rights (other than patent or trademark)
+    Licensable by such Contributor to use, reproduce, make available,
+    modify, display, perform, distribute, and otherwise exploit its
+    Contributions, either on an unmodified basis, with Modifications, or
+    as part of a Larger Work; and
+
+(b) under Patent Claims of such Contributor to make, use, sell, offer
+    for sale, have made, import, and otherwise transfer either its
+    Contributions or its Contributor Version.
+
+2.2. Effective Date
+
+The licenses granted in Section 2.1 with respect to any Contribution
+become effective for each Contribution on the date the Contributor first
+distributes such Contribution.
+
+2.3. Limitations on Grant Scope
+
+The licenses granted in this Section 2 are the only rights granted under
+this License. No additional rights or licenses will be implied from the
+distribution or licensing of Covered Software under this License.
+Notwithstanding Section 2.1(b) above, no patent license is granted by a
+Contributor:
+
+(a) for any code that a Contributor has removed from Covered Software;
+    or
+
+(b) for infringements caused by: (i) Your and any other third party's
+    modifications of Covered Software, or (ii) the combination of its
+    Contributions with other software (except as part of its Contributor
+    Version); or
+
+(c) under Patent Claims infringed by Covered Software in the absence of
+    its Contributions.
+
+This License does not grant any rights in the trademarks, service marks,
+or logos of any Contributor (except as may be necessary to comply with
+the notice requirements in Section 3.4).
+
+2.4. Subsequent Licenses
+
+No Contributor makes additional grants as a result of Your choice to
+distribute the Covered Software under a subsequent version of this
+License (see Section 10.2) or under the terms of a Secondary License (if
+permitted under the terms of Section 3.3).
+
+2.5. Representation
+
+Each Contributor represents that the Contributor believes its
+Contributions are its original creation(s) or it has sufficient rights
+to grant the rights to its Contributions conveyed by this License.
+
+2.6. Fair Use
+
+This License is not intended to limit any rights You have under
+applicable copyright doctrines of fair use, fair dealing, or other
+equivalents.
+
+2.7. Conditions
+
+Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
+in Section 2.1.
+
+3. Responsibilities
+-------------------
+
+3.1. Distribution of Source Form
+
+All distribution of Covered Software in Source Code Form, including any
+Modifications that You create or to which You contribute, must be under
+the terms of this License. You must inform recipients that the Source
+Code Form of the Covered Software is governed by the terms of this
+License, and how they can obtain a copy of this License. You may not
+attempt to alter or restrict the recipients' rights in the Source Code
+Form.
+
+3.2. Distribution of Executable Form
+
+If You distribute Covered Software in Executable Form then:
+
+(a) such Covered Software must also be made available in Source Code
+    Form, as described in Section 3.1, and You must inform recipients of
+    the Executable Form how they can obtain a copy of such Source Code
+    Form by reasonable means in a timely manner, at a charge no more
+    than the cost of distribution to the recipient; and
+
+(b) You may distribute such Executable Form under the terms of this
+    License, or sublicense it under different terms, provided that the
+    license for the Executable Form does not attempt to limit or alter
+    the recipients' rights in the Source Code Form under this License.
+
+3.3. Distribution of a Larger Work
+
+You may create and distribute a Larger Work under terms of Your choice,
+provided that You also comply with the requirements of this License for
+the Covered Software. If the Larger Work is a combination of Covered
+Software with a work governed by one or more Secondary Licenses, and the
+Covered Software is not Incompatible With Secondary Licenses, this
+License permits You to additionally distribute such Covered Software
+under the terms of such Secondary License(s), so that the recipient of
+the Larger Work may, at their option, further distribute the Covered
+Software under the terms of either this License or such Secondary
+License(s).
+
+3.4. Notices
+
+You may not remove or alter the substance of any license notices
+(including copyright notices, patent notices, disclaimers of warranty,
+or limitations of liability) contained within the Source Code Form of
+the Covered Software, except that You may alter any license notices to
+the extent required to remedy known factual inaccuracies.
+
+3.5. Application of Additional Terms
+
+You may choose to offer, and to charge a fee for, warranty, support,
+indemnity or liability obligations to one or more recipients of Covered
+Software. However, You may do so only on Your own behalf, and not on
+behalf of any Contributor. You must make it absolutely clear that any
+such warranty, support, indemnity, or liability obligation is offered by
+You alone, and You hereby agree to indemnify every Contributor for any
+liability incurred by such Contributor as a result of warranty, support,
+indemnity or liability terms You offer. You may include additional
+disclaimers of warranty and limitations of liability specific to any
+jurisdiction.
+
+4. Inability to Comply Due to Statute or Regulation
+---------------------------------------------------
+
+If it is impossible for You to comply with any of the terms of this
+License with respect to some or all of the Covered Software due to
+statute, judicial order, or regulation then You must: (a) comply with
+the terms of this License to the maximum extent possible; and (b)
+describe the limitations and the code they affect. Such description must
+be placed in a text file included with all distributions of the Covered
+Software under this License. Except to the extent prohibited by statute
+or regulation, such description must be sufficiently detailed for a
+recipient of ordinary skill to be able to understand it.
+
+5. Termination
+--------------
+
+5.1. The rights granted under this License will terminate automatically
+if You fail to comply with any of its terms. However, if You become
+compliant, then the rights granted under this License from a particular
+Contributor are reinstated (a) provisionally, unless and until such
+Contributor explicitly and finally terminates Your grants, and (b) on an
+ongoing basis, if such Contributor fails to notify You of the
+non-compliance by some reasonable means prior to 60 days after You have
+come back into compliance. Moreover, Your grants from a particular
+Contributor are reinstated on an ongoing basis if such Contributor
+notifies You of the non-compliance by some reasonable means, this is the
+first time You have received notice of non-compliance with this License
+from such Contributor, and You become compliant prior to 30 days after
+Your receipt of the notice.
+
+5.2. If You initiate litigation against any entity by asserting a patent
+infringement claim (excluding declaratory judgment actions,
+counter-claims, and cross-claims) alleging that a Contributor Version
+directly or indirectly infringes any patent, then the rights granted to
+You by any and all Contributors for the Covered Software under Section
+2.1 of this License shall terminate.
+
+5.3. In the event of termination under Sections 5.1 or 5.2 above, all
+end user license agreements (excluding distributors and resellers) which
+have been validly granted by You or Your distributors under this License
+prior to termination shall survive termination.
+
+************************************************************************
+*                                                                      *
+*  6. Disclaimer of Warranty                                           *
+*  -------------------------                                           *
+*                                                                      *
+*  Covered Software is provided under this License on an "as is"       *
+*  basis, without warranty of any kind, either expressed, implied, or  *
+*  statutory, including, without limitation, warranties that the       *
+*  Covered Software is free of defects, merchantable, fit for a        *
+*  particular purpose or non-infringing. The entire risk as to the     *
+*  quality and performance of the Covered Software is with You.        *
+*  Should any Covered Software prove defective in any respect, You     *
+*  (not any Contributor) assume the cost of any necessary servicing,   *
+*  repair, or correction. This disclaimer of warranty constitutes an   *
+*  essential part of this License. No use of any Covered Software is   *
+*  authorized under this License except under this disclaimer.         *
+*                                                                      *
+************************************************************************
+
+************************************************************************
+*                                                                      *
+*  7. Limitation of Liability                                          *
+*  --------------------------                                          *
+*                                                                      *
+*  Under no circumstances and under no legal theory, whether tort      *
+*  (including negligence), contract, or otherwise, shall any           *
+*  Contributor, or anyone who distributes Covered Software as          *
+*  permitted above, be liable to You for any direct, indirect,         *
+*  special, incidental, or consequential damages of any character      *
+*  including, without limitation, damages for lost profits, loss of    *
+*  goodwill, work stoppage, computer failure or malfunction, or any    *
+*  and all other commercial damages or losses, even if such party      *
+*  shall have been informed of the possibility of such damages. This   *
+*  limitation of liability shall not apply to liability for death or   *
+*  personal injury resulting from such party's negligence to the       *
+*  extent applicable law prohibits such limitation. Some               *
+*  jurisdictions do not allow the exclusion or limitation of           *
+*  incidental or consequential damages, so this exclusion and          *
+*  limitation may not apply to You.                                    *
+*                                                                      *
+************************************************************************
+
+8. Litigation
+-------------
+
+Any litigation relating to this License may be brought only in the
+courts of a jurisdiction where the defendant maintains its principal
+place of business and such litigation shall be governed by laws of that
+jurisdiction, without reference to its conflict-of-law provisions.
+Nothing in this Section shall prevent a party's ability to bring
+cross-claims or counter-claims.
+
+9. Miscellaneous
+----------------
+
+This License represents the complete agreement concerning the subject
+matter hereof. If any provision of this License is held to be
+unenforceable, such provision shall be reformed only to the extent
+necessary to make it enforceable. Any law or regulation which provides
+that the language of a contract shall be construed against the drafter
+shall not be used to construe this License against a Contributor.
+
+10. Versions of the License
+---------------------------
+
+10.1. New Versions
+
+Mozilla Foundation is the license steward. Except as provided in Section
+10.3, no one other than the license steward has the right to modify or
+publish new versions of this License. Each version will be given a
+distinguishing version number.
+
+10.2. Effect of New Versions
+
+You may distribute the Covered Software under the terms of the version
+of the License under which You originally received the Covered Software,
+or under the terms of any subsequent version published by the license
+steward.
+
+10.3. Modified Versions
+
+If you create software not governed by this License, and you want to
+create a new license for such software, you may create and use a
+modified version of this License if you rename the license and remove
+any references to the name of the license steward (except to note that
+such modified license differs from this License).
+
+10.4. Distributing Source Code Form that is Incompatible With Secondary
+Licenses
+
+If You choose to distribute Source Code Form that is Incompatible With
+Secondary Licenses under the terms of this version of the License, the
+notice described in Exhibit B of this License must be attached.
+
+Exhibit A - Source Code Form License Notice
+-------------------------------------------
+
+  This Source Code Form is subject to the terms of the Mozilla Public
+  License, v. 2.0. If a copy of the MPL was not distributed with this
+  file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+If it is not possible or desirable to put the notice in a particular
+file, then You may include the notice in a location (such as a LICENSE
+file in a relevant directory) where a recipient would be likely to look
+for such a notice.
+
+You may add additional accurate notices of copyright ownership.
diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
@@ -0,0 +1,28 @@
+# gogol-drive
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+
+`0.0.1`
+
+
+## Description
+
+A client library for the Google Drive.
+
+
+## Contribute
+
+For any problems, comments, or feedback please create an issue [here on GitHub](https://github.com/brendanhay/amazonka/issues).
+
+> _Note:_ this library is an auto-generated Haskell package. Please see `amazonka-gen` for more information.
+
+
+## Licence
+
+`gogol-drive` is released under the [Mozilla Public License Version 2.0](http://www.mozilla.org/MPL/).
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,2 @@
+import           Distribution.Simple
+main = defaultMain
diff --git a/gen/Network/Google/Drive.hs b/gen/Network/Google/Drive.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Drive.hs
@@ -0,0 +1,855 @@
+{-# LANGUAGE DataKinds         #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE TypeOperators     #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+
+-- |
+-- Module      : Network.Google.Drive
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- The API to interact with Drive.
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference>
+module Network.Google.Drive
+    (
+    -- * Service Configuration
+      driveService
+
+    -- * API Declaration
+    , DriveAPI
+
+    -- * Resources
+
+    -- ** drive.about.get
+    , module Network.Google.Resource.Drive.About.Get
+
+    -- ** drive.apps.get
+    , module Network.Google.Resource.Drive.Apps.Get
+
+    -- ** drive.apps.list
+    , module Network.Google.Resource.Drive.Apps.List
+
+    -- ** drive.changes.get
+    , module Network.Google.Resource.Drive.Changes.Get
+
+    -- ** drive.changes.list
+    , module Network.Google.Resource.Drive.Changes.List
+
+    -- ** drive.changes.watch
+    , module Network.Google.Resource.Drive.Changes.Watch
+
+    -- ** drive.channels.stop
+    , module Network.Google.Resource.Drive.Channels.Stop
+
+    -- ** drive.children.delete
+    , module Network.Google.Resource.Drive.Children.Delete
+
+    -- ** drive.children.get
+    , module Network.Google.Resource.Drive.Children.Get
+
+    -- ** drive.children.insert
+    , module Network.Google.Resource.Drive.Children.Insert
+
+    -- ** drive.children.list
+    , module Network.Google.Resource.Drive.Children.List
+
+    -- ** drive.comments.delete
+    , module Network.Google.Resource.Drive.Comments.Delete
+
+    -- ** drive.comments.get
+    , module Network.Google.Resource.Drive.Comments.Get
+
+    -- ** drive.comments.insert
+    , module Network.Google.Resource.Drive.Comments.Insert
+
+    -- ** drive.comments.list
+    , module Network.Google.Resource.Drive.Comments.List
+
+    -- ** drive.comments.patch
+    , module Network.Google.Resource.Drive.Comments.Patch
+
+    -- ** drive.comments.update
+    , module Network.Google.Resource.Drive.Comments.Update
+
+    -- ** drive.files.copy
+    , module Network.Google.Resource.Drive.Files.Copy
+
+    -- ** drive.files.delete
+    , module Network.Google.Resource.Drive.Files.Delete
+
+    -- ** drive.files.emptyTrash
+    , module Network.Google.Resource.Drive.Files.EmptyTrash
+
+    -- ** drive.files.generateIds
+    , module Network.Google.Resource.Drive.Files.GenerateIds
+
+    -- ** drive.files.get
+    , module Network.Google.Resource.Drive.Files.Get
+
+    -- ** drive.files.insert
+    , module Network.Google.Resource.Drive.Files.Insert
+
+    -- ** drive.files.list
+    , module Network.Google.Resource.Drive.Files.List
+
+    -- ** drive.files.patch
+    , module Network.Google.Resource.Drive.Files.Patch
+
+    -- ** drive.files.touch
+    , module Network.Google.Resource.Drive.Files.Touch
+
+    -- ** drive.files.trash
+    , module Network.Google.Resource.Drive.Files.Trash
+
+    -- ** drive.files.untrash
+    , module Network.Google.Resource.Drive.Files.Untrash
+
+    -- ** drive.files.update
+    , module Network.Google.Resource.Drive.Files.Update
+
+    -- ** drive.files.watch
+    , module Network.Google.Resource.Drive.Files.Watch
+
+    -- ** drive.parents.delete
+    , module Network.Google.Resource.Drive.Parents.Delete
+
+    -- ** drive.parents.get
+    , module Network.Google.Resource.Drive.Parents.Get
+
+    -- ** drive.parents.insert
+    , module Network.Google.Resource.Drive.Parents.Insert
+
+    -- ** drive.parents.list
+    , module Network.Google.Resource.Drive.Parents.List
+
+    -- ** drive.permissions.delete
+    , module Network.Google.Resource.Drive.Permissions.Delete
+
+    -- ** drive.permissions.get
+    , module Network.Google.Resource.Drive.Permissions.Get
+
+    -- ** drive.permissions.getIdForEmail
+    , module Network.Google.Resource.Drive.Permissions.GetIdForEmail
+
+    -- ** drive.permissions.insert
+    , module Network.Google.Resource.Drive.Permissions.Insert
+
+    -- ** drive.permissions.list
+    , module Network.Google.Resource.Drive.Permissions.List
+
+    -- ** drive.permissions.patch
+    , module Network.Google.Resource.Drive.Permissions.Patch
+
+    -- ** drive.permissions.update
+    , module Network.Google.Resource.Drive.Permissions.Update
+
+    -- ** drive.properties.delete
+    , module Network.Google.Resource.Drive.Properties.Delete
+
+    -- ** drive.properties.get
+    , module Network.Google.Resource.Drive.Properties.Get
+
+    -- ** drive.properties.insert
+    , module Network.Google.Resource.Drive.Properties.Insert
+
+    -- ** drive.properties.list
+    , module Network.Google.Resource.Drive.Properties.List
+
+    -- ** drive.properties.patch
+    , module Network.Google.Resource.Drive.Properties.Patch
+
+    -- ** drive.properties.update
+    , module Network.Google.Resource.Drive.Properties.Update
+
+    -- ** drive.realtime.get
+    , module Network.Google.Resource.Drive.Realtime.Get
+
+    -- ** drive.realtime.update
+    , module Network.Google.Resource.Drive.Realtime.Update
+
+    -- ** drive.replies.delete
+    , module Network.Google.Resource.Drive.Replies.Delete
+
+    -- ** drive.replies.get
+    , module Network.Google.Resource.Drive.Replies.Get
+
+    -- ** drive.replies.insert
+    , module Network.Google.Resource.Drive.Replies.Insert
+
+    -- ** drive.replies.list
+    , module Network.Google.Resource.Drive.Replies.List
+
+    -- ** drive.replies.patch
+    , module Network.Google.Resource.Drive.Replies.Patch
+
+    -- ** drive.replies.update
+    , module Network.Google.Resource.Drive.Replies.Update
+
+    -- ** drive.revisions.delete
+    , module Network.Google.Resource.Drive.Revisions.Delete
+
+    -- ** drive.revisions.get
+    , module Network.Google.Resource.Drive.Revisions.Get
+
+    -- ** drive.revisions.list
+    , module Network.Google.Resource.Drive.Revisions.List
+
+    -- ** drive.revisions.patch
+    , module Network.Google.Resource.Drive.Revisions.Patch
+
+    -- ** drive.revisions.update
+    , module Network.Google.Resource.Drive.Revisions.Update
+
+    -- * Types
+
+    -- ** CommentContext
+    , CommentContext
+    , commentContext
+    , ccValue
+    , ccType
+
+    -- ** AppIconsItem
+    , AppIconsItem
+    , appIconsItem
+    , aiiSize
+    , aiiCategory
+    , aiiIconURL
+
+    -- ** FilesInsertVisibility
+    , FilesInsertVisibility (..)
+
+    -- ** FileList
+    , FileList
+    , fileList
+    , flEtag
+    , flNextPageToken
+    , flNextLink
+    , flKind
+    , flItems
+    , flSelfLink
+
+    -- ** ParentReference
+    , ParentReference
+    , parentReference
+    , prParentLink
+    , prIsRoot
+    , prKind
+    , prSelfLink
+    , prId
+
+    -- ** Property
+    , Property
+    , property
+    , pEtag
+    , pKind
+    , pValue
+    , pVisibility
+    , pSelfLink
+    , pKey
+
+    -- ** FilesListCorpus
+    , FilesListCorpus (..)
+
+    -- ** FileThumbnail
+    , FileThumbnail
+    , fileThumbnail
+    , ftImage
+    , ftMimeType
+
+    -- ** FilesListProjection
+    , FilesListProjection (..)
+
+    -- ** UserPicture
+    , UserPicture
+    , userPicture
+    , upURL
+
+    -- ** FilesUpdateModifiedDateBehavior
+    , FilesUpdateModifiedDateBehavior (..)
+
+    -- ** PropertyList
+    , PropertyList
+    , propertyList
+    , plEtag
+    , plKind
+    , plItems
+    , plSelfLink
+
+    -- ** ChildList
+    , ChildList
+    , childList
+    , clEtag
+    , clNextPageToken
+    , clNextLink
+    , clKind
+    , clItems
+    , clSelfLink
+
+    -- ** AppList
+    , AppList
+    , appList
+    , alDefaultAppIds
+    , alEtag
+    , alKind
+    , alItems
+    , alSelfLink
+
+    -- ** FileOpenWithLinks
+    , FileOpenWithLinks
+    , fileOpenWithLinks
+    , fowlAddtional
+
+    -- ** AboutAdditionalRoleInfoItemRoleSetsItem
+    , AboutAdditionalRoleInfoItemRoleSetsItem
+    , aboutAdditionalRoleInfoItemRoleSetsItem
+    , aariirsiPrimaryRole
+    , aariirsiAdditionalRoles
+
+    -- ** Channel
+    , Channel
+    , channel
+    , cResourceURI
+    , cResourceId
+    , cKind
+    , cExpiration
+    , cToken
+    , cAddress
+    , cPayload
+    , cParams
+    , cId
+    , cType
+
+    -- ** CommentReplyList
+    , CommentReplyList
+    , commentReplyList
+    , crlNextPageToken
+    , crlNextLink
+    , crlKind
+    , crlItems
+    , crlSelfLink
+
+    -- ** FileVideoMediaMetadata
+    , FileVideoMediaMetadata
+    , fileVideoMediaMetadata
+    , fvmmHeight
+    , fvmmWidth
+    , fvmmDurationMillis
+
+    -- ** Change
+    , Change
+    , change
+    , chaKind
+    , chaSelfLink
+    , chaModificationDate
+    , chaId
+    , chaDeleted
+    , chaFileId
+    , chaFile
+
+    -- ** App
+    , App
+    , app
+    , aLongDescription
+    , aOpenURLTemplate
+    , aAuthorized
+    , aObjectType
+    , aSecondaryMimeTypes
+    , aCreateInFolderTemplate
+    , aKind
+    , aIcons
+    , aProductURL
+    , aUseByDefault
+    , aShortDescription
+    , aName
+    , aCreateURL
+    , aId
+    , aPrimaryFileExtensions
+    , aInstalled
+    , aSupportsCreate
+    , aPrimaryMimeTypes
+    , aHasDriveWideScope
+    , aProductId
+    , aSecondaryFileExtensions
+    , aSupportsMultiOpen
+    , aSupportsImport
+    , aSupportsOfflineCreate
+
+    -- ** ChildReference
+    , ChildReference
+    , childReference
+    , crChildLink
+    , crKind
+    , crSelfLink
+    , crId
+
+    -- ** FilesWatchProjection
+    , FilesWatchProjection (..)
+
+    -- ** AboutMaxUploadSizesItem
+    , AboutMaxUploadSizesItem
+    , aboutMaxUploadSizesItem
+    , amusiSize
+    , amusiType
+
+    -- ** CommentReply
+    , CommentReply
+    , commentReply
+    , comHTMLContent
+    , comKind
+    , comContent
+    , comCreatedDate
+    , comReplyId
+    , comAuthor
+    , comModifiedDate
+    , comDeleted
+    , comVerb
+
+    -- ** AboutQuotaBytesByServiceItem
+    , AboutQuotaBytesByServiceItem
+    , aboutQuotaBytesByServiceItem
+    , aqbbsiBytesUsed
+    , aqbbsiServiceName
+
+    -- ** User
+    , User
+    , user
+    , uIsAuthenticatedUser
+    , uKind
+    , uPicture
+    , uEmailAddress
+    , uDisplayName
+    , uPermissionId
+
+    -- ** AboutExportFormatsItem
+    , AboutExportFormatsItem
+    , aboutExportFormatsItem
+    , aefiTargets
+    , aefiSource
+
+    -- ** ChangeList
+    , ChangeList
+    , changeList
+    , cllEtag
+    , cllNextPageToken
+    , cllNextLink
+    , cllKind
+    , cllItems
+    , cllSelfLink
+    , cllLargestChangeId
+
+    -- ** RevisionExportLinks
+    , RevisionExportLinks
+    , revisionExportLinks
+    , relAddtional
+
+    -- ** FileIndexableText
+    , FileIndexableText
+    , fileIndexableText
+    , fitText
+
+    -- ** AboutFeaturesItem
+    , AboutFeaturesItem
+    , aboutFeaturesItem
+    , afiFeatureRate
+    , afiFeatureName
+
+    -- ** ChannelParams
+    , ChannelParams
+    , channelParams
+    , cpAddtional
+
+    -- ** FilesPatchModifiedDateBehavior
+    , FilesPatchModifiedDateBehavior (..)
+
+    -- ** About
+    , About
+    , about
+    , aboExportFormats
+    , aboRemainingChangeIds
+    , aboLanguageCode
+    , aboEtag
+    , aboImportFormats
+    , aboKind
+    , aboDomainSharingPolicy
+    , aboQuotaBytesUsedInTrash
+    , aboQuotaType
+    , aboMaxUploadSizes
+    , aboUser
+    , aboSelfLink
+    , aboName
+    , aboFeatures
+    , aboIsCurrentAppInstalled
+    , aboQuotaBytesTotal
+    , aboRootFolderId
+    , aboQuotaBytesUsed
+    , aboAdditionalRoleInfo
+    , aboFolderColorPalette
+    , aboPermissionId
+    , aboQuotaBytesUsedAggregate
+    , aboQuotaBytesByService
+    , aboLargestChangeId
+
+    -- ** FileImageMediaMetadataLocation
+    , FileImageMediaMetadataLocation
+    , fileImageMediaMetadataLocation
+    , fimmlLatitude
+    , fimmlAltitude
+    , fimmlLongitude
+
+    -- ** AboutImportFormatsItem
+    , AboutImportFormatsItem
+    , aboutImportFormatsItem
+    , aifiTargets
+    , aifiSource
+
+    -- ** FileImageMediaMetadata
+    , FileImageMediaMetadata
+    , fileImageMediaMetadata
+    , fimmRotation
+    , fimmHeight
+    , fimmSubjectDistance
+    , fimmMaxApertureValue
+    , fimmIsoSpeed
+    , fimmLocation
+    , fimmAperture
+    , fimmFocalLength
+    , fimmCameraMake
+    , fimmWidth
+    , fimmExposureTime
+    , fimmCameraModel
+    , fimmWhiteBalance
+    , fimmDate
+    , fimmLens
+    , fimmFlashUsed
+    , fimmExposureBias
+    , fimmMeteringMode
+    , fimmExposureMode
+    , fimmSensor
+    , fimmColorSpace
+
+    -- ** FileLabels
+    , FileLabels
+    , fileLabels
+    , flViewed
+    , flTrashed
+    , flStarred
+    , flHidden
+    , flRestricted
+
+    -- ** Comment
+    , Comment
+    , comment
+    , ccStatus
+    , ccHTMLContent
+    , ccContext
+    , ccKind
+    , ccFileTitle
+    , ccAnchor
+    , ccContent
+    , ccReplies
+    , ccCreatedDate
+    , ccSelfLink
+    , ccAuthor
+    , ccModifiedDate
+    , ccDeleted
+    , ccFileId
+    , ccCommentId
+
+    -- ** Revision
+    , Revision
+    , revision
+    , rEtag
+    , rOriginalFilename
+    , rKind
+    , rPublishedLink
+    , rPinned
+    , rPublished
+    , rLastModifyingUser
+    , rFileSize
+    , rPublishAuto
+    , rMD5Checksum
+    , rMimeType
+    , rSelfLink
+    , rLastModifyingUserName
+    , rDownloadURL
+    , rExportLinks
+    , rPublishedOutsideDomain
+    , rId
+    , rModifiedDate
+
+    -- ** AboutAdditionalRoleInfoItem
+    , AboutAdditionalRoleInfoItem
+    , aboutAdditionalRoleInfoItem
+    , aariiRoleSets
+    , aariiType
+
+    -- ** Permission
+    , Permission
+    , permission
+    , perPhotoLink
+    , perEtag
+    , perWithLink
+    , perKind
+    , perDomain
+    , perValue
+    , perAdditionalRoles
+    , perRole
+    , perSelfLink
+    , perName
+    , perAuthKey
+    , perEmailAddress
+    , perId
+    , perType
+
+    -- ** File
+    , File
+    , file
+    , fOwnedByMe
+    , fThumbnailLink
+    , fFullFileExtension
+    , fThumbnail
+    , fMarkedViewedByMeDate
+    , fEtag
+    , fFileExtension
+    , fCanComment
+    , fOwners
+    , fOwnerNames
+    , fOpenWithLinks
+    , fWebViewLink
+    , fOriginalFilename
+    , fKind
+    , fLastModifyingUser
+    , fIconLink
+    , fEmbedLink
+    , fFileSize
+    , fAppDataContents
+    , fImageMediaMetadata
+    , fExplicitlyTrashed
+    , fEditable
+    , fModifiedByMeDate
+    , fLastViewedByMeDate
+    , fShared
+    , fMD5Checksum
+    , fFolderColorRgb
+    , fMimeType
+    , fCreatedDate
+    , fSelfLink
+    , fLastModifyingUserName
+    , fShareable
+    , fDownloadURL
+    , fExportLinks
+    , fCopyable
+    , fParents
+    , fSharedWithMeDate
+    , fSpaces
+    , fVersion
+    , fUserPermission
+    , fWritersCanShare
+    , fDefaultOpenWithLink
+    , fId
+    , fLabels
+    , fModifiedDate
+    , fPermissions
+    , fQuotaBytesUsed
+    , fTitle
+    , fAlternateLink
+    , fVideoMediaMetadata
+    , fHeadRevisionId
+    , fDescription
+    , fSharingUser
+    , fWebContentLink
+    , fProperties
+    , fIndexableText
+
+    -- ** PermissionId
+    , PermissionId
+    , permissionId
+    , piKind
+    , piId
+
+    -- ** FilesCopyVisibility
+    , FilesCopyVisibility (..)
+
+    -- ** FilesGetProjection
+    , FilesGetProjection (..)
+
+    -- ** ParentList
+    , ParentList
+    , parentList
+    , parEtag
+    , parKind
+    , parItems
+    , parSelfLink
+
+    -- ** GeneratedIds
+    , GeneratedIds
+    , generatedIds
+    , giSpace
+    , giKind
+    , giIds
+
+    -- ** FileExportLinks
+    , FileExportLinks
+    , fileExportLinks
+    , felAddtional
+
+    -- ** CommentList
+    , CommentList
+    , commentList
+    , comoNextPageToken
+    , comoNextLink
+    , comoKind
+    , comoItems
+    , comoSelfLink
+
+    -- ** RevisionList
+    , RevisionList
+    , revisionList
+    , rlEtag
+    , rlKind
+    , rlItems
+    , rlSelfLink
+
+    -- ** PermissionList
+    , PermissionList
+    , permissionList
+    , pllEtag
+    , pllKind
+    , pllItems
+    , pllSelfLink
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+import           Network.Google.Resource.Drive.About.Get
+import           Network.Google.Resource.Drive.Apps.Get
+import           Network.Google.Resource.Drive.Apps.List
+import           Network.Google.Resource.Drive.Changes.Get
+import           Network.Google.Resource.Drive.Changes.List
+import           Network.Google.Resource.Drive.Changes.Watch
+import           Network.Google.Resource.Drive.Channels.Stop
+import           Network.Google.Resource.Drive.Children.Delete
+import           Network.Google.Resource.Drive.Children.Get
+import           Network.Google.Resource.Drive.Children.Insert
+import           Network.Google.Resource.Drive.Children.List
+import           Network.Google.Resource.Drive.Comments.Delete
+import           Network.Google.Resource.Drive.Comments.Get
+import           Network.Google.Resource.Drive.Comments.Insert
+import           Network.Google.Resource.Drive.Comments.List
+import           Network.Google.Resource.Drive.Comments.Patch
+import           Network.Google.Resource.Drive.Comments.Update
+import           Network.Google.Resource.Drive.Files.Copy
+import           Network.Google.Resource.Drive.Files.Delete
+import           Network.Google.Resource.Drive.Files.EmptyTrash
+import           Network.Google.Resource.Drive.Files.GenerateIds
+import           Network.Google.Resource.Drive.Files.Get
+import           Network.Google.Resource.Drive.Files.Insert
+import           Network.Google.Resource.Drive.Files.List
+import           Network.Google.Resource.Drive.Files.Patch
+import           Network.Google.Resource.Drive.Files.Touch
+import           Network.Google.Resource.Drive.Files.Trash
+import           Network.Google.Resource.Drive.Files.Untrash
+import           Network.Google.Resource.Drive.Files.Update
+import           Network.Google.Resource.Drive.Files.Watch
+import           Network.Google.Resource.Drive.Parents.Delete
+import           Network.Google.Resource.Drive.Parents.Get
+import           Network.Google.Resource.Drive.Parents.Insert
+import           Network.Google.Resource.Drive.Parents.List
+import           Network.Google.Resource.Drive.Permissions.Delete
+import           Network.Google.Resource.Drive.Permissions.Get
+import           Network.Google.Resource.Drive.Permissions.GetIdForEmail
+import           Network.Google.Resource.Drive.Permissions.Insert
+import           Network.Google.Resource.Drive.Permissions.List
+import           Network.Google.Resource.Drive.Permissions.Patch
+import           Network.Google.Resource.Drive.Permissions.Update
+import           Network.Google.Resource.Drive.Properties.Delete
+import           Network.Google.Resource.Drive.Properties.Get
+import           Network.Google.Resource.Drive.Properties.Insert
+import           Network.Google.Resource.Drive.Properties.List
+import           Network.Google.Resource.Drive.Properties.Patch
+import           Network.Google.Resource.Drive.Properties.Update
+import           Network.Google.Resource.Drive.Realtime.Get
+import           Network.Google.Resource.Drive.Realtime.Update
+import           Network.Google.Resource.Drive.Replies.Delete
+import           Network.Google.Resource.Drive.Replies.Get
+import           Network.Google.Resource.Drive.Replies.Insert
+import           Network.Google.Resource.Drive.Replies.List
+import           Network.Google.Resource.Drive.Replies.Patch
+import           Network.Google.Resource.Drive.Replies.Update
+import           Network.Google.Resource.Drive.Revisions.Delete
+import           Network.Google.Resource.Drive.Revisions.Get
+import           Network.Google.Resource.Drive.Revisions.List
+import           Network.Google.Resource.Drive.Revisions.Patch
+import           Network.Google.Resource.Drive.Revisions.Update
+
+{- $resources
+TODO
+-}
+
+-- | Represents the entirety of the methods and resources available for the Drive API service.
+type DriveAPI =
+     AppsListResource :<|> AppsGetResource :<|>
+       ChangesListResource
+       :<|> ChangesGetResource
+       :<|> ChangesWatchResource
+       :<|> ChannelsStopResource
+       :<|> ChildrenInsertResource
+       :<|> ChildrenListResource
+       :<|> ChildrenGetResource
+       :<|> ChildrenDeleteResource
+       :<|> RepliesInsertResource
+       :<|> RepliesListResource
+       :<|> RepliesPatchResource
+       :<|> RepliesGetResource
+       :<|> RepliesDeleteResource
+       :<|> RepliesUpdateResource
+       :<|> ParentsInsertResource
+       :<|> ParentsListResource
+       :<|> ParentsGetResource
+       :<|> ParentsDeleteResource
+       :<|> RealtimeGetResource
+       :<|> RealtimeUpdateResource
+       :<|> AboutGetResource
+       :<|> FilesInsertResource
+       :<|> FilesListResource
+       :<|> FilesCopyResource
+       :<|> FilesPatchResource
+       :<|> FilesGetResource
+       :<|> FilesEmptyTrashResource
+       :<|> FilesTrashResource
+       :<|> FilesUntrashResource
+       :<|> FilesTouchResource
+       :<|> FilesGenerateIdsResource
+       :<|> FilesDeleteResource
+       :<|> FilesUpdateResource
+       :<|> FilesWatchResource
+       :<|> PermissionsGetIdForEmailResource
+       :<|> PermissionsInsertResource
+       :<|> PermissionsListResource
+       :<|> PermissionsPatchResource
+       :<|> PermissionsGetResource
+       :<|> PermissionsDeleteResource
+       :<|> PermissionsUpdateResource
+       :<|> CommentsInsertResource
+       :<|> CommentsListResource
+       :<|> CommentsPatchResource
+       :<|> CommentsGetResource
+       :<|> CommentsDeleteResource
+       :<|> CommentsUpdateResource
+       :<|> RevisionsListResource
+       :<|> RevisionsPatchResource
+       :<|> RevisionsGetResource
+       :<|> RevisionsDeleteResource
+       :<|> RevisionsUpdateResource
+       :<|> PropertiesInsertResource
+       :<|> PropertiesListResource
+       :<|> PropertiesPatchResource
+       :<|> PropertiesGetResource
+       :<|> PropertiesDeleteResource
+       :<|> PropertiesUpdateResource
diff --git a/gen/Network/Google/Drive/Types.hs b/gen/Network/Google/Drive/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Drive/Types.hs
@@ -0,0 +1,594 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Network.Google.Drive.Types
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.Google.Drive.Types
+    (
+    -- * Service Configuration
+      driveService
+
+    -- * OAuth Scopes
+    , driveMetadataReadonlyScope
+    , driveAppsReadonlyScope
+    , drivePhotosReadonlyScope
+    , driveAppdataScope
+    , driveReadonlyScope
+    , driveScope
+    , driveFileScope
+    , driveMetadataScope
+    , driveScriptsScope
+
+    -- * CommentContext
+    , CommentContext
+    , commentContext
+    , ccValue
+    , ccType
+
+    -- * AppIconsItem
+    , AppIconsItem
+    , appIconsItem
+    , aiiSize
+    , aiiCategory
+    , aiiIconURL
+
+    -- * FilesInsertVisibility
+    , FilesInsertVisibility (..)
+
+    -- * FileList
+    , FileList
+    , fileList
+    , flEtag
+    , flNextPageToken
+    , flNextLink
+    , flKind
+    , flItems
+    , flSelfLink
+
+    -- * ParentReference
+    , ParentReference
+    , parentReference
+    , prParentLink
+    , prIsRoot
+    , prKind
+    , prSelfLink
+    , prId
+
+    -- * Property
+    , Property
+    , property
+    , pEtag
+    , pKind
+    , pValue
+    , pVisibility
+    , pSelfLink
+    , pKey
+
+    -- * FilesListCorpus
+    , FilesListCorpus (..)
+
+    -- * FileThumbnail
+    , FileThumbnail
+    , fileThumbnail
+    , ftImage
+    , ftMimeType
+
+    -- * FilesListProjection
+    , FilesListProjection (..)
+
+    -- * UserPicture
+    , UserPicture
+    , userPicture
+    , upURL
+
+    -- * FilesUpdateModifiedDateBehavior
+    , FilesUpdateModifiedDateBehavior (..)
+
+    -- * PropertyList
+    , PropertyList
+    , propertyList
+    , plEtag
+    , plKind
+    , plItems
+    , plSelfLink
+
+    -- * ChildList
+    , ChildList
+    , childList
+    , clEtag
+    , clNextPageToken
+    , clNextLink
+    , clKind
+    , clItems
+    , clSelfLink
+
+    -- * AppList
+    , AppList
+    , appList
+    , alDefaultAppIds
+    , alEtag
+    , alKind
+    , alItems
+    , alSelfLink
+
+    -- * FileOpenWithLinks
+    , FileOpenWithLinks
+    , fileOpenWithLinks
+    , fowlAddtional
+
+    -- * AboutAdditionalRoleInfoItemRoleSetsItem
+    , AboutAdditionalRoleInfoItemRoleSetsItem
+    , aboutAdditionalRoleInfoItemRoleSetsItem
+    , aariirsiPrimaryRole
+    , aariirsiAdditionalRoles
+
+    -- * Channel
+    , Channel
+    , channel
+    , cResourceURI
+    , cResourceId
+    , cKind
+    , cExpiration
+    , cToken
+    , cAddress
+    , cPayload
+    , cParams
+    , cId
+    , cType
+
+    -- * CommentReplyList
+    , CommentReplyList
+    , commentReplyList
+    , crlNextPageToken
+    , crlNextLink
+    , crlKind
+    , crlItems
+    , crlSelfLink
+
+    -- * FileVideoMediaMetadata
+    , FileVideoMediaMetadata
+    , fileVideoMediaMetadata
+    , fvmmHeight
+    , fvmmWidth
+    , fvmmDurationMillis
+
+    -- * Change
+    , Change
+    , change
+    , chaKind
+    , chaSelfLink
+    , chaModificationDate
+    , chaId
+    , chaDeleted
+    , chaFileId
+    , chaFile
+
+    -- * App
+    , App
+    , app
+    , aLongDescription
+    , aOpenURLTemplate
+    , aAuthorized
+    , aObjectType
+    , aSecondaryMimeTypes
+    , aCreateInFolderTemplate
+    , aKind
+    , aIcons
+    , aProductURL
+    , aUseByDefault
+    , aShortDescription
+    , aName
+    , aCreateURL
+    , aId
+    , aPrimaryFileExtensions
+    , aInstalled
+    , aSupportsCreate
+    , aPrimaryMimeTypes
+    , aHasDriveWideScope
+    , aProductId
+    , aSecondaryFileExtensions
+    , aSupportsMultiOpen
+    , aSupportsImport
+    , aSupportsOfflineCreate
+
+    -- * ChildReference
+    , ChildReference
+    , childReference
+    , crChildLink
+    , crKind
+    , crSelfLink
+    , crId
+
+    -- * FilesWatchProjection
+    , FilesWatchProjection (..)
+
+    -- * AboutMaxUploadSizesItem
+    , AboutMaxUploadSizesItem
+    , aboutMaxUploadSizesItem
+    , amusiSize
+    , amusiType
+
+    -- * CommentReply
+    , CommentReply
+    , commentReply
+    , comHTMLContent
+    , comKind
+    , comContent
+    , comCreatedDate
+    , comReplyId
+    , comAuthor
+    , comModifiedDate
+    , comDeleted
+    , comVerb
+
+    -- * AboutQuotaBytesByServiceItem
+    , AboutQuotaBytesByServiceItem
+    , aboutQuotaBytesByServiceItem
+    , aqbbsiBytesUsed
+    , aqbbsiServiceName
+
+    -- * User
+    , User
+    , user
+    , uIsAuthenticatedUser
+    , uKind
+    , uPicture
+    , uEmailAddress
+    , uDisplayName
+    , uPermissionId
+
+    -- * AboutExportFormatsItem
+    , AboutExportFormatsItem
+    , aboutExportFormatsItem
+    , aefiTargets
+    , aefiSource
+
+    -- * ChangeList
+    , ChangeList
+    , changeList
+    , cllEtag
+    , cllNextPageToken
+    , cllNextLink
+    , cllKind
+    , cllItems
+    , cllSelfLink
+    , cllLargestChangeId
+
+    -- * RevisionExportLinks
+    , RevisionExportLinks
+    , revisionExportLinks
+    , relAddtional
+
+    -- * FileIndexableText
+    , FileIndexableText
+    , fileIndexableText
+    , fitText
+
+    -- * AboutFeaturesItem
+    , AboutFeaturesItem
+    , aboutFeaturesItem
+    , afiFeatureRate
+    , afiFeatureName
+
+    -- * ChannelParams
+    , ChannelParams
+    , channelParams
+    , cpAddtional
+
+    -- * FilesPatchModifiedDateBehavior
+    , FilesPatchModifiedDateBehavior (..)
+
+    -- * About
+    , About
+    , about
+    , aboExportFormats
+    , aboRemainingChangeIds
+    , aboLanguageCode
+    , aboEtag
+    , aboImportFormats
+    , aboKind
+    , aboDomainSharingPolicy
+    , aboQuotaBytesUsedInTrash
+    , aboQuotaType
+    , aboMaxUploadSizes
+    , aboUser
+    , aboSelfLink
+    , aboName
+    , aboFeatures
+    , aboIsCurrentAppInstalled
+    , aboQuotaBytesTotal
+    , aboRootFolderId
+    , aboQuotaBytesUsed
+    , aboAdditionalRoleInfo
+    , aboFolderColorPalette
+    , aboPermissionId
+    , aboQuotaBytesUsedAggregate
+    , aboQuotaBytesByService
+    , aboLargestChangeId
+
+    -- * FileImageMediaMetadataLocation
+    , FileImageMediaMetadataLocation
+    , fileImageMediaMetadataLocation
+    , fimmlLatitude
+    , fimmlAltitude
+    , fimmlLongitude
+
+    -- * AboutImportFormatsItem
+    , AboutImportFormatsItem
+    , aboutImportFormatsItem
+    , aifiTargets
+    , aifiSource
+
+    -- * FileImageMediaMetadata
+    , FileImageMediaMetadata
+    , fileImageMediaMetadata
+    , fimmRotation
+    , fimmHeight
+    , fimmSubjectDistance
+    , fimmMaxApertureValue
+    , fimmIsoSpeed
+    , fimmLocation
+    , fimmAperture
+    , fimmFocalLength
+    , fimmCameraMake
+    , fimmWidth
+    , fimmExposureTime
+    , fimmCameraModel
+    , fimmWhiteBalance
+    , fimmDate
+    , fimmLens
+    , fimmFlashUsed
+    , fimmExposureBias
+    , fimmMeteringMode
+    , fimmExposureMode
+    , fimmSensor
+    , fimmColorSpace
+
+    -- * FileLabels
+    , FileLabels
+    , fileLabels
+    , flViewed
+    , flTrashed
+    , flStarred
+    , flHidden
+    , flRestricted
+
+    -- * Comment
+    , Comment
+    , comment
+    , ccStatus
+    , ccHTMLContent
+    , ccContext
+    , ccKind
+    , ccFileTitle
+    , ccAnchor
+    , ccContent
+    , ccReplies
+    , ccCreatedDate
+    , ccSelfLink
+    , ccAuthor
+    , ccModifiedDate
+    , ccDeleted
+    , ccFileId
+    , ccCommentId
+
+    -- * Revision
+    , Revision
+    , revision
+    , rEtag
+    , rOriginalFilename
+    , rKind
+    , rPublishedLink
+    , rPinned
+    , rPublished
+    , rLastModifyingUser
+    , rFileSize
+    , rPublishAuto
+    , rMD5Checksum
+    , rMimeType
+    , rSelfLink
+    , rLastModifyingUserName
+    , rDownloadURL
+    , rExportLinks
+    , rPublishedOutsideDomain
+    , rId
+    , rModifiedDate
+
+    -- * AboutAdditionalRoleInfoItem
+    , AboutAdditionalRoleInfoItem
+    , aboutAdditionalRoleInfoItem
+    , aariiRoleSets
+    , aariiType
+
+    -- * Permission
+    , Permission
+    , permission
+    , perPhotoLink
+    , perEtag
+    , perWithLink
+    , perKind
+    , perDomain
+    , perValue
+    , perAdditionalRoles
+    , perRole
+    , perSelfLink
+    , perName
+    , perAuthKey
+    , perEmailAddress
+    , perId
+    , perType
+
+    -- * File
+    , File
+    , file
+    , fOwnedByMe
+    , fThumbnailLink
+    , fFullFileExtension
+    , fThumbnail
+    , fMarkedViewedByMeDate
+    , fEtag
+    , fFileExtension
+    , fCanComment
+    , fOwners
+    , fOwnerNames
+    , fOpenWithLinks
+    , fWebViewLink
+    , fOriginalFilename
+    , fKind
+    , fLastModifyingUser
+    , fIconLink
+    , fEmbedLink
+    , fFileSize
+    , fAppDataContents
+    , fImageMediaMetadata
+    , fExplicitlyTrashed
+    , fEditable
+    , fModifiedByMeDate
+    , fLastViewedByMeDate
+    , fShared
+    , fMD5Checksum
+    , fFolderColorRgb
+    , fMimeType
+    , fCreatedDate
+    , fSelfLink
+    , fLastModifyingUserName
+    , fShareable
+    , fDownloadURL
+    , fExportLinks
+    , fCopyable
+    , fParents
+    , fSharedWithMeDate
+    , fSpaces
+    , fVersion
+    , fUserPermission
+    , fWritersCanShare
+    , fDefaultOpenWithLink
+    , fId
+    , fLabels
+    , fModifiedDate
+    , fPermissions
+    , fQuotaBytesUsed
+    , fTitle
+    , fAlternateLink
+    , fVideoMediaMetadata
+    , fHeadRevisionId
+    , fDescription
+    , fSharingUser
+    , fWebContentLink
+    , fProperties
+    , fIndexableText
+
+    -- * PermissionId
+    , PermissionId
+    , permissionId
+    , piKind
+    , piId
+
+    -- * FilesCopyVisibility
+    , FilesCopyVisibility (..)
+
+    -- * FilesGetProjection
+    , FilesGetProjection (..)
+
+    -- * ParentList
+    , ParentList
+    , parentList
+    , parEtag
+    , parKind
+    , parItems
+    , parSelfLink
+
+    -- * GeneratedIds
+    , GeneratedIds
+    , generatedIds
+    , giSpace
+    , giKind
+    , giIds
+
+    -- * FileExportLinks
+    , FileExportLinks
+    , fileExportLinks
+    , felAddtional
+
+    -- * CommentList
+    , CommentList
+    , commentList
+    , comoNextPageToken
+    , comoNextLink
+    , comoKind
+    , comoItems
+    , comoSelfLink
+
+    -- * RevisionList
+    , RevisionList
+    , revisionList
+    , rlEtag
+    , rlKind
+    , rlItems
+    , rlSelfLink
+
+    -- * PermissionList
+    , PermissionList
+    , permissionList
+    , pllEtag
+    , pllKind
+    , pllItems
+    , pllSelfLink
+    ) where
+
+import           Network.Google.Drive.Types.Product
+import           Network.Google.Drive.Types.Sum
+import           Network.Google.Prelude
+
+-- | Default request referring to version 'v2' of the Drive API. This contains the host and root path used as a starting point for constructing service requests.
+driveService :: Service
+driveService
+  = defaultService (ServiceId "drive:v2")
+      "www.googleapis.com"
+
+-- | View metadata for files in your Google Drive
+driveMetadataReadonlyScope :: OAuthScope
+driveMetadataReadonlyScope = "https://www.googleapis.com/auth/drive.metadata.readonly";
+
+-- | View your Google Drive apps
+driveAppsReadonlyScope :: OAuthScope
+driveAppsReadonlyScope = "https://www.googleapis.com/auth/drive.apps.readonly";
+
+-- | View the photos, videos and albums in your Google Photos
+drivePhotosReadonlyScope :: OAuthScope
+drivePhotosReadonlyScope = "https://www.googleapis.com/auth/drive.photos.readonly";
+
+-- | View and manage its own configuration data in your Google Drive
+driveAppdataScope :: OAuthScope
+driveAppdataScope = "https://www.googleapis.com/auth/drive.appdata";
+
+-- | View the files in your Google Drive
+driveReadonlyScope :: OAuthScope
+driveReadonlyScope = "https://www.googleapis.com/auth/drive.readonly";
+
+-- | View and manage the files in your Google Drive
+driveScope :: OAuthScope
+driveScope = "https://www.googleapis.com/auth/drive";
+
+-- | View and manage Google Drive files and folders that you have opened or
+-- created with this app
+driveFileScope :: OAuthScope
+driveFileScope = "https://www.googleapis.com/auth/drive.file";
+
+-- | View and manage metadata of files in your Google Drive
+driveMetadataScope :: OAuthScope
+driveMetadataScope = "https://www.googleapis.com/auth/drive.metadata";
+
+-- | Modify your Google Apps Script scripts\' behavior
+driveScriptsScope :: OAuthScope
+driveScriptsScope = "https://www.googleapis.com/auth/drive.scripts";
diff --git a/gen/Network/Google/Drive/Types/Product.hs b/gen/Network/Google/Drive/Types/Product.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Drive/Types/Product.hs
@@ -0,0 +1,4831 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Network.Google.Drive.Types.Product
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.Google.Drive.Types.Product where
+
+import           Network.Google.Drive.Types.Sum
+import           Network.Google.Prelude
+
+-- | The context of the file which is being commented on.
+--
+-- /See:/ 'commentContext' smart constructor.
+data CommentContext = CommentContext
+    { _ccValue :: !(Maybe Text)
+    , _ccType  :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CommentContext' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ccValue'
+--
+-- * 'ccType'
+commentContext
+    :: CommentContext
+commentContext =
+    CommentContext
+    { _ccValue = Nothing
+    , _ccType = Nothing
+    }
+
+-- | Data representation of the segment of the file being commented on. In
+-- the case of a text file for example, this would be the actual text that
+-- the comment is about.
+ccValue :: Lens' CommentContext (Maybe Text)
+ccValue = lens _ccValue (\ s a -> s{_ccValue = a})
+
+-- | The MIME type of the context snippet.
+ccType :: Lens' CommentContext (Maybe Text)
+ccType = lens _ccType (\ s a -> s{_ccType = a})
+
+instance FromJSON CommentContext where
+        parseJSON
+          = withObject "CommentContext"
+              (\ o ->
+                 CommentContext <$>
+                   (o .:? "value") <*> (o .:? "type"))
+
+instance ToJSON CommentContext where
+        toJSON CommentContext{..}
+          = object
+              (catMaybes
+                 [("value" .=) <$> _ccValue, ("type" .=) <$> _ccType])
+
+--
+-- /See:/ 'appIconsItem' smart constructor.
+data AppIconsItem = AppIconsItem
+    { _aiiSize     :: !(Maybe (Textual Int32))
+    , _aiiCategory :: !(Maybe Text)
+    , _aiiIconURL  :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AppIconsItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aiiSize'
+--
+-- * 'aiiCategory'
+--
+-- * 'aiiIconURL'
+appIconsItem
+    :: AppIconsItem
+appIconsItem =
+    AppIconsItem
+    { _aiiSize = Nothing
+    , _aiiCategory = Nothing
+    , _aiiIconURL = Nothing
+    }
+
+-- | Size of the icon. Represented as the maximum of the width and height.
+aiiSize :: Lens' AppIconsItem (Maybe Int32)
+aiiSize
+  = lens _aiiSize (\ s a -> s{_aiiSize = a}) .
+      mapping _Coerce
+
+-- | Category of the icon. Allowed values are: - application - icon for the
+-- application - document - icon for a file associated with the app -
+-- documentShared - icon for a shared file associated with the app
+aiiCategory :: Lens' AppIconsItem (Maybe Text)
+aiiCategory
+  = lens _aiiCategory (\ s a -> s{_aiiCategory = a})
+
+-- | URL for the icon.
+aiiIconURL :: Lens' AppIconsItem (Maybe Text)
+aiiIconURL
+  = lens _aiiIconURL (\ s a -> s{_aiiIconURL = a})
+
+instance FromJSON AppIconsItem where
+        parseJSON
+          = withObject "AppIconsItem"
+              (\ o ->
+                 AppIconsItem <$>
+                   (o .:? "size") <*> (o .:? "category") <*>
+                     (o .:? "iconUrl"))
+
+instance ToJSON AppIconsItem where
+        toJSON AppIconsItem{..}
+          = object
+              (catMaybes
+                 [("size" .=) <$> _aiiSize,
+                  ("category" .=) <$> _aiiCategory,
+                  ("iconUrl" .=) <$> _aiiIconURL])
+
+-- | A list of files.
+--
+-- /See:/ 'fileList' smart constructor.
+data FileList = FileList
+    { _flEtag          :: !(Maybe Text)
+    , _flNextPageToken :: !(Maybe Text)
+    , _flNextLink      :: !(Maybe Text)
+    , _flKind          :: !Text
+    , _flItems         :: !(Maybe [File])
+    , _flSelfLink      :: !(Maybe Text)
+    } 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:
+--
+-- * 'flEtag'
+--
+-- * 'flNextPageToken'
+--
+-- * 'flNextLink'
+--
+-- * 'flKind'
+--
+-- * 'flItems'
+--
+-- * 'flSelfLink'
+fileList
+    :: FileList
+fileList =
+    FileList
+    { _flEtag = Nothing
+    , _flNextPageToken = Nothing
+    , _flNextLink = Nothing
+    , _flKind = "drive#fileList"
+    , _flItems = Nothing
+    , _flSelfLink = Nothing
+    }
+
+-- | The ETag of the list.
+flEtag :: Lens' FileList (Maybe Text)
+flEtag = lens _flEtag (\ s a -> s{_flEtag = a})
+
+-- | The page token for the next page of files.
+flNextPageToken :: Lens' FileList (Maybe Text)
+flNextPageToken
+  = lens _flNextPageToken
+      (\ s a -> s{_flNextPageToken = a})
+
+-- | A link to the next page of files.
+flNextLink :: Lens' FileList (Maybe Text)
+flNextLink
+  = lens _flNextLink (\ s a -> s{_flNextLink = a})
+
+-- | This is always drive#fileList.
+flKind :: Lens' FileList Text
+flKind = lens _flKind (\ s a -> s{_flKind = a})
+
+-- | The actual list of files.
+flItems :: Lens' FileList [File]
+flItems
+  = lens _flItems (\ s a -> s{_flItems = a}) . _Default
+      . _Coerce
+
+-- | A link back to this list.
+flSelfLink :: Lens' FileList (Maybe Text)
+flSelfLink
+  = lens _flSelfLink (\ s a -> s{_flSelfLink = a})
+
+instance FromJSON FileList where
+        parseJSON
+          = withObject "FileList"
+              (\ o ->
+                 FileList <$>
+                   (o .:? "etag") <*> (o .:? "nextPageToken") <*>
+                     (o .:? "nextLink")
+                     <*> (o .:? "kind" .!= "drive#fileList")
+                     <*> (o .:? "items" .!= mempty)
+                     <*> (o .:? "selfLink"))
+
+instance ToJSON FileList where
+        toJSON FileList{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _flEtag,
+                  ("nextPageToken" .=) <$> _flNextPageToken,
+                  ("nextLink" .=) <$> _flNextLink,
+                  Just ("kind" .= _flKind), ("items" .=) <$> _flItems,
+                  ("selfLink" .=) <$> _flSelfLink])
+
+-- | A reference to a file\'s parent.
+--
+-- /See:/ 'parentReference' smart constructor.
+data ParentReference = ParentReference
+    { _prParentLink :: !(Maybe Text)
+    , _prIsRoot     :: !(Maybe Bool)
+    , _prKind       :: !Text
+    , _prSelfLink   :: !(Maybe Text)
+    , _prId         :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ParentReference' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'prParentLink'
+--
+-- * 'prIsRoot'
+--
+-- * 'prKind'
+--
+-- * 'prSelfLink'
+--
+-- * 'prId'
+parentReference
+    :: ParentReference
+parentReference =
+    ParentReference
+    { _prParentLink = Nothing
+    , _prIsRoot = Nothing
+    , _prKind = "drive#parentReference"
+    , _prSelfLink = Nothing
+    , _prId = Nothing
+    }
+
+-- | A link to the parent.
+prParentLink :: Lens' ParentReference (Maybe Text)
+prParentLink
+  = lens _prParentLink (\ s a -> s{_prParentLink = a})
+
+-- | Whether or not the parent is the root folder.
+prIsRoot :: Lens' ParentReference (Maybe Bool)
+prIsRoot = lens _prIsRoot (\ s a -> s{_prIsRoot = a})
+
+-- | This is always drive#parentReference.
+prKind :: Lens' ParentReference Text
+prKind = lens _prKind (\ s a -> s{_prKind = a})
+
+-- | A link back to this reference.
+prSelfLink :: Lens' ParentReference (Maybe Text)
+prSelfLink
+  = lens _prSelfLink (\ s a -> s{_prSelfLink = a})
+
+-- | The ID of the parent.
+prId :: Lens' ParentReference (Maybe Text)
+prId = lens _prId (\ s a -> s{_prId = a})
+
+instance FromJSON ParentReference where
+        parseJSON
+          = withObject "ParentReference"
+              (\ o ->
+                 ParentReference <$>
+                   (o .:? "parentLink") <*> (o .:? "isRoot") <*>
+                     (o .:? "kind" .!= "drive#parentReference")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "id"))
+
+instance ToJSON ParentReference where
+        toJSON ParentReference{..}
+          = object
+              (catMaybes
+                 [("parentLink" .=) <$> _prParentLink,
+                  ("isRoot" .=) <$> _prIsRoot,
+                  Just ("kind" .= _prKind),
+                  ("selfLink" .=) <$> _prSelfLink,
+                  ("id" .=) <$> _prId])
+
+-- | A key-value pair attached to a file that is either public or private to
+-- an application. The following limits apply to file properties: - Maximum
+-- of 100 properties total per file - Maximum of 30 private properties per
+-- app - Maximum of 30 public properties - Maximum of 124 bytes size limit
+-- on (key + value) string in UTF-8 encoding for a single property.
+--
+-- /See:/ 'property' smart constructor.
+data Property = Property
+    { _pEtag       :: !(Maybe Text)
+    , _pKind       :: !Text
+    , _pValue      :: !(Maybe Text)
+    , _pVisibility :: !(Maybe Text)
+    , _pSelfLink   :: !(Maybe Text)
+    , _pKey        :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Property' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pEtag'
+--
+-- * 'pKind'
+--
+-- * 'pValue'
+--
+-- * 'pVisibility'
+--
+-- * 'pSelfLink'
+--
+-- * 'pKey'
+property
+    :: Property
+property =
+    Property
+    { _pEtag = Nothing
+    , _pKind = "drive#property"
+    , _pValue = Nothing
+    , _pVisibility = Nothing
+    , _pSelfLink = Nothing
+    , _pKey = Nothing
+    }
+
+-- | ETag of the property.
+pEtag :: Lens' Property (Maybe Text)
+pEtag = lens _pEtag (\ s a -> s{_pEtag = a})
+
+-- | This is always drive#property.
+pKind :: Lens' Property Text
+pKind = lens _pKind (\ s a -> s{_pKind = a})
+
+-- | The value of this property.
+pValue :: Lens' Property (Maybe Text)
+pValue = lens _pValue (\ s a -> s{_pValue = a})
+
+-- | The visibility of this property.
+pVisibility :: Lens' Property (Maybe Text)
+pVisibility
+  = lens _pVisibility (\ s a -> s{_pVisibility = a})
+
+-- | The link back to this property.
+pSelfLink :: Lens' Property (Maybe Text)
+pSelfLink
+  = lens _pSelfLink (\ s a -> s{_pSelfLink = a})
+
+-- | The key of this property.
+pKey :: Lens' Property (Maybe Text)
+pKey = lens _pKey (\ s a -> s{_pKey = a})
+
+instance FromJSON Property where
+        parseJSON
+          = withObject "Property"
+              (\ o ->
+                 Property <$>
+                   (o .:? "etag") <*>
+                     (o .:? "kind" .!= "drive#property")
+                     <*> (o .:? "value")
+                     <*> (o .:? "visibility")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "key"))
+
+instance ToJSON Property where
+        toJSON Property{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _pEtag, Just ("kind" .= _pKind),
+                  ("value" .=) <$> _pValue,
+                  ("visibility" .=) <$> _pVisibility,
+                  ("selfLink" .=) <$> _pSelfLink,
+                  ("key" .=) <$> _pKey])
+
+-- | Thumbnail for the file. Only accepted on upload and for files that are
+-- not already thumbnailed by Google.
+--
+-- /See:/ 'fileThumbnail' smart constructor.
+data FileThumbnail = FileThumbnail
+    { _ftImage    :: !(Maybe (Textual Word8))
+    , _ftMimeType :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FileThumbnail' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ftImage'
+--
+-- * 'ftMimeType'
+fileThumbnail
+    :: FileThumbnail
+fileThumbnail =
+    FileThumbnail
+    { _ftImage = Nothing
+    , _ftMimeType = Nothing
+    }
+
+-- | The URL-safe Base64 encoded bytes of the thumbnail image. It should
+-- conform to RFC 4648 section 5.
+ftImage :: Lens' FileThumbnail (Maybe Word8)
+ftImage
+  = lens _ftImage (\ s a -> s{_ftImage = a}) .
+      mapping _Coerce
+
+-- | The MIME type of the thumbnail.
+ftMimeType :: Lens' FileThumbnail (Maybe Text)
+ftMimeType
+  = lens _ftMimeType (\ s a -> s{_ftMimeType = a})
+
+instance FromJSON FileThumbnail where
+        parseJSON
+          = withObject "FileThumbnail"
+              (\ o ->
+                 FileThumbnail <$>
+                   (o .:? "image") <*> (o .:? "mimeType"))
+
+instance ToJSON FileThumbnail where
+        toJSON FileThumbnail{..}
+          = object
+              (catMaybes
+                 [("image" .=) <$> _ftImage,
+                  ("mimeType" .=) <$> _ftMimeType])
+
+-- | The user\'s profile picture.
+--
+-- /See:/ 'userPicture' smart constructor.
+newtype UserPicture = UserPicture
+    { _upURL :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UserPicture' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'upURL'
+userPicture
+    :: UserPicture
+userPicture =
+    UserPicture
+    { _upURL = Nothing
+    }
+
+-- | A URL that points to a profile picture of this user.
+upURL :: Lens' UserPicture (Maybe Text)
+upURL = lens _upURL (\ s a -> s{_upURL = a})
+
+instance FromJSON UserPicture where
+        parseJSON
+          = withObject "UserPicture"
+              (\ o -> UserPicture <$> (o .:? "url"))
+
+instance ToJSON UserPicture where
+        toJSON UserPicture{..}
+          = object (catMaybes [("url" .=) <$> _upURL])
+
+-- | A collection of properties, key-value pairs that are either public or
+-- private to an application.
+--
+-- /See:/ 'propertyList' smart constructor.
+data PropertyList = PropertyList
+    { _plEtag     :: !(Maybe Text)
+    , _plKind     :: !Text
+    , _plItems    :: !(Maybe [Property])
+    , _plSelfLink :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PropertyList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'plEtag'
+--
+-- * 'plKind'
+--
+-- * 'plItems'
+--
+-- * 'plSelfLink'
+propertyList
+    :: PropertyList
+propertyList =
+    PropertyList
+    { _plEtag = Nothing
+    , _plKind = "drive#propertyList"
+    , _plItems = Nothing
+    , _plSelfLink = Nothing
+    }
+
+-- | The ETag of the list.
+plEtag :: Lens' PropertyList (Maybe Text)
+plEtag = lens _plEtag (\ s a -> s{_plEtag = a})
+
+-- | This is always drive#propertyList.
+plKind :: Lens' PropertyList Text
+plKind = lens _plKind (\ s a -> s{_plKind = a})
+
+-- | The list of properties.
+plItems :: Lens' PropertyList [Property]
+plItems
+  = lens _plItems (\ s a -> s{_plItems = a}) . _Default
+      . _Coerce
+
+-- | The link back to this list.
+plSelfLink :: Lens' PropertyList (Maybe Text)
+plSelfLink
+  = lens _plSelfLink (\ s a -> s{_plSelfLink = a})
+
+instance FromJSON PropertyList where
+        parseJSON
+          = withObject "PropertyList"
+              (\ o ->
+                 PropertyList <$>
+                   (o .:? "etag") <*>
+                     (o .:? "kind" .!= "drive#propertyList")
+                     <*> (o .:? "items" .!= mempty)
+                     <*> (o .:? "selfLink"))
+
+instance ToJSON PropertyList where
+        toJSON PropertyList{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _plEtag, Just ("kind" .= _plKind),
+                  ("items" .=) <$> _plItems,
+                  ("selfLink" .=) <$> _plSelfLink])
+
+-- | A list of children of a file.
+--
+-- /See:/ 'childList' smart constructor.
+data ChildList = ChildList
+    { _clEtag          :: !(Maybe Text)
+    , _clNextPageToken :: !(Maybe Text)
+    , _clNextLink      :: !(Maybe Text)
+    , _clKind          :: !Text
+    , _clItems         :: !(Maybe [ChildReference])
+    , _clSelfLink      :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ChildList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'clEtag'
+--
+-- * 'clNextPageToken'
+--
+-- * 'clNextLink'
+--
+-- * 'clKind'
+--
+-- * 'clItems'
+--
+-- * 'clSelfLink'
+childList
+    :: ChildList
+childList =
+    ChildList
+    { _clEtag = Nothing
+    , _clNextPageToken = Nothing
+    , _clNextLink = Nothing
+    , _clKind = "drive#childList"
+    , _clItems = Nothing
+    , _clSelfLink = Nothing
+    }
+
+-- | The ETag of the list.
+clEtag :: Lens' ChildList (Maybe Text)
+clEtag = lens _clEtag (\ s a -> s{_clEtag = a})
+
+-- | The page token for the next page of children.
+clNextPageToken :: Lens' ChildList (Maybe Text)
+clNextPageToken
+  = lens _clNextPageToken
+      (\ s a -> s{_clNextPageToken = a})
+
+-- | A link to the next page of children.
+clNextLink :: Lens' ChildList (Maybe Text)
+clNextLink
+  = lens _clNextLink (\ s a -> s{_clNextLink = a})
+
+-- | This is always drive#childList.
+clKind :: Lens' ChildList Text
+clKind = lens _clKind (\ s a -> s{_clKind = a})
+
+-- | The actual list of children.
+clItems :: Lens' ChildList [ChildReference]
+clItems
+  = lens _clItems (\ s a -> s{_clItems = a}) . _Default
+      . _Coerce
+
+-- | A link back to this list.
+clSelfLink :: Lens' ChildList (Maybe Text)
+clSelfLink
+  = lens _clSelfLink (\ s a -> s{_clSelfLink = a})
+
+instance FromJSON ChildList where
+        parseJSON
+          = withObject "ChildList"
+              (\ o ->
+                 ChildList <$>
+                   (o .:? "etag") <*> (o .:? "nextPageToken") <*>
+                     (o .:? "nextLink")
+                     <*> (o .:? "kind" .!= "drive#childList")
+                     <*> (o .:? "items" .!= mempty)
+                     <*> (o .:? "selfLink"))
+
+instance ToJSON ChildList where
+        toJSON ChildList{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _clEtag,
+                  ("nextPageToken" .=) <$> _clNextPageToken,
+                  ("nextLink" .=) <$> _clNextLink,
+                  Just ("kind" .= _clKind), ("items" .=) <$> _clItems,
+                  ("selfLink" .=) <$> _clSelfLink])
+
+-- | A list of third-party applications which the user has installed or given
+-- access to Google Drive.
+--
+-- /See:/ 'appList' smart constructor.
+data AppList = AppList
+    { _alDefaultAppIds :: !(Maybe [Text])
+    , _alEtag          :: !(Maybe Text)
+    , _alKind          :: !Text
+    , _alItems         :: !(Maybe [App])
+    , _alSelfLink      :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AppList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'alDefaultAppIds'
+--
+-- * 'alEtag'
+--
+-- * 'alKind'
+--
+-- * 'alItems'
+--
+-- * 'alSelfLink'
+appList
+    :: AppList
+appList =
+    AppList
+    { _alDefaultAppIds = Nothing
+    , _alEtag = Nothing
+    , _alKind = "drive#appList"
+    , _alItems = Nothing
+    , _alSelfLink = Nothing
+    }
+
+-- | List of app IDs that the user has specified to use by default. The list
+-- is in reverse-priority order (lowest to highest).
+alDefaultAppIds :: Lens' AppList [Text]
+alDefaultAppIds
+  = lens _alDefaultAppIds
+      (\ s a -> s{_alDefaultAppIds = a})
+      . _Default
+      . _Coerce
+
+-- | The ETag of the list.
+alEtag :: Lens' AppList (Maybe Text)
+alEtag = lens _alEtag (\ s a -> s{_alEtag = a})
+
+-- | This is always drive#appList.
+alKind :: Lens' AppList Text
+alKind = lens _alKind (\ s a -> s{_alKind = a})
+
+-- | The actual list of apps.
+alItems :: Lens' AppList [App]
+alItems
+  = lens _alItems (\ s a -> s{_alItems = a}) . _Default
+      . _Coerce
+
+-- | A link back to this list.
+alSelfLink :: Lens' AppList (Maybe Text)
+alSelfLink
+  = lens _alSelfLink (\ s a -> s{_alSelfLink = a})
+
+instance FromJSON AppList where
+        parseJSON
+          = withObject "AppList"
+              (\ o ->
+                 AppList <$>
+                   (o .:? "defaultAppIds" .!= mempty) <*> (o .:? "etag")
+                     <*> (o .:? "kind" .!= "drive#appList")
+                     <*> (o .:? "items" .!= mempty)
+                     <*> (o .:? "selfLink"))
+
+instance ToJSON AppList where
+        toJSON AppList{..}
+          = object
+              (catMaybes
+                 [("defaultAppIds" .=) <$> _alDefaultAppIds,
+                  ("etag" .=) <$> _alEtag, Just ("kind" .= _alKind),
+                  ("items" .=) <$> _alItems,
+                  ("selfLink" .=) <$> _alSelfLink])
+
+-- | A map of the id of each of the user\'s apps to a link to open this file
+-- with that app. Only populated when the drive.apps.readonly scope is
+-- used.
+--
+-- /See:/ 'fileOpenWithLinks' smart constructor.
+newtype FileOpenWithLinks = FileOpenWithLinks
+    { _fowlAddtional :: HashMap Text Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FileOpenWithLinks' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fowlAddtional'
+fileOpenWithLinks
+    :: HashMap Text Text -- ^ 'fowlAddtional'
+    -> FileOpenWithLinks
+fileOpenWithLinks pFowlAddtional_ =
+    FileOpenWithLinks
+    { _fowlAddtional = _Coerce # pFowlAddtional_
+    }
+
+fowlAddtional :: Lens' FileOpenWithLinks (HashMap Text Text)
+fowlAddtional
+  = lens _fowlAddtional
+      (\ s a -> s{_fowlAddtional = a})
+      . _Coerce
+
+instance FromJSON FileOpenWithLinks where
+        parseJSON
+          = withObject "FileOpenWithLinks"
+              (\ o -> FileOpenWithLinks <$> (parseJSONObject o))
+
+instance ToJSON FileOpenWithLinks where
+        toJSON = toJSON . _fowlAddtional
+
+--
+-- /See:/ 'aboutAdditionalRoleInfoItemRoleSetsItem' smart constructor.
+data AboutAdditionalRoleInfoItemRoleSetsItem = AboutAdditionalRoleInfoItemRoleSetsItem
+    { _aariirsiPrimaryRole     :: !(Maybe Text)
+    , _aariirsiAdditionalRoles :: !(Maybe [Text])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AboutAdditionalRoleInfoItemRoleSetsItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aariirsiPrimaryRole'
+--
+-- * 'aariirsiAdditionalRoles'
+aboutAdditionalRoleInfoItemRoleSetsItem
+    :: AboutAdditionalRoleInfoItemRoleSetsItem
+aboutAdditionalRoleInfoItemRoleSetsItem =
+    AboutAdditionalRoleInfoItemRoleSetsItem
+    { _aariirsiPrimaryRole = Nothing
+    , _aariirsiAdditionalRoles = Nothing
+    }
+
+-- | A primary permission role.
+aariirsiPrimaryRole :: Lens' AboutAdditionalRoleInfoItemRoleSetsItem (Maybe Text)
+aariirsiPrimaryRole
+  = lens _aariirsiPrimaryRole
+      (\ s a -> s{_aariirsiPrimaryRole = a})
+
+-- | The supported additional roles with the primary role.
+aariirsiAdditionalRoles :: Lens' AboutAdditionalRoleInfoItemRoleSetsItem [Text]
+aariirsiAdditionalRoles
+  = lens _aariirsiAdditionalRoles
+      (\ s a -> s{_aariirsiAdditionalRoles = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON
+         AboutAdditionalRoleInfoItemRoleSetsItem where
+        parseJSON
+          = withObject
+              "AboutAdditionalRoleInfoItemRoleSetsItem"
+              (\ o ->
+                 AboutAdditionalRoleInfoItemRoleSetsItem <$>
+                   (o .:? "primaryRole") <*>
+                     (o .:? "additionalRoles" .!= mempty))
+
+instance ToJSON
+         AboutAdditionalRoleInfoItemRoleSetsItem where
+        toJSON AboutAdditionalRoleInfoItemRoleSetsItem{..}
+          = object
+              (catMaybes
+                 [("primaryRole" .=) <$> _aariirsiPrimaryRole,
+                  ("additionalRoles" .=) <$> _aariirsiAdditionalRoles])
+
+-- | 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])
+
+-- | A JSON representation of a list of replies to a comment on a file in
+-- Google Drive.
+--
+-- /See:/ 'commentReplyList' smart constructor.
+data CommentReplyList = CommentReplyList
+    { _crlNextPageToken :: !(Maybe Text)
+    , _crlNextLink      :: !(Maybe Text)
+    , _crlKind          :: !Text
+    , _crlItems         :: !(Maybe [CommentReply])
+    , _crlSelfLink      :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CommentReplyList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'crlNextPageToken'
+--
+-- * 'crlNextLink'
+--
+-- * 'crlKind'
+--
+-- * 'crlItems'
+--
+-- * 'crlSelfLink'
+commentReplyList
+    :: CommentReplyList
+commentReplyList =
+    CommentReplyList
+    { _crlNextPageToken = Nothing
+    , _crlNextLink = Nothing
+    , _crlKind = "drive#commentReplyList"
+    , _crlItems = Nothing
+    , _crlSelfLink = Nothing
+    }
+
+-- | The token to use to request the next page of results.
+crlNextPageToken :: Lens' CommentReplyList (Maybe Text)
+crlNextPageToken
+  = lens _crlNextPageToken
+      (\ s a -> s{_crlNextPageToken = a})
+
+-- | A link to the next page of replies.
+crlNextLink :: Lens' CommentReplyList (Maybe Text)
+crlNextLink
+  = lens _crlNextLink (\ s a -> s{_crlNextLink = a})
+
+-- | This is always drive#commentReplyList.
+crlKind :: Lens' CommentReplyList Text
+crlKind = lens _crlKind (\ s a -> s{_crlKind = a})
+
+-- | List of reply.
+crlItems :: Lens' CommentReplyList [CommentReply]
+crlItems
+  = lens _crlItems (\ s a -> s{_crlItems = a}) .
+      _Default
+      . _Coerce
+
+-- | A link back to this list.
+crlSelfLink :: Lens' CommentReplyList (Maybe Text)
+crlSelfLink
+  = lens _crlSelfLink (\ s a -> s{_crlSelfLink = a})
+
+instance FromJSON CommentReplyList where
+        parseJSON
+          = withObject "CommentReplyList"
+              (\ o ->
+                 CommentReplyList <$>
+                   (o .:? "nextPageToken") <*> (o .:? "nextLink") <*>
+                     (o .:? "kind" .!= "drive#commentReplyList")
+                     <*> (o .:? "items" .!= mempty)
+                     <*> (o .:? "selfLink"))
+
+instance ToJSON CommentReplyList where
+        toJSON CommentReplyList{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _crlNextPageToken,
+                  ("nextLink" .=) <$> _crlNextLink,
+                  Just ("kind" .= _crlKind),
+                  ("items" .=) <$> _crlItems,
+                  ("selfLink" .=) <$> _crlSelfLink])
+
+-- | Metadata about video media. This will only be present for video types.
+--
+-- /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])
+
+-- | Representation of a change to a file.
+--
+-- /See:/ 'change' smart constructor.
+data Change = Change
+    { _chaKind             :: !Text
+    , _chaSelfLink         :: !(Maybe Text)
+    , _chaModificationDate :: !(Maybe DateTime')
+    , _chaId               :: !(Maybe (Textual Int64))
+    , _chaDeleted          :: !(Maybe Bool)
+    , _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:
+--
+-- * 'chaKind'
+--
+-- * 'chaSelfLink'
+--
+-- * 'chaModificationDate'
+--
+-- * 'chaId'
+--
+-- * 'chaDeleted'
+--
+-- * 'chaFileId'
+--
+-- * 'chaFile'
+change
+    :: Change
+change =
+    Change
+    { _chaKind = "drive#change"
+    , _chaSelfLink = Nothing
+    , _chaModificationDate = Nothing
+    , _chaId = Nothing
+    , _chaDeleted = Nothing
+    , _chaFileId = Nothing
+    , _chaFile = Nothing
+    }
+
+-- | This is always drive#change.
+chaKind :: Lens' Change Text
+chaKind = lens _chaKind (\ s a -> s{_chaKind = a})
+
+-- | A link back to this change.
+chaSelfLink :: Lens' Change (Maybe Text)
+chaSelfLink
+  = lens _chaSelfLink (\ s a -> s{_chaSelfLink = a})
+
+-- | The time of this modification.
+chaModificationDate :: Lens' Change (Maybe UTCTime)
+chaModificationDate
+  = lens _chaModificationDate
+      (\ s a -> s{_chaModificationDate = a})
+      . mapping _DateTime
+
+-- | The ID of the change.
+chaId :: Lens' Change (Maybe Int64)
+chaId
+  = lens _chaId (\ s a -> s{_chaId = a}) .
+      mapping _Coerce
+
+-- | Whether the file has been deleted.
+chaDeleted :: Lens' Change (Maybe Bool)
+chaDeleted
+  = lens _chaDeleted (\ s a -> s{_chaDeleted = a})
+
+-- | The ID of the file associated with this change.
+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 deleted.
+chaFile :: Lens' Change (Maybe File)
+chaFile = lens _chaFile (\ s a -> s{_chaFile = a})
+
+instance FromJSON Change where
+        parseJSON
+          = withObject "Change"
+              (\ o ->
+                 Change <$>
+                   (o .:? "kind" .!= "drive#change") <*>
+                     (o .:? "selfLink")
+                     <*> (o .:? "modificationDate")
+                     <*> (o .:? "id")
+                     <*> (o .:? "deleted")
+                     <*> (o .:? "fileId")
+                     <*> (o .:? "file"))
+
+instance ToJSON Change where
+        toJSON Change{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _chaKind),
+                  ("selfLink" .=) <$> _chaSelfLink,
+                  ("modificationDate" .=) <$> _chaModificationDate,
+                  ("id" .=) <$> _chaId, ("deleted" .=) <$> _chaDeleted,
+                  ("fileId" .=) <$> _chaFileId,
+                  ("file" .=) <$> _chaFile])
+
+-- | The apps resource provides a list of the apps that a user has installed,
+-- with information about each app\'s supported MIME types, file
+-- extensions, and other details.
+--
+-- /See:/ 'app' smart constructor.
+data App = App
+    { _aLongDescription         :: !(Maybe Text)
+    , _aOpenURLTemplate         :: !(Maybe Text)
+    , _aAuthorized              :: !(Maybe Bool)
+    , _aObjectType              :: !(Maybe Text)
+    , _aSecondaryMimeTypes      :: !(Maybe [Text])
+    , _aCreateInFolderTemplate  :: !(Maybe Text)
+    , _aKind                    :: !Text
+    , _aIcons                   :: !(Maybe [AppIconsItem])
+    , _aProductURL              :: !(Maybe Text)
+    , _aUseByDefault            :: !(Maybe Bool)
+    , _aShortDescription        :: !(Maybe Text)
+    , _aName                    :: !(Maybe Text)
+    , _aCreateURL               :: !(Maybe Text)
+    , _aId                      :: !(Maybe Text)
+    , _aPrimaryFileExtensions   :: !(Maybe [Text])
+    , _aInstalled               :: !(Maybe Bool)
+    , _aSupportsCreate          :: !(Maybe Bool)
+    , _aPrimaryMimeTypes        :: !(Maybe [Text])
+    , _aHasDriveWideScope       :: !(Maybe Bool)
+    , _aProductId               :: !(Maybe Text)
+    , _aSecondaryFileExtensions :: !(Maybe [Text])
+    , _aSupportsMultiOpen       :: !(Maybe Bool)
+    , _aSupportsImport          :: !(Maybe Bool)
+    , _aSupportsOfflineCreate   :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'App' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aLongDescription'
+--
+-- * 'aOpenURLTemplate'
+--
+-- * 'aAuthorized'
+--
+-- * 'aObjectType'
+--
+-- * 'aSecondaryMimeTypes'
+--
+-- * 'aCreateInFolderTemplate'
+--
+-- * 'aKind'
+--
+-- * 'aIcons'
+--
+-- * 'aProductURL'
+--
+-- * 'aUseByDefault'
+--
+-- * 'aShortDescription'
+--
+-- * 'aName'
+--
+-- * 'aCreateURL'
+--
+-- * 'aId'
+--
+-- * 'aPrimaryFileExtensions'
+--
+-- * 'aInstalled'
+--
+-- * 'aSupportsCreate'
+--
+-- * 'aPrimaryMimeTypes'
+--
+-- * 'aHasDriveWideScope'
+--
+-- * 'aProductId'
+--
+-- * 'aSecondaryFileExtensions'
+--
+-- * 'aSupportsMultiOpen'
+--
+-- * 'aSupportsImport'
+--
+-- * 'aSupportsOfflineCreate'
+app
+    :: App
+app =
+    App
+    { _aLongDescription = Nothing
+    , _aOpenURLTemplate = Nothing
+    , _aAuthorized = Nothing
+    , _aObjectType = Nothing
+    , _aSecondaryMimeTypes = Nothing
+    , _aCreateInFolderTemplate = Nothing
+    , _aKind = "drive#app"
+    , _aIcons = Nothing
+    , _aProductURL = Nothing
+    , _aUseByDefault = Nothing
+    , _aShortDescription = Nothing
+    , _aName = Nothing
+    , _aCreateURL = Nothing
+    , _aId = Nothing
+    , _aPrimaryFileExtensions = Nothing
+    , _aInstalled = Nothing
+    , _aSupportsCreate = Nothing
+    , _aPrimaryMimeTypes = Nothing
+    , _aHasDriveWideScope = Nothing
+    , _aProductId = Nothing
+    , _aSecondaryFileExtensions = Nothing
+    , _aSupportsMultiOpen = Nothing
+    , _aSupportsImport = Nothing
+    , _aSupportsOfflineCreate = Nothing
+    }
+
+-- | A long description of the app.
+aLongDescription :: Lens' App (Maybe Text)
+aLongDescription
+  = lens _aLongDescription
+      (\ s a -> s{_aLongDescription = a})
+
+-- | The template url for opening files with this app. The template will
+-- contain {ids} and\/or {exportIds} to be replaced by the actual file ids.
+-- See Open Files for the full documentation.
+aOpenURLTemplate :: Lens' App (Maybe Text)
+aOpenURLTemplate
+  = lens _aOpenURLTemplate
+      (\ s a -> s{_aOpenURLTemplate = a})
+
+-- | Whether the app is authorized to access data on the user\'s Drive.
+aAuthorized :: Lens' App (Maybe Bool)
+aAuthorized
+  = lens _aAuthorized (\ s a -> s{_aAuthorized = a})
+
+-- | The type of object this app creates (e.g. Chart). If empty, the app name
+-- should be used instead.
+aObjectType :: Lens' App (Maybe Text)
+aObjectType
+  = lens _aObjectType (\ s a -> s{_aObjectType = a})
+
+-- | The list of secondary mime types.
+aSecondaryMimeTypes :: Lens' App [Text]
+aSecondaryMimeTypes
+  = lens _aSecondaryMimeTypes
+      (\ s a -> s{_aSecondaryMimeTypes = a})
+      . _Default
+      . _Coerce
+
+-- | The template url to create a new file with this app in a given folder.
+-- The template will contain {folderId} to be replaced by the folder to
+-- create the new file in.
+aCreateInFolderTemplate :: Lens' App (Maybe Text)
+aCreateInFolderTemplate
+  = lens _aCreateInFolderTemplate
+      (\ s a -> s{_aCreateInFolderTemplate = a})
+
+-- | This is always drive#app.
+aKind :: Lens' App Text
+aKind = lens _aKind (\ s a -> s{_aKind = a})
+
+-- | The various icons for the app.
+aIcons :: Lens' App [AppIconsItem]
+aIcons
+  = lens _aIcons (\ s a -> s{_aIcons = a}) . _Default .
+      _Coerce
+
+-- | A link to the product listing for this app.
+aProductURL :: Lens' App (Maybe Text)
+aProductURL
+  = lens _aProductURL (\ s a -> s{_aProductURL = a})
+
+-- | Whether the app is selected as the default handler for the types it
+-- supports.
+aUseByDefault :: Lens' App (Maybe Bool)
+aUseByDefault
+  = lens _aUseByDefault
+      (\ s a -> s{_aUseByDefault = a})
+
+-- | A short description of the app.
+aShortDescription :: Lens' App (Maybe Text)
+aShortDescription
+  = lens _aShortDescription
+      (\ s a -> s{_aShortDescription = a})
+
+-- | The name of the app.
+aName :: Lens' App (Maybe Text)
+aName = lens _aName (\ s a -> s{_aName = a})
+
+-- | The url to create a new file with this app.
+aCreateURL :: Lens' App (Maybe Text)
+aCreateURL
+  = lens _aCreateURL (\ s a -> s{_aCreateURL = a})
+
+-- | The ID of the app.
+aId :: Lens' App (Maybe Text)
+aId = lens _aId (\ s a -> s{_aId = a})
+
+-- | The list of primary file extensions.
+aPrimaryFileExtensions :: Lens' App [Text]
+aPrimaryFileExtensions
+  = lens _aPrimaryFileExtensions
+      (\ s a -> s{_aPrimaryFileExtensions = a})
+      . _Default
+      . _Coerce
+
+-- | Whether the app is installed.
+aInstalled :: Lens' App (Maybe Bool)
+aInstalled
+  = lens _aInstalled (\ s a -> s{_aInstalled = a})
+
+-- | Whether this app supports creating new objects.
+aSupportsCreate :: Lens' App (Maybe Bool)
+aSupportsCreate
+  = lens _aSupportsCreate
+      (\ s a -> s{_aSupportsCreate = a})
+
+-- | The list of primary mime types.
+aPrimaryMimeTypes :: Lens' App [Text]
+aPrimaryMimeTypes
+  = lens _aPrimaryMimeTypes
+      (\ s a -> s{_aPrimaryMimeTypes = a})
+      . _Default
+      . _Coerce
+
+-- | Whether the app has drive-wide scope. An app with drive-wide scope can
+-- access all files in the user\'s drive.
+aHasDriveWideScope :: Lens' App (Maybe Bool)
+aHasDriveWideScope
+  = lens _aHasDriveWideScope
+      (\ s a -> s{_aHasDriveWideScope = a})
+
+-- | The ID of the product listing for this app.
+aProductId :: Lens' App (Maybe Text)
+aProductId
+  = lens _aProductId (\ s a -> s{_aProductId = a})
+
+-- | The list of secondary file extensions.
+aSecondaryFileExtensions :: Lens' App [Text]
+aSecondaryFileExtensions
+  = lens _aSecondaryFileExtensions
+      (\ s a -> s{_aSecondaryFileExtensions = a})
+      . _Default
+      . _Coerce
+
+-- | Whether this app supports opening more than one file.
+aSupportsMultiOpen :: Lens' App (Maybe Bool)
+aSupportsMultiOpen
+  = lens _aSupportsMultiOpen
+      (\ s a -> s{_aSupportsMultiOpen = a})
+
+-- | Whether this app supports importing Google Docs.
+aSupportsImport :: Lens' App (Maybe Bool)
+aSupportsImport
+  = lens _aSupportsImport
+      (\ s a -> s{_aSupportsImport = a})
+
+-- | Whether this app supports creating new files when offline.
+aSupportsOfflineCreate :: Lens' App (Maybe Bool)
+aSupportsOfflineCreate
+  = lens _aSupportsOfflineCreate
+      (\ s a -> s{_aSupportsOfflineCreate = a})
+
+instance FromJSON App where
+        parseJSON
+          = withObject "App"
+              (\ o ->
+                 App <$>
+                   (o .:? "longDescription") <*>
+                     (o .:? "openUrlTemplate")
+                     <*> (o .:? "authorized")
+                     <*> (o .:? "objectType")
+                     <*> (o .:? "secondaryMimeTypes" .!= mempty)
+                     <*> (o .:? "createInFolderTemplate")
+                     <*> (o .:? "kind" .!= "drive#app")
+                     <*> (o .:? "icons" .!= mempty)
+                     <*> (o .:? "productUrl")
+                     <*> (o .:? "useByDefault")
+                     <*> (o .:? "shortDescription")
+                     <*> (o .:? "name")
+                     <*> (o .:? "createUrl")
+                     <*> (o .:? "id")
+                     <*> (o .:? "primaryFileExtensions" .!= mempty)
+                     <*> (o .:? "installed")
+                     <*> (o .:? "supportsCreate")
+                     <*> (o .:? "primaryMimeTypes" .!= mempty)
+                     <*> (o .:? "hasDriveWideScope")
+                     <*> (o .:? "productId")
+                     <*> (o .:? "secondaryFileExtensions" .!= mempty)
+                     <*> (o .:? "supportsMultiOpen")
+                     <*> (o .:? "supportsImport")
+                     <*> (o .:? "supportsOfflineCreate"))
+
+instance ToJSON App where
+        toJSON App{..}
+          = object
+              (catMaybes
+                 [("longDescription" .=) <$> _aLongDescription,
+                  ("openUrlTemplate" .=) <$> _aOpenURLTemplate,
+                  ("authorized" .=) <$> _aAuthorized,
+                  ("objectType" .=) <$> _aObjectType,
+                  ("secondaryMimeTypes" .=) <$> _aSecondaryMimeTypes,
+                  ("createInFolderTemplate" .=) <$>
+                    _aCreateInFolderTemplate,
+                  Just ("kind" .= _aKind), ("icons" .=) <$> _aIcons,
+                  ("productUrl" .=) <$> _aProductURL,
+                  ("useByDefault" .=) <$> _aUseByDefault,
+                  ("shortDescription" .=) <$> _aShortDescription,
+                  ("name" .=) <$> _aName,
+                  ("createUrl" .=) <$> _aCreateURL, ("id" .=) <$> _aId,
+                  ("primaryFileExtensions" .=) <$>
+                    _aPrimaryFileExtensions,
+                  ("installed" .=) <$> _aInstalled,
+                  ("supportsCreate" .=) <$> _aSupportsCreate,
+                  ("primaryMimeTypes" .=) <$> _aPrimaryMimeTypes,
+                  ("hasDriveWideScope" .=) <$> _aHasDriveWideScope,
+                  ("productId" .=) <$> _aProductId,
+                  ("secondaryFileExtensions" .=) <$>
+                    _aSecondaryFileExtensions,
+                  ("supportsMultiOpen" .=) <$> _aSupportsMultiOpen,
+                  ("supportsImport" .=) <$> _aSupportsImport,
+                  ("supportsOfflineCreate" .=) <$>
+                    _aSupportsOfflineCreate])
+
+-- | A reference to a folder\'s child.
+--
+-- /See:/ 'childReference' smart constructor.
+data ChildReference = ChildReference
+    { _crChildLink :: !(Maybe Text)
+    , _crKind      :: !Text
+    , _crSelfLink  :: !(Maybe Text)
+    , _crId        :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ChildReference' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'crChildLink'
+--
+-- * 'crKind'
+--
+-- * 'crSelfLink'
+--
+-- * 'crId'
+childReference
+    :: ChildReference
+childReference =
+    ChildReference
+    { _crChildLink = Nothing
+    , _crKind = "drive#childReference"
+    , _crSelfLink = Nothing
+    , _crId = Nothing
+    }
+
+-- | A link to the child.
+crChildLink :: Lens' ChildReference (Maybe Text)
+crChildLink
+  = lens _crChildLink (\ s a -> s{_crChildLink = a})
+
+-- | This is always drive#childReference.
+crKind :: Lens' ChildReference Text
+crKind = lens _crKind (\ s a -> s{_crKind = a})
+
+-- | A link back to this reference.
+crSelfLink :: Lens' ChildReference (Maybe Text)
+crSelfLink
+  = lens _crSelfLink (\ s a -> s{_crSelfLink = a})
+
+-- | The ID of the child.
+crId :: Lens' ChildReference (Maybe Text)
+crId = lens _crId (\ s a -> s{_crId = a})
+
+instance FromJSON ChildReference where
+        parseJSON
+          = withObject "ChildReference"
+              (\ o ->
+                 ChildReference <$>
+                   (o .:? "childLink") <*>
+                     (o .:? "kind" .!= "drive#childReference")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "id"))
+
+instance ToJSON ChildReference where
+        toJSON ChildReference{..}
+          = object
+              (catMaybes
+                 [("childLink" .=) <$> _crChildLink,
+                  Just ("kind" .= _crKind),
+                  ("selfLink" .=) <$> _crSelfLink,
+                  ("id" .=) <$> _crId])
+
+--
+-- /See:/ 'aboutMaxUploadSizesItem' smart constructor.
+data AboutMaxUploadSizesItem = AboutMaxUploadSizesItem
+    { _amusiSize :: !(Maybe (Textual Int64))
+    , _amusiType :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AboutMaxUploadSizesItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'amusiSize'
+--
+-- * 'amusiType'
+aboutMaxUploadSizesItem
+    :: AboutMaxUploadSizesItem
+aboutMaxUploadSizesItem =
+    AboutMaxUploadSizesItem
+    { _amusiSize = Nothing
+    , _amusiType = Nothing
+    }
+
+-- | The max upload size for this type.
+amusiSize :: Lens' AboutMaxUploadSizesItem (Maybe Int64)
+amusiSize
+  = lens _amusiSize (\ s a -> s{_amusiSize = a}) .
+      mapping _Coerce
+
+-- | The file type.
+amusiType :: Lens' AboutMaxUploadSizesItem (Maybe Text)
+amusiType
+  = lens _amusiType (\ s a -> s{_amusiType = a})
+
+instance FromJSON AboutMaxUploadSizesItem where
+        parseJSON
+          = withObject "AboutMaxUploadSizesItem"
+              (\ o ->
+                 AboutMaxUploadSizesItem <$>
+                   (o .:? "size") <*> (o .:? "type"))
+
+instance ToJSON AboutMaxUploadSizesItem where
+        toJSON AboutMaxUploadSizesItem{..}
+          = object
+              (catMaybes
+                 [("size" .=) <$> _amusiSize,
+                  ("type" .=) <$> _amusiType])
+
+-- | A JSON representation of a reply to a comment on a file in Google Drive.
+--
+-- /See:/ 'commentReply' smart constructor.
+data CommentReply = CommentReply
+    { _comHTMLContent  :: !(Maybe Text)
+    , _comKind         :: !Text
+    , _comContent      :: !(Maybe Text)
+    , _comCreatedDate  :: !(Maybe DateTime')
+    , _comReplyId      :: !(Maybe Text)
+    , _comAuthor       :: !(Maybe User)
+    , _comModifiedDate :: !(Maybe DateTime')
+    , _comDeleted      :: !(Maybe Bool)
+    , _comVerb         :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CommentReply' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'comHTMLContent'
+--
+-- * 'comKind'
+--
+-- * 'comContent'
+--
+-- * 'comCreatedDate'
+--
+-- * 'comReplyId'
+--
+-- * 'comAuthor'
+--
+-- * 'comModifiedDate'
+--
+-- * 'comDeleted'
+--
+-- * 'comVerb'
+commentReply
+    :: CommentReply
+commentReply =
+    CommentReply
+    { _comHTMLContent = Nothing
+    , _comKind = "drive#commentReply"
+    , _comContent = Nothing
+    , _comCreatedDate = Nothing
+    , _comReplyId = Nothing
+    , _comAuthor = Nothing
+    , _comModifiedDate = Nothing
+    , _comDeleted = Nothing
+    , _comVerb = Nothing
+    }
+
+-- | HTML formatted content for this reply.
+comHTMLContent :: Lens' CommentReply (Maybe Text)
+comHTMLContent
+  = lens _comHTMLContent
+      (\ s a -> s{_comHTMLContent = a})
+
+-- | This is always drive#commentReply.
+comKind :: Lens' CommentReply Text
+comKind = lens _comKind (\ s a -> s{_comKind = a})
+
+-- | The plain text content used to create this reply. This is not HTML safe
+-- and should only be used as a starting point to make edits to a reply\'s
+-- content. This field is required on inserts if no verb is specified
+-- (resolve\/reopen).
+comContent :: Lens' CommentReply (Maybe Text)
+comContent
+  = lens _comContent (\ s a -> s{_comContent = a})
+
+-- | The date when this reply was first created.
+comCreatedDate :: Lens' CommentReply (Maybe UTCTime)
+comCreatedDate
+  = lens _comCreatedDate
+      (\ s a -> s{_comCreatedDate = a})
+      . mapping _DateTime
+
+-- | The ID of the reply.
+comReplyId :: Lens' CommentReply (Maybe Text)
+comReplyId
+  = lens _comReplyId (\ s a -> s{_comReplyId = a})
+
+-- | The user who wrote this reply.
+comAuthor :: Lens' CommentReply (Maybe User)
+comAuthor
+  = lens _comAuthor (\ s a -> s{_comAuthor = a})
+
+-- | The date when this reply was last modified.
+comModifiedDate :: Lens' CommentReply (Maybe UTCTime)
+comModifiedDate
+  = lens _comModifiedDate
+      (\ s a -> s{_comModifiedDate = a})
+      . mapping _DateTime
+
+-- | Whether this reply has been deleted. If a reply has been deleted the
+-- content will be cleared and this will only represent a reply that once
+-- existed.
+comDeleted :: Lens' CommentReply (Maybe Bool)
+comDeleted
+  = lens _comDeleted (\ s a -> s{_comDeleted = a})
+
+-- | The action this reply performed to the parent comment. When creating a
+-- new reply this is the action to be perform to the parent comment.
+-- Possible values are: - \"resolve\" - To resolve a comment. - \"reopen\"
+-- - To reopen (un-resolve) a comment.
+comVerb :: Lens' CommentReply (Maybe Text)
+comVerb = lens _comVerb (\ s a -> s{_comVerb = a})
+
+instance FromJSON CommentReply where
+        parseJSON
+          = withObject "CommentReply"
+              (\ o ->
+                 CommentReply <$>
+                   (o .:? "htmlContent") <*>
+                     (o .:? "kind" .!= "drive#commentReply")
+                     <*> (o .:? "content")
+                     <*> (o .:? "createdDate")
+                     <*> (o .:? "replyId")
+                     <*> (o .:? "author")
+                     <*> (o .:? "modifiedDate")
+                     <*> (o .:? "deleted")
+                     <*> (o .:? "verb"))
+
+instance ToJSON CommentReply where
+        toJSON CommentReply{..}
+          = object
+              (catMaybes
+                 [("htmlContent" .=) <$> _comHTMLContent,
+                  Just ("kind" .= _comKind),
+                  ("content" .=) <$> _comContent,
+                  ("createdDate" .=) <$> _comCreatedDate,
+                  ("replyId" .=) <$> _comReplyId,
+                  ("author" .=) <$> _comAuthor,
+                  ("modifiedDate" .=) <$> _comModifiedDate,
+                  ("deleted" .=) <$> _comDeleted,
+                  ("verb" .=) <$> _comVerb])
+
+--
+-- /See:/ 'aboutQuotaBytesByServiceItem' smart constructor.
+data AboutQuotaBytesByServiceItem = AboutQuotaBytesByServiceItem
+    { _aqbbsiBytesUsed   :: !(Maybe (Textual Int64))
+    , _aqbbsiServiceName :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AboutQuotaBytesByServiceItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aqbbsiBytesUsed'
+--
+-- * 'aqbbsiServiceName'
+aboutQuotaBytesByServiceItem
+    :: AboutQuotaBytesByServiceItem
+aboutQuotaBytesByServiceItem =
+    AboutQuotaBytesByServiceItem
+    { _aqbbsiBytesUsed = Nothing
+    , _aqbbsiServiceName = Nothing
+    }
+
+-- | The storage quota bytes used by the service.
+aqbbsiBytesUsed :: Lens' AboutQuotaBytesByServiceItem (Maybe Int64)
+aqbbsiBytesUsed
+  = lens _aqbbsiBytesUsed
+      (\ s a -> s{_aqbbsiBytesUsed = a})
+      . mapping _Coerce
+
+-- | The service\'s name, e.g. DRIVE, GMAIL, or PHOTOS.
+aqbbsiServiceName :: Lens' AboutQuotaBytesByServiceItem (Maybe Text)
+aqbbsiServiceName
+  = lens _aqbbsiServiceName
+      (\ s a -> s{_aqbbsiServiceName = a})
+
+instance FromJSON AboutQuotaBytesByServiceItem where
+        parseJSON
+          = withObject "AboutQuotaBytesByServiceItem"
+              (\ o ->
+                 AboutQuotaBytesByServiceItem <$>
+                   (o .:? "bytesUsed") <*> (o .:? "serviceName"))
+
+instance ToJSON AboutQuotaBytesByServiceItem where
+        toJSON AboutQuotaBytesByServiceItem{..}
+          = object
+              (catMaybes
+                 [("bytesUsed" .=) <$> _aqbbsiBytesUsed,
+                  ("serviceName" .=) <$> _aqbbsiServiceName])
+
+-- | The JSON template for a user.
+--
+-- /See:/ 'user' smart constructor.
+data User = User
+    { _uIsAuthenticatedUser :: !(Maybe Bool)
+    , _uKind                :: !Text
+    , _uPicture             :: !(Maybe UserPicture)
+    , _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:
+--
+-- * 'uIsAuthenticatedUser'
+--
+-- * 'uKind'
+--
+-- * 'uPicture'
+--
+-- * 'uEmailAddress'
+--
+-- * 'uDisplayName'
+--
+-- * 'uPermissionId'
+user
+    :: User
+user =
+    User
+    { _uIsAuthenticatedUser = Nothing
+    , _uKind = "drive#user"
+    , _uPicture = Nothing
+    , _uEmailAddress = Nothing
+    , _uDisplayName = Nothing
+    , _uPermissionId = Nothing
+    }
+
+-- | Whether this user is the same as the authenticated user for whom the
+-- request was made.
+uIsAuthenticatedUser :: Lens' User (Maybe Bool)
+uIsAuthenticatedUser
+  = lens _uIsAuthenticatedUser
+      (\ s a -> s{_uIsAuthenticatedUser = a})
+
+-- | This is always drive#user.
+uKind :: Lens' User Text
+uKind = lens _uKind (\ s a -> s{_uKind = a})
+
+-- | The user\'s profile picture.
+uPicture :: Lens' User (Maybe UserPicture)
+uPicture = lens _uPicture (\ s a -> s{_uPicture = a})
+
+-- | The email address of the user.
+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 the permissions collection.
+uPermissionId :: Lens' User (Maybe Text)
+uPermissionId
+  = lens _uPermissionId
+      (\ s a -> s{_uPermissionId = a})
+
+instance FromJSON User where
+        parseJSON
+          = withObject "User"
+              (\ o ->
+                 User <$>
+                   (o .:? "isAuthenticatedUser") <*>
+                     (o .:? "kind" .!= "drive#user")
+                     <*> (o .:? "picture")
+                     <*> (o .:? "emailAddress")
+                     <*> (o .:? "displayName")
+                     <*> (o .:? "permissionId"))
+
+instance ToJSON User where
+        toJSON User{..}
+          = object
+              (catMaybes
+                 [("isAuthenticatedUser" .=) <$>
+                    _uIsAuthenticatedUser,
+                  Just ("kind" .= _uKind),
+                  ("picture" .=) <$> _uPicture,
+                  ("emailAddress" .=) <$> _uEmailAddress,
+                  ("displayName" .=) <$> _uDisplayName,
+                  ("permissionId" .=) <$> _uPermissionId])
+
+--
+-- /See:/ 'aboutExportFormatsItem' smart constructor.
+data AboutExportFormatsItem = AboutExportFormatsItem
+    { _aefiTargets :: !(Maybe [Text])
+    , _aefiSource  :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AboutExportFormatsItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aefiTargets'
+--
+-- * 'aefiSource'
+aboutExportFormatsItem
+    :: AboutExportFormatsItem
+aboutExportFormatsItem =
+    AboutExportFormatsItem
+    { _aefiTargets = Nothing
+    , _aefiSource = Nothing
+    }
+
+-- | The possible content types to convert to.
+aefiTargets :: Lens' AboutExportFormatsItem [Text]
+aefiTargets
+  = lens _aefiTargets (\ s a -> s{_aefiTargets = a}) .
+      _Default
+      . _Coerce
+
+-- | The content type to convert from.
+aefiSource :: Lens' AboutExportFormatsItem (Maybe Text)
+aefiSource
+  = lens _aefiSource (\ s a -> s{_aefiSource = a})
+
+instance FromJSON AboutExportFormatsItem where
+        parseJSON
+          = withObject "AboutExportFormatsItem"
+              (\ o ->
+                 AboutExportFormatsItem <$>
+                   (o .:? "targets" .!= mempty) <*> (o .:? "source"))
+
+instance ToJSON AboutExportFormatsItem where
+        toJSON AboutExportFormatsItem{..}
+          = object
+              (catMaybes
+                 [("targets" .=) <$> _aefiTargets,
+                  ("source" .=) <$> _aefiSource])
+
+-- | A list of changes for a user.
+--
+-- /See:/ 'changeList' smart constructor.
+data ChangeList = ChangeList
+    { _cllEtag            :: !(Maybe Text)
+    , _cllNextPageToken   :: !(Maybe Text)
+    , _cllNextLink        :: !(Maybe Text)
+    , _cllKind            :: !Text
+    , _cllItems           :: !(Maybe [Change])
+    , _cllSelfLink        :: !(Maybe Text)
+    , _cllLargestChangeId :: !(Maybe (Textual Int64))
+    } 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:
+--
+-- * 'cllEtag'
+--
+-- * 'cllNextPageToken'
+--
+-- * 'cllNextLink'
+--
+-- * 'cllKind'
+--
+-- * 'cllItems'
+--
+-- * 'cllSelfLink'
+--
+-- * 'cllLargestChangeId'
+changeList
+    :: ChangeList
+changeList =
+    ChangeList
+    { _cllEtag = Nothing
+    , _cllNextPageToken = Nothing
+    , _cllNextLink = Nothing
+    , _cllKind = "drive#changeList"
+    , _cllItems = Nothing
+    , _cllSelfLink = Nothing
+    , _cllLargestChangeId = Nothing
+    }
+
+-- | The ETag of the list.
+cllEtag :: Lens' ChangeList (Maybe Text)
+cllEtag = lens _cllEtag (\ s a -> s{_cllEtag = a})
+
+-- | The page token for the next page of changes.
+cllNextPageToken :: Lens' ChangeList (Maybe Text)
+cllNextPageToken
+  = lens _cllNextPageToken
+      (\ s a -> s{_cllNextPageToken = a})
+
+-- | A link to the next page of changes.
+cllNextLink :: Lens' ChangeList (Maybe Text)
+cllNextLink
+  = lens _cllNextLink (\ s a -> s{_cllNextLink = a})
+
+-- | This is always drive#changeList.
+cllKind :: Lens' ChangeList Text
+cllKind = lens _cllKind (\ s a -> s{_cllKind = a})
+
+-- | The actual list of changes.
+cllItems :: Lens' ChangeList [Change]
+cllItems
+  = lens _cllItems (\ s a -> s{_cllItems = a}) .
+      _Default
+      . _Coerce
+
+-- | A link back to this list.
+cllSelfLink :: Lens' ChangeList (Maybe Text)
+cllSelfLink
+  = lens _cllSelfLink (\ s a -> s{_cllSelfLink = a})
+
+-- | The current largest change ID.
+cllLargestChangeId :: Lens' ChangeList (Maybe Int64)
+cllLargestChangeId
+  = lens _cllLargestChangeId
+      (\ s a -> s{_cllLargestChangeId = a})
+      . mapping _Coerce
+
+instance FromJSON ChangeList where
+        parseJSON
+          = withObject "ChangeList"
+              (\ o ->
+                 ChangeList <$>
+                   (o .:? "etag") <*> (o .:? "nextPageToken") <*>
+                     (o .:? "nextLink")
+                     <*> (o .:? "kind" .!= "drive#changeList")
+                     <*> (o .:? "items" .!= mempty)
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "largestChangeId"))
+
+instance ToJSON ChangeList where
+        toJSON ChangeList{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _cllEtag,
+                  ("nextPageToken" .=) <$> _cllNextPageToken,
+                  ("nextLink" .=) <$> _cllNextLink,
+                  Just ("kind" .= _cllKind),
+                  ("items" .=) <$> _cllItems,
+                  ("selfLink" .=) <$> _cllSelfLink,
+                  ("largestChangeId" .=) <$> _cllLargestChangeId])
+
+-- | 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
+
+-- | Indexable text attributes for the file (can only be written)
+--
+-- /See:/ 'fileIndexableText' smart constructor.
+newtype FileIndexableText = FileIndexableText
+    { _fitText :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FileIndexableText' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fitText'
+fileIndexableText
+    :: FileIndexableText
+fileIndexableText =
+    FileIndexableText
+    { _fitText = Nothing
+    }
+
+-- | The text to be indexed for this file.
+fitText :: Lens' FileIndexableText (Maybe Text)
+fitText = lens _fitText (\ s a -> s{_fitText = a})
+
+instance FromJSON FileIndexableText where
+        parseJSON
+          = withObject "FileIndexableText"
+              (\ o -> FileIndexableText <$> (o .:? "text"))
+
+instance ToJSON FileIndexableText where
+        toJSON FileIndexableText{..}
+          = object (catMaybes [("text" .=) <$> _fitText])
+
+--
+-- /See:/ 'aboutFeaturesItem' smart constructor.
+data AboutFeaturesItem = AboutFeaturesItem
+    { _afiFeatureRate :: !(Maybe (Textual Double))
+    , _afiFeatureName :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AboutFeaturesItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'afiFeatureRate'
+--
+-- * 'afiFeatureName'
+aboutFeaturesItem
+    :: AboutFeaturesItem
+aboutFeaturesItem =
+    AboutFeaturesItem
+    { _afiFeatureRate = Nothing
+    , _afiFeatureName = Nothing
+    }
+
+-- | The request limit rate for this feature, in queries per second.
+afiFeatureRate :: Lens' AboutFeaturesItem (Maybe Double)
+afiFeatureRate
+  = lens _afiFeatureRate
+      (\ s a -> s{_afiFeatureRate = a})
+      . mapping _Coerce
+
+-- | The name of the feature.
+afiFeatureName :: Lens' AboutFeaturesItem (Maybe Text)
+afiFeatureName
+  = lens _afiFeatureName
+      (\ s a -> s{_afiFeatureName = a})
+
+instance FromJSON AboutFeaturesItem where
+        parseJSON
+          = withObject "AboutFeaturesItem"
+              (\ o ->
+                 AboutFeaturesItem <$>
+                   (o .:? "featureRate") <*> (o .:? "featureName"))
+
+instance ToJSON AboutFeaturesItem where
+        toJSON AboutFeaturesItem{..}
+          = object
+              (catMaybes
+                 [("featureRate" .=) <$> _afiFeatureRate,
+                  ("featureName" .=) <$> _afiFeatureName])
+
+-- | 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
+
+-- | An item with user information and settings.
+--
+-- /See:/ 'about' smart constructor.
+data About = About
+    { _aboExportFormats           :: !(Maybe [AboutExportFormatsItem])
+    , _aboRemainingChangeIds      :: !(Maybe (Textual Int64))
+    , _aboLanguageCode            :: !(Maybe Text)
+    , _aboEtag                    :: !(Maybe Text)
+    , _aboImportFormats           :: !(Maybe [AboutImportFormatsItem])
+    , _aboKind                    :: !Text
+    , _aboDomainSharingPolicy     :: !(Maybe Text)
+    , _aboQuotaBytesUsedInTrash   :: !(Maybe (Textual Int64))
+    , _aboQuotaType               :: !(Maybe Text)
+    , _aboMaxUploadSizes          :: !(Maybe [AboutMaxUploadSizesItem])
+    , _aboUser                    :: !(Maybe User)
+    , _aboSelfLink                :: !(Maybe Text)
+    , _aboName                    :: !(Maybe Text)
+    , _aboFeatures                :: !(Maybe [AboutFeaturesItem])
+    , _aboIsCurrentAppInstalled   :: !(Maybe Bool)
+    , _aboQuotaBytesTotal         :: !(Maybe (Textual Int64))
+    , _aboRootFolderId            :: !(Maybe Text)
+    , _aboQuotaBytesUsed          :: !(Maybe (Textual Int64))
+    , _aboAdditionalRoleInfo      :: !(Maybe [AboutAdditionalRoleInfoItem])
+    , _aboFolderColorPalette      :: !(Maybe [Text])
+    , _aboPermissionId            :: !(Maybe Text)
+    , _aboQuotaBytesUsedAggregate :: !(Maybe (Textual Int64))
+    , _aboQuotaBytesByService     :: !(Maybe [AboutQuotaBytesByServiceItem])
+    , _aboLargestChangeId         :: !(Maybe (Textual Int64))
+    } 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:
+--
+-- * 'aboExportFormats'
+--
+-- * 'aboRemainingChangeIds'
+--
+-- * 'aboLanguageCode'
+--
+-- * 'aboEtag'
+--
+-- * 'aboImportFormats'
+--
+-- * 'aboKind'
+--
+-- * 'aboDomainSharingPolicy'
+--
+-- * 'aboQuotaBytesUsedInTrash'
+--
+-- * 'aboQuotaType'
+--
+-- * 'aboMaxUploadSizes'
+--
+-- * 'aboUser'
+--
+-- * 'aboSelfLink'
+--
+-- * 'aboName'
+--
+-- * 'aboFeatures'
+--
+-- * 'aboIsCurrentAppInstalled'
+--
+-- * 'aboQuotaBytesTotal'
+--
+-- * 'aboRootFolderId'
+--
+-- * 'aboQuotaBytesUsed'
+--
+-- * 'aboAdditionalRoleInfo'
+--
+-- * 'aboFolderColorPalette'
+--
+-- * 'aboPermissionId'
+--
+-- * 'aboQuotaBytesUsedAggregate'
+--
+-- * 'aboQuotaBytesByService'
+--
+-- * 'aboLargestChangeId'
+about
+    :: About
+about =
+    About
+    { _aboExportFormats = Nothing
+    , _aboRemainingChangeIds = Nothing
+    , _aboLanguageCode = Nothing
+    , _aboEtag = Nothing
+    , _aboImportFormats = Nothing
+    , _aboKind = "drive#about"
+    , _aboDomainSharingPolicy = Nothing
+    , _aboQuotaBytesUsedInTrash = Nothing
+    , _aboQuotaType = Nothing
+    , _aboMaxUploadSizes = Nothing
+    , _aboUser = Nothing
+    , _aboSelfLink = Nothing
+    , _aboName = Nothing
+    , _aboFeatures = Nothing
+    , _aboIsCurrentAppInstalled = Nothing
+    , _aboQuotaBytesTotal = Nothing
+    , _aboRootFolderId = Nothing
+    , _aboQuotaBytesUsed = Nothing
+    , _aboAdditionalRoleInfo = Nothing
+    , _aboFolderColorPalette = Nothing
+    , _aboPermissionId = Nothing
+    , _aboQuotaBytesUsedAggregate = Nothing
+    , _aboQuotaBytesByService = Nothing
+    , _aboLargestChangeId = Nothing
+    }
+
+-- | The allowable export formats.
+aboExportFormats :: Lens' About [AboutExportFormatsItem]
+aboExportFormats
+  = lens _aboExportFormats
+      (\ s a -> s{_aboExportFormats = a})
+      . _Default
+      . _Coerce
+
+-- | The number of remaining change ids.
+aboRemainingChangeIds :: Lens' About (Maybe Int64)
+aboRemainingChangeIds
+  = lens _aboRemainingChangeIds
+      (\ s a -> s{_aboRemainingChangeIds = a})
+      . mapping _Coerce
+
+-- | The user\'s language or locale code, as defined by BCP 47, with some
+-- extensions from Unicode\'s LDML format
+-- (http:\/\/www.unicode.org\/reports\/tr35\/).
+aboLanguageCode :: Lens' About (Maybe Text)
+aboLanguageCode
+  = lens _aboLanguageCode
+      (\ s a -> s{_aboLanguageCode = a})
+
+-- | The ETag of the item.
+aboEtag :: Lens' About (Maybe Text)
+aboEtag = lens _aboEtag (\ s a -> s{_aboEtag = a})
+
+-- | The allowable import formats.
+aboImportFormats :: Lens' About [AboutImportFormatsItem]
+aboImportFormats
+  = lens _aboImportFormats
+      (\ s a -> s{_aboImportFormats = a})
+      . _Default
+      . _Coerce
+
+-- | This is always drive#about.
+aboKind :: Lens' About Text
+aboKind = lens _aboKind (\ s a -> s{_aboKind = a})
+
+-- | The domain sharing policy for the current user. Possible values are: -
+-- allowed - allowedWithWarning - incomingOnly - disallowed
+aboDomainSharingPolicy :: Lens' About (Maybe Text)
+aboDomainSharingPolicy
+  = lens _aboDomainSharingPolicy
+      (\ s a -> s{_aboDomainSharingPolicy = a})
+
+-- | The number of quota bytes used by trashed items.
+aboQuotaBytesUsedInTrash :: Lens' About (Maybe Int64)
+aboQuotaBytesUsedInTrash
+  = lens _aboQuotaBytesUsedInTrash
+      (\ s a -> s{_aboQuotaBytesUsedInTrash = a})
+      . mapping _Coerce
+
+-- | The type of the user\'s storage quota. Possible values are: - LIMITED -
+-- UNLIMITED
+aboQuotaType :: Lens' About (Maybe Text)
+aboQuotaType
+  = lens _aboQuotaType (\ s a -> s{_aboQuotaType = a})
+
+-- | List of max upload sizes for each file type. The most specific type
+-- takes precedence.
+aboMaxUploadSizes :: Lens' About [AboutMaxUploadSizesItem]
+aboMaxUploadSizes
+  = lens _aboMaxUploadSizes
+      (\ s a -> s{_aboMaxUploadSizes = a})
+      . _Default
+      . _Coerce
+
+-- | The authenticated user.
+aboUser :: Lens' About (Maybe User)
+aboUser = lens _aboUser (\ s a -> s{_aboUser = a})
+
+-- | A link back to this item.
+aboSelfLink :: Lens' About (Maybe Text)
+aboSelfLink
+  = lens _aboSelfLink (\ s a -> s{_aboSelfLink = a})
+
+-- | The name of the current user.
+aboName :: Lens' About (Maybe Text)
+aboName = lens _aboName (\ s a -> s{_aboName = a})
+
+-- | List of additional features enabled on this account.
+aboFeatures :: Lens' About [AboutFeaturesItem]
+aboFeatures
+  = lens _aboFeatures (\ s a -> s{_aboFeatures = a}) .
+      _Default
+      . _Coerce
+
+-- | A boolean indicating whether the authenticated app is installed by the
+-- authenticated user.
+aboIsCurrentAppInstalled :: Lens' About (Maybe Bool)
+aboIsCurrentAppInstalled
+  = lens _aboIsCurrentAppInstalled
+      (\ s a -> s{_aboIsCurrentAppInstalled = a})
+
+-- | The total number of quota bytes.
+aboQuotaBytesTotal :: Lens' About (Maybe Int64)
+aboQuotaBytesTotal
+  = lens _aboQuotaBytesTotal
+      (\ s a -> s{_aboQuotaBytesTotal = a})
+      . mapping _Coerce
+
+-- | The id of the root folder.
+aboRootFolderId :: Lens' About (Maybe Text)
+aboRootFolderId
+  = lens _aboRootFolderId
+      (\ s a -> s{_aboRootFolderId = a})
+
+-- | The number of quota bytes used by Google Drive.
+aboQuotaBytesUsed :: Lens' About (Maybe Int64)
+aboQuotaBytesUsed
+  = lens _aboQuotaBytesUsed
+      (\ s a -> s{_aboQuotaBytesUsed = a})
+      . mapping _Coerce
+
+-- | Information about supported additional roles per file type. The most
+-- specific type takes precedence.
+aboAdditionalRoleInfo :: Lens' About [AboutAdditionalRoleInfoItem]
+aboAdditionalRoleInfo
+  = lens _aboAdditionalRoleInfo
+      (\ s a -> s{_aboAdditionalRoleInfo = a})
+      . _Default
+      . _Coerce
+
+-- | The palette of allowable folder colors as RGB hex strings.
+aboFolderColorPalette :: Lens' About [Text]
+aboFolderColorPalette
+  = lens _aboFolderColorPalette
+      (\ s a -> s{_aboFolderColorPalette = a})
+      . _Default
+      . _Coerce
+
+-- | The current user\'s ID as visible in the permissions collection.
+aboPermissionId :: Lens' About (Maybe Text)
+aboPermissionId
+  = lens _aboPermissionId
+      (\ s a -> s{_aboPermissionId = a})
+
+-- | The number of quota bytes used by all Google apps (Drive, Picasa, etc.).
+aboQuotaBytesUsedAggregate :: Lens' About (Maybe Int64)
+aboQuotaBytesUsedAggregate
+  = lens _aboQuotaBytesUsedAggregate
+      (\ s a -> s{_aboQuotaBytesUsedAggregate = a})
+      . mapping _Coerce
+
+-- | The amount of storage quota used by different Google services.
+aboQuotaBytesByService :: Lens' About [AboutQuotaBytesByServiceItem]
+aboQuotaBytesByService
+  = lens _aboQuotaBytesByService
+      (\ s a -> s{_aboQuotaBytesByService = a})
+      . _Default
+      . _Coerce
+
+-- | The largest change id.
+aboLargestChangeId :: Lens' About (Maybe Int64)
+aboLargestChangeId
+  = lens _aboLargestChangeId
+      (\ s a -> s{_aboLargestChangeId = a})
+      . mapping _Coerce
+
+instance FromJSON About where
+        parseJSON
+          = withObject "About"
+              (\ o ->
+                 About <$>
+                   (o .:? "exportFormats" .!= mempty) <*>
+                     (o .:? "remainingChangeIds")
+                     <*> (o .:? "languageCode")
+                     <*> (o .:? "etag")
+                     <*> (o .:? "importFormats" .!= mempty)
+                     <*> (o .:? "kind" .!= "drive#about")
+                     <*> (o .:? "domainSharingPolicy")
+                     <*> (o .:? "quotaBytesUsedInTrash")
+                     <*> (o .:? "quotaType")
+                     <*> (o .:? "maxUploadSizes" .!= mempty)
+                     <*> (o .:? "user")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "name")
+                     <*> (o .:? "features" .!= mempty)
+                     <*> (o .:? "isCurrentAppInstalled")
+                     <*> (o .:? "quotaBytesTotal")
+                     <*> (o .:? "rootFolderId")
+                     <*> (o .:? "quotaBytesUsed")
+                     <*> (o .:? "additionalRoleInfo" .!= mempty)
+                     <*> (o .:? "folderColorPalette" .!= mempty)
+                     <*> (o .:? "permissionId")
+                     <*> (o .:? "quotaBytesUsedAggregate")
+                     <*> (o .:? "quotaBytesByService" .!= mempty)
+                     <*> (o .:? "largestChangeId"))
+
+instance ToJSON About where
+        toJSON About{..}
+          = object
+              (catMaybes
+                 [("exportFormats" .=) <$> _aboExportFormats,
+                  ("remainingChangeIds" .=) <$> _aboRemainingChangeIds,
+                  ("languageCode" .=) <$> _aboLanguageCode,
+                  ("etag" .=) <$> _aboEtag,
+                  ("importFormats" .=) <$> _aboImportFormats,
+                  Just ("kind" .= _aboKind),
+                  ("domainSharingPolicy" .=) <$>
+                    _aboDomainSharingPolicy,
+                  ("quotaBytesUsedInTrash" .=) <$>
+                    _aboQuotaBytesUsedInTrash,
+                  ("quotaType" .=) <$> _aboQuotaType,
+                  ("maxUploadSizes" .=) <$> _aboMaxUploadSizes,
+                  ("user" .=) <$> _aboUser,
+                  ("selfLink" .=) <$> _aboSelfLink,
+                  ("name" .=) <$> _aboName,
+                  ("features" .=) <$> _aboFeatures,
+                  ("isCurrentAppInstalled" .=) <$>
+                    _aboIsCurrentAppInstalled,
+                  ("quotaBytesTotal" .=) <$> _aboQuotaBytesTotal,
+                  ("rootFolderId" .=) <$> _aboRootFolderId,
+                  ("quotaBytesUsed" .=) <$> _aboQuotaBytesUsed,
+                  ("additionalRoleInfo" .=) <$> _aboAdditionalRoleInfo,
+                  ("folderColorPalette" .=) <$> _aboFolderColorPalette,
+                  ("permissionId" .=) <$> _aboPermissionId,
+                  ("quotaBytesUsedAggregate" .=) <$>
+                    _aboQuotaBytesUsedAggregate,
+                  ("quotaBytesByService" .=) <$>
+                    _aboQuotaBytesByService,
+                  ("largestChangeId" .=) <$> _aboLargestChangeId])
+
+-- | 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:/ 'aboutImportFormatsItem' smart constructor.
+data AboutImportFormatsItem = AboutImportFormatsItem
+    { _aifiTargets :: !(Maybe [Text])
+    , _aifiSource  :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AboutImportFormatsItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aifiTargets'
+--
+-- * 'aifiSource'
+aboutImportFormatsItem
+    :: AboutImportFormatsItem
+aboutImportFormatsItem =
+    AboutImportFormatsItem
+    { _aifiTargets = Nothing
+    , _aifiSource = Nothing
+    }
+
+-- | The possible content types to convert to.
+aifiTargets :: Lens' AboutImportFormatsItem [Text]
+aifiTargets
+  = lens _aifiTargets (\ s a -> s{_aifiTargets = a}) .
+      _Default
+      . _Coerce
+
+-- | The imported file\'s content type to convert from.
+aifiSource :: Lens' AboutImportFormatsItem (Maybe Text)
+aifiSource
+  = lens _aifiSource (\ s a -> s{_aifiSource = a})
+
+instance FromJSON AboutImportFormatsItem where
+        parseJSON
+          = withObject "AboutImportFormatsItem"
+              (\ o ->
+                 AboutImportFormatsItem <$>
+                   (o .:? "targets" .!= mempty) <*> (o .:? "source"))
+
+instance ToJSON AboutImportFormatsItem where
+        toJSON AboutImportFormatsItem{..}
+          = object
+              (catMaybes
+                 [("targets" .=) <$> _aifiTargets,
+                  ("source" .=) <$> _aifiSource])
+
+-- | Metadata about image media. This will only be present for image types,
+-- and its contents will depend on what can be parsed from the image
+-- content.
+--
+-- /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))
+    , _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)
+    , _fimmDate             :: !(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'
+--
+-- * 'fimmLocation'
+--
+-- * 'fimmAperture'
+--
+-- * 'fimmFocalLength'
+--
+-- * 'fimmCameraMake'
+--
+-- * 'fimmWidth'
+--
+-- * 'fimmExposureTime'
+--
+-- * 'fimmCameraModel'
+--
+-- * 'fimmWhiteBalance'
+--
+-- * 'fimmDate'
+--
+-- * 'fimmLens'
+--
+-- * 'fimmFlashUsed'
+--
+-- * 'fimmExposureBias'
+--
+-- * 'fimmMeteringMode'
+--
+-- * 'fimmExposureMode'
+--
+-- * 'fimmSensor'
+--
+-- * 'fimmColorSpace'
+fileImageMediaMetadata
+    :: FileImageMediaMetadata
+fileImageMediaMetadata =
+    FileImageMediaMetadata
+    { _fimmRotation = Nothing
+    , _fimmHeight = Nothing
+    , _fimmSubjectDistance = Nothing
+    , _fimmMaxApertureValue = Nothing
+    , _fimmIsoSpeed = Nothing
+    , _fimmLocation = Nothing
+    , _fimmAperture = Nothing
+    , _fimmFocalLength = Nothing
+    , _fimmCameraMake = Nothing
+    , _fimmWidth = Nothing
+    , _fimmExposureTime = Nothing
+    , _fimmCameraModel = Nothing
+    , _fimmWhiteBalance = Nothing
+    , _fimmDate = 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
+
+-- | 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 date and time the photo was taken (EXIF format timestamp).
+fimmDate :: Lens' FileImageMediaMetadata (Maybe Text)
+fimmDate = lens _fimmDate (\ s a -> s{_fimmDate = 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 .:? "location")
+                     <*> (o .:? "aperture")
+                     <*> (o .:? "focalLength")
+                     <*> (o .:? "cameraMake")
+                     <*> (o .:? "width")
+                     <*> (o .:? "exposureTime")
+                     <*> (o .:? "cameraModel")
+                     <*> (o .:? "whiteBalance")
+                     <*> (o .:? "date")
+                     <*> (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,
+                  ("location" .=) <$> _fimmLocation,
+                  ("aperture" .=) <$> _fimmAperture,
+                  ("focalLength" .=) <$> _fimmFocalLength,
+                  ("cameraMake" .=) <$> _fimmCameraMake,
+                  ("width" .=) <$> _fimmWidth,
+                  ("exposureTime" .=) <$> _fimmExposureTime,
+                  ("cameraModel" .=) <$> _fimmCameraModel,
+                  ("whiteBalance" .=) <$> _fimmWhiteBalance,
+                  ("date" .=) <$> _fimmDate, ("lens" .=) <$> _fimmLens,
+                  ("flashUsed" .=) <$> _fimmFlashUsed,
+                  ("exposureBias" .=) <$> _fimmExposureBias,
+                  ("meteringMode" .=) <$> _fimmMeteringMode,
+                  ("exposureMode" .=) <$> _fimmExposureMode,
+                  ("sensor" .=) <$> _fimmSensor,
+                  ("colorSpace" .=) <$> _fimmColorSpace])
+
+-- | A group of labels for the file.
+--
+-- /See:/ 'fileLabels' smart constructor.
+data FileLabels = FileLabels
+    { _flViewed     :: !(Maybe Bool)
+    , _flTrashed    :: !(Maybe Bool)
+    , _flStarred    :: !(Maybe Bool)
+    , _flHidden     :: !(Maybe Bool)
+    , _flRestricted :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FileLabels' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'flViewed'
+--
+-- * 'flTrashed'
+--
+-- * 'flStarred'
+--
+-- * 'flHidden'
+--
+-- * 'flRestricted'
+fileLabels
+    :: FileLabels
+fileLabels =
+    FileLabels
+    { _flViewed = Nothing
+    , _flTrashed = Nothing
+    , _flStarred = Nothing
+    , _flHidden = Nothing
+    , _flRestricted = Nothing
+    }
+
+-- | Whether this file has been viewed by this user.
+flViewed :: Lens' FileLabels (Maybe Bool)
+flViewed = lens _flViewed (\ s a -> s{_flViewed = a})
+
+-- | Whether this file has been trashed. This label applies to all users
+-- accessing the file; however, only owners are allowed to see and untrash
+-- files.
+flTrashed :: Lens' FileLabels (Maybe Bool)
+flTrashed
+  = lens _flTrashed (\ s a -> s{_flTrashed = a})
+
+-- | Whether this file is starred by the user.
+flStarred :: Lens' FileLabels (Maybe Bool)
+flStarred
+  = lens _flStarred (\ s a -> s{_flStarred = a})
+
+-- | Deprecated.
+flHidden :: Lens' FileLabels (Maybe Bool)
+flHidden = lens _flHidden (\ s a -> s{_flHidden = a})
+
+-- | Whether viewers and commenters are prevented from downloading, printing,
+-- and copying this file.
+flRestricted :: Lens' FileLabels (Maybe Bool)
+flRestricted
+  = lens _flRestricted (\ s a -> s{_flRestricted = a})
+
+instance FromJSON FileLabels where
+        parseJSON
+          = withObject "FileLabels"
+              (\ o ->
+                 FileLabels <$>
+                   (o .:? "viewed") <*> (o .:? "trashed") <*>
+                     (o .:? "starred")
+                     <*> (o .:? "hidden")
+                     <*> (o .:? "restricted"))
+
+instance ToJSON FileLabels where
+        toJSON FileLabels{..}
+          = object
+              (catMaybes
+                 [("viewed" .=) <$> _flViewed,
+                  ("trashed" .=) <$> _flTrashed,
+                  ("starred" .=) <$> _flStarred,
+                  ("hidden" .=) <$> _flHidden,
+                  ("restricted" .=) <$> _flRestricted])
+
+-- | A JSON representation of a comment on a file in Google Drive.
+--
+-- /See:/ 'comment' smart constructor.
+data Comment = Comment
+    { _ccStatus       :: !(Maybe Text)
+    , _ccHTMLContent  :: !(Maybe Text)
+    , _ccContext      :: !(Maybe CommentContext)
+    , _ccKind         :: !Text
+    , _ccFileTitle    :: !(Maybe Text)
+    , _ccAnchor       :: !(Maybe Text)
+    , _ccContent      :: !(Maybe Text)
+    , _ccReplies      :: !(Maybe [CommentReply])
+    , _ccCreatedDate  :: !(Maybe DateTime')
+    , _ccSelfLink     :: !(Maybe Text)
+    , _ccAuthor       :: !(Maybe User)
+    , _ccModifiedDate :: !(Maybe DateTime')
+    , _ccDeleted      :: !(Maybe Bool)
+    , _ccFileId       :: !(Maybe Text)
+    , _ccCommentId    :: !(Maybe Text)
+    } 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:
+--
+-- * 'ccStatus'
+--
+-- * 'ccHTMLContent'
+--
+-- * 'ccContext'
+--
+-- * 'ccKind'
+--
+-- * 'ccFileTitle'
+--
+-- * 'ccAnchor'
+--
+-- * 'ccContent'
+--
+-- * 'ccReplies'
+--
+-- * 'ccCreatedDate'
+--
+-- * 'ccSelfLink'
+--
+-- * 'ccAuthor'
+--
+-- * 'ccModifiedDate'
+--
+-- * 'ccDeleted'
+--
+-- * 'ccFileId'
+--
+-- * 'ccCommentId'
+comment
+    :: Comment
+comment =
+    Comment
+    { _ccStatus = Nothing
+    , _ccHTMLContent = Nothing
+    , _ccContext = Nothing
+    , _ccKind = "drive#comment"
+    , _ccFileTitle = Nothing
+    , _ccAnchor = Nothing
+    , _ccContent = Nothing
+    , _ccReplies = Nothing
+    , _ccCreatedDate = Nothing
+    , _ccSelfLink = Nothing
+    , _ccAuthor = Nothing
+    , _ccModifiedDate = Nothing
+    , _ccDeleted = Nothing
+    , _ccFileId = Nothing
+    , _ccCommentId = Nothing
+    }
+
+-- | The status of this comment. Status can be changed by posting a reply to
+-- a comment with the desired status. - \"open\" - The comment is still
+-- open. - \"resolved\" - The comment has been resolved by one of its
+-- replies.
+ccStatus :: Lens' Comment (Maybe Text)
+ccStatus = lens _ccStatus (\ s a -> s{_ccStatus = a})
+
+-- | HTML formatted content for this comment.
+ccHTMLContent :: Lens' Comment (Maybe Text)
+ccHTMLContent
+  = lens _ccHTMLContent
+      (\ s a -> s{_ccHTMLContent = a})
+
+-- | The context of the file which is being commented on.
+ccContext :: Lens' Comment (Maybe CommentContext)
+ccContext
+  = lens _ccContext (\ s a -> s{_ccContext = a})
+
+-- | This is always drive#comment.
+ccKind :: Lens' Comment Text
+ccKind = lens _ccKind (\ s a -> s{_ccKind = a})
+
+-- | The title of the file which this comment is addressing.
+ccFileTitle :: Lens' Comment (Maybe Text)
+ccFileTitle
+  = lens _ccFileTitle (\ s a -> s{_ccFileTitle = a})
+
+-- | A region of the document represented as a JSON string. See anchor
+-- documentation for details on how to define and interpret anchor
+-- properties.
+ccAnchor :: Lens' Comment (Maybe Text)
+ccAnchor = lens _ccAnchor (\ s a -> s{_ccAnchor = a})
+
+-- | The plain text content used to create this comment. This is not HTML
+-- safe and should only be used as a starting point to make edits to a
+-- comment\'s content.
+ccContent :: Lens' Comment (Maybe Text)
+ccContent
+  = lens _ccContent (\ s a -> s{_ccContent = a})
+
+-- | Replies to this post.
+ccReplies :: Lens' Comment [CommentReply]
+ccReplies
+  = lens _ccReplies (\ s a -> s{_ccReplies = a}) .
+      _Default
+      . _Coerce
+
+-- | The date when this comment was first created.
+ccCreatedDate :: Lens' Comment (Maybe UTCTime)
+ccCreatedDate
+  = lens _ccCreatedDate
+      (\ s a -> s{_ccCreatedDate = a})
+      . mapping _DateTime
+
+-- | A link back to this comment.
+ccSelfLink :: Lens' Comment (Maybe Text)
+ccSelfLink
+  = lens _ccSelfLink (\ s a -> s{_ccSelfLink = a})
+
+-- | The user who wrote this comment.
+ccAuthor :: Lens' Comment (Maybe User)
+ccAuthor = lens _ccAuthor (\ s a -> s{_ccAuthor = a})
+
+-- | The date when this comment or any of its replies were last modified.
+ccModifiedDate :: Lens' Comment (Maybe UTCTime)
+ccModifiedDate
+  = lens _ccModifiedDate
+      (\ s a -> s{_ccModifiedDate = a})
+      . mapping _DateTime
+
+-- | Whether this comment has been deleted. If a comment has been deleted the
+-- content will be cleared and this will only represent a comment that once
+-- existed.
+ccDeleted :: Lens' Comment (Maybe Bool)
+ccDeleted
+  = lens _ccDeleted (\ s a -> s{_ccDeleted = a})
+
+-- | The file which this comment is addressing.
+ccFileId :: Lens' Comment (Maybe Text)
+ccFileId = lens _ccFileId (\ s a -> s{_ccFileId = a})
+
+-- | The ID of the comment.
+ccCommentId :: Lens' Comment (Maybe Text)
+ccCommentId
+  = lens _ccCommentId (\ s a -> s{_ccCommentId = a})
+
+instance FromJSON Comment where
+        parseJSON
+          = withObject "Comment"
+              (\ o ->
+                 Comment <$>
+                   (o .:? "status") <*> (o .:? "htmlContent") <*>
+                     (o .:? "context")
+                     <*> (o .:? "kind" .!= "drive#comment")
+                     <*> (o .:? "fileTitle")
+                     <*> (o .:? "anchor")
+                     <*> (o .:? "content")
+                     <*> (o .:? "replies" .!= mempty)
+                     <*> (o .:? "createdDate")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "author")
+                     <*> (o .:? "modifiedDate")
+                     <*> (o .:? "deleted")
+                     <*> (o .:? "fileId")
+                     <*> (o .:? "commentId"))
+
+instance ToJSON Comment where
+        toJSON Comment{..}
+          = object
+              (catMaybes
+                 [("status" .=) <$> _ccStatus,
+                  ("htmlContent" .=) <$> _ccHTMLContent,
+                  ("context" .=) <$> _ccContext,
+                  Just ("kind" .= _ccKind),
+                  ("fileTitle" .=) <$> _ccFileTitle,
+                  ("anchor" .=) <$> _ccAnchor,
+                  ("content" .=) <$> _ccContent,
+                  ("replies" .=) <$> _ccReplies,
+                  ("createdDate" .=) <$> _ccCreatedDate,
+                  ("selfLink" .=) <$> _ccSelfLink,
+                  ("author" .=) <$> _ccAuthor,
+                  ("modifiedDate" .=) <$> _ccModifiedDate,
+                  ("deleted" .=) <$> _ccDeleted,
+                  ("fileId" .=) <$> _ccFileId,
+                  ("commentId" .=) <$> _ccCommentId])
+
+-- | A revision of a file.
+--
+-- /See:/ 'revision' smart constructor.
+data Revision = Revision
+    { _rEtag                   :: !(Maybe Text)
+    , _rOriginalFilename       :: !(Maybe Text)
+    , _rKind                   :: !Text
+    , _rPublishedLink          :: !(Maybe Text)
+    , _rPinned                 :: !(Maybe Bool)
+    , _rPublished              :: !(Maybe Bool)
+    , _rLastModifyingUser      :: !(Maybe User)
+    , _rFileSize               :: !(Maybe (Textual Int64))
+    , _rPublishAuto            :: !(Maybe Bool)
+    , _rMD5Checksum            :: !(Maybe Text)
+    , _rMimeType               :: !(Maybe Text)
+    , _rSelfLink               :: !(Maybe Text)
+    , _rLastModifyingUserName  :: !(Maybe Text)
+    , _rDownloadURL            :: !(Maybe Text)
+    , _rExportLinks            :: !(Maybe RevisionExportLinks)
+    , _rPublishedOutsideDomain :: !(Maybe Bool)
+    , _rId                     :: !(Maybe Text)
+    , _rModifiedDate           :: !(Maybe DateTime')
+    } 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:
+--
+-- * 'rEtag'
+--
+-- * 'rOriginalFilename'
+--
+-- * 'rKind'
+--
+-- * 'rPublishedLink'
+--
+-- * 'rPinned'
+--
+-- * 'rPublished'
+--
+-- * 'rLastModifyingUser'
+--
+-- * 'rFileSize'
+--
+-- * 'rPublishAuto'
+--
+-- * 'rMD5Checksum'
+--
+-- * 'rMimeType'
+--
+-- * 'rSelfLink'
+--
+-- * 'rLastModifyingUserName'
+--
+-- * 'rDownloadURL'
+--
+-- * 'rExportLinks'
+--
+-- * 'rPublishedOutsideDomain'
+--
+-- * 'rId'
+--
+-- * 'rModifiedDate'
+revision
+    :: Revision
+revision =
+    Revision
+    { _rEtag = Nothing
+    , _rOriginalFilename = Nothing
+    , _rKind = "drive#revision"
+    , _rPublishedLink = Nothing
+    , _rPinned = Nothing
+    , _rPublished = Nothing
+    , _rLastModifyingUser = Nothing
+    , _rFileSize = Nothing
+    , _rPublishAuto = Nothing
+    , _rMD5Checksum = Nothing
+    , _rMimeType = Nothing
+    , _rSelfLink = Nothing
+    , _rLastModifyingUserName = Nothing
+    , _rDownloadURL = Nothing
+    , _rExportLinks = Nothing
+    , _rPublishedOutsideDomain = Nothing
+    , _rId = Nothing
+    , _rModifiedDate = Nothing
+    }
+
+-- | The ETag of the revision.
+rEtag :: Lens' Revision (Maybe Text)
+rEtag = lens _rEtag (\ s a -> s{_rEtag = a})
+
+-- | The original filename when this revision was created. This will only be
+-- populated on files with content stored in Drive.
+rOriginalFilename :: Lens' Revision (Maybe Text)
+rOriginalFilename
+  = lens _rOriginalFilename
+      (\ s a -> s{_rOriginalFilename = a})
+
+-- | This is always drive#revision.
+rKind :: Lens' Revision Text
+rKind = lens _rKind (\ s a -> s{_rKind = a})
+
+-- | A link to the published revision.
+rPublishedLink :: Lens' Revision (Maybe Text)
+rPublishedLink
+  = lens _rPublishedLink
+      (\ s a -> s{_rPublishedLink = a})
+
+-- | Whether this revision is pinned to prevent automatic purging. This will
+-- only be populated and can only be modified on files with content stored
+-- in Drive which are not Google Docs. Revisions can also be pinned when
+-- they are created through the drive.files.insert\/update\/copy by using
+-- the pinned query parameter.
+rPinned :: Lens' Revision (Maybe Bool)
+rPinned = lens _rPinned (\ s a -> s{_rPinned = a})
+
+-- | Whether this revision is published. This is only populated and can only
+-- be modified for Google Docs.
+rPublished :: Lens' Revision (Maybe Bool)
+rPublished
+  = lens _rPublished (\ s a -> s{_rPublished = a})
+
+-- | The last user to modify this revision.
+rLastModifyingUser :: Lens' Revision (Maybe User)
+rLastModifyingUser
+  = lens _rLastModifyingUser
+      (\ s a -> s{_rLastModifyingUser = a})
+
+-- | The size of the revision in bytes. This will only be populated on files
+-- with content stored in Drive.
+rFileSize :: Lens' Revision (Maybe Int64)
+rFileSize
+  = lens _rFileSize (\ s a -> s{_rFileSize = a}) .
+      mapping _Coerce
+
+-- | Whether subsequent revisions will be automatically republished. This is
+-- only populated and can only be modified for Google Docs.
+rPublishAuto :: Lens' Revision (Maybe Bool)
+rPublishAuto
+  = lens _rPublishAuto (\ s a -> s{_rPublishAuto = a})
+
+-- | An MD5 checksum for the content of this revision. This will only be
+-- populated on files with content stored in Drive.
+rMD5Checksum :: Lens' Revision (Maybe Text)
+rMD5Checksum
+  = lens _rMD5Checksum (\ s a -> s{_rMD5Checksum = a})
+
+-- | The MIME type of the revision.
+rMimeType :: Lens' Revision (Maybe Text)
+rMimeType
+  = lens _rMimeType (\ s a -> s{_rMimeType = a})
+
+-- | A link back to this revision.
+rSelfLink :: Lens' Revision (Maybe Text)
+rSelfLink
+  = lens _rSelfLink (\ s a -> s{_rSelfLink = a})
+
+-- | Name of the last user to modify this revision.
+rLastModifyingUserName :: Lens' Revision (Maybe Text)
+rLastModifyingUserName
+  = lens _rLastModifyingUserName
+      (\ s a -> s{_rLastModifyingUserName = a})
+
+-- | Short term download URL for the file. This will only be populated on
+-- files with content stored in Drive.
+rDownloadURL :: Lens' Revision (Maybe Text)
+rDownloadURL
+  = lens _rDownloadURL (\ s a -> s{_rDownloadURL = a})
+
+-- | Links for exporting Google Docs to specific formats.
+rExportLinks :: Lens' Revision (Maybe RevisionExportLinks)
+rExportLinks
+  = lens _rExportLinks (\ s a -> s{_rExportLinks = a})
+
+-- | Whether this revision is published outside the domain. This is only
+-- populated and can only be modified for Google Docs.
+rPublishedOutsideDomain :: Lens' Revision (Maybe Bool)
+rPublishedOutsideDomain
+  = lens _rPublishedOutsideDomain
+      (\ s a -> s{_rPublishedOutsideDomain = a})
+
+-- | The ID of the revision.
+rId :: Lens' Revision (Maybe Text)
+rId = lens _rId (\ s a -> s{_rId = a})
+
+-- | Last time this revision was modified (formatted RFC 3339 timestamp).
+rModifiedDate :: Lens' Revision (Maybe UTCTime)
+rModifiedDate
+  = lens _rModifiedDate
+      (\ s a -> s{_rModifiedDate = a})
+      . mapping _DateTime
+
+instance FromJSON Revision where
+        parseJSON
+          = withObject "Revision"
+              (\ o ->
+                 Revision <$>
+                   (o .:? "etag") <*> (o .:? "originalFilename") <*>
+                     (o .:? "kind" .!= "drive#revision")
+                     <*> (o .:? "publishedLink")
+                     <*> (o .:? "pinned")
+                     <*> (o .:? "published")
+                     <*> (o .:? "lastModifyingUser")
+                     <*> (o .:? "fileSize")
+                     <*> (o .:? "publishAuto")
+                     <*> (o .:? "md5Checksum")
+                     <*> (o .:? "mimeType")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "lastModifyingUserName")
+                     <*> (o .:? "downloadUrl")
+                     <*> (o .:? "exportLinks")
+                     <*> (o .:? "publishedOutsideDomain")
+                     <*> (o .:? "id")
+                     <*> (o .:? "modifiedDate"))
+
+instance ToJSON Revision where
+        toJSON Revision{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _rEtag,
+                  ("originalFilename" .=) <$> _rOriginalFilename,
+                  Just ("kind" .= _rKind),
+                  ("publishedLink" .=) <$> _rPublishedLink,
+                  ("pinned" .=) <$> _rPinned,
+                  ("published" .=) <$> _rPublished,
+                  ("lastModifyingUser" .=) <$> _rLastModifyingUser,
+                  ("fileSize" .=) <$> _rFileSize,
+                  ("publishAuto" .=) <$> _rPublishAuto,
+                  ("md5Checksum" .=) <$> _rMD5Checksum,
+                  ("mimeType" .=) <$> _rMimeType,
+                  ("selfLink" .=) <$> _rSelfLink,
+                  ("lastModifyingUserName" .=) <$>
+                    _rLastModifyingUserName,
+                  ("downloadUrl" .=) <$> _rDownloadURL,
+                  ("exportLinks" .=) <$> _rExportLinks,
+                  ("publishedOutsideDomain" .=) <$>
+                    _rPublishedOutsideDomain,
+                  ("id" .=) <$> _rId,
+                  ("modifiedDate" .=) <$> _rModifiedDate])
+
+--
+-- /See:/ 'aboutAdditionalRoleInfoItem' smart constructor.
+data AboutAdditionalRoleInfoItem = AboutAdditionalRoleInfoItem
+    { _aariiRoleSets :: !(Maybe [AboutAdditionalRoleInfoItemRoleSetsItem])
+    , _aariiType     :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AboutAdditionalRoleInfoItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aariiRoleSets'
+--
+-- * 'aariiType'
+aboutAdditionalRoleInfoItem
+    :: AboutAdditionalRoleInfoItem
+aboutAdditionalRoleInfoItem =
+    AboutAdditionalRoleInfoItem
+    { _aariiRoleSets = Nothing
+    , _aariiType = Nothing
+    }
+
+-- | The supported additional roles per primary role.
+aariiRoleSets :: Lens' AboutAdditionalRoleInfoItem [AboutAdditionalRoleInfoItemRoleSetsItem]
+aariiRoleSets
+  = lens _aariiRoleSets
+      (\ s a -> s{_aariiRoleSets = a})
+      . _Default
+      . _Coerce
+
+-- | The content type that this additional role info applies to.
+aariiType :: Lens' AboutAdditionalRoleInfoItem (Maybe Text)
+aariiType
+  = lens _aariiType (\ s a -> s{_aariiType = a})
+
+instance FromJSON AboutAdditionalRoleInfoItem where
+        parseJSON
+          = withObject "AboutAdditionalRoleInfoItem"
+              (\ o ->
+                 AboutAdditionalRoleInfoItem <$>
+                   (o .:? "roleSets" .!= mempty) <*> (o .:? "type"))
+
+instance ToJSON AboutAdditionalRoleInfoItem where
+        toJSON AboutAdditionalRoleInfoItem{..}
+          = object
+              (catMaybes
+                 [("roleSets" .=) <$> _aariiRoleSets,
+                  ("type" .=) <$> _aariiType])
+
+-- | A permission for a file.
+--
+-- /See:/ 'permission' smart constructor.
+data Permission = Permission
+    { _perPhotoLink       :: !(Maybe Text)
+    , _perEtag            :: !(Maybe Text)
+    , _perWithLink        :: !(Maybe Bool)
+    , _perKind            :: !Text
+    , _perDomain          :: !(Maybe Text)
+    , _perValue           :: !(Maybe Text)
+    , _perAdditionalRoles :: !(Maybe [Text])
+    , _perRole            :: !(Maybe Text)
+    , _perSelfLink        :: !(Maybe Text)
+    , _perName            :: !(Maybe Text)
+    , _perAuthKey         :: !(Maybe Text)
+    , _perEmailAddress    :: !(Maybe Text)
+    , _perId              :: !(Maybe Text)
+    , _perType            :: !(Maybe Text)
+    } 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:
+--
+-- * 'perPhotoLink'
+--
+-- * 'perEtag'
+--
+-- * 'perWithLink'
+--
+-- * 'perKind'
+--
+-- * 'perDomain'
+--
+-- * 'perValue'
+--
+-- * 'perAdditionalRoles'
+--
+-- * 'perRole'
+--
+-- * 'perSelfLink'
+--
+-- * 'perName'
+--
+-- * 'perAuthKey'
+--
+-- * 'perEmailAddress'
+--
+-- * 'perId'
+--
+-- * 'perType'
+permission
+    :: Permission
+permission =
+    Permission
+    { _perPhotoLink = Nothing
+    , _perEtag = Nothing
+    , _perWithLink = Nothing
+    , _perKind = "drive#permission"
+    , _perDomain = Nothing
+    , _perValue = Nothing
+    , _perAdditionalRoles = Nothing
+    , _perRole = Nothing
+    , _perSelfLink = Nothing
+    , _perName = Nothing
+    , _perAuthKey = Nothing
+    , _perEmailAddress = Nothing
+    , _perId = Nothing
+    , _perType = Nothing
+    }
+
+-- | A link to the profile photo, if available.
+perPhotoLink :: Lens' Permission (Maybe Text)
+perPhotoLink
+  = lens _perPhotoLink (\ s a -> s{_perPhotoLink = a})
+
+-- | The ETag of the permission.
+perEtag :: Lens' Permission (Maybe Text)
+perEtag = lens _perEtag (\ s a -> s{_perEtag = a})
+
+-- | Whether the link is required for this permission.
+perWithLink :: Lens' Permission (Maybe Bool)
+perWithLink
+  = lens _perWithLink (\ s a -> s{_perWithLink = a})
+
+-- | This is always drive#permission.
+perKind :: Lens' Permission Text
+perKind = lens _perKind (\ s a -> s{_perKind = a})
+
+-- | The domain name of the entity this permission refers to. This is an
+-- output-only field which is present when the permission type is user,
+-- group or domain.
+perDomain :: Lens' Permission (Maybe Text)
+perDomain
+  = lens _perDomain (\ s a -> s{_perDomain = a})
+
+-- | The email address or domain name for the entity. This is used during
+-- inserts and is not populated in responses. When making a
+-- drive.permissions.insert request, exactly one of the id or value fields
+-- must be specified.
+perValue :: Lens' Permission (Maybe Text)
+perValue = lens _perValue (\ s a -> s{_perValue = a})
+
+-- | Additional roles for this user. Only commenter is currently allowed.
+perAdditionalRoles :: Lens' Permission [Text]
+perAdditionalRoles
+  = lens _perAdditionalRoles
+      (\ s a -> s{_perAdditionalRoles = a})
+      . _Default
+      . _Coerce
+
+-- | The primary role for this user. Allowed values are: - owner - reader -
+-- writer
+perRole :: Lens' Permission (Maybe Text)
+perRole = lens _perRole (\ s a -> s{_perRole = a})
+
+-- | A link back to this permission.
+perSelfLink :: Lens' Permission (Maybe Text)
+perSelfLink
+  = lens _perSelfLink (\ s a -> s{_perSelfLink = a})
+
+-- | The name for this permission.
+perName :: Lens' Permission (Maybe Text)
+perName = lens _perName (\ s a -> s{_perName = a})
+
+-- | The authkey parameter required for this permission.
+perAuthKey :: Lens' Permission (Maybe Text)
+perAuthKey
+  = lens _perAuthKey (\ s a -> s{_perAuthKey = a})
+
+-- | The email address of the user or group this permission refers to. This
+-- is an output-only field which is present when the permission type is
+-- user or group.
+perEmailAddress :: Lens' Permission (Maybe Text)
+perEmailAddress
+  = lens _perEmailAddress
+      (\ s a -> s{_perEmailAddress = a})
+
+-- | The ID of the user this permission refers to, and identical to the
+-- permissionId in the About and Files resources. When making a
+-- drive.permissions.insert request, exactly one of the id or value fields
+-- must be specified.
+perId :: Lens' Permission (Maybe Text)
+perId = lens _perId (\ s a -> s{_perId = a})
+
+-- | The account type. Allowed values are: - user - group - domain - anyone
+perType :: Lens' Permission (Maybe Text)
+perType = lens _perType (\ s a -> s{_perType = a})
+
+instance FromJSON Permission where
+        parseJSON
+          = withObject "Permission"
+              (\ o ->
+                 Permission <$>
+                   (o .:? "photoLink") <*> (o .:? "etag") <*>
+                     (o .:? "withLink")
+                     <*> (o .:? "kind" .!= "drive#permission")
+                     <*> (o .:? "domain")
+                     <*> (o .:? "value")
+                     <*> (o .:? "additionalRoles" .!= mempty)
+                     <*> (o .:? "role")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "name")
+                     <*> (o .:? "authKey")
+                     <*> (o .:? "emailAddress")
+                     <*> (o .:? "id")
+                     <*> (o .:? "type"))
+
+instance ToJSON Permission where
+        toJSON Permission{..}
+          = object
+              (catMaybes
+                 [("photoLink" .=) <$> _perPhotoLink,
+                  ("etag" .=) <$> _perEtag,
+                  ("withLink" .=) <$> _perWithLink,
+                  Just ("kind" .= _perKind),
+                  ("domain" .=) <$> _perDomain,
+                  ("value" .=) <$> _perValue,
+                  ("additionalRoles" .=) <$> _perAdditionalRoles,
+                  ("role" .=) <$> _perRole,
+                  ("selfLink" .=) <$> _perSelfLink,
+                  ("name" .=) <$> _perName,
+                  ("authKey" .=) <$> _perAuthKey,
+                  ("emailAddress" .=) <$> _perEmailAddress,
+                  ("id" .=) <$> _perId, ("type" .=) <$> _perType])
+
+-- | The metadata for a file.
+--
+-- /See:/ 'file' smart constructor.
+data File = File
+    { _fOwnedByMe             :: !(Maybe Bool)
+    , _fThumbnailLink         :: !(Maybe Text)
+    , _fFullFileExtension     :: !(Maybe Text)
+    , _fThumbnail             :: !(Maybe FileThumbnail)
+    , _fMarkedViewedByMeDate  :: !(Maybe DateTime')
+    , _fEtag                  :: !(Maybe Text)
+    , _fFileExtension         :: !(Maybe Text)
+    , _fCanComment            :: !(Maybe Bool)
+    , _fOwners                :: !(Maybe [User])
+    , _fOwnerNames            :: !(Maybe [Text])
+    , _fOpenWithLinks         :: !(Maybe FileOpenWithLinks)
+    , _fWebViewLink           :: !(Maybe Text)
+    , _fOriginalFilename      :: !(Maybe Text)
+    , _fKind                  :: !Text
+    , _fLastModifyingUser     :: !(Maybe User)
+    , _fIconLink              :: !(Maybe Text)
+    , _fEmbedLink             :: !(Maybe Text)
+    , _fFileSize              :: !(Maybe (Textual Int64))
+    , _fAppDataContents       :: !(Maybe Bool)
+    , _fImageMediaMetadata    :: !(Maybe FileImageMediaMetadata)
+    , _fExplicitlyTrashed     :: !(Maybe Bool)
+    , _fEditable              :: !(Maybe Bool)
+    , _fModifiedByMeDate      :: !(Maybe DateTime')
+    , _fLastViewedByMeDate    :: !(Maybe DateTime')
+    , _fShared                :: !(Maybe Bool)
+    , _fMD5Checksum           :: !(Maybe Text)
+    , _fFolderColorRgb        :: !(Maybe Text)
+    , _fMimeType              :: !(Maybe Text)
+    , _fCreatedDate           :: !(Maybe DateTime')
+    , _fSelfLink              :: !(Maybe Text)
+    , _fLastModifyingUserName :: !(Maybe Text)
+    , _fShareable             :: !(Maybe Bool)
+    , _fDownloadURL           :: !(Maybe Text)
+    , _fExportLinks           :: !(Maybe FileExportLinks)
+    , _fCopyable              :: !(Maybe Bool)
+    , _fParents               :: !(Maybe [ParentReference])
+    , _fSharedWithMeDate      :: !(Maybe DateTime')
+    , _fSpaces                :: !(Maybe [Text])
+    , _fVersion               :: !(Maybe (Textual Int64))
+    , _fUserPermission        :: !(Maybe Permission)
+    , _fWritersCanShare       :: !(Maybe Bool)
+    , _fDefaultOpenWithLink   :: !(Maybe Text)
+    , _fId                    :: !(Maybe Text)
+    , _fLabels                :: !(Maybe FileLabels)
+    , _fModifiedDate          :: !(Maybe DateTime')
+    , _fPermissions           :: !(Maybe [Permission])
+    , _fQuotaBytesUsed        :: !(Maybe (Textual Int64))
+    , _fTitle                 :: !(Maybe Text)
+    , _fAlternateLink         :: !(Maybe Text)
+    , _fVideoMediaMetadata    :: !(Maybe FileVideoMediaMetadata)
+    , _fHeadRevisionId        :: !(Maybe Text)
+    , _fDescription           :: !(Maybe Text)
+    , _fSharingUser           :: !(Maybe User)
+    , _fWebContentLink        :: !(Maybe Text)
+    , _fProperties            :: !(Maybe [Property])
+    , _fIndexableText         :: !(Maybe FileIndexableText)
+    } 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'
+--
+-- * 'fThumbnail'
+--
+-- * 'fMarkedViewedByMeDate'
+--
+-- * 'fEtag'
+--
+-- * 'fFileExtension'
+--
+-- * 'fCanComment'
+--
+-- * 'fOwners'
+--
+-- * 'fOwnerNames'
+--
+-- * 'fOpenWithLinks'
+--
+-- * 'fWebViewLink'
+--
+-- * 'fOriginalFilename'
+--
+-- * 'fKind'
+--
+-- * 'fLastModifyingUser'
+--
+-- * 'fIconLink'
+--
+-- * 'fEmbedLink'
+--
+-- * 'fFileSize'
+--
+-- * 'fAppDataContents'
+--
+-- * 'fImageMediaMetadata'
+--
+-- * 'fExplicitlyTrashed'
+--
+-- * 'fEditable'
+--
+-- * 'fModifiedByMeDate'
+--
+-- * 'fLastViewedByMeDate'
+--
+-- * 'fShared'
+--
+-- * 'fMD5Checksum'
+--
+-- * 'fFolderColorRgb'
+--
+-- * 'fMimeType'
+--
+-- * 'fCreatedDate'
+--
+-- * 'fSelfLink'
+--
+-- * 'fLastModifyingUserName'
+--
+-- * 'fShareable'
+--
+-- * 'fDownloadURL'
+--
+-- * 'fExportLinks'
+--
+-- * 'fCopyable'
+--
+-- * 'fParents'
+--
+-- * 'fSharedWithMeDate'
+--
+-- * 'fSpaces'
+--
+-- * 'fVersion'
+--
+-- * 'fUserPermission'
+--
+-- * 'fWritersCanShare'
+--
+-- * 'fDefaultOpenWithLink'
+--
+-- * 'fId'
+--
+-- * 'fLabels'
+--
+-- * 'fModifiedDate'
+--
+-- * 'fPermissions'
+--
+-- * 'fQuotaBytesUsed'
+--
+-- * 'fTitle'
+--
+-- * 'fAlternateLink'
+--
+-- * 'fVideoMediaMetadata'
+--
+-- * 'fHeadRevisionId'
+--
+-- * 'fDescription'
+--
+-- * 'fSharingUser'
+--
+-- * 'fWebContentLink'
+--
+-- * 'fProperties'
+--
+-- * 'fIndexableText'
+file
+    :: File
+file =
+    File
+    { _fOwnedByMe = Nothing
+    , _fThumbnailLink = Nothing
+    , _fFullFileExtension = Nothing
+    , _fThumbnail = Nothing
+    , _fMarkedViewedByMeDate = Nothing
+    , _fEtag = Nothing
+    , _fFileExtension = Nothing
+    , _fCanComment = Nothing
+    , _fOwners = Nothing
+    , _fOwnerNames = Nothing
+    , _fOpenWithLinks = Nothing
+    , _fWebViewLink = Nothing
+    , _fOriginalFilename = Nothing
+    , _fKind = "drive#file"
+    , _fLastModifyingUser = Nothing
+    , _fIconLink = Nothing
+    , _fEmbedLink = Nothing
+    , _fFileSize = Nothing
+    , _fAppDataContents = Nothing
+    , _fImageMediaMetadata = Nothing
+    , _fExplicitlyTrashed = Nothing
+    , _fEditable = Nothing
+    , _fModifiedByMeDate = Nothing
+    , _fLastViewedByMeDate = Nothing
+    , _fShared = Nothing
+    , _fMD5Checksum = Nothing
+    , _fFolderColorRgb = Nothing
+    , _fMimeType = Nothing
+    , _fCreatedDate = Nothing
+    , _fSelfLink = Nothing
+    , _fLastModifyingUserName = Nothing
+    , _fShareable = Nothing
+    , _fDownloadURL = Nothing
+    , _fExportLinks = Nothing
+    , _fCopyable = Nothing
+    , _fParents = Nothing
+    , _fSharedWithMeDate = Nothing
+    , _fSpaces = Nothing
+    , _fVersion = Nothing
+    , _fUserPermission = Nothing
+    , _fWritersCanShare = Nothing
+    , _fDefaultOpenWithLink = Nothing
+    , _fId = Nothing
+    , _fLabels = Nothing
+    , _fModifiedDate = Nothing
+    , _fPermissions = Nothing
+    , _fQuotaBytesUsed = Nothing
+    , _fTitle = Nothing
+    , _fAlternateLink = Nothing
+    , _fVideoMediaMetadata = Nothing
+    , _fHeadRevisionId = Nothing
+    , _fDescription = Nothing
+    , _fSharingUser = Nothing
+    , _fWebContentLink = Nothing
+    , _fProperties = Nothing
+    , _fIndexableText = Nothing
+    }
+
+-- | Whether the file is owned by the current user.
+fOwnedByMe :: Lens' File (Maybe Bool)
+fOwnedByMe
+  = lens _fOwnedByMe (\ s a -> s{_fOwnedByMe = a})
+
+-- | A short-lived link to the file\'s thumbnail. Typically lasts on the
+-- order of hours.
+fThumbnailLink :: Lens' File (Maybe Text)
+fThumbnailLink
+  = lens _fThumbnailLink
+      (\ s a -> s{_fThumbnailLink = a})
+
+-- | The full file extension; extracted from the title. May contain multiple
+-- concatenated extensions, such as \"tar.gz\". Removing an extension from
+-- the title does not clear this field; however, changing the extension on
+-- the title does update this field. This field is only populated for files
+-- with content stored in Drive; it is not populated for Google Docs or
+-- shortcut files.
+fFullFileExtension :: Lens' File (Maybe Text)
+fFullFileExtension
+  = lens _fFullFileExtension
+      (\ s a -> s{_fFullFileExtension = a})
+
+-- | Thumbnail for the file. Only accepted on upload and for files that are
+-- not already thumbnailed by Google.
+fThumbnail :: Lens' File (Maybe FileThumbnail)
+fThumbnail
+  = lens _fThumbnail (\ s a -> s{_fThumbnail = a})
+
+-- | Deprecated.
+fMarkedViewedByMeDate :: Lens' File (Maybe UTCTime)
+fMarkedViewedByMeDate
+  = lens _fMarkedViewedByMeDate
+      (\ s a -> s{_fMarkedViewedByMeDate = a})
+      . mapping _DateTime
+
+-- | ETag of the file.
+fEtag :: Lens' File (Maybe Text)
+fEtag = lens _fEtag (\ s a -> s{_fEtag = a})
+
+-- | The final component of fullFileExtension with trailing text that does
+-- not appear to be part of the extension removed. This field is only
+-- populated for files with content stored in Drive; it is not populated
+-- for Google Docs or shortcut files.
+fFileExtension :: Lens' File (Maybe Text)
+fFileExtension
+  = lens _fFileExtension
+      (\ s a -> s{_fFileExtension = a})
+
+-- | Whether the current user can comment on the file.
+fCanComment :: Lens' File (Maybe Bool)
+fCanComment
+  = lens _fCanComment (\ s a -> s{_fCanComment = a})
+
+-- | The owner(s) of this file.
+fOwners :: Lens' File [User]
+fOwners
+  = lens _fOwners (\ s a -> s{_fOwners = a}) . _Default
+      . _Coerce
+
+-- | Name(s) of the owner(s) of this file.
+fOwnerNames :: Lens' File [Text]
+fOwnerNames
+  = lens _fOwnerNames (\ s a -> s{_fOwnerNames = a}) .
+      _Default
+      . _Coerce
+
+-- | A map of the id of each of the user\'s apps to a link to open this file
+-- with that app. Only populated when the drive.apps.readonly scope is
+-- used.
+fOpenWithLinks :: Lens' File (Maybe FileOpenWithLinks)
+fOpenWithLinks
+  = lens _fOpenWithLinks
+      (\ s a -> s{_fOpenWithLinks = a})
+
+-- | A link only available on public folders for viewing their static web
+-- assets (HTML, CSS, JS, etc) via Google Drive\'s Website Hosting.
+fWebViewLink :: Lens' File (Maybe Text)
+fWebViewLink
+  = lens _fWebViewLink (\ s a -> s{_fWebViewLink = a})
+
+-- | The original filename if the file was uploaded manually, or the original
+-- title if the file was inserted through the API. Note that renames of the
+-- title will not change the original filename. This field is only
+-- populated for files with content stored in Drive; it is not populated
+-- for Google Docs or shortcut files.
+fOriginalFilename :: Lens' File (Maybe Text)
+fOriginalFilename
+  = lens _fOriginalFilename
+      (\ s a -> s{_fOriginalFilename = a})
+
+-- | The type of file. This is always drive#file.
+fKind :: Lens' File Text
+fKind = lens _fKind (\ s a -> s{_fKind = a})
+
+-- | The last user to modify this file.
+fLastModifyingUser :: Lens' File (Maybe User)
+fLastModifyingUser
+  = lens _fLastModifyingUser
+      (\ s a -> s{_fLastModifyingUser = a})
+
+-- | A link to the file\'s icon.
+fIconLink :: Lens' File (Maybe Text)
+fIconLink
+  = lens _fIconLink (\ s a -> s{_fIconLink = a})
+
+-- | A link for embedding the file.
+fEmbedLink :: Lens' File (Maybe Text)
+fEmbedLink
+  = lens _fEmbedLink (\ s a -> s{_fEmbedLink = a})
+
+-- | The size of the file in bytes. This field is only populated for files
+-- with content stored in Drive; it is not populated for Google Docs or
+-- shortcut files.
+fFileSize :: Lens' File (Maybe Int64)
+fFileSize
+  = lens _fFileSize (\ s a -> s{_fFileSize = a}) .
+      mapping _Coerce
+
+-- | Whether this file is in the Application Data folder.
+fAppDataContents :: Lens' File (Maybe Bool)
+fAppDataContents
+  = lens _fAppDataContents
+      (\ s a -> s{_fAppDataContents = a})
+
+-- | Metadata about image media. This will only be present for image types,
+-- and its contents will depend on what can be parsed from the image
+-- content.
+fImageMediaMetadata :: Lens' File (Maybe FileImageMediaMetadata)
+fImageMediaMetadata
+  = lens _fImageMediaMetadata
+      (\ s a -> s{_fImageMediaMetadata = a})
+
+-- | Whether this file has been explicitly trashed, as opposed to recursively
+-- trashed.
+fExplicitlyTrashed :: Lens' File (Maybe Bool)
+fExplicitlyTrashed
+  = lens _fExplicitlyTrashed
+      (\ s a -> s{_fExplicitlyTrashed = a})
+
+-- | Whether the file can be edited by the current user.
+fEditable :: Lens' File (Maybe Bool)
+fEditable
+  = lens _fEditable (\ s a -> s{_fEditable = a})
+
+-- | Last time this file was modified by the user (formatted RFC 3339
+-- timestamp). Note that setting modifiedDate will also update the
+-- modifiedByMe date for the user which set the date.
+fModifiedByMeDate :: Lens' File (Maybe UTCTime)
+fModifiedByMeDate
+  = lens _fModifiedByMeDate
+      (\ s a -> s{_fModifiedByMeDate = a})
+      . mapping _DateTime
+
+-- | Last time this file was viewed by the user (formatted RFC 3339
+-- timestamp).
+fLastViewedByMeDate :: Lens' File (Maybe UTCTime)
+fLastViewedByMeDate
+  = lens _fLastViewedByMeDate
+      (\ s a -> s{_fLastViewedByMeDate = a})
+      . mapping _DateTime
+
+-- | Whether the file has been shared.
+fShared :: Lens' File (Maybe Bool)
+fShared = lens _fShared (\ s a -> s{_fShared = a})
+
+-- | An MD5 checksum for the content of this file. This field is only
+-- populated for files with content stored in Drive; it is not populated
+-- for Google Docs or shortcut files.
+fMD5Checksum :: Lens' File (Maybe Text)
+fMD5Checksum
+  = lens _fMD5Checksum (\ s a -> s{_fMD5Checksum = a})
+
+-- | Folder color as an RGB hex string if the file is a folder. The list of
+-- supported colors is available in the folderColorPalette field of the
+-- About resource. If an unsupported color is specified, it will be changed
+-- to the closest color in the palette.
+fFolderColorRgb :: Lens' File (Maybe Text)
+fFolderColorRgb
+  = lens _fFolderColorRgb
+      (\ s a -> s{_fFolderColorRgb = a})
+
+-- | The MIME type of the file. This is only mutable on update when uploading
+-- new content. This field can be left blank, and the mimetype will be
+-- determined from the uploaded content\'s MIME type.
+fMimeType :: Lens' File (Maybe Text)
+fMimeType
+  = lens _fMimeType (\ s a -> s{_fMimeType = a})
+
+-- | Create time for this file (formatted RFC 3339 timestamp).
+fCreatedDate :: Lens' File (Maybe UTCTime)
+fCreatedDate
+  = lens _fCreatedDate (\ s a -> s{_fCreatedDate = a})
+      . mapping _DateTime
+
+-- | A link back to this file.
+fSelfLink :: Lens' File (Maybe Text)
+fSelfLink
+  = lens _fSelfLink (\ s a -> s{_fSelfLink = a})
+
+-- | Name of the last user to modify this file.
+fLastModifyingUserName :: Lens' File (Maybe Text)
+fLastModifyingUserName
+  = lens _fLastModifyingUserName
+      (\ s a -> s{_fLastModifyingUserName = a})
+
+-- | Whether the file\'s sharing settings can be modified by the current
+-- user.
+fShareable :: Lens' File (Maybe Bool)
+fShareable
+  = lens _fShareable (\ s a -> s{_fShareable = a})
+
+fDownloadURL :: Lens' File (Maybe Text)
+fDownloadURL
+  = lens _fDownloadURL (\ s a -> s{_fDownloadURL = a})
+
+-- | Links for exporting Google Docs to specific formats.
+fExportLinks :: Lens' File (Maybe FileExportLinks)
+fExportLinks
+  = lens _fExportLinks (\ s a -> s{_fExportLinks = a})
+
+-- | Whether the file can be copied by the current user.
+fCopyable :: Lens' File (Maybe Bool)
+fCopyable
+  = lens _fCopyable (\ s a -> s{_fCopyable = a})
+
+-- | Collection of parent folders which contain this file. Setting this field
+-- will put the file in all of the provided folders. On insert, if no
+-- folders are provided, the file will be placed in the default root
+-- folder.
+fParents :: Lens' File [ParentReference]
+fParents
+  = lens _fParents (\ s a -> s{_fParents = a}) .
+      _Default
+      . _Coerce
+
+-- | Time at which this file was shared with the user (formatted RFC 3339
+-- timestamp).
+fSharedWithMeDate :: Lens' File (Maybe UTCTime)
+fSharedWithMeDate
+  = lens _fSharedWithMeDate
+      (\ s a -> s{_fSharedWithMeDate = a})
+      . mapping _DateTime
+
+-- | The list of spaces which contain the file. 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 requesting user.
+fVersion :: Lens' File (Maybe Int64)
+fVersion
+  = lens _fVersion (\ s a -> s{_fVersion = a}) .
+      mapping _Coerce
+
+-- | The permissions for the authenticated user on this file.
+fUserPermission :: Lens' File (Maybe Permission)
+fUserPermission
+  = lens _fUserPermission
+      (\ s a -> s{_fUserPermission = a})
+
+-- | Whether writers can share the document with other users.
+fWritersCanShare :: Lens' File (Maybe Bool)
+fWritersCanShare
+  = lens _fWritersCanShare
+      (\ s a -> s{_fWritersCanShare = a})
+
+-- | A link to open this file with the user\'s default app for this file.
+-- Only populated when the drive.apps.readonly scope is used.
+fDefaultOpenWithLink :: Lens' File (Maybe Text)
+fDefaultOpenWithLink
+  = lens _fDefaultOpenWithLink
+      (\ s a -> s{_fDefaultOpenWithLink = a})
+
+-- | The ID of the file.
+fId :: Lens' File (Maybe Text)
+fId = lens _fId (\ s a -> s{_fId = a})
+
+-- | A group of labels for the file.
+fLabels :: Lens' File (Maybe FileLabels)
+fLabels = lens _fLabels (\ s a -> s{_fLabels = a})
+
+-- | Last time this file was modified by anyone (formatted RFC 3339
+-- timestamp). This is only mutable on update when the setModifiedDate
+-- parameter is set.
+fModifiedDate :: Lens' File (Maybe UTCTime)
+fModifiedDate
+  = lens _fModifiedDate
+      (\ s a -> s{_fModifiedDate = a})
+      . mapping _DateTime
+
+-- | The list of permissions for users with access to this file.
+fPermissions :: Lens' File [Permission]
+fPermissions
+  = lens _fPermissions (\ s a -> s{_fPermissions = a})
+      . _Default
+      . _Coerce
+
+-- | The number of quota bytes used by this file.
+fQuotaBytesUsed :: Lens' File (Maybe Int64)
+fQuotaBytesUsed
+  = lens _fQuotaBytesUsed
+      (\ s a -> s{_fQuotaBytesUsed = a})
+      . mapping _Coerce
+
+-- | The title of this file.
+fTitle :: Lens' File (Maybe Text)
+fTitle = lens _fTitle (\ s a -> s{_fTitle = a})
+
+-- | A link for opening the file in a relevant Google editor or viewer.
+fAlternateLink :: Lens' File (Maybe Text)
+fAlternateLink
+  = lens _fAlternateLink
+      (\ s a -> s{_fAlternateLink = a})
+
+-- | Metadata about video media. This will only be present for video types.
+fVideoMediaMetadata :: Lens' File (Maybe FileVideoMediaMetadata)
+fVideoMediaMetadata
+  = lens _fVideoMediaMetadata
+      (\ s a -> s{_fVideoMediaMetadata = a})
+
+-- | The ID of the file\'s head revision. This field is only populated for
+-- files with content stored in Drive; it is not populated for Google Docs
+-- or shortcut files.
+fHeadRevisionId :: Lens' File (Maybe Text)
+fHeadRevisionId
+  = lens _fHeadRevisionId
+      (\ s a -> s{_fHeadRevisionId = a})
+
+-- | A short description of the file.
+fDescription :: Lens' File (Maybe Text)
+fDescription
+  = lens _fDescription (\ s a -> s{_fDescription = a})
+
+-- | User that shared the item with the current user, if available.
+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 using cookie
+-- based authentication. In cases where the content is shared publicly, the
+-- content can be downloaded without any credentials.
+fWebContentLink :: Lens' File (Maybe Text)
+fWebContentLink
+  = lens _fWebContentLink
+      (\ s a -> s{_fWebContentLink = a})
+
+-- | The list of properties.
+fProperties :: Lens' File [Property]
+fProperties
+  = lens _fProperties (\ s a -> s{_fProperties = a}) .
+      _Default
+      . _Coerce
+
+-- | Indexable text attributes for the file (can only be written)
+fIndexableText :: Lens' File (Maybe FileIndexableText)
+fIndexableText
+  = lens _fIndexableText
+      (\ s a -> s{_fIndexableText = a})
+
+instance FromJSON File where
+        parseJSON
+          = withObject "File"
+              (\ o ->
+                 File <$>
+                   (o .:? "ownedByMe") <*> (o .:? "thumbnailLink") <*>
+                     (o .:? "fullFileExtension")
+                     <*> (o .:? "thumbnail")
+                     <*> (o .:? "markedViewedByMeDate")
+                     <*> (o .:? "etag")
+                     <*> (o .:? "fileExtension")
+                     <*> (o .:? "canComment")
+                     <*> (o .:? "owners" .!= mempty)
+                     <*> (o .:? "ownerNames" .!= mempty)
+                     <*> (o .:? "openWithLinks")
+                     <*> (o .:? "webViewLink")
+                     <*> (o .:? "originalFilename")
+                     <*> (o .:? "kind" .!= "drive#file")
+                     <*> (o .:? "lastModifyingUser")
+                     <*> (o .:? "iconLink")
+                     <*> (o .:? "embedLink")
+                     <*> (o .:? "fileSize")
+                     <*> (o .:? "appDataContents")
+                     <*> (o .:? "imageMediaMetadata")
+                     <*> (o .:? "explicitlyTrashed")
+                     <*> (o .:? "editable")
+                     <*> (o .:? "modifiedByMeDate")
+                     <*> (o .:? "lastViewedByMeDate")
+                     <*> (o .:? "shared")
+                     <*> (o .:? "md5Checksum")
+                     <*> (o .:? "folderColorRgb")
+                     <*> (o .:? "mimeType")
+                     <*> (o .:? "createdDate")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "lastModifyingUserName")
+                     <*> (o .:? "shareable")
+                     <*> (o .:? "downloadUrl")
+                     <*> (o .:? "exportLinks")
+                     <*> (o .:? "copyable")
+                     <*> (o .:? "parents" .!= mempty)
+                     <*> (o .:? "sharedWithMeDate")
+                     <*> (o .:? "spaces" .!= mempty)
+                     <*> (o .:? "version")
+                     <*> (o .:? "userPermission")
+                     <*> (o .:? "writersCanShare")
+                     <*> (o .:? "defaultOpenWithLink")
+                     <*> (o .:? "id")
+                     <*> (o .:? "labels")
+                     <*> (o .:? "modifiedDate")
+                     <*> (o .:? "permissions" .!= mempty)
+                     <*> (o .:? "quotaBytesUsed")
+                     <*> (o .:? "title")
+                     <*> (o .:? "alternateLink")
+                     <*> (o .:? "videoMediaMetadata")
+                     <*> (o .:? "headRevisionId")
+                     <*> (o .:? "description")
+                     <*> (o .:? "sharingUser")
+                     <*> (o .:? "webContentLink")
+                     <*> (o .:? "properties" .!= mempty)
+                     <*> (o .:? "indexableText"))
+
+instance ToJSON File where
+        toJSON File{..}
+          = object
+              (catMaybes
+                 [("ownedByMe" .=) <$> _fOwnedByMe,
+                  ("thumbnailLink" .=) <$> _fThumbnailLink,
+                  ("fullFileExtension" .=) <$> _fFullFileExtension,
+                  ("thumbnail" .=) <$> _fThumbnail,
+                  ("markedViewedByMeDate" .=) <$>
+                    _fMarkedViewedByMeDate,
+                  ("etag" .=) <$> _fEtag,
+                  ("fileExtension" .=) <$> _fFileExtension,
+                  ("canComment" .=) <$> _fCanComment,
+                  ("owners" .=) <$> _fOwners,
+                  ("ownerNames" .=) <$> _fOwnerNames,
+                  ("openWithLinks" .=) <$> _fOpenWithLinks,
+                  ("webViewLink" .=) <$> _fWebViewLink,
+                  ("originalFilename" .=) <$> _fOriginalFilename,
+                  Just ("kind" .= _fKind),
+                  ("lastModifyingUser" .=) <$> _fLastModifyingUser,
+                  ("iconLink" .=) <$> _fIconLink,
+                  ("embedLink" .=) <$> _fEmbedLink,
+                  ("fileSize" .=) <$> _fFileSize,
+                  ("appDataContents" .=) <$> _fAppDataContents,
+                  ("imageMediaMetadata" .=) <$> _fImageMediaMetadata,
+                  ("explicitlyTrashed" .=) <$> _fExplicitlyTrashed,
+                  ("editable" .=) <$> _fEditable,
+                  ("modifiedByMeDate" .=) <$> _fModifiedByMeDate,
+                  ("lastViewedByMeDate" .=) <$> _fLastViewedByMeDate,
+                  ("shared" .=) <$> _fShared,
+                  ("md5Checksum" .=) <$> _fMD5Checksum,
+                  ("folderColorRgb" .=) <$> _fFolderColorRgb,
+                  ("mimeType" .=) <$> _fMimeType,
+                  ("createdDate" .=) <$> _fCreatedDate,
+                  ("selfLink" .=) <$> _fSelfLink,
+                  ("lastModifyingUserName" .=) <$>
+                    _fLastModifyingUserName,
+                  ("shareable" .=) <$> _fShareable,
+                  ("downloadUrl" .=) <$> _fDownloadURL,
+                  ("exportLinks" .=) <$> _fExportLinks,
+                  ("copyable" .=) <$> _fCopyable,
+                  ("parents" .=) <$> _fParents,
+                  ("sharedWithMeDate" .=) <$> _fSharedWithMeDate,
+                  ("spaces" .=) <$> _fSpaces,
+                  ("version" .=) <$> _fVersion,
+                  ("userPermission" .=) <$> _fUserPermission,
+                  ("writersCanShare" .=) <$> _fWritersCanShare,
+                  ("defaultOpenWithLink" .=) <$> _fDefaultOpenWithLink,
+                  ("id" .=) <$> _fId, ("labels" .=) <$> _fLabels,
+                  ("modifiedDate" .=) <$> _fModifiedDate,
+                  ("permissions" .=) <$> _fPermissions,
+                  ("quotaBytesUsed" .=) <$> _fQuotaBytesUsed,
+                  ("title" .=) <$> _fTitle,
+                  ("alternateLink" .=) <$> _fAlternateLink,
+                  ("videoMediaMetadata" .=) <$> _fVideoMediaMetadata,
+                  ("headRevisionId" .=) <$> _fHeadRevisionId,
+                  ("description" .=) <$> _fDescription,
+                  ("sharingUser" .=) <$> _fSharingUser,
+                  ("webContentLink" .=) <$> _fWebContentLink,
+                  ("properties" .=) <$> _fProperties,
+                  ("indexableText" .=) <$> _fIndexableText])
+
+-- | An ID for a user or group as seen in Permission items.
+--
+-- /See:/ 'permissionId' smart constructor.
+data PermissionId = PermissionId
+    { _piKind :: !Text
+    , _piId   :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PermissionId' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'piKind'
+--
+-- * 'piId'
+permissionId
+    :: PermissionId
+permissionId =
+    PermissionId
+    { _piKind = "drive#permissionId"
+    , _piId = Nothing
+    }
+
+-- | This is always drive#permissionId.
+piKind :: Lens' PermissionId Text
+piKind = lens _piKind (\ s a -> s{_piKind = a})
+
+-- | The permission ID.
+piId :: Lens' PermissionId (Maybe Text)
+piId = lens _piId (\ s a -> s{_piId = a})
+
+instance FromJSON PermissionId where
+        parseJSON
+          = withObject "PermissionId"
+              (\ o ->
+                 PermissionId <$>
+                   (o .:? "kind" .!= "drive#permissionId") <*>
+                     (o .:? "id"))
+
+instance ToJSON PermissionId where
+        toJSON PermissionId{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _piKind), ("id" .=) <$> _piId])
+
+-- | A list of a file\'s parents.
+--
+-- /See:/ 'parentList' smart constructor.
+data ParentList = ParentList
+    { _parEtag     :: !(Maybe Text)
+    , _parKind     :: !Text
+    , _parItems    :: !(Maybe [ParentReference])
+    , _parSelfLink :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ParentList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'parEtag'
+--
+-- * 'parKind'
+--
+-- * 'parItems'
+--
+-- * 'parSelfLink'
+parentList
+    :: ParentList
+parentList =
+    ParentList
+    { _parEtag = Nothing
+    , _parKind = "drive#parentList"
+    , _parItems = Nothing
+    , _parSelfLink = Nothing
+    }
+
+-- | The ETag of the list.
+parEtag :: Lens' ParentList (Maybe Text)
+parEtag = lens _parEtag (\ s a -> s{_parEtag = a})
+
+-- | This is always drive#parentList.
+parKind :: Lens' ParentList Text
+parKind = lens _parKind (\ s a -> s{_parKind = a})
+
+-- | The actual list of parents.
+parItems :: Lens' ParentList [ParentReference]
+parItems
+  = lens _parItems (\ s a -> s{_parItems = a}) .
+      _Default
+      . _Coerce
+
+-- | A link back to this list.
+parSelfLink :: Lens' ParentList (Maybe Text)
+parSelfLink
+  = lens _parSelfLink (\ s a -> s{_parSelfLink = a})
+
+instance FromJSON ParentList where
+        parseJSON
+          = withObject "ParentList"
+              (\ o ->
+                 ParentList <$>
+                   (o .:? "etag") <*>
+                     (o .:? "kind" .!= "drive#parentList")
+                     <*> (o .:? "items" .!= mempty)
+                     <*> (o .:? "selfLink"))
+
+instance ToJSON ParentList where
+        toJSON ParentList{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _parEtag, Just ("kind" .= _parKind),
+                  ("items" .=) <$> _parItems,
+                  ("selfLink" .=) <$> _parSelfLink])
+
+-- | A list of generated IDs which can be provided in insert 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})
+
+-- | This is always 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 JSON representation of a list of comments on a file in Google Drive.
+--
+-- /See:/ 'commentList' smart constructor.
+data CommentList = CommentList
+    { _comoNextPageToken :: !(Maybe Text)
+    , _comoNextLink      :: !(Maybe Text)
+    , _comoKind          :: !Text
+    , _comoItems         :: !(Maybe [Comment])
+    , _comoSelfLink      :: !(Maybe Text)
+    } 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:
+--
+-- * 'comoNextPageToken'
+--
+-- * 'comoNextLink'
+--
+-- * 'comoKind'
+--
+-- * 'comoItems'
+--
+-- * 'comoSelfLink'
+commentList
+    :: CommentList
+commentList =
+    CommentList
+    { _comoNextPageToken = Nothing
+    , _comoNextLink = Nothing
+    , _comoKind = "drive#commentList"
+    , _comoItems = Nothing
+    , _comoSelfLink = Nothing
+    }
+
+-- | The token to use to request the next page of results.
+comoNextPageToken :: Lens' CommentList (Maybe Text)
+comoNextPageToken
+  = lens _comoNextPageToken
+      (\ s a -> s{_comoNextPageToken = a})
+
+-- | A link to the next page of comments.
+comoNextLink :: Lens' CommentList (Maybe Text)
+comoNextLink
+  = lens _comoNextLink (\ s a -> s{_comoNextLink = a})
+
+-- | This is always drive#commentList.
+comoKind :: Lens' CommentList Text
+comoKind = lens _comoKind (\ s a -> s{_comoKind = a})
+
+-- | List of comments.
+comoItems :: Lens' CommentList [Comment]
+comoItems
+  = lens _comoItems (\ s a -> s{_comoItems = a}) .
+      _Default
+      . _Coerce
+
+-- | A link back to this list.
+comoSelfLink :: Lens' CommentList (Maybe Text)
+comoSelfLink
+  = lens _comoSelfLink (\ s a -> s{_comoSelfLink = a})
+
+instance FromJSON CommentList where
+        parseJSON
+          = withObject "CommentList"
+              (\ o ->
+                 CommentList <$>
+                   (o .:? "nextPageToken") <*> (o .:? "nextLink") <*>
+                     (o .:? "kind" .!= "drive#commentList")
+                     <*> (o .:? "items" .!= mempty)
+                     <*> (o .:? "selfLink"))
+
+instance ToJSON CommentList where
+        toJSON CommentList{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _comoNextPageToken,
+                  ("nextLink" .=) <$> _comoNextLink,
+                  Just ("kind" .= _comoKind),
+                  ("items" .=) <$> _comoItems,
+                  ("selfLink" .=) <$> _comoSelfLink])
+
+-- | A list of revisions of a file.
+--
+-- /See:/ 'revisionList' smart constructor.
+data RevisionList = RevisionList
+    { _rlEtag     :: !(Maybe Text)
+    , _rlKind     :: !Text
+    , _rlItems    :: !(Maybe [Revision])
+    , _rlSelfLink :: !(Maybe Text)
+    } 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:
+--
+-- * 'rlEtag'
+--
+-- * 'rlKind'
+--
+-- * 'rlItems'
+--
+-- * 'rlSelfLink'
+revisionList
+    :: RevisionList
+revisionList =
+    RevisionList
+    { _rlEtag = Nothing
+    , _rlKind = "drive#revisionList"
+    , _rlItems = Nothing
+    , _rlSelfLink = Nothing
+    }
+
+-- | The ETag of the list.
+rlEtag :: Lens' RevisionList (Maybe Text)
+rlEtag = lens _rlEtag (\ s a -> s{_rlEtag = a})
+
+-- | This is always drive#revisionList.
+rlKind :: Lens' RevisionList Text
+rlKind = lens _rlKind (\ s a -> s{_rlKind = a})
+
+-- | The actual list of revisions.
+rlItems :: Lens' RevisionList [Revision]
+rlItems
+  = lens _rlItems (\ s a -> s{_rlItems = a}) . _Default
+      . _Coerce
+
+-- | A link back to this list.
+rlSelfLink :: Lens' RevisionList (Maybe Text)
+rlSelfLink
+  = lens _rlSelfLink (\ s a -> s{_rlSelfLink = a})
+
+instance FromJSON RevisionList where
+        parseJSON
+          = withObject "RevisionList"
+              (\ o ->
+                 RevisionList <$>
+                   (o .:? "etag") <*>
+                     (o .:? "kind" .!= "drive#revisionList")
+                     <*> (o .:? "items" .!= mempty)
+                     <*> (o .:? "selfLink"))
+
+instance ToJSON RevisionList where
+        toJSON RevisionList{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _rlEtag, Just ("kind" .= _rlKind),
+                  ("items" .=) <$> _rlItems,
+                  ("selfLink" .=) <$> _rlSelfLink])
+
+-- | A list of permissions associated with a file.
+--
+-- /See:/ 'permissionList' smart constructor.
+data PermissionList = PermissionList
+    { _pllEtag     :: !(Maybe Text)
+    , _pllKind     :: !Text
+    , _pllItems    :: !(Maybe [Permission])
+    , _pllSelfLink :: !(Maybe Text)
+    } 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:
+--
+-- * 'pllEtag'
+--
+-- * 'pllKind'
+--
+-- * 'pllItems'
+--
+-- * 'pllSelfLink'
+permissionList
+    :: PermissionList
+permissionList =
+    PermissionList
+    { _pllEtag = Nothing
+    , _pllKind = "drive#permissionList"
+    , _pllItems = Nothing
+    , _pllSelfLink = Nothing
+    }
+
+-- | The ETag of the list.
+pllEtag :: Lens' PermissionList (Maybe Text)
+pllEtag = lens _pllEtag (\ s a -> s{_pllEtag = a})
+
+-- | This is always drive#permissionList.
+pllKind :: Lens' PermissionList Text
+pllKind = lens _pllKind (\ s a -> s{_pllKind = a})
+
+-- | The actual list of permissions.
+pllItems :: Lens' PermissionList [Permission]
+pllItems
+  = lens _pllItems (\ s a -> s{_pllItems = a}) .
+      _Default
+      . _Coerce
+
+-- | A link back to this list.
+pllSelfLink :: Lens' PermissionList (Maybe Text)
+pllSelfLink
+  = lens _pllSelfLink (\ s a -> s{_pllSelfLink = a})
+
+instance FromJSON PermissionList where
+        parseJSON
+          = withObject "PermissionList"
+              (\ o ->
+                 PermissionList <$>
+                   (o .:? "etag") <*>
+                     (o .:? "kind" .!= "drive#permissionList")
+                     <*> (o .:? "items" .!= mempty)
+                     <*> (o .:? "selfLink"))
+
+instance ToJSON PermissionList where
+        toJSON PermissionList{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _pllEtag, Just ("kind" .= _pllKind),
+                  ("items" .=) <$> _pllItems,
+                  ("selfLink" .=) <$> _pllSelfLink])
diff --git a/gen/Network/Google/Drive/Types/Sum.hs b/gen/Network/Google/Drive/Types/Sum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Drive/Types/Sum.hs
@@ -0,0 +1,305 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE LambdaCase         #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Network.Google.Drive.Types.Sum
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.Google.Drive.Types.Sum where
+
+import           Network.Google.Prelude
+
+-- | The visibility of the new file. This parameter is only relevant when
+-- convert=false.
+data FilesInsertVisibility
+    = Default
+      -- ^ @DEFAULT@
+      -- The visibility of the new file is determined by the user\'s default
+      -- visibility\/sharing policies.
+    | Private
+      -- ^ @PRIVATE@
+      -- The new file will be visible to only the owner.
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable FilesInsertVisibility
+
+instance FromText FilesInsertVisibility where
+    fromText = \case
+        "DEFAULT" -> Just Default
+        "PRIVATE" -> Just Private
+        _ -> Nothing
+
+instance ToText FilesInsertVisibility where
+    toText = \case
+        Default -> "DEFAULT"
+        Private -> "PRIVATE"
+
+instance FromJSON FilesInsertVisibility where
+    parseJSON = parseJSONText "FilesInsertVisibility"
+
+instance ToJSON FilesInsertVisibility where
+    toJSON = toJSONText
+
+-- | The body of items (files\/documents) to which the query applies.
+data FilesListCorpus
+    = FLCDefault
+      -- ^ @DEFAULT@
+      -- The items that the user has accessed.
+    | FLCDomain
+      -- ^ @DOMAIN@
+      -- Items shared to the user\'s domain.
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable FilesListCorpus
+
+instance FromText FilesListCorpus where
+    fromText = \case
+        "DEFAULT" -> Just FLCDefault
+        "DOMAIN" -> Just FLCDomain
+        _ -> Nothing
+
+instance ToText FilesListCorpus where
+    toText = \case
+        FLCDefault -> "DEFAULT"
+        FLCDomain -> "DOMAIN"
+
+instance FromJSON FilesListCorpus where
+    parseJSON = parseJSONText "FilesListCorpus"
+
+instance ToJSON FilesListCorpus where
+    toJSON = toJSONText
+
+-- | This parameter is deprecated and has no function.
+data FilesListProjection
+    = Basic
+      -- ^ @BASIC@
+      -- Deprecated
+    | Full
+      -- ^ @FULL@
+      -- Deprecated
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable FilesListProjection
+
+instance FromText FilesListProjection where
+    fromText = \case
+        "BASIC" -> Just Basic
+        "FULL" -> Just Full
+        _ -> Nothing
+
+instance ToText FilesListProjection where
+    toText = \case
+        Basic -> "BASIC"
+        Full -> "FULL"
+
+instance FromJSON FilesListProjection where
+    parseJSON = parseJSONText "FilesListProjection"
+
+instance ToJSON FilesListProjection where
+    toJSON = toJSONText
+
+-- | Determines the behavior in which modifiedDate is updated. This overrides
+-- setModifiedDate.
+data FilesUpdateModifiedDateBehavior
+    = FromBody
+      -- ^ @fromBody@
+      -- Set modifiedDate to the value provided in the body of the request. No
+      -- change if no value was provided.
+    | FromBodyIfNeeded
+      -- ^ @fromBodyIfNeeded@
+      -- Set modifiedDate to the value provided in the body of the request
+      -- depending on other contents of the update.
+    | FromBodyOrNow
+      -- ^ @fromBodyOrNow@
+      -- Set modifiedDate to the value provided in the body of the request, or to
+      -- the current time if no value was provided.
+    | NoChange
+      -- ^ @noChange@
+      -- Maintain the previous value of modifiedDate.
+    | Now
+      -- ^ @now@
+      -- Set modifiedDate to the current time.
+    | NowIfNeeded
+      -- ^ @nowIfNeeded@
+      -- Set modifiedDate to the current time depending on contents of the
+      -- update.
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable FilesUpdateModifiedDateBehavior
+
+instance FromText FilesUpdateModifiedDateBehavior where
+    fromText = \case
+        "fromBody" -> Just FromBody
+        "fromBodyIfNeeded" -> Just FromBodyIfNeeded
+        "fromBodyOrNow" -> Just FromBodyOrNow
+        "noChange" -> Just NoChange
+        "now" -> Just Now
+        "nowIfNeeded" -> Just NowIfNeeded
+        _ -> Nothing
+
+instance ToText FilesUpdateModifiedDateBehavior where
+    toText = \case
+        FromBody -> "fromBody"
+        FromBodyIfNeeded -> "fromBodyIfNeeded"
+        FromBodyOrNow -> "fromBodyOrNow"
+        NoChange -> "noChange"
+        Now -> "now"
+        NowIfNeeded -> "nowIfNeeded"
+
+instance FromJSON FilesUpdateModifiedDateBehavior where
+    parseJSON = parseJSONText "FilesUpdateModifiedDateBehavior"
+
+instance ToJSON FilesUpdateModifiedDateBehavior where
+    toJSON = toJSONText
+
+-- | This parameter is deprecated and has no function.
+data FilesWatchProjection
+    = FWPBasic
+      -- ^ @BASIC@
+      -- Deprecated
+    | FWPFull
+      -- ^ @FULL@
+      -- Deprecated
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable FilesWatchProjection
+
+instance FromText FilesWatchProjection where
+    fromText = \case
+        "BASIC" -> Just FWPBasic
+        "FULL" -> Just FWPFull
+        _ -> Nothing
+
+instance ToText FilesWatchProjection where
+    toText = \case
+        FWPBasic -> "BASIC"
+        FWPFull -> "FULL"
+
+instance FromJSON FilesWatchProjection where
+    parseJSON = parseJSONText "FilesWatchProjection"
+
+instance ToJSON FilesWatchProjection where
+    toJSON = toJSONText
+
+-- | Determines the behavior in which modifiedDate is updated. This overrides
+-- setModifiedDate.
+data FilesPatchModifiedDateBehavior
+    = FPMDBFromBody
+      -- ^ @fromBody@
+      -- Set modifiedDate to the value provided in the body of the request. No
+      -- change if no value was provided.
+    | FPMDBFromBodyIfNeeded
+      -- ^ @fromBodyIfNeeded@
+      -- Set modifiedDate to the value provided in the body of the request
+      -- depending on other contents of the update.
+    | FPMDBFromBodyOrNow
+      -- ^ @fromBodyOrNow@
+      -- Set modifiedDate to the value provided in the body of the request, or to
+      -- the current time if no value was provided.
+    | FPMDBNoChange
+      -- ^ @noChange@
+      -- Maintain the previous value of modifiedDate.
+    | FPMDBNow
+      -- ^ @now@
+      -- Set modifiedDate to the current time.
+    | FPMDBNowIfNeeded
+      -- ^ @nowIfNeeded@
+      -- Set modifiedDate to the current time depending on contents of the
+      -- update.
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable FilesPatchModifiedDateBehavior
+
+instance FromText FilesPatchModifiedDateBehavior where
+    fromText = \case
+        "fromBody" -> Just FPMDBFromBody
+        "fromBodyIfNeeded" -> Just FPMDBFromBodyIfNeeded
+        "fromBodyOrNow" -> Just FPMDBFromBodyOrNow
+        "noChange" -> Just FPMDBNoChange
+        "now" -> Just FPMDBNow
+        "nowIfNeeded" -> Just FPMDBNowIfNeeded
+        _ -> Nothing
+
+instance ToText FilesPatchModifiedDateBehavior where
+    toText = \case
+        FPMDBFromBody -> "fromBody"
+        FPMDBFromBodyIfNeeded -> "fromBodyIfNeeded"
+        FPMDBFromBodyOrNow -> "fromBodyOrNow"
+        FPMDBNoChange -> "noChange"
+        FPMDBNow -> "now"
+        FPMDBNowIfNeeded -> "nowIfNeeded"
+
+instance FromJSON FilesPatchModifiedDateBehavior where
+    parseJSON = parseJSONText "FilesPatchModifiedDateBehavior"
+
+instance ToJSON FilesPatchModifiedDateBehavior where
+    toJSON = toJSONText
+
+-- | The visibility of the new file. This parameter is only relevant when the
+-- source is not a native Google Doc and convert=false.
+data FilesCopyVisibility
+    = FCVDefault
+      -- ^ @DEFAULT@
+      -- The visibility of the new file is determined by the user\'s default
+      -- visibility\/sharing policies.
+    | FCVPrivate
+      -- ^ @PRIVATE@
+      -- The new file will be visible to only the owner.
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable FilesCopyVisibility
+
+instance FromText FilesCopyVisibility where
+    fromText = \case
+        "DEFAULT" -> Just FCVDefault
+        "PRIVATE" -> Just FCVPrivate
+        _ -> Nothing
+
+instance ToText FilesCopyVisibility where
+    toText = \case
+        FCVDefault -> "DEFAULT"
+        FCVPrivate -> "PRIVATE"
+
+instance FromJSON FilesCopyVisibility where
+    parseJSON = parseJSONText "FilesCopyVisibility"
+
+instance ToJSON FilesCopyVisibility where
+    toJSON = toJSONText
+
+-- | This parameter is deprecated and has no function.
+data FilesGetProjection
+    = FGPBasic
+      -- ^ @BASIC@
+      -- Deprecated
+    | FGPFull
+      -- ^ @FULL@
+      -- Deprecated
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable FilesGetProjection
+
+instance FromText FilesGetProjection where
+    fromText = \case
+        "BASIC" -> Just FGPBasic
+        "FULL" -> Just FGPFull
+        _ -> Nothing
+
+instance ToText FilesGetProjection where
+    toText = \case
+        FGPBasic -> "BASIC"
+        FGPFull -> "FULL"
+
+instance FromJSON FilesGetProjection where
+    parseJSON = parseJSONText "FilesGetProjection"
+
+instance ToJSON FilesGetProjection where
+    toJSON = toJSONText
diff --git a/gen/Network/Google/Resource/Drive/About/Get.hs b/gen/Network/Google/Resource/Drive/About/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/About/Get.hs
@@ -0,0 +1,117 @@
+{-# 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.About.Get
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets the information about the current user along with Drive API
+-- settings
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.about.get@.
+module Network.Google.Resource.Drive.About.Get
+    (
+    -- * REST Resource
+      AboutGetResource
+
+    -- * Creating a Request
+    , aboutGet
+    , AboutGet
+
+    -- * Request Lenses
+    , agIncludeSubscribed
+    , agStartChangeId
+    , agMaxChangeIdCount
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.about.get@ method which the
+-- 'AboutGet' request conforms to.
+type AboutGetResource =
+     "drive" :>
+       "v2" :>
+         "about" :>
+           QueryParam "includeSubscribed" Bool :>
+             QueryParam "startChangeId" (Textual Int64) :>
+               QueryParam "maxChangeIdCount" (Textual Int64) :>
+                 QueryParam "alt" AltJSON :> Get '[JSON] About
+
+-- | Gets the information about the current user along with Drive API
+-- settings
+--
+-- /See:/ 'aboutGet' smart constructor.
+data AboutGet = AboutGet
+    { _agIncludeSubscribed :: !Bool
+    , _agStartChangeId     :: !(Maybe (Textual Int64))
+    , _agMaxChangeIdCount  :: !(Textual Int64)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AboutGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'agIncludeSubscribed'
+--
+-- * 'agStartChangeId'
+--
+-- * 'agMaxChangeIdCount'
+aboutGet
+    :: AboutGet
+aboutGet =
+    AboutGet
+    { _agIncludeSubscribed = True
+    , _agStartChangeId = Nothing
+    , _agMaxChangeIdCount = 1
+    }
+
+-- | When calculating the number of remaining change IDs, whether to include
+-- public files the user has opened and shared files. When set to false,
+-- this counts only change IDs for owned files and any shared or public
+-- files that the user has explicitly added to a folder they own.
+agIncludeSubscribed :: Lens' AboutGet Bool
+agIncludeSubscribed
+  = lens _agIncludeSubscribed
+      (\ s a -> s{_agIncludeSubscribed = a})
+
+-- | Change ID to start counting from when calculating number of remaining
+-- change IDs
+agStartChangeId :: Lens' AboutGet (Maybe Int64)
+agStartChangeId
+  = lens _agStartChangeId
+      (\ s a -> s{_agStartChangeId = a})
+      . mapping _Coerce
+
+-- | Maximum number of remaining change IDs to count
+agMaxChangeIdCount :: Lens' AboutGet Int64
+agMaxChangeIdCount
+  = lens _agMaxChangeIdCount
+      (\ s a -> s{_agMaxChangeIdCount = a})
+      . _Coerce
+
+instance GoogleRequest AboutGet where
+        type Rs AboutGet = About
+        requestClient AboutGet{..}
+          = go (Just _agIncludeSubscribed) _agStartChangeId
+              (Just _agMaxChangeIdCount)
+              (Just AltJSON)
+              driveService
+          where go
+                  = buildClient (Proxy :: Proxy AboutGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Drive/Apps/Get.hs b/gen/Network/Google/Resource/Drive/Apps/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/Apps/Get.hs
@@ -0,0 +1,80 @@
+{-# 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.Apps.Get
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets a specific app.
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.apps.get@.
+module Network.Google.Resource.Drive.Apps.Get
+    (
+    -- * REST Resource
+      AppsGetResource
+
+    -- * Creating a Request
+    , appsGet
+    , AppsGet
+
+    -- * Request Lenses
+    , agAppId
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.apps.get@ method which the
+-- 'AppsGet' request conforms to.
+type AppsGetResource =
+     "drive" :>
+       "v2" :>
+         "apps" :>
+           Capture "appId" Text :>
+             QueryParam "alt" AltJSON :> Get '[JSON] App
+
+-- | Gets a specific app.
+--
+-- /See:/ 'appsGet' smart constructor.
+newtype AppsGet = AppsGet
+    { _agAppId :: Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AppsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'agAppId'
+appsGet
+    :: Text -- ^ 'agAppId'
+    -> AppsGet
+appsGet pAgAppId_ =
+    AppsGet
+    { _agAppId = pAgAppId_
+    }
+
+-- | The ID of the app.
+agAppId :: Lens' AppsGet Text
+agAppId = lens _agAppId (\ s a -> s{_agAppId = a})
+
+instance GoogleRequest AppsGet where
+        type Rs AppsGet = App
+        requestClient AppsGet{..}
+          = go _agAppId (Just AltJSON) driveService
+          where go
+                  = buildClient (Proxy :: Proxy AppsGetResource) mempty
diff --git a/gen/Network/Google/Resource/Drive/Apps/List.hs b/gen/Network/Google/Resource/Drive/Apps/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/Apps/List.hs
@@ -0,0 +1,117 @@
+{-# 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.Apps.List
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists a user\'s installed apps.
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.apps.list@.
+module Network.Google.Resource.Drive.Apps.List
+    (
+    -- * REST Resource
+      AppsListResource
+
+    -- * Creating a Request
+    , appsList
+    , AppsList
+
+    -- * Request Lenses
+    , alLanguageCode
+    , alAppFilterExtensions
+    , alAppFilterMimeTypes
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.apps.list@ method which the
+-- 'AppsList' request conforms to.
+type AppsListResource =
+     "drive" :>
+       "v2" :>
+         "apps" :>
+           QueryParam "languageCode" Text :>
+             QueryParam "appFilterExtensions" Text :>
+               QueryParam "appFilterMimeTypes" Text :>
+                 QueryParam "alt" AltJSON :> Get '[JSON] AppList
+
+-- | Lists a user\'s installed apps.
+--
+-- /See:/ 'appsList' smart constructor.
+data AppsList = AppsList
+    { _alLanguageCode        :: !(Maybe Text)
+    , _alAppFilterExtensions :: !Text
+    , _alAppFilterMimeTypes  :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AppsList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'alLanguageCode'
+--
+-- * 'alAppFilterExtensions'
+--
+-- * 'alAppFilterMimeTypes'
+appsList
+    :: AppsList
+appsList =
+    AppsList
+    { _alLanguageCode = Nothing
+    , _alAppFilterExtensions = ""
+    , _alAppFilterMimeTypes = ""
+    }
+
+-- | A language or locale code, as defined by BCP 47, with some extensions
+-- from Unicode\'s LDML format (http:\/\/www.unicode.org\/reports\/tr35\/).
+alLanguageCode :: Lens' AppsList (Maybe Text)
+alLanguageCode
+  = lens _alLanguageCode
+      (\ s a -> s{_alLanguageCode = a})
+
+-- | A comma-separated list of file extensions for open with filtering. All
+-- apps within the given app query scope which can open any of the given
+-- file extensions will be included in the response. If appFilterMimeTypes
+-- are provided as well, the result is a union of the two resulting app
+-- lists.
+alAppFilterExtensions :: Lens' AppsList Text
+alAppFilterExtensions
+  = lens _alAppFilterExtensions
+      (\ s a -> s{_alAppFilterExtensions = a})
+
+-- | A comma-separated list of MIME types for open with filtering. All apps
+-- within the given app query scope which can open any of the given MIME
+-- types will be included in the response. If appFilterExtensions are
+-- provided as well, the result is a union of the two resulting app lists.
+alAppFilterMimeTypes :: Lens' AppsList Text
+alAppFilterMimeTypes
+  = lens _alAppFilterMimeTypes
+      (\ s a -> s{_alAppFilterMimeTypes = a})
+
+instance GoogleRequest AppsList where
+        type Rs AppsList = AppList
+        requestClient AppsList{..}
+          = go _alLanguageCode (Just _alAppFilterExtensions)
+              (Just _alAppFilterMimeTypes)
+              (Just AltJSON)
+              driveService
+          where go
+                  = buildClient (Proxy :: Proxy AppsListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Drive/Changes/Get.hs b/gen/Network/Google/Resource/Drive/Changes/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/Changes/Get.hs
@@ -0,0 +1,82 @@
+{-# 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.Changes.Get
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets a specific change.
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.changes.get@.
+module Network.Google.Resource.Drive.Changes.Get
+    (
+    -- * REST Resource
+      ChangesGetResource
+
+    -- * Creating a Request
+    , changesGet
+    , ChangesGet
+
+    -- * Request Lenses
+    , cgChangeId
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.changes.get@ method which the
+-- 'ChangesGet' request conforms to.
+type ChangesGetResource =
+     "drive" :>
+       "v2" :>
+         "changes" :>
+           Capture "changeId" Text :>
+             QueryParam "alt" AltJSON :> Get '[JSON] Change
+
+-- | Gets a specific change.
+--
+-- /See:/ 'changesGet' smart constructor.
+newtype ChangesGet = ChangesGet
+    { _cgChangeId :: Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ChangesGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cgChangeId'
+changesGet
+    :: Text -- ^ 'cgChangeId'
+    -> ChangesGet
+changesGet pCgChangeId_ =
+    ChangesGet
+    { _cgChangeId = pCgChangeId_
+    }
+
+-- | The ID of the change.
+cgChangeId :: Lens' ChangesGet Text
+cgChangeId
+  = lens _cgChangeId (\ s a -> s{_cgChangeId = a})
+
+instance GoogleRequest ChangesGet where
+        type Rs ChangesGet = Change
+        requestClient ChangesGet{..}
+          = go _cgChangeId (Just AltJSON) driveService
+          where go
+                  = buildClient (Proxy :: Proxy ChangesGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Drive/Changes/List.hs b/gen/Network/Google/Resource/Drive/Changes/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/Changes/List.hs
@@ -0,0 +1,149 @@
+{-# 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.Changes.List
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the changes for a user.
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.changes.list@.
+module Network.Google.Resource.Drive.Changes.List
+    (
+    -- * REST Resource
+      ChangesListResource
+
+    -- * Creating a Request
+    , changesList
+    , ChangesList
+
+    -- * Request Lenses
+    , clIncludeSubscribed
+    , clStartChangeId
+    , clSpaces
+    , clPageToken
+    , clMaxResults
+    , clIncludeDeleted
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.changes.list@ method which the
+-- 'ChangesList' request conforms to.
+type ChangesListResource =
+     "drive" :>
+       "v2" :>
+         "changes" :>
+           QueryParam "includeSubscribed" Bool :>
+             QueryParam "startChangeId" (Textual Int64) :>
+               QueryParam "spaces" Text :>
+                 QueryParam "pageToken" Text :>
+                   QueryParam "maxResults" (Textual Int32) :>
+                     QueryParam "includeDeleted" Bool :>
+                       QueryParam "alt" AltJSON :> Get '[JSON] ChangeList
+
+-- | Lists the changes for a user.
+--
+-- /See:/ 'changesList' smart constructor.
+data ChangesList = ChangesList
+    { _clIncludeSubscribed :: !Bool
+    , _clStartChangeId     :: !(Maybe (Textual Int64))
+    , _clSpaces            :: !(Maybe Text)
+    , _clPageToken         :: !(Maybe Text)
+    , _clMaxResults        :: !(Textual Int32)
+    , _clIncludeDeleted    :: !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:
+--
+-- * 'clIncludeSubscribed'
+--
+-- * 'clStartChangeId'
+--
+-- * 'clSpaces'
+--
+-- * 'clPageToken'
+--
+-- * 'clMaxResults'
+--
+-- * 'clIncludeDeleted'
+changesList
+    :: ChangesList
+changesList =
+    ChangesList
+    { _clIncludeSubscribed = True
+    , _clStartChangeId = Nothing
+    , _clSpaces = Nothing
+    , _clPageToken = Nothing
+    , _clMaxResults = 100
+    , _clIncludeDeleted = True
+    }
+
+-- | Whether to include public files the user has opened and shared files.
+-- When set to false, the list only includes owned files plus any shared or
+-- public files the user has explicitly added to a folder they own.
+clIncludeSubscribed :: Lens' ChangesList Bool
+clIncludeSubscribed
+  = lens _clIncludeSubscribed
+      (\ s a -> s{_clIncludeSubscribed = a})
+
+-- | Change ID to start listing changes from.
+clStartChangeId :: Lens' ChangesList (Maybe Int64)
+clStartChangeId
+  = lens _clStartChangeId
+      (\ s a -> s{_clStartChangeId = a})
+      . mapping _Coerce
+
+-- | A comma-separated list of spaces to query. Supported values are
+-- \'drive\', \'appDataFolder\' and \'photos\'.
+clSpaces :: Lens' ChangesList (Maybe Text)
+clSpaces = lens _clSpaces (\ s a -> s{_clSpaces = a})
+
+-- | Page token for changes.
+clPageToken :: Lens' ChangesList (Maybe Text)
+clPageToken
+  = lens _clPageToken (\ s a -> s{_clPageToken = a})
+
+-- | Maximum number of changes to return.
+clMaxResults :: Lens' ChangesList Int32
+clMaxResults
+  = lens _clMaxResults (\ s a -> s{_clMaxResults = a})
+      . _Coerce
+
+-- | Whether to include deleted items.
+clIncludeDeleted :: Lens' ChangesList Bool
+clIncludeDeleted
+  = lens _clIncludeDeleted
+      (\ s a -> s{_clIncludeDeleted = a})
+
+instance GoogleRequest ChangesList where
+        type Rs ChangesList = ChangeList
+        requestClient ChangesList{..}
+          = go (Just _clIncludeSubscribed) _clStartChangeId
+              _clSpaces
+              _clPageToken
+              (Just _clMaxResults)
+              (Just _clIncludeDeleted)
+              (Just AltJSON)
+              driveService
+          where go
+                  = buildClient (Proxy :: Proxy ChangesListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Drive/Changes/Watch.hs b/gen/Network/Google/Resource/Drive/Changes/Watch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/Changes/Watch.hs
@@ -0,0 +1,163 @@
+{-# 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.Changes.Watch
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Subscribe to changes for a user.
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.changes.watch@.
+module Network.Google.Resource.Drive.Changes.Watch
+    (
+    -- * REST Resource
+      ChangesWatchResource
+
+    -- * Creating a Request
+    , changesWatch
+    , ChangesWatch
+
+    -- * Request Lenses
+    , cwIncludeSubscribed
+    , cwStartChangeId
+    , cwPayload
+    , cwSpaces
+    , cwPageToken
+    , cwMaxResults
+    , cwIncludeDeleted
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.changes.watch@ method which the
+-- 'ChangesWatch' request conforms to.
+type ChangesWatchResource =
+     "drive" :>
+       "v2" :>
+         "changes" :>
+           "watch" :>
+             QueryParam "includeSubscribed" Bool :>
+               QueryParam "startChangeId" (Textual Int64) :>
+                 QueryParam "spaces" Text :>
+                   QueryParam "pageToken" Text :>
+                     QueryParam "maxResults" (Textual Int32) :>
+                       QueryParam "includeDeleted" Bool :>
+                         QueryParam "alt" AltJSON :>
+                           ReqBody '[JSON] Channel :> Post '[JSON] Channel
+
+-- | Subscribe to changes for a user.
+--
+-- /See:/ 'changesWatch' smart constructor.
+data ChangesWatch = ChangesWatch
+    { _cwIncludeSubscribed :: !Bool
+    , _cwStartChangeId     :: !(Maybe (Textual Int64))
+    , _cwPayload           :: !Channel
+    , _cwSpaces            :: !(Maybe Text)
+    , _cwPageToken         :: !(Maybe Text)
+    , _cwMaxResults        :: !(Textual Int32)
+    , _cwIncludeDeleted    :: !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:
+--
+-- * 'cwIncludeSubscribed'
+--
+-- * 'cwStartChangeId'
+--
+-- * 'cwPayload'
+--
+-- * 'cwSpaces'
+--
+-- * 'cwPageToken'
+--
+-- * 'cwMaxResults'
+--
+-- * 'cwIncludeDeleted'
+changesWatch
+    :: Channel -- ^ 'cwPayload'
+    -> ChangesWatch
+changesWatch pCwPayload_ =
+    ChangesWatch
+    { _cwIncludeSubscribed = True
+    , _cwStartChangeId = Nothing
+    , _cwPayload = pCwPayload_
+    , _cwSpaces = Nothing
+    , _cwPageToken = Nothing
+    , _cwMaxResults = 100
+    , _cwIncludeDeleted = True
+    }
+
+-- | Whether to include public files the user has opened and shared files.
+-- When set to false, the list only includes owned files plus any shared or
+-- public files the user has explicitly added to a folder they own.
+cwIncludeSubscribed :: Lens' ChangesWatch Bool
+cwIncludeSubscribed
+  = lens _cwIncludeSubscribed
+      (\ s a -> s{_cwIncludeSubscribed = a})
+
+-- | Change ID to start listing changes from.
+cwStartChangeId :: Lens' ChangesWatch (Maybe Int64)
+cwStartChangeId
+  = lens _cwStartChangeId
+      (\ s a -> s{_cwStartChangeId = a})
+      . mapping _Coerce
+
+-- | Multipart request metadata.
+cwPayload :: Lens' ChangesWatch Channel
+cwPayload
+  = lens _cwPayload (\ s a -> s{_cwPayload = a})
+
+-- | A comma-separated list of spaces to query. Supported values are
+-- \'drive\', \'appDataFolder\' and \'photos\'.
+cwSpaces :: Lens' ChangesWatch (Maybe Text)
+cwSpaces = lens _cwSpaces (\ s a -> s{_cwSpaces = a})
+
+-- | Page token for changes.
+cwPageToken :: Lens' ChangesWatch (Maybe Text)
+cwPageToken
+  = lens _cwPageToken (\ s a -> s{_cwPageToken = a})
+
+-- | Maximum number of changes to return.
+cwMaxResults :: Lens' ChangesWatch Int32
+cwMaxResults
+  = lens _cwMaxResults (\ s a -> s{_cwMaxResults = a})
+      . _Coerce
+
+-- | Whether to include deleted items.
+cwIncludeDeleted :: Lens' ChangesWatch Bool
+cwIncludeDeleted
+  = lens _cwIncludeDeleted
+      (\ s a -> s{_cwIncludeDeleted = a})
+
+instance GoogleRequest ChangesWatch where
+        type Rs ChangesWatch = Channel
+        requestClient ChangesWatch{..}
+          = go (Just _cwIncludeSubscribed) _cwStartChangeId
+              _cwSpaces
+              _cwPageToken
+              (Just _cwMaxResults)
+              (Just _cwIncludeDeleted)
+              (Just AltJSON)
+              _cwPayload
+              driveService
+          where go
+                  = buildClient (Proxy :: Proxy ChangesWatchResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Drive/Channels/Stop.hs b/gen/Network/Google/Resource/Drive/Channels/Stop.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/Channels/Stop.hs
@@ -0,0 +1,83 @@
+{-# 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.Channels.Stop
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Stop watching resources through this channel
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.channels.stop@.
+module Network.Google.Resource.Drive.Channels.Stop
+    (
+    -- * REST Resource
+      ChannelsStopResource
+
+    -- * Creating a Request
+    , channelsStop
+    , ChannelsStop
+
+    -- * Request Lenses
+    , csPayload
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.channels.stop@ method which the
+-- 'ChannelsStop' request conforms to.
+type ChannelsStopResource =
+     "drive" :>
+       "v2" :>
+         "channels" :>
+           "stop" :>
+             QueryParam "alt" AltJSON :>
+               ReqBody '[JSON] Channel :> Post '[JSON] ()
+
+-- | Stop watching resources through this channel
+--
+-- /See:/ 'channelsStop' smart constructor.
+newtype ChannelsStop = ChannelsStop
+    { _csPayload :: Channel
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ChannelsStop' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'csPayload'
+channelsStop
+    :: Channel -- ^ 'csPayload'
+    -> ChannelsStop
+channelsStop pCsPayload_ =
+    ChannelsStop
+    { _csPayload = pCsPayload_
+    }
+
+-- | Multipart request metadata.
+csPayload :: Lens' ChannelsStop Channel
+csPayload
+  = lens _csPayload (\ s a -> s{_csPayload = a})
+
+instance GoogleRequest ChannelsStop where
+        type Rs ChannelsStop = ()
+        requestClient ChannelsStop{..}
+          = go (Just AltJSON) _csPayload driveService
+          where go
+                  = buildClient (Proxy :: Proxy ChannelsStopResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Drive/Children/Delete.hs b/gen/Network/Google/Resource/Drive/Children/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/Children/Delete.hs
@@ -0,0 +1,96 @@
+{-# 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.Children.Delete
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Removes a child from a folder.
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.children.delete@.
+module Network.Google.Resource.Drive.Children.Delete
+    (
+    -- * REST Resource
+      ChildrenDeleteResource
+
+    -- * Creating a Request
+    , childrenDelete
+    , ChildrenDelete
+
+    -- * Request Lenses
+    , cdFolderId
+    , cdChildId
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.children.delete@ method which the
+-- 'ChildrenDelete' request conforms to.
+type ChildrenDeleteResource =
+     "drive" :>
+       "v2" :>
+         "files" :>
+           Capture "folderId" Text :>
+             "children" :>
+               Capture "childId" Text :>
+                 QueryParam "alt" AltJSON :> Delete '[JSON] ()
+
+-- | Removes a child from a folder.
+--
+-- /See:/ 'childrenDelete' smart constructor.
+data ChildrenDelete = ChildrenDelete
+    { _cdFolderId :: !Text
+    , _cdChildId  :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ChildrenDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cdFolderId'
+--
+-- * 'cdChildId'
+childrenDelete
+    :: Text -- ^ 'cdFolderId'
+    -> Text -- ^ 'cdChildId'
+    -> ChildrenDelete
+childrenDelete pCdFolderId_ pCdChildId_ =
+    ChildrenDelete
+    { _cdFolderId = pCdFolderId_
+    , _cdChildId = pCdChildId_
+    }
+
+-- | The ID of the folder.
+cdFolderId :: Lens' ChildrenDelete Text
+cdFolderId
+  = lens _cdFolderId (\ s a -> s{_cdFolderId = a})
+
+-- | The ID of the child.
+cdChildId :: Lens' ChildrenDelete Text
+cdChildId
+  = lens _cdChildId (\ s a -> s{_cdChildId = a})
+
+instance GoogleRequest ChildrenDelete where
+        type Rs ChildrenDelete = ()
+        requestClient ChildrenDelete{..}
+          = go _cdFolderId _cdChildId (Just AltJSON)
+              driveService
+          where go
+                  = buildClient (Proxy :: Proxy ChildrenDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Drive/Children/Get.hs b/gen/Network/Google/Resource/Drive/Children/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/Children/Get.hs
@@ -0,0 +1,97 @@
+{-# 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.Children.Get
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets a specific child reference.
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.children.get@.
+module Network.Google.Resource.Drive.Children.Get
+    (
+    -- * REST Resource
+      ChildrenGetResource
+
+    -- * Creating a Request
+    , childrenGet
+    , ChildrenGet
+
+    -- * Request Lenses
+    , cgFolderId
+    , cgChildId
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.children.get@ method which the
+-- 'ChildrenGet' request conforms to.
+type ChildrenGetResource =
+     "drive" :>
+       "v2" :>
+         "files" :>
+           Capture "folderId" Text :>
+             "children" :>
+               Capture "childId" Text :>
+                 QueryParam "alt" AltJSON :>
+                   Get '[JSON] ChildReference
+
+-- | Gets a specific child reference.
+--
+-- /See:/ 'childrenGet' smart constructor.
+data ChildrenGet = ChildrenGet
+    { _cgFolderId :: !Text
+    , _cgChildId  :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ChildrenGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cgFolderId'
+--
+-- * 'cgChildId'
+childrenGet
+    :: Text -- ^ 'cgFolderId'
+    -> Text -- ^ 'cgChildId'
+    -> ChildrenGet
+childrenGet pCgFolderId_ pCgChildId_ =
+    ChildrenGet
+    { _cgFolderId = pCgFolderId_
+    , _cgChildId = pCgChildId_
+    }
+
+-- | The ID of the folder.
+cgFolderId :: Lens' ChildrenGet Text
+cgFolderId
+  = lens _cgFolderId (\ s a -> s{_cgFolderId = a})
+
+-- | The ID of the child.
+cgChildId :: Lens' ChildrenGet Text
+cgChildId
+  = lens _cgChildId (\ s a -> s{_cgChildId = a})
+
+instance GoogleRequest ChildrenGet where
+        type Rs ChildrenGet = ChildReference
+        requestClient ChildrenGet{..}
+          = go _cgFolderId _cgChildId (Just AltJSON)
+              driveService
+          where go
+                  = buildClient (Proxy :: Proxy ChildrenGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Drive/Children/Insert.hs b/gen/Network/Google/Resource/Drive/Children/Insert.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/Children/Insert.hs
@@ -0,0 +1,97 @@
+{-# 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.Children.Insert
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Inserts a file into a folder.
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.children.insert@.
+module Network.Google.Resource.Drive.Children.Insert
+    (
+    -- * REST Resource
+      ChildrenInsertResource
+
+    -- * Creating a Request
+    , childrenInsert
+    , ChildrenInsert
+
+    -- * Request Lenses
+    , ciFolderId
+    , ciPayload
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.children.insert@ method which the
+-- 'ChildrenInsert' request conforms to.
+type ChildrenInsertResource =
+     "drive" :>
+       "v2" :>
+         "files" :>
+           Capture "folderId" Text :>
+             "children" :>
+               QueryParam "alt" AltJSON :>
+                 ReqBody '[JSON] ChildReference :>
+                   Post '[JSON] ChildReference
+
+-- | Inserts a file into a folder.
+--
+-- /See:/ 'childrenInsert' smart constructor.
+data ChildrenInsert = ChildrenInsert
+    { _ciFolderId :: !Text
+    , _ciPayload  :: !ChildReference
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ChildrenInsert' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ciFolderId'
+--
+-- * 'ciPayload'
+childrenInsert
+    :: Text -- ^ 'ciFolderId'
+    -> ChildReference -- ^ 'ciPayload'
+    -> ChildrenInsert
+childrenInsert pCiFolderId_ pCiPayload_ =
+    ChildrenInsert
+    { _ciFolderId = pCiFolderId_
+    , _ciPayload = pCiPayload_
+    }
+
+-- | The ID of the folder.
+ciFolderId :: Lens' ChildrenInsert Text
+ciFolderId
+  = lens _ciFolderId (\ s a -> s{_ciFolderId = a})
+
+-- | Multipart request metadata.
+ciPayload :: Lens' ChildrenInsert ChildReference
+ciPayload
+  = lens _ciPayload (\ s a -> s{_ciPayload = a})
+
+instance GoogleRequest ChildrenInsert where
+        type Rs ChildrenInsert = ChildReference
+        requestClient ChildrenInsert{..}
+          = go _ciFolderId (Just AltJSON) _ciPayload
+              driveService
+          where go
+                  = buildClient (Proxy :: Proxy ChildrenInsertResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Drive/Children/List.hs b/gen/Network/Google/Resource/Drive/Children/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/Children/List.hs
@@ -0,0 +1,136 @@
+{-# 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.Children.List
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists a folder\'s children.
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.children.list@.
+module Network.Google.Resource.Drive.Children.List
+    (
+    -- * REST Resource
+      ChildrenListResource
+
+    -- * Creating a Request
+    , childrenList
+    , ChildrenList
+
+    -- * Request Lenses
+    , cOrderBy
+    , cFolderId
+    , cQ
+    , cPageToken
+    , cMaxResults
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.children.list@ method which the
+-- 'ChildrenList' request conforms to.
+type ChildrenListResource =
+     "drive" :>
+       "v2" :>
+         "files" :>
+           Capture "folderId" Text :>
+             "children" :>
+               QueryParam "orderBy" Text :>
+                 QueryParam "q" Text :>
+                   QueryParam "pageToken" Text :>
+                     QueryParam "maxResults" (Textual Int32) :>
+                       QueryParam "alt" AltJSON :> Get '[JSON] ChildList
+
+-- | Lists a folder\'s children.
+--
+-- /See:/ 'childrenList' smart constructor.
+data ChildrenList = ChildrenList
+    { _cOrderBy    :: !(Maybe Text)
+    , _cFolderId   :: !Text
+    , _cQ          :: !(Maybe Text)
+    , _cPageToken  :: !(Maybe Text)
+    , _cMaxResults :: !(Textual Int32)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ChildrenList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cOrderBy'
+--
+-- * 'cFolderId'
+--
+-- * 'cQ'
+--
+-- * 'cPageToken'
+--
+-- * 'cMaxResults'
+childrenList
+    :: Text -- ^ 'cFolderId'
+    -> ChildrenList
+childrenList pCFolderId_ =
+    ChildrenList
+    { _cOrderBy = Nothing
+    , _cFolderId = pCFolderId_
+    , _cQ = Nothing
+    , _cPageToken = Nothing
+    , _cMaxResults = 100
+    }
+
+-- | A comma-separated list of sort keys. Valid keys are \'createdDate\',
+-- \'folder\', \'lastViewedByMeDate\', \'modifiedByMeDate\',
+-- \'modifiedDate\', \'quotaBytesUsed\', \'recency\', \'sharedWithMeDate\',
+-- \'starred\', and \'title\'. Each key sorts ascending by default, but may
+-- be reversed with the \'desc\' modifier. Example usage:
+-- ?orderBy=folder,modifiedDate desc,title. Please note that there is a
+-- current limitation for users with approximately one million files in
+-- which the requested sort order is ignored.
+cOrderBy :: Lens' ChildrenList (Maybe Text)
+cOrderBy = lens _cOrderBy (\ s a -> s{_cOrderBy = a})
+
+-- | The ID of the folder.
+cFolderId :: Lens' ChildrenList Text
+cFolderId
+  = lens _cFolderId (\ s a -> s{_cFolderId = a})
+
+-- | Query string for searching children.
+cQ :: Lens' ChildrenList (Maybe Text)
+cQ = lens _cQ (\ s a -> s{_cQ = a})
+
+-- | Page token for children.
+cPageToken :: Lens' ChildrenList (Maybe Text)
+cPageToken
+  = lens _cPageToken (\ s a -> s{_cPageToken = a})
+
+-- | Maximum number of children to return.
+cMaxResults :: Lens' ChildrenList Int32
+cMaxResults
+  = lens _cMaxResults (\ s a -> s{_cMaxResults = a}) .
+      _Coerce
+
+instance GoogleRequest ChildrenList where
+        type Rs ChildrenList = ChildList
+        requestClient ChildrenList{..}
+          = go _cFolderId _cOrderBy _cQ _cPageToken
+              (Just _cMaxResults)
+              (Just AltJSON)
+              driveService
+          where go
+                  = buildClient (Proxy :: Proxy ChildrenListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Drive/Comments/Delete.hs b/gen/Network/Google/Resource/Drive/Comments/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/Comments/Delete.hs
@@ -0,0 +1,95 @@
+{-# 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.Comments.Delete
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a comment.
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.comments.delete@.
+module Network.Google.Resource.Drive.Comments.Delete
+    (
+    -- * REST Resource
+      CommentsDeleteResource
+
+    -- * Creating a Request
+    , commentsDelete
+    , CommentsDelete
+
+    -- * Request Lenses
+    , cdFileId
+    , cdCommentId
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.comments.delete@ method which the
+-- 'CommentsDelete' request conforms to.
+type CommentsDeleteResource =
+     "drive" :>
+       "v2" :>
+         "files" :>
+           Capture "fileId" Text :>
+             "comments" :>
+               Capture "commentId" Text :>
+                 QueryParam "alt" AltJSON :> Delete '[JSON] ()
+
+-- | Deletes a comment.
+--
+-- /See:/ 'commentsDelete' smart constructor.
+data CommentsDelete = CommentsDelete
+    { _cdFileId    :: !Text
+    , _cdCommentId :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CommentsDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cdFileId'
+--
+-- * 'cdCommentId'
+commentsDelete
+    :: Text -- ^ 'cdFileId'
+    -> Text -- ^ 'cdCommentId'
+    -> CommentsDelete
+commentsDelete pCdFileId_ pCdCommentId_ =
+    CommentsDelete
+    { _cdFileId = pCdFileId_
+    , _cdCommentId = pCdCommentId_
+    }
+
+-- | The ID of the file.
+cdFileId :: Lens' CommentsDelete Text
+cdFileId = lens _cdFileId (\ s a -> s{_cdFileId = a})
+
+-- | The ID of the comment.
+cdCommentId :: Lens' CommentsDelete Text
+cdCommentId
+  = lens _cdCommentId (\ s a -> s{_cdCommentId = a})
+
+instance GoogleRequest CommentsDelete where
+        type Rs CommentsDelete = ()
+        requestClient CommentsDelete{..}
+          = go _cdFileId _cdCommentId (Just AltJSON)
+              driveService
+          where go
+                  = buildClient (Proxy :: Proxy CommentsDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Drive/Comments/Get.hs b/gen/Network/Google/Resource/Drive/Comments/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/Comments/Get.hs
@@ -0,0 +1,109 @@
+{-# 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.Comments.Get
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets a comment by ID.
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.comments.get@.
+module Network.Google.Resource.Drive.Comments.Get
+    (
+    -- * REST Resource
+      CommentsGetResource
+
+    -- * Creating a Request
+    , commentsGet
+    , CommentsGet
+
+    -- * Request Lenses
+    , cgFileId
+    , cgCommentId
+    , cgIncludeDeleted
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.comments.get@ method which the
+-- 'CommentsGet' request conforms to.
+type CommentsGetResource =
+     "drive" :>
+       "v2" :>
+         "files" :>
+           Capture "fileId" Text :>
+             "comments" :>
+               Capture "commentId" Text :>
+                 QueryParam "includeDeleted" Bool :>
+                   QueryParam "alt" AltJSON :> Get '[JSON] Comment
+
+-- | Gets a comment by ID.
+--
+-- /See:/ 'commentsGet' smart constructor.
+data CommentsGet = CommentsGet
+    { _cgFileId         :: !Text
+    , _cgCommentId      :: !Text
+    , _cgIncludeDeleted :: !Bool
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CommentsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cgFileId'
+--
+-- * 'cgCommentId'
+--
+-- * 'cgIncludeDeleted'
+commentsGet
+    :: Text -- ^ 'cgFileId'
+    -> Text -- ^ 'cgCommentId'
+    -> CommentsGet
+commentsGet pCgFileId_ pCgCommentId_ =
+    CommentsGet
+    { _cgFileId = pCgFileId_
+    , _cgCommentId = pCgCommentId_
+    , _cgIncludeDeleted = False
+    }
+
+-- | The ID of the file.
+cgFileId :: Lens' CommentsGet Text
+cgFileId = lens _cgFileId (\ s a -> s{_cgFileId = a})
+
+-- | The ID of the comment.
+cgCommentId :: Lens' CommentsGet Text
+cgCommentId
+  = lens _cgCommentId (\ s a -> s{_cgCommentId = a})
+
+-- | If set, this will succeed when retrieving a deleted comment, and will
+-- include any deleted replies.
+cgIncludeDeleted :: Lens' CommentsGet Bool
+cgIncludeDeleted
+  = lens _cgIncludeDeleted
+      (\ s a -> s{_cgIncludeDeleted = a})
+
+instance GoogleRequest CommentsGet where
+        type Rs CommentsGet = Comment
+        requestClient CommentsGet{..}
+          = go _cgFileId _cgCommentId (Just _cgIncludeDeleted)
+              (Just AltJSON)
+              driveService
+          where go
+                  = buildClient (Proxy :: Proxy CommentsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Drive/Comments/Insert.hs b/gen/Network/Google/Resource/Drive/Comments/Insert.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/Comments/Insert.hs
@@ -0,0 +1,96 @@
+{-# 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.Comments.Insert
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a new comment on the given file.
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.comments.insert@.
+module Network.Google.Resource.Drive.Comments.Insert
+    (
+    -- * REST Resource
+      CommentsInsertResource
+
+    -- * Creating a Request
+    , commentsInsert
+    , CommentsInsert
+
+    -- * Request Lenses
+    , comPayload
+    , comFileId
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.comments.insert@ method which the
+-- 'CommentsInsert' request conforms to.
+type CommentsInsertResource =
+     "drive" :>
+       "v2" :>
+         "files" :>
+           Capture "fileId" Text :>
+             "comments" :>
+               QueryParam "alt" AltJSON :>
+                 ReqBody '[JSON] Comment :> Post '[JSON] Comment
+
+-- | Creates a new comment on the given file.
+--
+-- /See:/ 'commentsInsert' smart constructor.
+data CommentsInsert = CommentsInsert
+    { _comPayload :: !Comment
+    , _comFileId  :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CommentsInsert' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'comPayload'
+--
+-- * 'comFileId'
+commentsInsert
+    :: Comment -- ^ 'comPayload'
+    -> Text -- ^ 'comFileId'
+    -> CommentsInsert
+commentsInsert pComPayload_ pComFileId_ =
+    CommentsInsert
+    { _comPayload = pComPayload_
+    , _comFileId = pComFileId_
+    }
+
+-- | Multipart request metadata.
+comPayload :: Lens' CommentsInsert Comment
+comPayload
+  = lens _comPayload (\ s a -> s{_comPayload = a})
+
+-- | The ID of the file.
+comFileId :: Lens' CommentsInsert Text
+comFileId
+  = lens _comFileId (\ s a -> s{_comFileId = a})
+
+instance GoogleRequest CommentsInsert where
+        type Rs CommentsInsert = Comment
+        requestClient CommentsInsert{..}
+          = go _comFileId (Just AltJSON) _comPayload
+              driveService
+          where go
+                  = buildClient (Proxy :: Proxy CommentsInsertResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Drive/Comments/List.hs b/gen/Network/Google/Resource/Drive/Comments/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/Comments/List.hs
@@ -0,0 +1,140 @@
+{-# 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.Comments.List
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists a file\'s comments.
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.comments.list@.
+module Network.Google.Resource.Drive.Comments.List
+    (
+    -- * REST Resource
+      CommentsListResource
+
+    -- * Creating a Request
+    , commentsList
+    , CommentsList
+
+    -- * Request Lenses
+    , cllUpdatedMin
+    , cllPageToken
+    , cllFileId
+    , cllMaxResults
+    , cllIncludeDeleted
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.comments.list@ method which the
+-- 'CommentsList' request conforms to.
+type CommentsListResource =
+     "drive" :>
+       "v2" :>
+         "files" :>
+           Capture "fileId" Text :>
+             "comments" :>
+               QueryParam "updatedMin" Text :>
+                 QueryParam "pageToken" Text :>
+                   QueryParam "maxResults" (Textual Int32) :>
+                     QueryParam "includeDeleted" Bool :>
+                       QueryParam "alt" AltJSON :> Get '[JSON] CommentList
+
+-- | Lists a file\'s comments.
+--
+-- /See:/ 'commentsList' smart constructor.
+data CommentsList = CommentsList
+    { _cllUpdatedMin     :: !(Maybe Text)
+    , _cllPageToken      :: !(Maybe Text)
+    , _cllFileId         :: !Text
+    , _cllMaxResults     :: !(Textual Int32)
+    , _cllIncludeDeleted :: !Bool
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CommentsList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cllUpdatedMin'
+--
+-- * 'cllPageToken'
+--
+-- * 'cllFileId'
+--
+-- * 'cllMaxResults'
+--
+-- * 'cllIncludeDeleted'
+commentsList
+    :: Text -- ^ 'cllFileId'
+    -> CommentsList
+commentsList pCllFileId_ =
+    CommentsList
+    { _cllUpdatedMin = Nothing
+    , _cllPageToken = Nothing
+    , _cllFileId = pCllFileId_
+    , _cllMaxResults = 20
+    , _cllIncludeDeleted = False
+    }
+
+-- | Only discussions that were updated after this timestamp will be
+-- returned. Formatted as an RFC 3339 timestamp.
+cllUpdatedMin :: Lens' CommentsList (Maybe Text)
+cllUpdatedMin
+  = lens _cllUpdatedMin
+      (\ s a -> s{_cllUpdatedMin = a})
+
+-- | The continuation token, used to page through large result sets. To get
+-- the next page of results, set this parameter to the value of
+-- \"nextPageToken\" from the previous response.
+cllPageToken :: Lens' CommentsList (Maybe Text)
+cllPageToken
+  = lens _cllPageToken (\ s a -> s{_cllPageToken = a})
+
+-- | The ID of the file.
+cllFileId :: Lens' CommentsList Text
+cllFileId
+  = lens _cllFileId (\ s a -> s{_cllFileId = a})
+
+-- | The maximum number of discussions to include in the response, used for
+-- paging.
+cllMaxResults :: Lens' CommentsList Int32
+cllMaxResults
+  = lens _cllMaxResults
+      (\ s a -> s{_cllMaxResults = a})
+      . _Coerce
+
+-- | If set, all comments and replies, including deleted comments and replies
+-- (with content stripped) will be returned.
+cllIncludeDeleted :: Lens' CommentsList Bool
+cllIncludeDeleted
+  = lens _cllIncludeDeleted
+      (\ s a -> s{_cllIncludeDeleted = a})
+
+instance GoogleRequest CommentsList where
+        type Rs CommentsList = CommentList
+        requestClient CommentsList{..}
+          = go _cllFileId _cllUpdatedMin _cllPageToken
+              (Just _cllMaxResults)
+              (Just _cllIncludeDeleted)
+              (Just AltJSON)
+              driveService
+          where go
+                  = buildClient (Proxy :: Proxy CommentsListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Drive/Comments/Patch.hs b/gen/Network/Google/Resource/Drive/Comments/Patch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/Comments/Patch.hs
@@ -0,0 +1,107 @@
+{-# 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.Comments.Patch
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates an existing comment. This method supports patch semantics.
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.comments.patch@.
+module Network.Google.Resource.Drive.Comments.Patch
+    (
+    -- * REST Resource
+      CommentsPatchResource
+
+    -- * Creating a Request
+    , commentsPatch
+    , CommentsPatch
+
+    -- * Request Lenses
+    , cpPayload
+    , cpFileId
+    , cpCommentId
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.comments.patch@ method which the
+-- 'CommentsPatch' request conforms to.
+type CommentsPatchResource =
+     "drive" :>
+       "v2" :>
+         "files" :>
+           Capture "fileId" Text :>
+             "comments" :>
+               Capture "commentId" Text :>
+                 QueryParam "alt" AltJSON :>
+                   ReqBody '[JSON] Comment :> Patch '[JSON] Comment
+
+-- | Updates an existing comment. This method supports patch semantics.
+--
+-- /See:/ 'commentsPatch' smart constructor.
+data CommentsPatch = CommentsPatch
+    { _cpPayload   :: !Comment
+    , _cpFileId    :: !Text
+    , _cpCommentId :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CommentsPatch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cpPayload'
+--
+-- * 'cpFileId'
+--
+-- * 'cpCommentId'
+commentsPatch
+    :: Comment -- ^ 'cpPayload'
+    -> Text -- ^ 'cpFileId'
+    -> Text -- ^ 'cpCommentId'
+    -> CommentsPatch
+commentsPatch pCpPayload_ pCpFileId_ pCpCommentId_ =
+    CommentsPatch
+    { _cpPayload = pCpPayload_
+    , _cpFileId = pCpFileId_
+    , _cpCommentId = pCpCommentId_
+    }
+
+-- | Multipart request metadata.
+cpPayload :: Lens' CommentsPatch Comment
+cpPayload
+  = lens _cpPayload (\ s a -> s{_cpPayload = a})
+
+-- | The ID of the file.
+cpFileId :: Lens' CommentsPatch Text
+cpFileId = lens _cpFileId (\ s a -> s{_cpFileId = a})
+
+-- | The ID of the comment.
+cpCommentId :: Lens' CommentsPatch Text
+cpCommentId
+  = lens _cpCommentId (\ s a -> s{_cpCommentId = a})
+
+instance GoogleRequest CommentsPatch where
+        type Rs CommentsPatch = Comment
+        requestClient CommentsPatch{..}
+          = go _cpFileId _cpCommentId (Just AltJSON) _cpPayload
+              driveService
+          where go
+                  = buildClient (Proxy :: Proxy CommentsPatchResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Drive/Comments/Update.hs b/gen/Network/Google/Resource/Drive/Comments/Update.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/Comments/Update.hs
@@ -0,0 +1,107 @@
+{-# 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.Comments.Update
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates an existing comment.
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.comments.update@.
+module Network.Google.Resource.Drive.Comments.Update
+    (
+    -- * REST Resource
+      CommentsUpdateResource
+
+    -- * Creating a Request
+    , commentsUpdate
+    , CommentsUpdate
+
+    -- * Request Lenses
+    , cuPayload
+    , cuFileId
+    , cuCommentId
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.comments.update@ method which the
+-- 'CommentsUpdate' request conforms to.
+type CommentsUpdateResource =
+     "drive" :>
+       "v2" :>
+         "files" :>
+           Capture "fileId" Text :>
+             "comments" :>
+               Capture "commentId" Text :>
+                 QueryParam "alt" AltJSON :>
+                   ReqBody '[JSON] Comment :> Put '[JSON] Comment
+
+-- | Updates an existing comment.
+--
+-- /See:/ 'commentsUpdate' smart constructor.
+data CommentsUpdate = CommentsUpdate
+    { _cuPayload   :: !Comment
+    , _cuFileId    :: !Text
+    , _cuCommentId :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CommentsUpdate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cuPayload'
+--
+-- * 'cuFileId'
+--
+-- * 'cuCommentId'
+commentsUpdate
+    :: Comment -- ^ 'cuPayload'
+    -> Text -- ^ 'cuFileId'
+    -> Text -- ^ 'cuCommentId'
+    -> CommentsUpdate
+commentsUpdate pCuPayload_ pCuFileId_ pCuCommentId_ =
+    CommentsUpdate
+    { _cuPayload = pCuPayload_
+    , _cuFileId = pCuFileId_
+    , _cuCommentId = pCuCommentId_
+    }
+
+-- | Multipart request metadata.
+cuPayload :: Lens' CommentsUpdate Comment
+cuPayload
+  = lens _cuPayload (\ s a -> s{_cuPayload = a})
+
+-- | The ID of the file.
+cuFileId :: Lens' CommentsUpdate Text
+cuFileId = lens _cuFileId (\ s a -> s{_cuFileId = a})
+
+-- | The ID of the comment.
+cuCommentId :: Lens' CommentsUpdate Text
+cuCommentId
+  = lens _cuCommentId (\ s a -> s{_cuCommentId = a})
+
+instance GoogleRequest CommentsUpdate where
+        type Rs CommentsUpdate = Comment
+        requestClient CommentsUpdate{..}
+          = go _cuFileId _cuCommentId (Just AltJSON) _cuPayload
+              driveService
+          where go
+                  = buildClient (Proxy :: Proxy CommentsUpdateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Drive/Files/Copy.hs b/gen/Network/Google/Resource/Drive/Files/Copy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/Files/Copy.hs
@@ -0,0 +1,183 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Drive.Files.Copy
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a copy of the specified file.
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.files.copy@.
+module Network.Google.Resource.Drive.Files.Copy
+    (
+    -- * REST Resource
+      FilesCopyResource
+
+    -- * Creating a Request
+    , filesCopy
+    , FilesCopy
+
+    -- * Request Lenses
+    , fcPinned
+    , fcVisibility
+    , fcTimedTextLanguage
+    , fcPayload
+    , fcTimedTextTrackName
+    , fcOCRLanguage
+    , fcConvert
+    , fcFileId
+    , fcOCR
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.files.copy@ method which the
+-- 'FilesCopy' request conforms to.
+type FilesCopyResource =
+     "drive" :>
+       "v2" :>
+         "files" :>
+           Capture "fileId" Text :>
+             "copy" :>
+               QueryParam "pinned" Bool :>
+                 QueryParam "visibility" FilesCopyVisibility :>
+                   QueryParam "timedTextLanguage" Text :>
+                     QueryParam "timedTextTrackName" Text :>
+                       QueryParam "ocrLanguage" Text :>
+                         QueryParam "convert" Bool :>
+                           QueryParam "ocr" Bool :>
+                             QueryParam "alt" AltJSON :>
+                               ReqBody '[JSON] File :> Post '[JSON] File
+
+-- | Creates a copy of the specified file.
+--
+-- /See:/ 'filesCopy' smart constructor.
+data FilesCopy = FilesCopy
+    { _fcPinned             :: !Bool
+    , _fcVisibility         :: !FilesCopyVisibility
+    , _fcTimedTextLanguage  :: !(Maybe Text)
+    , _fcPayload            :: !File
+    , _fcTimedTextTrackName :: !(Maybe Text)
+    , _fcOCRLanguage        :: !(Maybe Text)
+    , _fcConvert            :: !Bool
+    , _fcFileId             :: !Text
+    , _fcOCR                :: !Bool
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FilesCopy' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fcPinned'
+--
+-- * 'fcVisibility'
+--
+-- * 'fcTimedTextLanguage'
+--
+-- * 'fcPayload'
+--
+-- * 'fcTimedTextTrackName'
+--
+-- * 'fcOCRLanguage'
+--
+-- * 'fcConvert'
+--
+-- * 'fcFileId'
+--
+-- * 'fcOCR'
+filesCopy
+    :: File -- ^ 'fcPayload'
+    -> Text -- ^ 'fcFileId'
+    -> FilesCopy
+filesCopy pFcPayload_ pFcFileId_ =
+    FilesCopy
+    { _fcPinned = False
+    , _fcVisibility = FCVDefault
+    , _fcTimedTextLanguage = Nothing
+    , _fcPayload = pFcPayload_
+    , _fcTimedTextTrackName = Nothing
+    , _fcOCRLanguage = Nothing
+    , _fcConvert = False
+    , _fcFileId = pFcFileId_
+    , _fcOCR = False
+    }
+
+-- | Whether to pin the head revision of the new copy. A file can have a
+-- maximum of 200 pinned revisions.
+fcPinned :: Lens' FilesCopy Bool
+fcPinned = lens _fcPinned (\ s a -> s{_fcPinned = a})
+
+-- | The visibility of the new file. This parameter is only relevant when the
+-- source is not a native Google Doc and convert=false.
+fcVisibility :: Lens' FilesCopy FilesCopyVisibility
+fcVisibility
+  = lens _fcVisibility (\ s a -> s{_fcVisibility = a})
+
+-- | The language of the timed text.
+fcTimedTextLanguage :: Lens' FilesCopy (Maybe Text)
+fcTimedTextLanguage
+  = lens _fcTimedTextLanguage
+      (\ s a -> s{_fcTimedTextLanguage = a})
+
+-- | Multipart request metadata.
+fcPayload :: Lens' FilesCopy File
+fcPayload
+  = lens _fcPayload (\ s a -> s{_fcPayload = a})
+
+-- | The timed text track name.
+fcTimedTextTrackName :: Lens' FilesCopy (Maybe Text)
+fcTimedTextTrackName
+  = lens _fcTimedTextTrackName
+      (\ s a -> s{_fcTimedTextTrackName = a})
+
+-- | If ocr is true, hints at the language to use. Valid values are BCP 47
+-- codes.
+fcOCRLanguage :: Lens' FilesCopy (Maybe Text)
+fcOCRLanguage
+  = lens _fcOCRLanguage
+      (\ s a -> s{_fcOCRLanguage = a})
+
+-- | Whether to convert this file to the corresponding Google Docs format.
+fcConvert :: Lens' FilesCopy Bool
+fcConvert
+  = lens _fcConvert (\ s a -> s{_fcConvert = a})
+
+-- | The ID of the file to copy.
+fcFileId :: Lens' FilesCopy Text
+fcFileId = lens _fcFileId (\ s a -> s{_fcFileId = a})
+
+-- | Whether to attempt OCR on .jpg, .png, .gif, or .pdf uploads.
+fcOCR :: Lens' FilesCopy Bool
+fcOCR = lens _fcOCR (\ s a -> s{_fcOCR = a})
+
+instance GoogleRequest FilesCopy where
+        type Rs FilesCopy = File
+        requestClient FilesCopy{..}
+          = go _fcFileId (Just _fcPinned) (Just _fcVisibility)
+              _fcTimedTextLanguage
+              _fcTimedTextTrackName
+              _fcOCRLanguage
+              (Just _fcConvert)
+              (Just _fcOCR)
+              (Just AltJSON)
+              _fcPayload
+              driveService
+          where go
+                  = buildClient (Proxy :: Proxy FilesCopyResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Drive/Files/Delete.hs b/gen/Network/Google/Resource/Drive/Files/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/Files/Delete.hs
@@ -0,0 +1,83 @@
+{-# 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.Files.Delete
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Permanently deletes a file by ID. Skips the trash. The currently
+-- authenticated user must own the file.
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.files.delete@.
+module Network.Google.Resource.Drive.Files.Delete
+    (
+    -- * REST Resource
+      FilesDeleteResource
+
+    -- * Creating a Request
+    , filesDelete
+    , FilesDelete
+
+    -- * Request Lenses
+    , fdFileId
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.files.delete@ method which the
+-- 'FilesDelete' request conforms to.
+type FilesDeleteResource =
+     "drive" :>
+       "v2" :>
+         "files" :>
+           Capture "fileId" Text :>
+             QueryParam "alt" AltJSON :> Delete '[JSON] ()
+
+-- | Permanently deletes a file by ID. Skips the trash. The currently
+-- authenticated user must own the file.
+--
+-- /See:/ 'filesDelete' smart constructor.
+newtype FilesDelete = FilesDelete
+    { _fdFileId :: Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FilesDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fdFileId'
+filesDelete
+    :: Text -- ^ 'fdFileId'
+    -> FilesDelete
+filesDelete pFdFileId_ =
+    FilesDelete
+    { _fdFileId = pFdFileId_
+    }
+
+-- | The ID of the file to delete.
+fdFileId :: Lens' FilesDelete Text
+fdFileId = lens _fdFileId (\ s a -> s{_fdFileId = a})
+
+instance GoogleRequest FilesDelete where
+        type Rs FilesDelete = ()
+        requestClient FilesDelete{..}
+          = go _fdFileId (Just AltJSON) driveService
+          where go
+                  = buildClient (Proxy :: Proxy FilesDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Drive/Files/EmptyTrash.hs b/gen/Network/Google/Resource/Drive/Files/EmptyTrash.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/Files/EmptyTrash.hs
@@ -0,0 +1,69 @@
+{-# 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.Files.EmptyTrash
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Permanently deletes all of the user\'s trashed files.
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.files.emptyTrash@.
+module Network.Google.Resource.Drive.Files.EmptyTrash
+    (
+    -- * REST Resource
+      FilesEmptyTrashResource
+
+    -- * Creating a Request
+    , filesEmptyTrash
+    , FilesEmptyTrash
+
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.files.emptyTrash@ method which the
+-- 'FilesEmptyTrash' request conforms to.
+type FilesEmptyTrashResource =
+     "drive" :>
+       "v2" :>
+         "files" :>
+           "trash" :>
+             QueryParam "alt" AltJSON :> Delete '[JSON] ()
+
+-- | Permanently deletes all of the user\'s trashed files.
+--
+-- /See:/ 'filesEmptyTrash' smart constructor.
+data FilesEmptyTrash =
+    FilesEmptyTrash
+    deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FilesEmptyTrash' with the minimum fields required to make a request.
+--
+filesEmptyTrash
+    :: FilesEmptyTrash
+filesEmptyTrash = FilesEmptyTrash
+
+instance GoogleRequest FilesEmptyTrash where
+        type Rs FilesEmptyTrash = ()
+        requestClient FilesEmptyTrash{}
+          = go (Just AltJSON) driveService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy FilesEmptyTrashResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Drive/Files/GenerateIds.hs b/gen/Network/Google/Resource/Drive/Files/GenerateIds.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/Files/GenerateIds.hs
@@ -0,0 +1,98 @@
+{-# 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.Files.GenerateIds
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Generates a set of file IDs which can be provided in insert requests.
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.files.generateIds@.
+module Network.Google.Resource.Drive.Files.GenerateIds
+    (
+    -- * REST Resource
+      FilesGenerateIdsResource
+
+    -- * Creating a Request
+    , filesGenerateIds
+    , FilesGenerateIds
+
+    -- * Request Lenses
+    , fgiSpace
+    , fgiMaxResults
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.files.generateIds@ method which the
+-- 'FilesGenerateIds' request conforms to.
+type FilesGenerateIdsResource =
+     "drive" :>
+       "v2" :>
+         "files" :>
+           "generateIds" :>
+             QueryParam "space" Text :>
+               QueryParam "maxResults" (Textual Int32) :>
+                 QueryParam "alt" AltJSON :> Get '[JSON] GeneratedIds
+
+-- | Generates a set of file IDs which can be provided in insert requests.
+--
+-- /See:/ 'filesGenerateIds' smart constructor.
+data FilesGenerateIds = FilesGenerateIds
+    { _fgiSpace      :: !Text
+    , _fgiMaxResults :: !(Textual Int32)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FilesGenerateIds' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fgiSpace'
+--
+-- * 'fgiMaxResults'
+filesGenerateIds
+    :: FilesGenerateIds
+filesGenerateIds =
+    FilesGenerateIds
+    { _fgiSpace = "drive"
+    , _fgiMaxResults = 10
+    }
+
+-- | The space in which the IDs can be used to create new files. Supported
+-- values are \'drive\' and \'appDataFolder\'.
+fgiSpace :: Lens' FilesGenerateIds Text
+fgiSpace = lens _fgiSpace (\ s a -> s{_fgiSpace = a})
+
+-- | Maximum number of IDs to return.
+fgiMaxResults :: Lens' FilesGenerateIds Int32
+fgiMaxResults
+  = lens _fgiMaxResults
+      (\ s a -> s{_fgiMaxResults = a})
+      . _Coerce
+
+instance GoogleRequest FilesGenerateIds where
+        type Rs FilesGenerateIds = GeneratedIds
+        requestClient FilesGenerateIds{..}
+          = go (Just _fgiSpace) (Just _fgiMaxResults)
+              (Just AltJSON)
+              driveService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy FilesGenerateIdsResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Drive/Files/Get.hs b/gen/Network/Google/Resource/Drive/Files/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/Files/Get.hs
@@ -0,0 +1,159 @@
+{-# 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.Files.Get
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets a file\'s metadata by ID.
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.files.get@.
+module Network.Google.Resource.Drive.Files.Get
+    (
+    -- * REST Resource
+      FilesGetResource
+
+    -- * Creating a Request
+    , filesGet
+    , FilesGet
+
+    -- * Request Lenses
+    , fgUpdateViewedDate
+    , fgProjection
+    , fgAcknowledgeAbuse
+    , fgFileId
+    , fgRevisionId
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.files.get@ method which the
+-- 'FilesGet' request conforms to.
+type FilesGetResource =
+     "drive" :>
+       "v2" :>
+         "files" :>
+           Capture "fileId" Text :>
+             QueryParam "updateViewedDate" Bool :>
+               QueryParam "projection" FilesGetProjection :>
+                 QueryParam "acknowledgeAbuse" Bool :>
+                   QueryParam "revisionId" Text :>
+                     QueryParam "alt" AltJSON :> Get '[JSON] File
+       :<|>
+       "drive" :>
+         "v2" :>
+           "files" :>
+             Capture "fileId" Text :>
+               QueryParam "updateViewedDate" Bool :>
+                 QueryParam "projection" FilesGetProjection :>
+                   QueryParam "acknowledgeAbuse" Bool :>
+                     QueryParam "revisionId" Text :>
+                       QueryParam "alt" AltMedia :>
+                         Get '[OctetStream] Stream
+
+-- | Gets a file\'s metadata by ID.
+--
+-- /See:/ 'filesGet' smart constructor.
+data FilesGet = FilesGet
+    { _fgUpdateViewedDate :: !Bool
+    , _fgProjection       :: !(Maybe FilesGetProjection)
+    , _fgAcknowledgeAbuse :: !Bool
+    , _fgFileId           :: !Text
+    , _fgRevisionId       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FilesGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fgUpdateViewedDate'
+--
+-- * 'fgProjection'
+--
+-- * 'fgAcknowledgeAbuse'
+--
+-- * 'fgFileId'
+--
+-- * 'fgRevisionId'
+filesGet
+    :: Text -- ^ 'fgFileId'
+    -> FilesGet
+filesGet pFgFileId_ =
+    FilesGet
+    { _fgUpdateViewedDate = False
+    , _fgProjection = Nothing
+    , _fgAcknowledgeAbuse = False
+    , _fgFileId = pFgFileId_
+    , _fgRevisionId = Nothing
+    }
+
+-- | Deprecated: Use files.update with modifiedDateBehavior=noChange,
+-- updateViewedDate=true and an empty request body.
+fgUpdateViewedDate :: Lens' FilesGet Bool
+fgUpdateViewedDate
+  = lens _fgUpdateViewedDate
+      (\ s a -> s{_fgUpdateViewedDate = a})
+
+-- | This parameter is deprecated and has no function.
+fgProjection :: Lens' FilesGet (Maybe FilesGetProjection)
+fgProjection
+  = lens _fgProjection (\ s a -> s{_fgProjection = a})
+
+-- | Whether the user is acknowledging the risk of downloading known malware
+-- or other abusive files.
+fgAcknowledgeAbuse :: Lens' FilesGet Bool
+fgAcknowledgeAbuse
+  = lens _fgAcknowledgeAbuse
+      (\ s a -> s{_fgAcknowledgeAbuse = a})
+
+-- | The ID for the file in question.
+fgFileId :: Lens' FilesGet Text
+fgFileId = lens _fgFileId (\ s a -> s{_fgFileId = a})
+
+-- | Specifies the Revision ID that should be downloaded. Ignored unless
+-- alt=media is specified.
+fgRevisionId :: Lens' FilesGet (Maybe Text)
+fgRevisionId
+  = lens _fgRevisionId (\ s a -> s{_fgRevisionId = a})
+
+instance GoogleRequest FilesGet where
+        type Rs FilesGet = File
+        requestClient FilesGet{..}
+          = go _fgFileId (Just _fgUpdateViewedDate)
+              _fgProjection
+              (Just _fgAcknowledgeAbuse)
+              _fgRevisionId
+              (Just AltJSON)
+              driveService
+          where go :<|> _
+                  = buildClient (Proxy :: Proxy FilesGetResource)
+                      mempty
+
+instance GoogleRequest (MediaDownload FilesGet) where
+        type Rs (MediaDownload FilesGet) = Stream
+        requestClient (MediaDownload FilesGet{..})
+          = go _fgFileId (Just _fgUpdateViewedDate)
+              _fgProjection
+              (Just _fgAcknowledgeAbuse)
+              _fgRevisionId
+              (Just AltMedia)
+              driveService
+          where _ :<|> go
+                  = buildClient (Proxy :: Proxy FilesGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Drive/Files/Insert.hs b/gen/Network/Google/Resource/Drive/Files/Insert.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/Files/Insert.hs
@@ -0,0 +1,221 @@
+{-# 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.Files.Insert
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Insert a new file.
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.files.insert@.
+module Network.Google.Resource.Drive.Files.Insert
+    (
+    -- * REST Resource
+      FilesInsertResource
+
+    -- * Creating a Request
+    , filesInsert
+    , FilesInsert
+
+    -- * Request Lenses
+    , fiPinned
+    , fiVisibility
+    , fiTimedTextLanguage
+    , fiPayload
+    , fiUseContentAsIndexableText
+    , fiTimedTextTrackName
+    , fiOCRLanguage
+    , fiConvert
+    , fiOCR
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.files.insert@ method which the
+-- 'FilesInsert' request conforms to.
+type FilesInsertResource =
+     "drive" :>
+       "v2" :>
+         "files" :>
+           QueryParam "pinned" Bool :>
+             QueryParam "visibility" FilesInsertVisibility :>
+               QueryParam "timedTextLanguage" Text :>
+                 QueryParam "useContentAsIndexableText" Bool :>
+                   QueryParam "timedTextTrackName" Text :>
+                     QueryParam "ocrLanguage" Text :>
+                       QueryParam "convert" Bool :>
+                         QueryParam "ocr" Bool :>
+                           QueryParam "alt" AltJSON :>
+                             ReqBody '[JSON] File :> Post '[JSON] File
+       :<|>
+       "upload" :>
+         "drive" :>
+           "v2" :>
+             "files" :>
+               QueryParam "pinned" Bool :>
+                 QueryParam "visibility" FilesInsertVisibility :>
+                   QueryParam "timedTextLanguage" Text :>
+                     QueryParam "useContentAsIndexableText" Bool :>
+                       QueryParam "timedTextTrackName" Text :>
+                         QueryParam "ocrLanguage" Text :>
+                           QueryParam "convert" Bool :>
+                             QueryParam "ocr" Bool :>
+                               QueryParam "alt" AltJSON :>
+                                 QueryParam "uploadType" AltMedia :>
+                                   MultipartRelated '[JSON] File RequestBody :>
+                                     Post '[JSON] File
+
+-- | Insert a new file.
+--
+-- /See:/ 'filesInsert' smart constructor.
+data FilesInsert = FilesInsert
+    { _fiPinned                    :: !Bool
+    , _fiVisibility                :: !FilesInsertVisibility
+    , _fiTimedTextLanguage         :: !(Maybe Text)
+    , _fiPayload                   :: !File
+    , _fiUseContentAsIndexableText :: !Bool
+    , _fiTimedTextTrackName        :: !(Maybe Text)
+    , _fiOCRLanguage               :: !(Maybe Text)
+    , _fiConvert                   :: !Bool
+    , _fiOCR                       :: !Bool
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FilesInsert' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fiPinned'
+--
+-- * 'fiVisibility'
+--
+-- * 'fiTimedTextLanguage'
+--
+-- * 'fiPayload'
+--
+-- * 'fiUseContentAsIndexableText'
+--
+-- * 'fiTimedTextTrackName'
+--
+-- * 'fiOCRLanguage'
+--
+-- * 'fiConvert'
+--
+-- * 'fiOCR'
+filesInsert
+    :: File -- ^ 'fiPayload'
+    -> FilesInsert
+filesInsert pFiPayload_ =
+    FilesInsert
+    { _fiPinned = False
+    , _fiVisibility = Default
+    , _fiTimedTextLanguage = Nothing
+    , _fiPayload = pFiPayload_
+    , _fiUseContentAsIndexableText = False
+    , _fiTimedTextTrackName = Nothing
+    , _fiOCRLanguage = Nothing
+    , _fiConvert = False
+    , _fiOCR = False
+    }
+
+-- | Whether to pin the head revision of the uploaded file. A file can have a
+-- maximum of 200 pinned revisions.
+fiPinned :: Lens' FilesInsert Bool
+fiPinned = lens _fiPinned (\ s a -> s{_fiPinned = a})
+
+-- | The visibility of the new file. This parameter is only relevant when
+-- convert=false.
+fiVisibility :: Lens' FilesInsert FilesInsertVisibility
+fiVisibility
+  = lens _fiVisibility (\ s a -> s{_fiVisibility = a})
+
+-- | The language of the timed text.
+fiTimedTextLanguage :: Lens' FilesInsert (Maybe Text)
+fiTimedTextLanguage
+  = lens _fiTimedTextLanguage
+      (\ s a -> s{_fiTimedTextLanguage = a})
+
+-- | Multipart request metadata.
+fiPayload :: Lens' FilesInsert File
+fiPayload
+  = lens _fiPayload (\ s a -> s{_fiPayload = a})
+
+-- | Whether to use the content as indexable text.
+fiUseContentAsIndexableText :: Lens' FilesInsert Bool
+fiUseContentAsIndexableText
+  = lens _fiUseContentAsIndexableText
+      (\ s a -> s{_fiUseContentAsIndexableText = a})
+
+-- | The timed text track name.
+fiTimedTextTrackName :: Lens' FilesInsert (Maybe Text)
+fiTimedTextTrackName
+  = lens _fiTimedTextTrackName
+      (\ s a -> s{_fiTimedTextTrackName = a})
+
+-- | If ocr is true, hints at the language to use. Valid values are BCP 47
+-- codes.
+fiOCRLanguage :: Lens' FilesInsert (Maybe Text)
+fiOCRLanguage
+  = lens _fiOCRLanguage
+      (\ s a -> s{_fiOCRLanguage = a})
+
+-- | Whether to convert this file to the corresponding Google Docs format.
+fiConvert :: Lens' FilesInsert Bool
+fiConvert
+  = lens _fiConvert (\ s a -> s{_fiConvert = a})
+
+-- | Whether to attempt OCR on .jpg, .png, .gif, or .pdf uploads.
+fiOCR :: Lens' FilesInsert Bool
+fiOCR = lens _fiOCR (\ s a -> s{_fiOCR = a})
+
+instance GoogleRequest FilesInsert where
+        type Rs FilesInsert = File
+        requestClient FilesInsert{..}
+          = go (Just _fiPinned) (Just _fiVisibility)
+              _fiTimedTextLanguage
+              (Just _fiUseContentAsIndexableText)
+              _fiTimedTextTrackName
+              _fiOCRLanguage
+              (Just _fiConvert)
+              (Just _fiOCR)
+              (Just AltJSON)
+              _fiPayload
+              driveService
+          where go :<|> _
+                  = buildClient (Proxy :: Proxy FilesInsertResource)
+                      mempty
+
+instance GoogleRequest (MediaUpload FilesInsert)
+         where
+        type Rs (MediaUpload FilesInsert) = File
+        requestClient (MediaUpload FilesInsert{..} body)
+          = go (Just _fiPinned) (Just _fiVisibility)
+              _fiTimedTextLanguage
+              (Just _fiUseContentAsIndexableText)
+              _fiTimedTextTrackName
+              _fiOCRLanguage
+              (Just _fiConvert)
+              (Just _fiOCR)
+              (Just AltJSON)
+              (Just AltMedia)
+              _fiPayload
+              body
+              driveService
+          where _ :<|> go
+                  = buildClient (Proxy :: Proxy FilesInsertResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Drive/Files/List.hs b/gen/Network/Google/Resource/Drive/Files/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/Files/List.hs
@@ -0,0 +1,158 @@
+{-# 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.Files.List
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the user\'s files.
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.files.list@.
+module Network.Google.Resource.Drive.Files.List
+    (
+    -- * REST Resource
+      FilesListResource
+
+    -- * Creating a Request
+    , filesList
+    , FilesList
+
+    -- * Request Lenses
+    , flOrderBy
+    , flQ
+    , flSpaces
+    , flProjection
+    , flCorpus
+    , flPageToken
+    , flMaxResults
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.files.list@ method which the
+-- 'FilesList' request conforms to.
+type FilesListResource =
+     "drive" :>
+       "v2" :>
+         "files" :>
+           QueryParam "orderBy" Text :>
+             QueryParam "q" Text :>
+               QueryParam "spaces" Text :>
+                 QueryParam "projection" FilesListProjection :>
+                   QueryParam "corpus" FilesListCorpus :>
+                     QueryParam "pageToken" Text :>
+                       QueryParam "maxResults" (Textual Int32) :>
+                         QueryParam "alt" AltJSON :> Get '[JSON] FileList
+
+-- | Lists the user\'s files.
+--
+-- /See:/ 'filesList' smart constructor.
+data FilesList = FilesList
+    { _flOrderBy    :: !(Maybe Text)
+    , _flQ          :: !(Maybe Text)
+    , _flSpaces     :: !(Maybe Text)
+    , _flProjection :: !(Maybe FilesListProjection)
+    , _flCorpus     :: !(Maybe FilesListCorpus)
+    , _flPageToken  :: !(Maybe Text)
+    , _flMaxResults :: !(Textual Int32)
+    } 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:
+--
+-- * 'flOrderBy'
+--
+-- * 'flQ'
+--
+-- * 'flSpaces'
+--
+-- * 'flProjection'
+--
+-- * 'flCorpus'
+--
+-- * 'flPageToken'
+--
+-- * 'flMaxResults'
+filesList
+    :: FilesList
+filesList =
+    FilesList
+    { _flOrderBy = Nothing
+    , _flQ = Nothing
+    , _flSpaces = Nothing
+    , _flProjection = Nothing
+    , _flCorpus = Nothing
+    , _flPageToken = Nothing
+    , _flMaxResults = 100
+    }
+
+-- | A comma-separated list of sort keys. Valid keys are \'createdDate\',
+-- \'folder\', \'lastViewedByMeDate\', \'modifiedByMeDate\',
+-- \'modifiedDate\', \'quotaBytesUsed\', \'recency\', \'sharedWithMeDate\',
+-- \'starred\', and \'title\'. Each key sorts ascending by default, but may
+-- be reversed with the \'desc\' modifier. Example usage:
+-- ?orderBy=folder,modifiedDate desc,title. Please note that there is a
+-- current limitation for users with approximately one million files in
+-- which the requested sort order is ignored.
+flOrderBy :: Lens' FilesList (Maybe Text)
+flOrderBy
+  = lens _flOrderBy (\ s a -> s{_flOrderBy = a})
+
+-- | Query string for searching files.
+flQ :: Lens' FilesList (Maybe Text)
+flQ = lens _flQ (\ s a -> s{_flQ = a})
+
+-- | A comma-separated list of spaces to query. Supported values are
+-- \'drive\', \'appDataFolder\' and \'photos\'.
+flSpaces :: Lens' FilesList (Maybe Text)
+flSpaces = lens _flSpaces (\ s a -> s{_flSpaces = a})
+
+-- | This parameter is deprecated and has no function.
+flProjection :: Lens' FilesList (Maybe FilesListProjection)
+flProjection
+  = lens _flProjection (\ s a -> s{_flProjection = a})
+
+-- | The body of items (files\/documents) to which the query applies.
+flCorpus :: Lens' FilesList (Maybe FilesListCorpus)
+flCorpus = lens _flCorpus (\ s a -> s{_flCorpus = a})
+
+-- | Page token for files.
+flPageToken :: Lens' FilesList (Maybe Text)
+flPageToken
+  = lens _flPageToken (\ s a -> s{_flPageToken = a})
+
+-- | Maximum number of files to return.
+flMaxResults :: Lens' FilesList Int32
+flMaxResults
+  = lens _flMaxResults (\ s a -> s{_flMaxResults = a})
+      . _Coerce
+
+instance GoogleRequest FilesList where
+        type Rs FilesList = FileList
+        requestClient FilesList{..}
+          = go _flOrderBy _flQ _flSpaces _flProjection
+              _flCorpus
+              _flPageToken
+              (Just _flMaxResults)
+              (Just AltJSON)
+              driveService
+          where go
+                  = buildClient (Proxy :: Proxy FilesListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Drive/Files/Patch.hs b/gen/Network/Google/Resource/Drive/Files/Patch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/Files/Patch.hs
@@ -0,0 +1,271 @@
+{-# 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.Files.Patch
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates file metadata and\/or content. This method supports patch
+-- semantics.
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.files.patch@.
+module Network.Google.Resource.Drive.Files.Patch
+    (
+    -- * REST Resource
+      FilesPatchResource
+
+    -- * Creating a Request
+    , filesPatch
+    , FilesPatch
+
+    -- * Request Lenses
+    , fpNewRevision
+    , fpPinned
+    , fpTimedTextLanguage
+    , fpPayload
+    , fpUpdateViewedDate
+    , fpRemoveParents
+    , fpModifiedDateBehavior
+    , fpUseContentAsIndexableText
+    , fpTimedTextTrackName
+    , fpOCRLanguage
+    , fpConvert
+    , fpSetModifiedDate
+    , fpFileId
+    , fpAddParents
+    , fpOCR
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.files.patch@ method which the
+-- 'FilesPatch' request conforms to.
+type FilesPatchResource =
+     "drive" :>
+       "v2" :>
+         "files" :>
+           Capture "fileId" Text :>
+             QueryParam "newRevision" Bool :>
+               QueryParam "pinned" Bool :>
+                 QueryParam "timedTextLanguage" Text :>
+                   QueryParam "updateViewedDate" Bool :>
+                     QueryParam "removeParents" Text :>
+                       QueryParam "modifiedDateBehavior"
+                         FilesPatchModifiedDateBehavior
+                         :>
+                         QueryParam "useContentAsIndexableText" Bool :>
+                           QueryParam "timedTextTrackName" Text :>
+                             QueryParam "ocrLanguage" Text :>
+                               QueryParam "convert" Bool :>
+                                 QueryParam "setModifiedDate" Bool :>
+                                   QueryParam "addParents" Text :>
+                                     QueryParam "ocr" Bool :>
+                                       QueryParam "alt" AltJSON :>
+                                         ReqBody '[JSON] File :>
+                                           Patch '[JSON] File
+
+-- | Updates file metadata and\/or content. This method supports patch
+-- semantics.
+--
+-- /See:/ 'filesPatch' smart constructor.
+data FilesPatch = FilesPatch
+    { _fpNewRevision               :: !Bool
+    , _fpPinned                    :: !Bool
+    , _fpTimedTextLanguage         :: !(Maybe Text)
+    , _fpPayload                   :: !File
+    , _fpUpdateViewedDate          :: !Bool
+    , _fpRemoveParents             :: !(Maybe Text)
+    , _fpModifiedDateBehavior      :: !(Maybe FilesPatchModifiedDateBehavior)
+    , _fpUseContentAsIndexableText :: !Bool
+    , _fpTimedTextTrackName        :: !(Maybe Text)
+    , _fpOCRLanguage               :: !(Maybe Text)
+    , _fpConvert                   :: !Bool
+    , _fpSetModifiedDate           :: !Bool
+    , _fpFileId                    :: !Text
+    , _fpAddParents                :: !(Maybe Text)
+    , _fpOCR                       :: !Bool
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FilesPatch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fpNewRevision'
+--
+-- * 'fpPinned'
+--
+-- * 'fpTimedTextLanguage'
+--
+-- * 'fpPayload'
+--
+-- * 'fpUpdateViewedDate'
+--
+-- * 'fpRemoveParents'
+--
+-- * 'fpModifiedDateBehavior'
+--
+-- * 'fpUseContentAsIndexableText'
+--
+-- * 'fpTimedTextTrackName'
+--
+-- * 'fpOCRLanguage'
+--
+-- * 'fpConvert'
+--
+-- * 'fpSetModifiedDate'
+--
+-- * 'fpFileId'
+--
+-- * 'fpAddParents'
+--
+-- * 'fpOCR'
+filesPatch
+    :: File -- ^ 'fpPayload'
+    -> Text -- ^ 'fpFileId'
+    -> FilesPatch
+filesPatch pFpPayload_ pFpFileId_ =
+    FilesPatch
+    { _fpNewRevision = True
+    , _fpPinned = False
+    , _fpTimedTextLanguage = Nothing
+    , _fpPayload = pFpPayload_
+    , _fpUpdateViewedDate = True
+    , _fpRemoveParents = Nothing
+    , _fpModifiedDateBehavior = Nothing
+    , _fpUseContentAsIndexableText = False
+    , _fpTimedTextTrackName = Nothing
+    , _fpOCRLanguage = Nothing
+    , _fpConvert = False
+    , _fpSetModifiedDate = False
+    , _fpFileId = pFpFileId_
+    , _fpAddParents = Nothing
+    , _fpOCR = False
+    }
+
+-- | Whether a blob upload should create a new revision. If false, the blob
+-- data in the current head revision is replaced. If true or not set, a new
+-- blob is created as head revision, and previous unpinned revisions are
+-- preserved for a short period of time. Pinned revisions are stored
+-- indefinitely, using additional storage quota, up to a maximum of 200
+-- revisions. For details on how revisions are retained, see the Drive Help
+-- Center.
+fpNewRevision :: Lens' FilesPatch Bool
+fpNewRevision
+  = lens _fpNewRevision
+      (\ s a -> s{_fpNewRevision = a})
+
+-- | Whether to pin the new revision. A file can have a maximum of 200 pinned
+-- revisions.
+fpPinned :: Lens' FilesPatch Bool
+fpPinned = lens _fpPinned (\ s a -> s{_fpPinned = a})
+
+-- | The language of the timed text.
+fpTimedTextLanguage :: Lens' FilesPatch (Maybe Text)
+fpTimedTextLanguage
+  = lens _fpTimedTextLanguage
+      (\ s a -> s{_fpTimedTextLanguage = a})
+
+-- | Multipart request metadata.
+fpPayload :: Lens' FilesPatch File
+fpPayload
+  = lens _fpPayload (\ s a -> s{_fpPayload = a})
+
+-- | Whether to update the view date after successfully updating the file.
+fpUpdateViewedDate :: Lens' FilesPatch Bool
+fpUpdateViewedDate
+  = lens _fpUpdateViewedDate
+      (\ s a -> s{_fpUpdateViewedDate = a})
+
+-- | Comma-separated list of parent IDs to remove.
+fpRemoveParents :: Lens' FilesPatch (Maybe Text)
+fpRemoveParents
+  = lens _fpRemoveParents
+      (\ s a -> s{_fpRemoveParents = a})
+
+-- | Determines the behavior in which modifiedDate is updated. This overrides
+-- setModifiedDate.
+fpModifiedDateBehavior :: Lens' FilesPatch (Maybe FilesPatchModifiedDateBehavior)
+fpModifiedDateBehavior
+  = lens _fpModifiedDateBehavior
+      (\ s a -> s{_fpModifiedDateBehavior = a})
+
+-- | Whether to use the content as indexable text.
+fpUseContentAsIndexableText :: Lens' FilesPatch Bool
+fpUseContentAsIndexableText
+  = lens _fpUseContentAsIndexableText
+      (\ s a -> s{_fpUseContentAsIndexableText = a})
+
+-- | The timed text track name.
+fpTimedTextTrackName :: Lens' FilesPatch (Maybe Text)
+fpTimedTextTrackName
+  = lens _fpTimedTextTrackName
+      (\ s a -> s{_fpTimedTextTrackName = a})
+
+-- | If ocr is true, hints at the language to use. Valid values are BCP 47
+-- codes.
+fpOCRLanguage :: Lens' FilesPatch (Maybe Text)
+fpOCRLanguage
+  = lens _fpOCRLanguage
+      (\ s a -> s{_fpOCRLanguage = a})
+
+-- | This parameter is deprecated and has no function.
+fpConvert :: Lens' FilesPatch Bool
+fpConvert
+  = lens _fpConvert (\ s a -> s{_fpConvert = a})
+
+-- | Whether to set the modified date with the supplied modified date.
+fpSetModifiedDate :: Lens' FilesPatch Bool
+fpSetModifiedDate
+  = lens _fpSetModifiedDate
+      (\ s a -> s{_fpSetModifiedDate = a})
+
+-- | The ID of the file to update.
+fpFileId :: Lens' FilesPatch Text
+fpFileId = lens _fpFileId (\ s a -> s{_fpFileId = a})
+
+-- | Comma-separated list of parent IDs to add.
+fpAddParents :: Lens' FilesPatch (Maybe Text)
+fpAddParents
+  = lens _fpAddParents (\ s a -> s{_fpAddParents = a})
+
+-- | Whether to attempt OCR on .jpg, .png, .gif, or .pdf uploads.
+fpOCR :: Lens' FilesPatch Bool
+fpOCR = lens _fpOCR (\ s a -> s{_fpOCR = a})
+
+instance GoogleRequest FilesPatch where
+        type Rs FilesPatch = File
+        requestClient FilesPatch{..}
+          = go _fpFileId (Just _fpNewRevision) (Just _fpPinned)
+              _fpTimedTextLanguage
+              (Just _fpUpdateViewedDate)
+              _fpRemoveParents
+              _fpModifiedDateBehavior
+              (Just _fpUseContentAsIndexableText)
+              _fpTimedTextTrackName
+              _fpOCRLanguage
+              (Just _fpConvert)
+              (Just _fpSetModifiedDate)
+              _fpAddParents
+              (Just _fpOCR)
+              (Just AltJSON)
+              _fpPayload
+              driveService
+          where go
+                  = buildClient (Proxy :: Proxy FilesPatchResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Drive/Files/Touch.hs b/gen/Network/Google/Resource/Drive/Files/Touch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/Files/Touch.hs
@@ -0,0 +1,82 @@
+{-# 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.Files.Touch
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Set the file\'s updated time to the current server time.
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.files.touch@.
+module Network.Google.Resource.Drive.Files.Touch
+    (
+    -- * REST Resource
+      FilesTouchResource
+
+    -- * Creating a Request
+    , filesTouch
+    , FilesTouch
+
+    -- * Request Lenses
+    , ftFileId
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.files.touch@ method which the
+-- 'FilesTouch' request conforms to.
+type FilesTouchResource =
+     "drive" :>
+       "v2" :>
+         "files" :>
+           Capture "fileId" Text :>
+             "touch" :>
+               QueryParam "alt" AltJSON :> Post '[JSON] File
+
+-- | Set the file\'s updated time to the current server time.
+--
+-- /See:/ 'filesTouch' smart constructor.
+newtype FilesTouch = FilesTouch
+    { _ftFileId :: Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FilesTouch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ftFileId'
+filesTouch
+    :: Text -- ^ 'ftFileId'
+    -> FilesTouch
+filesTouch pFtFileId_ =
+    FilesTouch
+    { _ftFileId = pFtFileId_
+    }
+
+-- | The ID of the file to update.
+ftFileId :: Lens' FilesTouch Text
+ftFileId = lens _ftFileId (\ s a -> s{_ftFileId = a})
+
+instance GoogleRequest FilesTouch where
+        type Rs FilesTouch = File
+        requestClient FilesTouch{..}
+          = go _ftFileId (Just AltJSON) driveService
+          where go
+                  = buildClient (Proxy :: Proxy FilesTouchResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Drive/Files/Trash.hs b/gen/Network/Google/Resource/Drive/Files/Trash.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/Files/Trash.hs
@@ -0,0 +1,85 @@
+{-# 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.Files.Trash
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Moves a file to the trash. The currently authenticated user must own the
+-- file.
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.files.trash@.
+module Network.Google.Resource.Drive.Files.Trash
+    (
+    -- * REST Resource
+      FilesTrashResource
+
+    -- * Creating a Request
+    , filesTrash
+    , FilesTrash
+
+    -- * Request Lenses
+    , filFileId
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.files.trash@ method which the
+-- 'FilesTrash' request conforms to.
+type FilesTrashResource =
+     "drive" :>
+       "v2" :>
+         "files" :>
+           Capture "fileId" Text :>
+             "trash" :>
+               QueryParam "alt" AltJSON :> Post '[JSON] File
+
+-- | Moves a file to the trash. The currently authenticated user must own the
+-- file.
+--
+-- /See:/ 'filesTrash' smart constructor.
+newtype FilesTrash = FilesTrash
+    { _filFileId :: Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FilesTrash' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'filFileId'
+filesTrash
+    :: Text -- ^ 'filFileId'
+    -> FilesTrash
+filesTrash pFilFileId_ =
+    FilesTrash
+    { _filFileId = pFilFileId_
+    }
+
+-- | The ID of the file to trash.
+filFileId :: Lens' FilesTrash Text
+filFileId
+  = lens _filFileId (\ s a -> s{_filFileId = a})
+
+instance GoogleRequest FilesTrash where
+        type Rs FilesTrash = File
+        requestClient FilesTrash{..}
+          = go _filFileId (Just AltJSON) driveService
+          where go
+                  = buildClient (Proxy :: Proxy FilesTrashResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Drive/Files/Untrash.hs b/gen/Network/Google/Resource/Drive/Files/Untrash.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/Files/Untrash.hs
@@ -0,0 +1,82 @@
+{-# 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.Files.Untrash
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Restores a file from the trash.
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.files.untrash@.
+module Network.Google.Resource.Drive.Files.Untrash
+    (
+    -- * REST Resource
+      FilesUntrashResource
+
+    -- * Creating a Request
+    , filesUntrash
+    , FilesUntrash
+
+    -- * Request Lenses
+    , fFileId
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.files.untrash@ method which the
+-- 'FilesUntrash' request conforms to.
+type FilesUntrashResource =
+     "drive" :>
+       "v2" :>
+         "files" :>
+           Capture "fileId" Text :>
+             "untrash" :>
+               QueryParam "alt" AltJSON :> Post '[JSON] File
+
+-- | Restores a file from the trash.
+--
+-- /See:/ 'filesUntrash' smart constructor.
+newtype FilesUntrash = FilesUntrash
+    { _fFileId :: Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FilesUntrash' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fFileId'
+filesUntrash
+    :: Text -- ^ 'fFileId'
+    -> FilesUntrash
+filesUntrash pFFileId_ =
+    FilesUntrash
+    { _fFileId = pFFileId_
+    }
+
+-- | The ID of the file to untrash.
+fFileId :: Lens' FilesUntrash Text
+fFileId = lens _fFileId (\ s a -> s{_fFileId = a})
+
+instance GoogleRequest FilesUntrash where
+        type Rs FilesUntrash = File
+        requestClient FilesUntrash{..}
+          = go _fFileId (Just AltJSON) driveService
+          where go
+                  = buildClient (Proxy :: Proxy FilesUntrashResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Drive/Files/Update.hs b/gen/Network/Google/Resource/Drive/Files/Update.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/Files/Update.hs
@@ -0,0 +1,320 @@
+{-# 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.Files.Update
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates file metadata and\/or content.
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.files.update@.
+module Network.Google.Resource.Drive.Files.Update
+    (
+    -- * REST Resource
+      FilesUpdateResource
+
+    -- * Creating a Request
+    , filesUpdate
+    , FilesUpdate
+
+    -- * Request Lenses
+    , fuNewRevision
+    , fuPinned
+    , fuTimedTextLanguage
+    , fuPayload
+    , fuUpdateViewedDate
+    , fuRemoveParents
+    , fuModifiedDateBehavior
+    , fuUseContentAsIndexableText
+    , fuTimedTextTrackName
+    , fuOCRLanguage
+    , fuConvert
+    , fuSetModifiedDate
+    , fuFileId
+    , fuAddParents
+    , fuOCR
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.files.update@ method which the
+-- 'FilesUpdate' request conforms to.
+type FilesUpdateResource =
+     "drive" :>
+       "v2" :>
+         "files" :>
+           Capture "fileId" Text :>
+             QueryParam "newRevision" Bool :>
+               QueryParam "pinned" Bool :>
+                 QueryParam "timedTextLanguage" Text :>
+                   QueryParam "updateViewedDate" Bool :>
+                     QueryParam "removeParents" Text :>
+                       QueryParam "modifiedDateBehavior"
+                         FilesUpdateModifiedDateBehavior
+                         :>
+                         QueryParam "useContentAsIndexableText" Bool :>
+                           QueryParam "timedTextTrackName" Text :>
+                             QueryParam "ocrLanguage" Text :>
+                               QueryParam "convert" Bool :>
+                                 QueryParam "setModifiedDate" Bool :>
+                                   QueryParam "addParents" Text :>
+                                     QueryParam "ocr" Bool :>
+                                       QueryParam "alt" AltJSON :>
+                                         ReqBody '[JSON] File :>
+                                           Put '[JSON] File
+       :<|>
+       "upload" :>
+         "drive" :>
+           "v2" :>
+             "files" :>
+               Capture "fileId" Text :>
+                 QueryParam "newRevision" Bool :>
+                   QueryParam "pinned" Bool :>
+                     QueryParam "timedTextLanguage" Text :>
+                       QueryParam "updateViewedDate" Bool :>
+                         QueryParam "removeParents" Text :>
+                           QueryParam "modifiedDateBehavior"
+                             FilesUpdateModifiedDateBehavior
+                             :>
+                             QueryParam "useContentAsIndexableText" Bool :>
+                               QueryParam "timedTextTrackName" Text :>
+                                 QueryParam "ocrLanguage" Text :>
+                                   QueryParam "convert" Bool :>
+                                     QueryParam "setModifiedDate" Bool :>
+                                       QueryParam "addParents" Text :>
+                                         QueryParam "ocr" Bool :>
+                                           QueryParam "alt" AltJSON :>
+                                             QueryParam "uploadType" AltMedia :>
+                                               MultipartRelated '[JSON] File
+                                                 RequestBody
+                                                 :> Put '[JSON] File
+
+-- | Updates file metadata and\/or content.
+--
+-- /See:/ 'filesUpdate' smart constructor.
+data FilesUpdate = FilesUpdate
+    { _fuNewRevision               :: !Bool
+    , _fuPinned                    :: !Bool
+    , _fuTimedTextLanguage         :: !(Maybe Text)
+    , _fuPayload                   :: !File
+    , _fuUpdateViewedDate          :: !Bool
+    , _fuRemoveParents             :: !(Maybe Text)
+    , _fuModifiedDateBehavior      :: !(Maybe FilesUpdateModifiedDateBehavior)
+    , _fuUseContentAsIndexableText :: !Bool
+    , _fuTimedTextTrackName        :: !(Maybe Text)
+    , _fuOCRLanguage               :: !(Maybe Text)
+    , _fuConvert                   :: !Bool
+    , _fuSetModifiedDate           :: !Bool
+    , _fuFileId                    :: !Text
+    , _fuAddParents                :: !(Maybe Text)
+    , _fuOCR                       :: !Bool
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FilesUpdate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fuNewRevision'
+--
+-- * 'fuPinned'
+--
+-- * 'fuTimedTextLanguage'
+--
+-- * 'fuPayload'
+--
+-- * 'fuUpdateViewedDate'
+--
+-- * 'fuRemoveParents'
+--
+-- * 'fuModifiedDateBehavior'
+--
+-- * 'fuUseContentAsIndexableText'
+--
+-- * 'fuTimedTextTrackName'
+--
+-- * 'fuOCRLanguage'
+--
+-- * 'fuConvert'
+--
+-- * 'fuSetModifiedDate'
+--
+-- * 'fuFileId'
+--
+-- * 'fuAddParents'
+--
+-- * 'fuOCR'
+filesUpdate
+    :: File -- ^ 'fuPayload'
+    -> Text -- ^ 'fuFileId'
+    -> FilesUpdate
+filesUpdate pFuPayload_ pFuFileId_ =
+    FilesUpdate
+    { _fuNewRevision = True
+    , _fuPinned = False
+    , _fuTimedTextLanguage = Nothing
+    , _fuPayload = pFuPayload_
+    , _fuUpdateViewedDate = True
+    , _fuRemoveParents = Nothing
+    , _fuModifiedDateBehavior = Nothing
+    , _fuUseContentAsIndexableText = False
+    , _fuTimedTextTrackName = Nothing
+    , _fuOCRLanguage = Nothing
+    , _fuConvert = False
+    , _fuSetModifiedDate = False
+    , _fuFileId = pFuFileId_
+    , _fuAddParents = Nothing
+    , _fuOCR = False
+    }
+
+-- | Whether a blob upload should create a new revision. If false, the blob
+-- data in the current head revision is replaced. If true or not set, a new
+-- blob is created as head revision, and previous unpinned revisions are
+-- preserved for a short period of time. Pinned revisions are stored
+-- indefinitely, using additional storage quota, up to a maximum of 200
+-- revisions. For details on how revisions are retained, see the Drive Help
+-- Center.
+fuNewRevision :: Lens' FilesUpdate Bool
+fuNewRevision
+  = lens _fuNewRevision
+      (\ s a -> s{_fuNewRevision = a})
+
+-- | Whether to pin the new revision. A file can have a maximum of 200 pinned
+-- revisions.
+fuPinned :: Lens' FilesUpdate Bool
+fuPinned = lens _fuPinned (\ s a -> s{_fuPinned = a})
+
+-- | The language of the timed text.
+fuTimedTextLanguage :: Lens' FilesUpdate (Maybe Text)
+fuTimedTextLanguage
+  = lens _fuTimedTextLanguage
+      (\ s a -> s{_fuTimedTextLanguage = a})
+
+-- | Multipart request metadata.
+fuPayload :: Lens' FilesUpdate File
+fuPayload
+  = lens _fuPayload (\ s a -> s{_fuPayload = a})
+
+-- | Whether to update the view date after successfully updating the file.
+fuUpdateViewedDate :: Lens' FilesUpdate Bool
+fuUpdateViewedDate
+  = lens _fuUpdateViewedDate
+      (\ s a -> s{_fuUpdateViewedDate = a})
+
+-- | Comma-separated list of parent IDs to remove.
+fuRemoveParents :: Lens' FilesUpdate (Maybe Text)
+fuRemoveParents
+  = lens _fuRemoveParents
+      (\ s a -> s{_fuRemoveParents = a})
+
+-- | Determines the behavior in which modifiedDate is updated. This overrides
+-- setModifiedDate.
+fuModifiedDateBehavior :: Lens' FilesUpdate (Maybe FilesUpdateModifiedDateBehavior)
+fuModifiedDateBehavior
+  = lens _fuModifiedDateBehavior
+      (\ s a -> s{_fuModifiedDateBehavior = a})
+
+-- | Whether to use the content as indexable text.
+fuUseContentAsIndexableText :: Lens' FilesUpdate Bool
+fuUseContentAsIndexableText
+  = lens _fuUseContentAsIndexableText
+      (\ s a -> s{_fuUseContentAsIndexableText = a})
+
+-- | The timed text track name.
+fuTimedTextTrackName :: Lens' FilesUpdate (Maybe Text)
+fuTimedTextTrackName
+  = lens _fuTimedTextTrackName
+      (\ s a -> s{_fuTimedTextTrackName = a})
+
+-- | If ocr is true, hints at the language to use. Valid values are BCP 47
+-- codes.
+fuOCRLanguage :: Lens' FilesUpdate (Maybe Text)
+fuOCRLanguage
+  = lens _fuOCRLanguage
+      (\ s a -> s{_fuOCRLanguage = a})
+
+-- | This parameter is deprecated and has no function.
+fuConvert :: Lens' FilesUpdate Bool
+fuConvert
+  = lens _fuConvert (\ s a -> s{_fuConvert = a})
+
+-- | Whether to set the modified date with the supplied modified date.
+fuSetModifiedDate :: Lens' FilesUpdate Bool
+fuSetModifiedDate
+  = lens _fuSetModifiedDate
+      (\ s a -> s{_fuSetModifiedDate = a})
+
+-- | The ID of the file to update.
+fuFileId :: Lens' FilesUpdate Text
+fuFileId = lens _fuFileId (\ s a -> s{_fuFileId = a})
+
+-- | Comma-separated list of parent IDs to add.
+fuAddParents :: Lens' FilesUpdate (Maybe Text)
+fuAddParents
+  = lens _fuAddParents (\ s a -> s{_fuAddParents = a})
+
+-- | Whether to attempt OCR on .jpg, .png, .gif, or .pdf uploads.
+fuOCR :: Lens' FilesUpdate Bool
+fuOCR = lens _fuOCR (\ s a -> s{_fuOCR = a})
+
+instance GoogleRequest FilesUpdate where
+        type Rs FilesUpdate = File
+        requestClient FilesUpdate{..}
+          = go _fuFileId (Just _fuNewRevision) (Just _fuPinned)
+              _fuTimedTextLanguage
+              (Just _fuUpdateViewedDate)
+              _fuRemoveParents
+              _fuModifiedDateBehavior
+              (Just _fuUseContentAsIndexableText)
+              _fuTimedTextTrackName
+              _fuOCRLanguage
+              (Just _fuConvert)
+              (Just _fuSetModifiedDate)
+              _fuAddParents
+              (Just _fuOCR)
+              (Just AltJSON)
+              _fuPayload
+              driveService
+          where go :<|> _
+                  = buildClient (Proxy :: Proxy FilesUpdateResource)
+                      mempty
+
+instance GoogleRequest (MediaUpload FilesUpdate)
+         where
+        type Rs (MediaUpload FilesUpdate) = File
+        requestClient (MediaUpload FilesUpdate{..} body)
+          = go _fuFileId (Just _fuNewRevision) (Just _fuPinned)
+              _fuTimedTextLanguage
+              (Just _fuUpdateViewedDate)
+              _fuRemoveParents
+              _fuModifiedDateBehavior
+              (Just _fuUseContentAsIndexableText)
+              _fuTimedTextTrackName
+              _fuOCRLanguage
+              (Just _fuConvert)
+              (Just _fuSetModifiedDate)
+              _fuAddParents
+              (Just _fuOCR)
+              (Just AltJSON)
+              (Just AltMedia)
+              _fuPayload
+              body
+              driveService
+          where _ :<|> go
+                  = buildClient (Proxy :: Proxy FilesUpdateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Drive/Files/Watch.hs b/gen/Network/Google/Resource/Drive/Files/Watch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/Files/Watch.hs
@@ -0,0 +1,175 @@
+{-# 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.Files.Watch
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Subscribe to changes on a file
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.files.watch@.
+module Network.Google.Resource.Drive.Files.Watch
+    (
+    -- * REST Resource
+      FilesWatchResource
+
+    -- * Creating a Request
+    , filesWatch
+    , FilesWatch
+
+    -- * Request Lenses
+    , fwPayload
+    , fwUpdateViewedDate
+    , fwProjection
+    , fwAcknowledgeAbuse
+    , fwFileId
+    , fwRevisionId
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.files.watch@ method which the
+-- 'FilesWatch' request conforms to.
+type FilesWatchResource =
+     "drive" :>
+       "v2" :>
+         "files" :>
+           Capture "fileId" Text :>
+             "watch" :>
+               QueryParam "updateViewedDate" Bool :>
+                 QueryParam "projection" FilesWatchProjection :>
+                   QueryParam "acknowledgeAbuse" Bool :>
+                     QueryParam "revisionId" Text :>
+                       QueryParam "alt" AltJSON :>
+                         ReqBody '[JSON] Channel :> Post '[JSON] Channel
+       :<|>
+       "drive" :>
+         "v2" :>
+           "files" :>
+             Capture "fileId" Text :>
+               "watch" :>
+                 QueryParam "updateViewedDate" Bool :>
+                   QueryParam "projection" FilesWatchProjection :>
+                     QueryParam "acknowledgeAbuse" Bool :>
+                       QueryParam "revisionId" Text :>
+                         QueryParam "alt" AltMedia :>
+                           Post '[OctetStream] Stream
+
+-- | Subscribe to changes on a file
+--
+-- /See:/ 'filesWatch' smart constructor.
+data FilesWatch = FilesWatch
+    { _fwPayload          :: !Channel
+    , _fwUpdateViewedDate :: !Bool
+    , _fwProjection       :: !(Maybe FilesWatchProjection)
+    , _fwAcknowledgeAbuse :: !Bool
+    , _fwFileId           :: !Text
+    , _fwRevisionId       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FilesWatch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fwPayload'
+--
+-- * 'fwUpdateViewedDate'
+--
+-- * 'fwProjection'
+--
+-- * 'fwAcknowledgeAbuse'
+--
+-- * 'fwFileId'
+--
+-- * 'fwRevisionId'
+filesWatch
+    :: Channel -- ^ 'fwPayload'
+    -> Text -- ^ 'fwFileId'
+    -> FilesWatch
+filesWatch pFwPayload_ pFwFileId_ =
+    FilesWatch
+    { _fwPayload = pFwPayload_
+    , _fwUpdateViewedDate = False
+    , _fwProjection = Nothing
+    , _fwAcknowledgeAbuse = False
+    , _fwFileId = pFwFileId_
+    , _fwRevisionId = Nothing
+    }
+
+-- | Multipart request metadata.
+fwPayload :: Lens' FilesWatch Channel
+fwPayload
+  = lens _fwPayload (\ s a -> s{_fwPayload = a})
+
+-- | Deprecated: Use files.update with modifiedDateBehavior=noChange,
+-- updateViewedDate=true and an empty request body.
+fwUpdateViewedDate :: Lens' FilesWatch Bool
+fwUpdateViewedDate
+  = lens _fwUpdateViewedDate
+      (\ s a -> s{_fwUpdateViewedDate = a})
+
+-- | This parameter is deprecated and has no function.
+fwProjection :: Lens' FilesWatch (Maybe FilesWatchProjection)
+fwProjection
+  = lens _fwProjection (\ s a -> s{_fwProjection = a})
+
+-- | Whether the user is acknowledging the risk of downloading known malware
+-- or other abusive files.
+fwAcknowledgeAbuse :: Lens' FilesWatch Bool
+fwAcknowledgeAbuse
+  = lens _fwAcknowledgeAbuse
+      (\ s a -> s{_fwAcknowledgeAbuse = a})
+
+-- | The ID for the file in question.
+fwFileId :: Lens' FilesWatch Text
+fwFileId = lens _fwFileId (\ s a -> s{_fwFileId = a})
+
+-- | Specifies the Revision ID that should be downloaded. Ignored unless
+-- alt=media is specified.
+fwRevisionId :: Lens' FilesWatch (Maybe Text)
+fwRevisionId
+  = lens _fwRevisionId (\ s a -> s{_fwRevisionId = a})
+
+instance GoogleRequest FilesWatch where
+        type Rs FilesWatch = Channel
+        requestClient FilesWatch{..}
+          = go _fwFileId (Just _fwUpdateViewedDate)
+              _fwProjection
+              (Just _fwAcknowledgeAbuse)
+              _fwRevisionId
+              (Just AltJSON)
+              _fwPayload
+              driveService
+          where go :<|> _
+                  = buildClient (Proxy :: Proxy FilesWatchResource)
+                      mempty
+
+instance GoogleRequest (MediaDownload FilesWatch)
+         where
+        type Rs (MediaDownload FilesWatch) = Stream
+        requestClient (MediaDownload FilesWatch{..})
+          = go _fwFileId (Just _fwUpdateViewedDate)
+              _fwProjection
+              (Just _fwAcknowledgeAbuse)
+              _fwRevisionId
+              (Just AltMedia)
+              driveService
+          where _ :<|> go
+                  = buildClient (Proxy :: Proxy FilesWatchResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Drive/Parents/Delete.hs b/gen/Network/Google/Resource/Drive/Parents/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/Parents/Delete.hs
@@ -0,0 +1,96 @@
+{-# 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.Parents.Delete
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Removes a parent from a file.
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.parents.delete@.
+module Network.Google.Resource.Drive.Parents.Delete
+    (
+    -- * REST Resource
+      ParentsDeleteResource
+
+    -- * Creating a Request
+    , parentsDelete
+    , ParentsDelete
+
+    -- * Request Lenses
+    , pddFileId
+    , pddParentId
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.parents.delete@ method which the
+-- 'ParentsDelete' request conforms to.
+type ParentsDeleteResource =
+     "drive" :>
+       "v2" :>
+         "files" :>
+           Capture "fileId" Text :>
+             "parents" :>
+               Capture "parentId" Text :>
+                 QueryParam "alt" AltJSON :> Delete '[JSON] ()
+
+-- | Removes a parent from a file.
+--
+-- /See:/ 'parentsDelete' smart constructor.
+data ParentsDelete = ParentsDelete
+    { _pddFileId   :: !Text
+    , _pddParentId :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ParentsDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pddFileId'
+--
+-- * 'pddParentId'
+parentsDelete
+    :: Text -- ^ 'pddFileId'
+    -> Text -- ^ 'pddParentId'
+    -> ParentsDelete
+parentsDelete pPddFileId_ pPddParentId_ =
+    ParentsDelete
+    { _pddFileId = pPddFileId_
+    , _pddParentId = pPddParentId_
+    }
+
+-- | The ID of the file.
+pddFileId :: Lens' ParentsDelete Text
+pddFileId
+  = lens _pddFileId (\ s a -> s{_pddFileId = a})
+
+-- | The ID of the parent.
+pddParentId :: Lens' ParentsDelete Text
+pddParentId
+  = lens _pddParentId (\ s a -> s{_pddParentId = a})
+
+instance GoogleRequest ParentsDelete where
+        type Rs ParentsDelete = ()
+        requestClient ParentsDelete{..}
+          = go _pddFileId _pddParentId (Just AltJSON)
+              driveService
+          where go
+                  = buildClient (Proxy :: Proxy ParentsDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Drive/Parents/Get.hs b/gen/Network/Google/Resource/Drive/Parents/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/Parents/Get.hs
@@ -0,0 +1,97 @@
+{-# 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.Parents.Get
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets a specific parent reference.
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.parents.get@.
+module Network.Google.Resource.Drive.Parents.Get
+    (
+    -- * REST Resource
+      ParentsGetResource
+
+    -- * Creating a Request
+    , parentsGet
+    , ParentsGet
+
+    -- * Request Lenses
+    , pg1FileId
+    , pg1ParentId
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.parents.get@ method which the
+-- 'ParentsGet' request conforms to.
+type ParentsGetResource =
+     "drive" :>
+       "v2" :>
+         "files" :>
+           Capture "fileId" Text :>
+             "parents" :>
+               Capture "parentId" Text :>
+                 QueryParam "alt" AltJSON :>
+                   Get '[JSON] ParentReference
+
+-- | Gets a specific parent reference.
+--
+-- /See:/ 'parentsGet' smart constructor.
+data ParentsGet = ParentsGet
+    { _pg1FileId   :: !Text
+    , _pg1ParentId :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ParentsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pg1FileId'
+--
+-- * 'pg1ParentId'
+parentsGet
+    :: Text -- ^ 'pg1FileId'
+    -> Text -- ^ 'pg1ParentId'
+    -> ParentsGet
+parentsGet pPg1FileId_ pPg1ParentId_ =
+    ParentsGet
+    { _pg1FileId = pPg1FileId_
+    , _pg1ParentId = pPg1ParentId_
+    }
+
+-- | The ID of the file.
+pg1FileId :: Lens' ParentsGet Text
+pg1FileId
+  = lens _pg1FileId (\ s a -> s{_pg1FileId = a})
+
+-- | The ID of the parent.
+pg1ParentId :: Lens' ParentsGet Text
+pg1ParentId
+  = lens _pg1ParentId (\ s a -> s{_pg1ParentId = a})
+
+instance GoogleRequest ParentsGet where
+        type Rs ParentsGet = ParentReference
+        requestClient ParentsGet{..}
+          = go _pg1FileId _pg1ParentId (Just AltJSON)
+              driveService
+          where go
+                  = buildClient (Proxy :: Proxy ParentsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Drive/Parents/Insert.hs b/gen/Network/Google/Resource/Drive/Parents/Insert.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/Parents/Insert.hs
@@ -0,0 +1,97 @@
+{-# 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.Parents.Insert
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Adds a parent folder for a file.
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.parents.insert@.
+module Network.Google.Resource.Drive.Parents.Insert
+    (
+    -- * REST Resource
+      ParentsInsertResource
+
+    -- * Creating a Request
+    , parentsInsert
+    , ParentsInsert
+
+    -- * Request Lenses
+    , paraPayload
+    , paraFileId
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.parents.insert@ method which the
+-- 'ParentsInsert' request conforms to.
+type ParentsInsertResource =
+     "drive" :>
+       "v2" :>
+         "files" :>
+           Capture "fileId" Text :>
+             "parents" :>
+               QueryParam "alt" AltJSON :>
+                 ReqBody '[JSON] ParentReference :>
+                   Post '[JSON] ParentReference
+
+-- | Adds a parent folder for a file.
+--
+-- /See:/ 'parentsInsert' smart constructor.
+data ParentsInsert = ParentsInsert
+    { _paraPayload :: !ParentReference
+    , _paraFileId  :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ParentsInsert' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'paraPayload'
+--
+-- * 'paraFileId'
+parentsInsert
+    :: ParentReference -- ^ 'paraPayload'
+    -> Text -- ^ 'paraFileId'
+    -> ParentsInsert
+parentsInsert pParaPayload_ pParaFileId_ =
+    ParentsInsert
+    { _paraPayload = pParaPayload_
+    , _paraFileId = pParaFileId_
+    }
+
+-- | Multipart request metadata.
+paraPayload :: Lens' ParentsInsert ParentReference
+paraPayload
+  = lens _paraPayload (\ s a -> s{_paraPayload = a})
+
+-- | The ID of the file.
+paraFileId :: Lens' ParentsInsert Text
+paraFileId
+  = lens _paraFileId (\ s a -> s{_paraFileId = a})
+
+instance GoogleRequest ParentsInsert where
+        type Rs ParentsInsert = ParentReference
+        requestClient ParentsInsert{..}
+          = go _paraFileId (Just AltJSON) _paraPayload
+              driveService
+          where go
+                  = buildClient (Proxy :: Proxy ParentsInsertResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Drive/Parents/List.hs b/gen/Network/Google/Resource/Drive/Parents/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/Parents/List.hs
@@ -0,0 +1,83 @@
+{-# 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.Parents.List
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists a file\'s parents.
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.parents.list@.
+module Network.Google.Resource.Drive.Parents.List
+    (
+    -- * REST Resource
+      ParentsListResource
+
+    -- * Creating a Request
+    , parentsList
+    , ParentsList
+
+    -- * Request Lenses
+    , parFileId
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.parents.list@ method which the
+-- 'ParentsList' request conforms to.
+type ParentsListResource =
+     "drive" :>
+       "v2" :>
+         "files" :>
+           Capture "fileId" Text :>
+             "parents" :>
+               QueryParam "alt" AltJSON :> Get '[JSON] ParentList
+
+-- | Lists a file\'s parents.
+--
+-- /See:/ 'parentsList' smart constructor.
+newtype ParentsList = ParentsList
+    { _parFileId :: Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ParentsList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'parFileId'
+parentsList
+    :: Text -- ^ 'parFileId'
+    -> ParentsList
+parentsList pParFileId_ =
+    ParentsList
+    { _parFileId = pParFileId_
+    }
+
+-- | The ID of the file.
+parFileId :: Lens' ParentsList Text
+parFileId
+  = lens _parFileId (\ s a -> s{_parFileId = a})
+
+instance GoogleRequest ParentsList where
+        type Rs ParentsList = ParentList
+        requestClient ParentsList{..}
+          = go _parFileId (Just AltJSON) driveService
+          where go
+                  = buildClient (Proxy :: Proxy ParentsListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Drive/Permissions/Delete.hs b/gen/Network/Google/Resource/Drive/Permissions/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/Permissions/Delete.hs
@@ -0,0 +1,97 @@
+{-# 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.Permissions.Delete
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a permission from a file.
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.permissions.delete@.
+module Network.Google.Resource.Drive.Permissions.Delete
+    (
+    -- * REST Resource
+      PermissionsDeleteResource
+
+    -- * Creating a Request
+    , permissionsDelete
+    , PermissionsDelete
+
+    -- * Request Lenses
+    , pFileId
+    , pPermissionId
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.permissions.delete@ method which the
+-- 'PermissionsDelete' request conforms to.
+type PermissionsDeleteResource =
+     "drive" :>
+       "v2" :>
+         "files" :>
+           Capture "fileId" Text :>
+             "permissions" :>
+               Capture "permissionId" Text :>
+                 QueryParam "alt" AltJSON :> Delete '[JSON] ()
+
+-- | Deletes a permission from a file.
+--
+-- /See:/ 'permissionsDelete' smart constructor.
+data PermissionsDelete = PermissionsDelete
+    { _pFileId       :: !Text
+    , _pPermissionId :: !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:
+--
+-- * 'pFileId'
+--
+-- * 'pPermissionId'
+permissionsDelete
+    :: Text -- ^ 'pFileId'
+    -> Text -- ^ 'pPermissionId'
+    -> PermissionsDelete
+permissionsDelete pPFileId_ pPPermissionId_ =
+    PermissionsDelete
+    { _pFileId = pPFileId_
+    , _pPermissionId = pPPermissionId_
+    }
+
+-- | The ID for the file.
+pFileId :: Lens' PermissionsDelete Text
+pFileId = lens _pFileId (\ s a -> s{_pFileId = a})
+
+-- | The ID for the permission.
+pPermissionId :: Lens' PermissionsDelete Text
+pPermissionId
+  = lens _pPermissionId
+      (\ s a -> s{_pPermissionId = a})
+
+instance GoogleRequest PermissionsDelete where
+        type Rs PermissionsDelete = ()
+        requestClient PermissionsDelete{..}
+          = go _pFileId _pPermissionId (Just AltJSON)
+              driveService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy PermissionsDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Drive/Permissions/Get.hs b/gen/Network/Google/Resource/Drive/Permissions/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/Permissions/Get.hs
@@ -0,0 +1,97 @@
+{-# 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.Permissions.Get
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets a permission by ID.
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.permissions.get@.
+module Network.Google.Resource.Drive.Permissions.Get
+    (
+    -- * REST Resource
+      PermissionsGetResource
+
+    -- * Creating a Request
+    , permissionsGet
+    , PermissionsGet
+
+    -- * Request Lenses
+    , pggFileId
+    , pggPermissionId
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.permissions.get@ method which the
+-- 'PermissionsGet' request conforms to.
+type PermissionsGetResource =
+     "drive" :>
+       "v2" :>
+         "files" :>
+           Capture "fileId" Text :>
+             "permissions" :>
+               Capture "permissionId" Text :>
+                 QueryParam "alt" AltJSON :> Get '[JSON] Permission
+
+-- | Gets a permission by ID.
+--
+-- /See:/ 'permissionsGet' smart constructor.
+data PermissionsGet = PermissionsGet
+    { _pggFileId       :: !Text
+    , _pggPermissionId :: !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:
+--
+-- * 'pggFileId'
+--
+-- * 'pggPermissionId'
+permissionsGet
+    :: Text -- ^ 'pggFileId'
+    -> Text -- ^ 'pggPermissionId'
+    -> PermissionsGet
+permissionsGet pPggFileId_ pPggPermissionId_ =
+    PermissionsGet
+    { _pggFileId = pPggFileId_
+    , _pggPermissionId = pPggPermissionId_
+    }
+
+-- | The ID for the file.
+pggFileId :: Lens' PermissionsGet Text
+pggFileId
+  = lens _pggFileId (\ s a -> s{_pggFileId = a})
+
+-- | The ID for the permission.
+pggPermissionId :: Lens' PermissionsGet Text
+pggPermissionId
+  = lens _pggPermissionId
+      (\ s a -> s{_pggPermissionId = a})
+
+instance GoogleRequest PermissionsGet where
+        type Rs PermissionsGet = Permission
+        requestClient PermissionsGet{..}
+          = go _pggFileId _pggPermissionId (Just AltJSON)
+              driveService
+          where go
+                  = buildClient (Proxy :: Proxy PermissionsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Drive/Permissions/GetIdForEmail.hs b/gen/Network/Google/Resource/Drive/Permissions/GetIdForEmail.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/Permissions/GetIdForEmail.hs
@@ -0,0 +1,83 @@
+{-# 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.Permissions.GetIdForEmail
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns the permission ID for an email address.
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.permissions.getIdForEmail@.
+module Network.Google.Resource.Drive.Permissions.GetIdForEmail
+    (
+    -- * REST Resource
+      PermissionsGetIdForEmailResource
+
+    -- * Creating a Request
+    , permissionsGetIdForEmail
+    , PermissionsGetIdForEmail
+
+    -- * Request Lenses
+    , pgifeEmail
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.permissions.getIdForEmail@ method which the
+-- 'PermissionsGetIdForEmail' request conforms to.
+type PermissionsGetIdForEmailResource =
+     "drive" :>
+       "v2" :>
+         "permissionIds" :>
+           Capture "email" Text :>
+             QueryParam "alt" AltJSON :> Get '[JSON] PermissionId
+
+-- | Returns the permission ID for an email address.
+--
+-- /See:/ 'permissionsGetIdForEmail' smart constructor.
+newtype PermissionsGetIdForEmail = PermissionsGetIdForEmail
+    { _pgifeEmail :: Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PermissionsGetIdForEmail' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pgifeEmail'
+permissionsGetIdForEmail
+    :: Text -- ^ 'pgifeEmail'
+    -> PermissionsGetIdForEmail
+permissionsGetIdForEmail pPgifeEmail_ =
+    PermissionsGetIdForEmail
+    { _pgifeEmail = pPgifeEmail_
+    }
+
+-- | The email address for which to return a permission ID
+pgifeEmail :: Lens' PermissionsGetIdForEmail Text
+pgifeEmail
+  = lens _pgifeEmail (\ s a -> s{_pgifeEmail = a})
+
+instance GoogleRequest PermissionsGetIdForEmail where
+        type Rs PermissionsGetIdForEmail = PermissionId
+        requestClient PermissionsGetIdForEmail{..}
+          = go _pgifeEmail (Just AltJSON) driveService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy PermissionsGetIdForEmailResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Drive/Permissions/Insert.hs b/gen/Network/Google/Resource/Drive/Permissions/Insert.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/Permissions/Insert.hs
@@ -0,0 +1,125 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Drive.Permissions.Insert
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Inserts a permission for a file.
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.permissions.insert@.
+module Network.Google.Resource.Drive.Permissions.Insert
+    (
+    -- * REST Resource
+      PermissionsInsertResource
+
+    -- * Creating a Request
+    , permissionsInsert
+    , PermissionsInsert
+
+    -- * Request Lenses
+    , piiPayload
+    , piiEmailMessage
+    , piiFileId
+    , piiSendNotificationEmails
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.permissions.insert@ method which the
+-- 'PermissionsInsert' request conforms to.
+type PermissionsInsertResource =
+     "drive" :>
+       "v2" :>
+         "files" :>
+           Capture "fileId" Text :>
+             "permissions" :>
+               QueryParam "emailMessage" Text :>
+                 QueryParam "sendNotificationEmails" Bool :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON] Permission :> Post '[JSON] Permission
+
+-- | Inserts a permission for a file.
+--
+-- /See:/ 'permissionsInsert' smart constructor.
+data PermissionsInsert = PermissionsInsert
+    { _piiPayload                :: !Permission
+    , _piiEmailMessage           :: !(Maybe Text)
+    , _piiFileId                 :: !Text
+    , _piiSendNotificationEmails :: !Bool
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PermissionsInsert' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'piiPayload'
+--
+-- * 'piiEmailMessage'
+--
+-- * 'piiFileId'
+--
+-- * 'piiSendNotificationEmails'
+permissionsInsert
+    :: Permission -- ^ 'piiPayload'
+    -> Text -- ^ 'piiFileId'
+    -> PermissionsInsert
+permissionsInsert pPiiPayload_ pPiiFileId_ =
+    PermissionsInsert
+    { _piiPayload = pPiiPayload_
+    , _piiEmailMessage = Nothing
+    , _piiFileId = pPiiFileId_
+    , _piiSendNotificationEmails = True
+    }
+
+-- | Multipart request metadata.
+piiPayload :: Lens' PermissionsInsert Permission
+piiPayload
+  = lens _piiPayload (\ s a -> s{_piiPayload = a})
+
+-- | A custom message to include in notification emails.
+piiEmailMessage :: Lens' PermissionsInsert (Maybe Text)
+piiEmailMessage
+  = lens _piiEmailMessage
+      (\ s a -> s{_piiEmailMessage = a})
+
+-- | The ID for the file.
+piiFileId :: Lens' PermissionsInsert Text
+piiFileId
+  = lens _piiFileId (\ s a -> s{_piiFileId = a})
+
+-- | Whether to send notification emails when sharing to users or groups.
+-- This parameter is ignored and an email is sent if the role is owner.
+piiSendNotificationEmails :: Lens' PermissionsInsert Bool
+piiSendNotificationEmails
+  = lens _piiSendNotificationEmails
+      (\ s a -> s{_piiSendNotificationEmails = a})
+
+instance GoogleRequest PermissionsInsert where
+        type Rs PermissionsInsert = Permission
+        requestClient PermissionsInsert{..}
+          = go _piiFileId _piiEmailMessage
+              (Just _piiSendNotificationEmails)
+              (Just AltJSON)
+              _piiPayload
+              driveService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy PermissionsInsertResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Drive/Permissions/List.hs b/gen/Network/Google/Resource/Drive/Permissions/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/Permissions/List.hs
@@ -0,0 +1,84 @@
+{-# 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.Permissions.List
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists a file\'s permissions.
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.permissions.list@.
+module Network.Google.Resource.Drive.Permissions.List
+    (
+    -- * REST Resource
+      PermissionsListResource
+
+    -- * Creating a Request
+    , permissionsList
+    , PermissionsList
+
+    -- * Request Lenses
+    , plFileId
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.permissions.list@ method which the
+-- 'PermissionsList' request conforms to.
+type PermissionsListResource =
+     "drive" :>
+       "v2" :>
+         "files" :>
+           Capture "fileId" Text :>
+             "permissions" :>
+               QueryParam "alt" AltJSON :>
+                 Get '[JSON] PermissionList
+
+-- | Lists a file\'s permissions.
+--
+-- /See:/ 'permissionsList' smart constructor.
+newtype PermissionsList = PermissionsList
+    { _plFileId :: Text
+    } 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:
+--
+-- * 'plFileId'
+permissionsList
+    :: Text -- ^ 'plFileId'
+    -> PermissionsList
+permissionsList pPlFileId_ =
+    PermissionsList
+    { _plFileId = pPlFileId_
+    }
+
+-- | The ID for the file.
+plFileId :: Lens' PermissionsList Text
+plFileId = lens _plFileId (\ s a -> s{_plFileId = a})
+
+instance GoogleRequest PermissionsList where
+        type Rs PermissionsList = PermissionList
+        requestClient PermissionsList{..}
+          = go _plFileId (Just AltJSON) driveService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy PermissionsListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Drive/Permissions/Patch.hs b/gen/Network/Google/Resource/Drive/Permissions/Patch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/Permissions/Patch.hs
@@ -0,0 +1,127 @@
+{-# 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.Permissions.Patch
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates a permission using patch semantics.
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.permissions.patch@.
+module Network.Google.Resource.Drive.Permissions.Patch
+    (
+    -- * REST Resource
+      PermissionsPatchResource
+
+    -- * Creating a Request
+    , permissionsPatch
+    , PermissionsPatch
+
+    -- * Request Lenses
+    , pppPayload
+    , pppTransferOwnership
+    , pppFileId
+    , pppPermissionId
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.permissions.patch@ method which the
+-- 'PermissionsPatch' request conforms to.
+type PermissionsPatchResource =
+     "drive" :>
+       "v2" :>
+         "files" :>
+           Capture "fileId" Text :>
+             "permissions" :>
+               Capture "permissionId" Text :>
+                 QueryParam "transferOwnership" Bool :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON] Permission :>
+                       Patch '[JSON] Permission
+
+-- | Updates a permission using patch semantics.
+--
+-- /See:/ 'permissionsPatch' smart constructor.
+data PermissionsPatch = PermissionsPatch
+    { _pppPayload           :: !Permission
+    , _pppTransferOwnership :: !Bool
+    , _pppFileId            :: !Text
+    , _pppPermissionId      :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PermissionsPatch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pppPayload'
+--
+-- * 'pppTransferOwnership'
+--
+-- * 'pppFileId'
+--
+-- * 'pppPermissionId'
+permissionsPatch
+    :: Permission -- ^ 'pppPayload'
+    -> Text -- ^ 'pppFileId'
+    -> Text -- ^ 'pppPermissionId'
+    -> PermissionsPatch
+permissionsPatch pPppPayload_ pPppFileId_ pPppPermissionId_ =
+    PermissionsPatch
+    { _pppPayload = pPppPayload_
+    , _pppTransferOwnership = False
+    , _pppFileId = pPppFileId_
+    , _pppPermissionId = pPppPermissionId_
+    }
+
+-- | Multipart request metadata.
+pppPayload :: Lens' PermissionsPatch Permission
+pppPayload
+  = lens _pppPayload (\ s a -> s{_pppPayload = a})
+
+-- | Whether changing a role to \'owner\' downgrades the current owners to
+-- writers. Does nothing if the specified role is not \'owner\'.
+pppTransferOwnership :: Lens' PermissionsPatch Bool
+pppTransferOwnership
+  = lens _pppTransferOwnership
+      (\ s a -> s{_pppTransferOwnership = a})
+
+-- | The ID for the file.
+pppFileId :: Lens' PermissionsPatch Text
+pppFileId
+  = lens _pppFileId (\ s a -> s{_pppFileId = a})
+
+-- | The ID for the permission.
+pppPermissionId :: Lens' PermissionsPatch Text
+pppPermissionId
+  = lens _pppPermissionId
+      (\ s a -> s{_pppPermissionId = a})
+
+instance GoogleRequest PermissionsPatch where
+        type Rs PermissionsPatch = Permission
+        requestClient PermissionsPatch{..}
+          = go _pppFileId _pppPermissionId
+              (Just _pppTransferOwnership)
+              (Just AltJSON)
+              _pppPayload
+              driveService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy PermissionsPatchResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Drive/Permissions/Update.hs b/gen/Network/Google/Resource/Drive/Permissions/Update.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/Permissions/Update.hs
@@ -0,0 +1,126 @@
+{-# 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.Permissions.Update
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates a permission.
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.permissions.update@.
+module Network.Google.Resource.Drive.Permissions.Update
+    (
+    -- * REST Resource
+      PermissionsUpdateResource
+
+    -- * Creating a Request
+    , permissionsUpdate
+    , PermissionsUpdate
+
+    -- * Request Lenses
+    , perPayload
+    , perTransferOwnership
+    , perFileId
+    , perPermissionId
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.permissions.update@ method which the
+-- 'PermissionsUpdate' request conforms to.
+type PermissionsUpdateResource =
+     "drive" :>
+       "v2" :>
+         "files" :>
+           Capture "fileId" Text :>
+             "permissions" :>
+               Capture "permissionId" Text :>
+                 QueryParam "transferOwnership" Bool :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON] Permission :> Put '[JSON] Permission
+
+-- | Updates a permission.
+--
+-- /See:/ 'permissionsUpdate' smart constructor.
+data PermissionsUpdate = PermissionsUpdate
+    { _perPayload           :: !Permission
+    , _perTransferOwnership :: !Bool
+    , _perFileId            :: !Text
+    , _perPermissionId      :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PermissionsUpdate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'perPayload'
+--
+-- * 'perTransferOwnership'
+--
+-- * 'perFileId'
+--
+-- * 'perPermissionId'
+permissionsUpdate
+    :: Permission -- ^ 'perPayload'
+    -> Text -- ^ 'perFileId'
+    -> Text -- ^ 'perPermissionId'
+    -> PermissionsUpdate
+permissionsUpdate pPerPayload_ pPerFileId_ pPerPermissionId_ =
+    PermissionsUpdate
+    { _perPayload = pPerPayload_
+    , _perTransferOwnership = False
+    , _perFileId = pPerFileId_
+    , _perPermissionId = pPerPermissionId_
+    }
+
+-- | Multipart request metadata.
+perPayload :: Lens' PermissionsUpdate Permission
+perPayload
+  = lens _perPayload (\ s a -> s{_perPayload = a})
+
+-- | Whether changing a role to \'owner\' downgrades the current owners to
+-- writers. Does nothing if the specified role is not \'owner\'.
+perTransferOwnership :: Lens' PermissionsUpdate Bool
+perTransferOwnership
+  = lens _perTransferOwnership
+      (\ s a -> s{_perTransferOwnership = a})
+
+-- | The ID for the file.
+perFileId :: Lens' PermissionsUpdate Text
+perFileId
+  = lens _perFileId (\ s a -> s{_perFileId = a})
+
+-- | The ID for the permission.
+perPermissionId :: Lens' PermissionsUpdate Text
+perPermissionId
+  = lens _perPermissionId
+      (\ s a -> s{_perPermissionId = a})
+
+instance GoogleRequest PermissionsUpdate where
+        type Rs PermissionsUpdate = Permission
+        requestClient PermissionsUpdate{..}
+          = go _perFileId _perPermissionId
+              (Just _perTransferOwnership)
+              (Just AltJSON)
+              _perPayload
+              driveService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy PermissionsUpdateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Drive/Properties/Delete.hs b/gen/Network/Google/Resource/Drive/Properties/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/Properties/Delete.hs
@@ -0,0 +1,109 @@
+{-# 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.Properties.Delete
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a property.
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.properties.delete@.
+module Network.Google.Resource.Drive.Properties.Delete
+    (
+    -- * REST Resource
+      PropertiesDeleteResource
+
+    -- * Creating a Request
+    , propertiesDelete
+    , PropertiesDelete
+
+    -- * Request Lenses
+    , pdPropertyKey
+    , pdVisibility
+    , pdFileId
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.properties.delete@ method which the
+-- 'PropertiesDelete' request conforms to.
+type PropertiesDeleteResource =
+     "drive" :>
+       "v2" :>
+         "files" :>
+           Capture "fileId" Text :>
+             "properties" :>
+               Capture "propertyKey" Text :>
+                 QueryParam "visibility" Text :>
+                   QueryParam "alt" AltJSON :> Delete '[JSON] ()
+
+-- | Deletes a property.
+--
+-- /See:/ 'propertiesDelete' smart constructor.
+data PropertiesDelete = PropertiesDelete
+    { _pdPropertyKey :: !Text
+    , _pdVisibility  :: !Text
+    , _pdFileId      :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PropertiesDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pdPropertyKey'
+--
+-- * 'pdVisibility'
+--
+-- * 'pdFileId'
+propertiesDelete
+    :: Text -- ^ 'pdPropertyKey'
+    -> Text -- ^ 'pdFileId'
+    -> PropertiesDelete
+propertiesDelete pPdPropertyKey_ pPdFileId_ =
+    PropertiesDelete
+    { _pdPropertyKey = pPdPropertyKey_
+    , _pdVisibility = "private"
+    , _pdFileId = pPdFileId_
+    }
+
+-- | The key of the property.
+pdPropertyKey :: Lens' PropertiesDelete Text
+pdPropertyKey
+  = lens _pdPropertyKey
+      (\ s a -> s{_pdPropertyKey = a})
+
+-- | The visibility of the property.
+pdVisibility :: Lens' PropertiesDelete Text
+pdVisibility
+  = lens _pdVisibility (\ s a -> s{_pdVisibility = a})
+
+-- | The ID of the file.
+pdFileId :: Lens' PropertiesDelete Text
+pdFileId = lens _pdFileId (\ s a -> s{_pdFileId = a})
+
+instance GoogleRequest PropertiesDelete where
+        type Rs PropertiesDelete = ()
+        requestClient PropertiesDelete{..}
+          = go _pdFileId _pdPropertyKey (Just _pdVisibility)
+              (Just AltJSON)
+              driveService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy PropertiesDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Drive/Properties/Get.hs b/gen/Network/Google/Resource/Drive/Properties/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/Properties/Get.hs
@@ -0,0 +1,108 @@
+{-# 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.Properties.Get
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets a property by its key.
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.properties.get@.
+module Network.Google.Resource.Drive.Properties.Get
+    (
+    -- * REST Resource
+      PropertiesGetResource
+
+    -- * Creating a Request
+    , propertiesGet
+    , PropertiesGet
+
+    -- * Request Lenses
+    , pgPropertyKey
+    , pgVisibility
+    , pgFileId
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.properties.get@ method which the
+-- 'PropertiesGet' request conforms to.
+type PropertiesGetResource =
+     "drive" :>
+       "v2" :>
+         "files" :>
+           Capture "fileId" Text :>
+             "properties" :>
+               Capture "propertyKey" Text :>
+                 QueryParam "visibility" Text :>
+                   QueryParam "alt" AltJSON :> Get '[JSON] Property
+
+-- | Gets a property by its key.
+--
+-- /See:/ 'propertiesGet' smart constructor.
+data PropertiesGet = PropertiesGet
+    { _pgPropertyKey :: !Text
+    , _pgVisibility  :: !Text
+    , _pgFileId      :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PropertiesGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pgPropertyKey'
+--
+-- * 'pgVisibility'
+--
+-- * 'pgFileId'
+propertiesGet
+    :: Text -- ^ 'pgPropertyKey'
+    -> Text -- ^ 'pgFileId'
+    -> PropertiesGet
+propertiesGet pPgPropertyKey_ pPgFileId_ =
+    PropertiesGet
+    { _pgPropertyKey = pPgPropertyKey_
+    , _pgVisibility = "private"
+    , _pgFileId = pPgFileId_
+    }
+
+-- | The key of the property.
+pgPropertyKey :: Lens' PropertiesGet Text
+pgPropertyKey
+  = lens _pgPropertyKey
+      (\ s a -> s{_pgPropertyKey = a})
+
+-- | The visibility of the property.
+pgVisibility :: Lens' PropertiesGet Text
+pgVisibility
+  = lens _pgVisibility (\ s a -> s{_pgVisibility = a})
+
+-- | The ID of the file.
+pgFileId :: Lens' PropertiesGet Text
+pgFileId = lens _pgFileId (\ s a -> s{_pgFileId = a})
+
+instance GoogleRequest PropertiesGet where
+        type Rs PropertiesGet = Property
+        requestClient PropertiesGet{..}
+          = go _pgFileId _pgPropertyKey (Just _pgVisibility)
+              (Just AltJSON)
+              driveService
+          where go
+                  = buildClient (Proxy :: Proxy PropertiesGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Drive/Properties/Insert.hs b/gen/Network/Google/Resource/Drive/Properties/Insert.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/Properties/Insert.hs
@@ -0,0 +1,95 @@
+{-# 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.Properties.Insert
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Adds a property to a file.
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.properties.insert@.
+module Network.Google.Resource.Drive.Properties.Insert
+    (
+    -- * REST Resource
+      PropertiesInsertResource
+
+    -- * Creating a Request
+    , propertiesInsert
+    , PropertiesInsert
+
+    -- * Request Lenses
+    , piPayload
+    , piFileId
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.properties.insert@ method which the
+-- 'PropertiesInsert' request conforms to.
+type PropertiesInsertResource =
+     "drive" :>
+       "v2" :>
+         "files" :>
+           Capture "fileId" Text :>
+             "properties" :>
+               QueryParam "alt" AltJSON :>
+                 ReqBody '[JSON] Property :> Post '[JSON] Property
+
+-- | Adds a property to a file.
+--
+-- /See:/ 'propertiesInsert' smart constructor.
+data PropertiesInsert = PropertiesInsert
+    { _piPayload :: !Property
+    , _piFileId  :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PropertiesInsert' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'piPayload'
+--
+-- * 'piFileId'
+propertiesInsert
+    :: Property -- ^ 'piPayload'
+    -> Text -- ^ 'piFileId'
+    -> PropertiesInsert
+propertiesInsert pPiPayload_ pPiFileId_ =
+    PropertiesInsert
+    { _piPayload = pPiPayload_
+    , _piFileId = pPiFileId_
+    }
+
+-- | Multipart request metadata.
+piPayload :: Lens' PropertiesInsert Property
+piPayload
+  = lens _piPayload (\ s a -> s{_piPayload = a})
+
+-- | The ID of the file.
+piFileId :: Lens' PropertiesInsert Text
+piFileId = lens _piFileId (\ s a -> s{_piFileId = a})
+
+instance GoogleRequest PropertiesInsert where
+        type Rs PropertiesInsert = Property
+        requestClient PropertiesInsert{..}
+          = go _piFileId (Just AltJSON) _piPayload driveService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy PropertiesInsertResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Drive/Properties/List.hs b/gen/Network/Google/Resource/Drive/Properties/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/Properties/List.hs
@@ -0,0 +1,83 @@
+{-# 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.Properties.List
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists a file\'s properties.
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.properties.list@.
+module Network.Google.Resource.Drive.Properties.List
+    (
+    -- * REST Resource
+      PropertiesListResource
+
+    -- * Creating a Request
+    , propertiesList
+    , PropertiesList
+
+    -- * Request Lenses
+    , proFileId
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.properties.list@ method which the
+-- 'PropertiesList' request conforms to.
+type PropertiesListResource =
+     "drive" :>
+       "v2" :>
+         "files" :>
+           Capture "fileId" Text :>
+             "properties" :>
+               QueryParam "alt" AltJSON :> Get '[JSON] PropertyList
+
+-- | Lists a file\'s properties.
+--
+-- /See:/ 'propertiesList' smart constructor.
+newtype PropertiesList = PropertiesList
+    { _proFileId :: Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PropertiesList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'proFileId'
+propertiesList
+    :: Text -- ^ 'proFileId'
+    -> PropertiesList
+propertiesList pProFileId_ =
+    PropertiesList
+    { _proFileId = pProFileId_
+    }
+
+-- | The ID of the file.
+proFileId :: Lens' PropertiesList Text
+proFileId
+  = lens _proFileId (\ s a -> s{_proFileId = a})
+
+instance GoogleRequest PropertiesList where
+        type Rs PropertiesList = PropertyList
+        requestClient PropertiesList{..}
+          = go _proFileId (Just AltJSON) driveService
+          where go
+                  = buildClient (Proxy :: Proxy PropertiesListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Drive/Properties/Patch.hs b/gen/Network/Google/Resource/Drive/Properties/Patch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/Properties/Patch.hs
@@ -0,0 +1,122 @@
+{-# 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.Properties.Patch
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates a property. This method supports patch semantics.
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.properties.patch@.
+module Network.Google.Resource.Drive.Properties.Patch
+    (
+    -- * REST Resource
+      PropertiesPatchResource
+
+    -- * Creating a Request
+    , propertiesPatch
+    , PropertiesPatch
+
+    -- * Request Lenses
+    , ppPropertyKey
+    , ppVisibility
+    , ppPayload
+    , ppFileId
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.properties.patch@ method which the
+-- 'PropertiesPatch' request conforms to.
+type PropertiesPatchResource =
+     "drive" :>
+       "v2" :>
+         "files" :>
+           Capture "fileId" Text :>
+             "properties" :>
+               Capture "propertyKey" Text :>
+                 QueryParam "visibility" Text :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON] Property :> Patch '[JSON] Property
+
+-- | Updates a property. This method supports patch semantics.
+--
+-- /See:/ 'propertiesPatch' smart constructor.
+data PropertiesPatch = PropertiesPatch
+    { _ppPropertyKey :: !Text
+    , _ppVisibility  :: !Text
+    , _ppPayload     :: !Property
+    , _ppFileId      :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PropertiesPatch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ppPropertyKey'
+--
+-- * 'ppVisibility'
+--
+-- * 'ppPayload'
+--
+-- * 'ppFileId'
+propertiesPatch
+    :: Text -- ^ 'ppPropertyKey'
+    -> Property -- ^ 'ppPayload'
+    -> Text -- ^ 'ppFileId'
+    -> PropertiesPatch
+propertiesPatch pPpPropertyKey_ pPpPayload_ pPpFileId_ =
+    PropertiesPatch
+    { _ppPropertyKey = pPpPropertyKey_
+    , _ppVisibility = "private"
+    , _ppPayload = pPpPayload_
+    , _ppFileId = pPpFileId_
+    }
+
+-- | The key of the property.
+ppPropertyKey :: Lens' PropertiesPatch Text
+ppPropertyKey
+  = lens _ppPropertyKey
+      (\ s a -> s{_ppPropertyKey = a})
+
+-- | The visibility of the property.
+ppVisibility :: Lens' PropertiesPatch Text
+ppVisibility
+  = lens _ppVisibility (\ s a -> s{_ppVisibility = a})
+
+-- | Multipart request metadata.
+ppPayload :: Lens' PropertiesPatch Property
+ppPayload
+  = lens _ppPayload (\ s a -> s{_ppPayload = a})
+
+-- | The ID of the file.
+ppFileId :: Lens' PropertiesPatch Text
+ppFileId = lens _ppFileId (\ s a -> s{_ppFileId = a})
+
+instance GoogleRequest PropertiesPatch where
+        type Rs PropertiesPatch = Property
+        requestClient PropertiesPatch{..}
+          = go _ppFileId _ppPropertyKey (Just _ppVisibility)
+              (Just AltJSON)
+              _ppPayload
+              driveService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy PropertiesPatchResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Drive/Properties/Update.hs b/gen/Network/Google/Resource/Drive/Properties/Update.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/Properties/Update.hs
@@ -0,0 +1,122 @@
+{-# 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.Properties.Update
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates a property.
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.properties.update@.
+module Network.Google.Resource.Drive.Properties.Update
+    (
+    -- * REST Resource
+      PropertiesUpdateResource
+
+    -- * Creating a Request
+    , propertiesUpdate
+    , PropertiesUpdate
+
+    -- * Request Lenses
+    , puPropertyKey
+    , puVisibility
+    , puPayload
+    , puFileId
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.properties.update@ method which the
+-- 'PropertiesUpdate' request conforms to.
+type PropertiesUpdateResource =
+     "drive" :>
+       "v2" :>
+         "files" :>
+           Capture "fileId" Text :>
+             "properties" :>
+               Capture "propertyKey" Text :>
+                 QueryParam "visibility" Text :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON] Property :> Put '[JSON] Property
+
+-- | Updates a property.
+--
+-- /See:/ 'propertiesUpdate' smart constructor.
+data PropertiesUpdate = PropertiesUpdate
+    { _puPropertyKey :: !Text
+    , _puVisibility  :: !Text
+    , _puPayload     :: !Property
+    , _puFileId      :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PropertiesUpdate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'puPropertyKey'
+--
+-- * 'puVisibility'
+--
+-- * 'puPayload'
+--
+-- * 'puFileId'
+propertiesUpdate
+    :: Text -- ^ 'puPropertyKey'
+    -> Property -- ^ 'puPayload'
+    -> Text -- ^ 'puFileId'
+    -> PropertiesUpdate
+propertiesUpdate pPuPropertyKey_ pPuPayload_ pPuFileId_ =
+    PropertiesUpdate
+    { _puPropertyKey = pPuPropertyKey_
+    , _puVisibility = "private"
+    , _puPayload = pPuPayload_
+    , _puFileId = pPuFileId_
+    }
+
+-- | The key of the property.
+puPropertyKey :: Lens' PropertiesUpdate Text
+puPropertyKey
+  = lens _puPropertyKey
+      (\ s a -> s{_puPropertyKey = a})
+
+-- | The visibility of the property.
+puVisibility :: Lens' PropertiesUpdate Text
+puVisibility
+  = lens _puVisibility (\ s a -> s{_puVisibility = a})
+
+-- | Multipart request metadata.
+puPayload :: Lens' PropertiesUpdate Property
+puPayload
+  = lens _puPayload (\ s a -> s{_puPayload = a})
+
+-- | The ID of the file.
+puFileId :: Lens' PropertiesUpdate Text
+puFileId = lens _puFileId (\ s a -> s{_puFileId = a})
+
+instance GoogleRequest PropertiesUpdate where
+        type Rs PropertiesUpdate = Property
+        requestClient PropertiesUpdate{..}
+          = go _puFileId _puPropertyKey (Just _puVisibility)
+              (Just AltJSON)
+              _puPayload
+              driveService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy PropertiesUpdateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Drive/Realtime/Get.hs b/gen/Network/Google/Resource/Drive/Realtime/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/Realtime/Get.hs
@@ -0,0 +1,119 @@
+{-# 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.Realtime.Get
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Exports the contents of the Realtime API data model associated with this
+-- file as JSON.
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.realtime.get@.
+module Network.Google.Resource.Drive.Realtime.Get
+    (
+    -- * REST Resource
+      RealtimeGetResource
+
+    -- * Creating a Request
+    , realtimeGet
+    , RealtimeGet
+
+    -- * Request Lenses
+    , rrFileId
+    , rrRevision
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.realtime.get@ method which the
+-- 'RealtimeGet' request conforms to.
+type RealtimeGetResource =
+     "drive" :>
+       "v2" :>
+         "files" :>
+           Capture "fileId" Text :>
+             "realtime" :>
+               QueryParam "revision" (Textual Int32) :>
+                 QueryParam "alt" AltJSON :> Get '[JSON] ()
+       :<|>
+       "drive" :>
+         "v2" :>
+           "files" :>
+             Capture "fileId" Text :>
+               "realtime" :>
+                 QueryParam "revision" (Textual Int32) :>
+                   QueryParam "alt" AltMedia :>
+                     Get '[OctetStream] Stream
+
+-- | Exports the contents of the Realtime API data model associated with this
+-- file as JSON.
+--
+-- /See:/ 'realtimeGet' smart constructor.
+data RealtimeGet = RealtimeGet
+    { _rrFileId   :: !Text
+    , _rrRevision :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RealtimeGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rrFileId'
+--
+-- * 'rrRevision'
+realtimeGet
+    :: Text -- ^ 'rrFileId'
+    -> RealtimeGet
+realtimeGet pRrFileId_ =
+    RealtimeGet
+    { _rrFileId = pRrFileId_
+    , _rrRevision = Nothing
+    }
+
+-- | The ID of the file that the Realtime API data model is associated with.
+rrFileId :: Lens' RealtimeGet Text
+rrFileId = lens _rrFileId (\ s a -> s{_rrFileId = a})
+
+-- | The revision of the Realtime API data model to export. Revisions start
+-- at 1 (the initial empty data model) and are incremented with each
+-- change. If this parameter is excluded, the most recent data model will
+-- be returned.
+rrRevision :: Lens' RealtimeGet (Maybe Int32)
+rrRevision
+  = lens _rrRevision (\ s a -> s{_rrRevision = a}) .
+      mapping _Coerce
+
+instance GoogleRequest RealtimeGet where
+        type Rs RealtimeGet = ()
+        requestClient RealtimeGet{..}
+          = go _rrFileId _rrRevision (Just AltJSON)
+              driveService
+          where go :<|> _
+                  = buildClient (Proxy :: Proxy RealtimeGetResource)
+                      mempty
+
+instance GoogleRequest (MediaDownload RealtimeGet)
+         where
+        type Rs (MediaDownload RealtimeGet) = Stream
+        requestClient (MediaDownload RealtimeGet{..})
+          = go _rrFileId _rrRevision (Just AltMedia)
+              driveService
+          where _ :<|> go
+                  = buildClient (Proxy :: Proxy RealtimeGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Drive/Realtime/Update.hs b/gen/Network/Google/Resource/Drive/Realtime/Update.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/Realtime/Update.hs
@@ -0,0 +1,125 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Drive.Realtime.Update
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Overwrites the Realtime API data model associated with this file with
+-- the provided JSON data model.
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.realtime.update@.
+module Network.Google.Resource.Drive.Realtime.Update
+    (
+    -- * REST Resource
+      RealtimeUpdateResource
+
+    -- * Creating a Request
+    , realtimeUpdate
+    , RealtimeUpdate
+
+    -- * Request Lenses
+    , reaBaseRevision
+    , reaFileId
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.realtime.update@ method which the
+-- 'RealtimeUpdate' request conforms to.
+type RealtimeUpdateResource =
+     "drive" :>
+       "v2" :>
+         "files" :>
+           Capture "fileId" Text :>
+             "realtime" :>
+               QueryParam "baseRevision" Text :>
+                 QueryParam "alt" AltJSON :> Put '[JSON] ()
+       :<|>
+       "upload" :>
+         "drive" :>
+           "v2" :>
+             "files" :>
+               Capture "fileId" Text :>
+                 "realtime" :>
+                   QueryParam "baseRevision" Text :>
+                     QueryParam "alt" AltJSON :>
+                       QueryParam "uploadType" AltMedia :>
+                         ReqBody '[OctetStream] RequestBody :> Put '[JSON] ()
+
+-- | Overwrites the Realtime API data model associated with this file with
+-- the provided JSON data model.
+--
+-- /See:/ 'realtimeUpdate' smart constructor.
+data RealtimeUpdate = RealtimeUpdate
+    { _reaBaseRevision :: !(Maybe Text)
+    , _reaFileId       :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RealtimeUpdate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'reaBaseRevision'
+--
+-- * 'reaFileId'
+realtimeUpdate
+    :: Text -- ^ 'reaFileId'
+    -> RealtimeUpdate
+realtimeUpdate pReaFileId_ =
+    RealtimeUpdate
+    { _reaBaseRevision = Nothing
+    , _reaFileId = pReaFileId_
+    }
+
+-- | The revision of the model to diff the uploaded model against. If set,
+-- the uploaded model is diffed against the provided revision and those
+-- differences are merged with any changes made to the model after the
+-- provided revision. If not set, the uploaded model replaces the current
+-- model on the server.
+reaBaseRevision :: Lens' RealtimeUpdate (Maybe Text)
+reaBaseRevision
+  = lens _reaBaseRevision
+      (\ s a -> s{_reaBaseRevision = a})
+
+-- | The ID of the file that the Realtime API data model is associated with.
+reaFileId :: Lens' RealtimeUpdate Text
+reaFileId
+  = lens _reaFileId (\ s a -> s{_reaFileId = a})
+
+instance GoogleRequest RealtimeUpdate where
+        type Rs RealtimeUpdate = ()
+        requestClient RealtimeUpdate{..}
+          = go _reaFileId _reaBaseRevision (Just AltJSON)
+              driveService
+          where go :<|> _
+                  = buildClient (Proxy :: Proxy RealtimeUpdateResource)
+                      mempty
+
+instance GoogleRequest (MediaUpload RealtimeUpdate)
+         where
+        type Rs (MediaUpload RealtimeUpdate) = ()
+        requestClient (MediaUpload RealtimeUpdate{..} body)
+          = go _reaFileId _reaBaseRevision (Just AltJSON)
+              (Just AltMedia)
+              body
+              driveService
+          where _ :<|> go
+                  = buildClient (Proxy :: Proxy RealtimeUpdateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Drive/Replies/Delete.hs b/gen/Network/Google/Resource/Drive/Replies/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/Replies/Delete.hs
@@ -0,0 +1,108 @@
+{-# 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.Replies.Delete
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a reply.
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.replies.delete@.
+module Network.Google.Resource.Drive.Replies.Delete
+    (
+    -- * REST Resource
+      RepliesDeleteResource
+
+    -- * Creating a Request
+    , repliesDelete
+    , RepliesDelete
+
+    -- * Request Lenses
+    , rdReplyId
+    , rdFileId
+    , rdCommentId
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.replies.delete@ method which the
+-- 'RepliesDelete' request conforms to.
+type RepliesDeleteResource =
+     "drive" :>
+       "v2" :>
+         "files" :>
+           Capture "fileId" Text :>
+             "comments" :>
+               Capture "commentId" Text :>
+                 "replies" :>
+                   Capture "replyId" Text :>
+                     QueryParam "alt" AltJSON :> Delete '[JSON] ()
+
+-- | Deletes a reply.
+--
+-- /See:/ 'repliesDelete' smart constructor.
+data RepliesDelete = RepliesDelete
+    { _rdReplyId   :: !Text
+    , _rdFileId    :: !Text
+    , _rdCommentId :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RepliesDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rdReplyId'
+--
+-- * 'rdFileId'
+--
+-- * 'rdCommentId'
+repliesDelete
+    :: Text -- ^ 'rdReplyId'
+    -> Text -- ^ 'rdFileId'
+    -> Text -- ^ 'rdCommentId'
+    -> RepliesDelete
+repliesDelete pRdReplyId_ pRdFileId_ pRdCommentId_ =
+    RepliesDelete
+    { _rdReplyId = pRdReplyId_
+    , _rdFileId = pRdFileId_
+    , _rdCommentId = pRdCommentId_
+    }
+
+-- | The ID of the reply.
+rdReplyId :: Lens' RepliesDelete Text
+rdReplyId
+  = lens _rdReplyId (\ s a -> s{_rdReplyId = a})
+
+-- | The ID of the file.
+rdFileId :: Lens' RepliesDelete Text
+rdFileId = lens _rdFileId (\ s a -> s{_rdFileId = a})
+
+-- | The ID of the comment.
+rdCommentId :: Lens' RepliesDelete Text
+rdCommentId
+  = lens _rdCommentId (\ s a -> s{_rdCommentId = a})
+
+instance GoogleRequest RepliesDelete where
+        type Rs RepliesDelete = ()
+        requestClient RepliesDelete{..}
+          = go _rdFileId _rdCommentId _rdReplyId (Just AltJSON)
+              driveService
+          where go
+                  = buildClient (Proxy :: Proxy RepliesDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Drive/Replies/Get.hs b/gen/Network/Google/Resource/Drive/Replies/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/Replies/Get.hs
@@ -0,0 +1,122 @@
+{-# 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.Replies.Get
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets a reply.
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.replies.get@.
+module Network.Google.Resource.Drive.Replies.Get
+    (
+    -- * REST Resource
+      RepliesGetResource
+
+    -- * Creating a Request
+    , repliesGet
+    , RepliesGet
+
+    -- * Request Lenses
+    , rgReplyId
+    , rgFileId
+    , rgCommentId
+    , rgIncludeDeleted
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.replies.get@ method which the
+-- 'RepliesGet' request conforms to.
+type RepliesGetResource =
+     "drive" :>
+       "v2" :>
+         "files" :>
+           Capture "fileId" Text :>
+             "comments" :>
+               Capture "commentId" Text :>
+                 "replies" :>
+                   Capture "replyId" Text :>
+                     QueryParam "includeDeleted" Bool :>
+                       QueryParam "alt" AltJSON :> Get '[JSON] CommentReply
+
+-- | Gets a reply.
+--
+-- /See:/ 'repliesGet' smart constructor.
+data RepliesGet = RepliesGet
+    { _rgReplyId        :: !Text
+    , _rgFileId         :: !Text
+    , _rgCommentId      :: !Text
+    , _rgIncludeDeleted :: !Bool
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RepliesGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rgReplyId'
+--
+-- * 'rgFileId'
+--
+-- * 'rgCommentId'
+--
+-- * 'rgIncludeDeleted'
+repliesGet
+    :: Text -- ^ 'rgReplyId'
+    -> Text -- ^ 'rgFileId'
+    -> Text -- ^ 'rgCommentId'
+    -> RepliesGet
+repliesGet pRgReplyId_ pRgFileId_ pRgCommentId_ =
+    RepliesGet
+    { _rgReplyId = pRgReplyId_
+    , _rgFileId = pRgFileId_
+    , _rgCommentId = pRgCommentId_
+    , _rgIncludeDeleted = False
+    }
+
+-- | The ID of the reply.
+rgReplyId :: Lens' RepliesGet Text
+rgReplyId
+  = lens _rgReplyId (\ s a -> s{_rgReplyId = a})
+
+-- | The ID of the file.
+rgFileId :: Lens' RepliesGet Text
+rgFileId = lens _rgFileId (\ s a -> s{_rgFileId = a})
+
+-- | The ID of the comment.
+rgCommentId :: Lens' RepliesGet Text
+rgCommentId
+  = lens _rgCommentId (\ s a -> s{_rgCommentId = a})
+
+-- | If set, this will succeed when retrieving a deleted reply.
+rgIncludeDeleted :: Lens' RepliesGet Bool
+rgIncludeDeleted
+  = lens _rgIncludeDeleted
+      (\ s a -> s{_rgIncludeDeleted = a})
+
+instance GoogleRequest RepliesGet where
+        type Rs RepliesGet = CommentReply
+        requestClient RepliesGet{..}
+          = go _rgFileId _rgCommentId _rgReplyId
+              (Just _rgIncludeDeleted)
+              (Just AltJSON)
+              driveService
+          where go
+                  = buildClient (Proxy :: Proxy RepliesGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Drive/Replies/Insert.hs b/gen/Network/Google/Resource/Drive/Replies/Insert.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/Replies/Insert.hs
@@ -0,0 +1,109 @@
+{-# 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.Replies.Insert
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a new reply to the given comment.
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.replies.insert@.
+module Network.Google.Resource.Drive.Replies.Insert
+    (
+    -- * REST Resource
+      RepliesInsertResource
+
+    -- * Creating a Request
+    , repliesInsert
+    , RepliesInsert
+
+    -- * Request Lenses
+    , riPayload
+    , riFileId
+    , riCommentId
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.replies.insert@ method which the
+-- 'RepliesInsert' request conforms to.
+type RepliesInsertResource =
+     "drive" :>
+       "v2" :>
+         "files" :>
+           Capture "fileId" Text :>
+             "comments" :>
+               Capture "commentId" Text :>
+                 "replies" :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON] CommentReply :>
+                       Post '[JSON] CommentReply
+
+-- | Creates a new reply to the given comment.
+--
+-- /See:/ 'repliesInsert' smart constructor.
+data RepliesInsert = RepliesInsert
+    { _riPayload   :: !CommentReply
+    , _riFileId    :: !Text
+    , _riCommentId :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RepliesInsert' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'riPayload'
+--
+-- * 'riFileId'
+--
+-- * 'riCommentId'
+repliesInsert
+    :: CommentReply -- ^ 'riPayload'
+    -> Text -- ^ 'riFileId'
+    -> Text -- ^ 'riCommentId'
+    -> RepliesInsert
+repliesInsert pRiPayload_ pRiFileId_ pRiCommentId_ =
+    RepliesInsert
+    { _riPayload = pRiPayload_
+    , _riFileId = pRiFileId_
+    , _riCommentId = pRiCommentId_
+    }
+
+-- | Multipart request metadata.
+riPayload :: Lens' RepliesInsert CommentReply
+riPayload
+  = lens _riPayload (\ s a -> s{_riPayload = a})
+
+-- | The ID of the file.
+riFileId :: Lens' RepliesInsert Text
+riFileId = lens _riFileId (\ s a -> s{_riFileId = a})
+
+-- | The ID of the comment.
+riCommentId :: Lens' RepliesInsert Text
+riCommentId
+  = lens _riCommentId (\ s a -> s{_riCommentId = a})
+
+instance GoogleRequest RepliesInsert where
+        type Rs RepliesInsert = CommentReply
+        requestClient RepliesInsert{..}
+          = go _riFileId _riCommentId (Just AltJSON) _riPayload
+              driveService
+          where go
+                  = buildClient (Proxy :: Proxy RepliesInsertResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Drive/Replies/List.hs b/gen/Network/Google/Resource/Drive/Replies/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/Replies/List.hs
@@ -0,0 +1,139 @@
+{-# 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.Replies.List
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists all of the replies to a comment.
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.replies.list@.
+module Network.Google.Resource.Drive.Replies.List
+    (
+    -- * REST Resource
+      RepliesListResource
+
+    -- * Creating a Request
+    , repliesList
+    , RepliesList
+
+    -- * Request Lenses
+    , rlPageToken
+    , rlFileId
+    , rlCommentId
+    , rlMaxResults
+    , rlIncludeDeleted
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.replies.list@ method which the
+-- 'RepliesList' request conforms to.
+type RepliesListResource =
+     "drive" :>
+       "v2" :>
+         "files" :>
+           Capture "fileId" Text :>
+             "comments" :>
+               Capture "commentId" Text :>
+                 "replies" :>
+                   QueryParam "pageToken" Text :>
+                     QueryParam "maxResults" (Textual Int32) :>
+                       QueryParam "includeDeleted" Bool :>
+                         QueryParam "alt" AltJSON :>
+                           Get '[JSON] CommentReplyList
+
+-- | Lists all of the replies to a comment.
+--
+-- /See:/ 'repliesList' smart constructor.
+data RepliesList = RepliesList
+    { _rlPageToken      :: !(Maybe Text)
+    , _rlFileId         :: !Text
+    , _rlCommentId      :: !Text
+    , _rlMaxResults     :: !(Textual Int32)
+    , _rlIncludeDeleted :: !Bool
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RepliesList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rlPageToken'
+--
+-- * 'rlFileId'
+--
+-- * 'rlCommentId'
+--
+-- * 'rlMaxResults'
+--
+-- * 'rlIncludeDeleted'
+repliesList
+    :: Text -- ^ 'rlFileId'
+    -> Text -- ^ 'rlCommentId'
+    -> RepliesList
+repliesList pRlFileId_ pRlCommentId_ =
+    RepliesList
+    { _rlPageToken = Nothing
+    , _rlFileId = pRlFileId_
+    , _rlCommentId = pRlCommentId_
+    , _rlMaxResults = 20
+    , _rlIncludeDeleted = False
+    }
+
+-- | The continuation token, used to page through large result sets. To get
+-- the next page of results, set this parameter to the value of
+-- \"nextPageToken\" from the previous response.
+rlPageToken :: Lens' RepliesList (Maybe Text)
+rlPageToken
+  = lens _rlPageToken (\ s a -> s{_rlPageToken = a})
+
+-- | The ID of the file.
+rlFileId :: Lens' RepliesList Text
+rlFileId = lens _rlFileId (\ s a -> s{_rlFileId = a})
+
+-- | The ID of the comment.
+rlCommentId :: Lens' RepliesList Text
+rlCommentId
+  = lens _rlCommentId (\ s a -> s{_rlCommentId = a})
+
+-- | The maximum number of replies to include in the response, used for
+-- paging.
+rlMaxResults :: Lens' RepliesList Int32
+rlMaxResults
+  = lens _rlMaxResults (\ s a -> s{_rlMaxResults = a})
+      . _Coerce
+
+-- | If set, all replies, including deleted replies (with content stripped)
+-- will be returned.
+rlIncludeDeleted :: Lens' RepliesList Bool
+rlIncludeDeleted
+  = lens _rlIncludeDeleted
+      (\ s a -> s{_rlIncludeDeleted = a})
+
+instance GoogleRequest RepliesList where
+        type Rs RepliesList = CommentReplyList
+        requestClient RepliesList{..}
+          = go _rlFileId _rlCommentId _rlPageToken
+              (Just _rlMaxResults)
+              (Just _rlIncludeDeleted)
+              (Just AltJSON)
+              driveService
+          where go
+                  = buildClient (Proxy :: Proxy RepliesListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Drive/Replies/Patch.hs b/gen/Network/Google/Resource/Drive/Replies/Patch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/Replies/Patch.hs
@@ -0,0 +1,122 @@
+{-# 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.Replies.Patch
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates an existing reply. This method supports patch semantics.
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.replies.patch@.
+module Network.Google.Resource.Drive.Replies.Patch
+    (
+    -- * REST Resource
+      RepliesPatchResource
+
+    -- * Creating a Request
+    , repliesPatch
+    , RepliesPatch
+
+    -- * Request Lenses
+    , rpPayload
+    , rpReplyId
+    , rpFileId
+    , rpCommentId
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.replies.patch@ method which the
+-- 'RepliesPatch' request conforms to.
+type RepliesPatchResource =
+     "drive" :>
+       "v2" :>
+         "files" :>
+           Capture "fileId" Text :>
+             "comments" :>
+               Capture "commentId" Text :>
+                 "replies" :>
+                   Capture "replyId" Text :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON] CommentReply :>
+                         Patch '[JSON] CommentReply
+
+-- | Updates an existing reply. This method supports patch semantics.
+--
+-- /See:/ 'repliesPatch' smart constructor.
+data RepliesPatch = RepliesPatch
+    { _rpPayload   :: !CommentReply
+    , _rpReplyId   :: !Text
+    , _rpFileId    :: !Text
+    , _rpCommentId :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RepliesPatch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rpPayload'
+--
+-- * 'rpReplyId'
+--
+-- * 'rpFileId'
+--
+-- * 'rpCommentId'
+repliesPatch
+    :: CommentReply -- ^ 'rpPayload'
+    -> Text -- ^ 'rpReplyId'
+    -> Text -- ^ 'rpFileId'
+    -> Text -- ^ 'rpCommentId'
+    -> RepliesPatch
+repliesPatch pRpPayload_ pRpReplyId_ pRpFileId_ pRpCommentId_ =
+    RepliesPatch
+    { _rpPayload = pRpPayload_
+    , _rpReplyId = pRpReplyId_
+    , _rpFileId = pRpFileId_
+    , _rpCommentId = pRpCommentId_
+    }
+
+-- | Multipart request metadata.
+rpPayload :: Lens' RepliesPatch CommentReply
+rpPayload
+  = lens _rpPayload (\ s a -> s{_rpPayload = a})
+
+-- | The ID of the reply.
+rpReplyId :: Lens' RepliesPatch Text
+rpReplyId
+  = lens _rpReplyId (\ s a -> s{_rpReplyId = a})
+
+-- | The ID of the file.
+rpFileId :: Lens' RepliesPatch Text
+rpFileId = lens _rpFileId (\ s a -> s{_rpFileId = a})
+
+-- | The ID of the comment.
+rpCommentId :: Lens' RepliesPatch Text
+rpCommentId
+  = lens _rpCommentId (\ s a -> s{_rpCommentId = a})
+
+instance GoogleRequest RepliesPatch where
+        type Rs RepliesPatch = CommentReply
+        requestClient RepliesPatch{..}
+          = go _rpFileId _rpCommentId _rpReplyId (Just AltJSON)
+              _rpPayload
+              driveService
+          where go
+                  = buildClient (Proxy :: Proxy RepliesPatchResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Drive/Replies/Update.hs b/gen/Network/Google/Resource/Drive/Replies/Update.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/Replies/Update.hs
@@ -0,0 +1,122 @@
+{-# 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.Replies.Update
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates an existing reply.
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.replies.update@.
+module Network.Google.Resource.Drive.Replies.Update
+    (
+    -- * REST Resource
+      RepliesUpdateResource
+
+    -- * Creating a Request
+    , repliesUpdate
+    , RepliesUpdate
+
+    -- * Request Lenses
+    , ruPayload
+    , ruReplyId
+    , ruFileId
+    , ruCommentId
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.replies.update@ method which the
+-- 'RepliesUpdate' request conforms to.
+type RepliesUpdateResource =
+     "drive" :>
+       "v2" :>
+         "files" :>
+           Capture "fileId" Text :>
+             "comments" :>
+               Capture "commentId" Text :>
+                 "replies" :>
+                   Capture "replyId" Text :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON] CommentReply :>
+                         Put '[JSON] CommentReply
+
+-- | Updates an existing reply.
+--
+-- /See:/ 'repliesUpdate' smart constructor.
+data RepliesUpdate = RepliesUpdate
+    { _ruPayload   :: !CommentReply
+    , _ruReplyId   :: !Text
+    , _ruFileId    :: !Text
+    , _ruCommentId :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RepliesUpdate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ruPayload'
+--
+-- * 'ruReplyId'
+--
+-- * 'ruFileId'
+--
+-- * 'ruCommentId'
+repliesUpdate
+    :: CommentReply -- ^ 'ruPayload'
+    -> Text -- ^ 'ruReplyId'
+    -> Text -- ^ 'ruFileId'
+    -> Text -- ^ 'ruCommentId'
+    -> RepliesUpdate
+repliesUpdate pRuPayload_ pRuReplyId_ pRuFileId_ pRuCommentId_ =
+    RepliesUpdate
+    { _ruPayload = pRuPayload_
+    , _ruReplyId = pRuReplyId_
+    , _ruFileId = pRuFileId_
+    , _ruCommentId = pRuCommentId_
+    }
+
+-- | Multipart request metadata.
+ruPayload :: Lens' RepliesUpdate CommentReply
+ruPayload
+  = lens _ruPayload (\ s a -> s{_ruPayload = a})
+
+-- | The ID of the reply.
+ruReplyId :: Lens' RepliesUpdate Text
+ruReplyId
+  = lens _ruReplyId (\ s a -> s{_ruReplyId = a})
+
+-- | The ID of the file.
+ruFileId :: Lens' RepliesUpdate Text
+ruFileId = lens _ruFileId (\ s a -> s{_ruFileId = a})
+
+-- | The ID of the comment.
+ruCommentId :: Lens' RepliesUpdate Text
+ruCommentId
+  = lens _ruCommentId (\ s a -> s{_ruCommentId = a})
+
+instance GoogleRequest RepliesUpdate where
+        type Rs RepliesUpdate = CommentReply
+        requestClient RepliesUpdate{..}
+          = go _ruFileId _ruCommentId _ruReplyId (Just AltJSON)
+              _ruPayload
+              driveService
+          where go
+                  = buildClient (Proxy :: Proxy RepliesUpdateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Drive/Revisions/Delete.hs b/gen/Network/Google/Resource/Drive/Revisions/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/Revisions/Delete.hs
@@ -0,0 +1,96 @@
+{-# 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.Revisions.Delete
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Removes a revision.
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.revisions.delete@.
+module Network.Google.Resource.Drive.Revisions.Delete
+    (
+    -- * REST Resource
+      RevisionsDeleteResource
+
+    -- * Creating a Request
+    , revisionsDelete
+    , RevisionsDelete
+
+    -- * Request Lenses
+    , rFileId
+    , rRevisionId
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.revisions.delete@ method which the
+-- 'RevisionsDelete' request conforms to.
+type RevisionsDeleteResource =
+     "drive" :>
+       "v2" :>
+         "files" :>
+           Capture "fileId" Text :>
+             "revisions" :>
+               Capture "revisionId" Text :>
+                 QueryParam "alt" AltJSON :> Delete '[JSON] ()
+
+-- | Removes a revision.
+--
+-- /See:/ 'revisionsDelete' smart constructor.
+data RevisionsDelete = RevisionsDelete
+    { _rFileId     :: !Text
+    , _rRevisionId :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RevisionsDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rFileId'
+--
+-- * 'rRevisionId'
+revisionsDelete
+    :: Text -- ^ 'rFileId'
+    -> Text -- ^ 'rRevisionId'
+    -> RevisionsDelete
+revisionsDelete pRFileId_ pRRevisionId_ =
+    RevisionsDelete
+    { _rFileId = pRFileId_
+    , _rRevisionId = pRRevisionId_
+    }
+
+-- | The ID of the file.
+rFileId :: Lens' RevisionsDelete Text
+rFileId = lens _rFileId (\ s a -> s{_rFileId = a})
+
+-- | The ID of the revision.
+rRevisionId :: Lens' RevisionsDelete Text
+rRevisionId
+  = lens _rRevisionId (\ s a -> s{_rRevisionId = a})
+
+instance GoogleRequest RevisionsDelete where
+        type Rs RevisionsDelete = ()
+        requestClient RevisionsDelete{..}
+          = go _rFileId _rRevisionId (Just AltJSON)
+              driveService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy RevisionsDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Drive/Revisions/Get.hs b/gen/Network/Google/Resource/Drive/Revisions/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/Revisions/Get.hs
@@ -0,0 +1,97 @@
+{-# 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.Revisions.Get
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets a specific revision.
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.revisions.get@.
+module Network.Google.Resource.Drive.Revisions.Get
+    (
+    -- * REST Resource
+      RevisionsGetResource
+
+    -- * Creating a Request
+    , revisionsGet
+    , RevisionsGet
+
+    -- * Request Lenses
+    , rggFileId
+    , rggRevisionId
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.revisions.get@ method which the
+-- 'RevisionsGet' request conforms to.
+type RevisionsGetResource =
+     "drive" :>
+       "v2" :>
+         "files" :>
+           Capture "fileId" Text :>
+             "revisions" :>
+               Capture "revisionId" Text :>
+                 QueryParam "alt" AltJSON :> Get '[JSON] Revision
+
+-- | Gets a specific revision.
+--
+-- /See:/ 'revisionsGet' smart constructor.
+data RevisionsGet = RevisionsGet
+    { _rggFileId     :: !Text
+    , _rggRevisionId :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RevisionsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rggFileId'
+--
+-- * 'rggRevisionId'
+revisionsGet
+    :: Text -- ^ 'rggFileId'
+    -> Text -- ^ 'rggRevisionId'
+    -> RevisionsGet
+revisionsGet pRggFileId_ pRggRevisionId_ =
+    RevisionsGet
+    { _rggFileId = pRggFileId_
+    , _rggRevisionId = pRggRevisionId_
+    }
+
+-- | The ID of the file.
+rggFileId :: Lens' RevisionsGet Text
+rggFileId
+  = lens _rggFileId (\ s a -> s{_rggFileId = a})
+
+-- | The ID of the revision.
+rggRevisionId :: Lens' RevisionsGet Text
+rggRevisionId
+  = lens _rggRevisionId
+      (\ s a -> s{_rggRevisionId = a})
+
+instance GoogleRequest RevisionsGet where
+        type Rs RevisionsGet = Revision
+        requestClient RevisionsGet{..}
+          = go _rggFileId _rggRevisionId (Just AltJSON)
+              driveService
+          where go
+                  = buildClient (Proxy :: Proxy RevisionsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Drive/Revisions/List.hs b/gen/Network/Google/Resource/Drive/Revisions/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/Revisions/List.hs
@@ -0,0 +1,83 @@
+{-# 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.Revisions.List
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists a file\'s revisions.
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.revisions.list@.
+module Network.Google.Resource.Drive.Revisions.List
+    (
+    -- * REST Resource
+      RevisionsListResource
+
+    -- * Creating a Request
+    , revisionsList
+    , RevisionsList
+
+    -- * Request Lenses
+    , rllFileId
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.revisions.list@ method which the
+-- 'RevisionsList' request conforms to.
+type RevisionsListResource =
+     "drive" :>
+       "v2" :>
+         "files" :>
+           Capture "fileId" Text :>
+             "revisions" :>
+               QueryParam "alt" AltJSON :> Get '[JSON] RevisionList
+
+-- | Lists a file\'s revisions.
+--
+-- /See:/ 'revisionsList' smart constructor.
+newtype RevisionsList = RevisionsList
+    { _rllFileId :: Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RevisionsList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rllFileId'
+revisionsList
+    :: Text -- ^ 'rllFileId'
+    -> RevisionsList
+revisionsList pRllFileId_ =
+    RevisionsList
+    { _rllFileId = pRllFileId_
+    }
+
+-- | The ID of the file.
+rllFileId :: Lens' RevisionsList Text
+rllFileId
+  = lens _rllFileId (\ s a -> s{_rllFileId = a})
+
+instance GoogleRequest RevisionsList where
+        type Rs RevisionsList = RevisionList
+        requestClient RevisionsList{..}
+          = go _rllFileId (Just AltJSON) driveService
+          where go
+                  = buildClient (Proxy :: Proxy RevisionsListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Drive/Revisions/Patch.hs b/gen/Network/Google/Resource/Drive/Revisions/Patch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/Revisions/Patch.hs
@@ -0,0 +1,110 @@
+{-# 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.Revisions.Patch
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates a revision. This method supports patch semantics.
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.revisions.patch@.
+module Network.Google.Resource.Drive.Revisions.Patch
+    (
+    -- * REST Resource
+      RevisionsPatchResource
+
+    -- * Creating a Request
+    , revisionsPatch
+    , RevisionsPatch
+
+    -- * Request Lenses
+    , rppPayload
+    , rppFileId
+    , rppRevisionId
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.revisions.patch@ method which the
+-- 'RevisionsPatch' request conforms to.
+type RevisionsPatchResource =
+     "drive" :>
+       "v2" :>
+         "files" :>
+           Capture "fileId" Text :>
+             "revisions" :>
+               Capture "revisionId" Text :>
+                 QueryParam "alt" AltJSON :>
+                   ReqBody '[JSON] Revision :> Patch '[JSON] Revision
+
+-- | Updates a revision. This method supports patch semantics.
+--
+-- /See:/ 'revisionsPatch' smart constructor.
+data RevisionsPatch = RevisionsPatch
+    { _rppPayload    :: !Revision
+    , _rppFileId     :: !Text
+    , _rppRevisionId :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RevisionsPatch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rppPayload'
+--
+-- * 'rppFileId'
+--
+-- * 'rppRevisionId'
+revisionsPatch
+    :: Revision -- ^ 'rppPayload'
+    -> Text -- ^ 'rppFileId'
+    -> Text -- ^ 'rppRevisionId'
+    -> RevisionsPatch
+revisionsPatch pRppPayload_ pRppFileId_ pRppRevisionId_ =
+    RevisionsPatch
+    { _rppPayload = pRppPayload_
+    , _rppFileId = pRppFileId_
+    , _rppRevisionId = pRppRevisionId_
+    }
+
+-- | Multipart request metadata.
+rppPayload :: Lens' RevisionsPatch Revision
+rppPayload
+  = lens _rppPayload (\ s a -> s{_rppPayload = a})
+
+-- | The ID for the file.
+rppFileId :: Lens' RevisionsPatch Text
+rppFileId
+  = lens _rppFileId (\ s a -> s{_rppFileId = a})
+
+-- | The ID for the revision.
+rppRevisionId :: Lens' RevisionsPatch Text
+rppRevisionId
+  = lens _rppRevisionId
+      (\ s a -> s{_rppRevisionId = a})
+
+instance GoogleRequest RevisionsPatch where
+        type Rs RevisionsPatch = Revision
+        requestClient RevisionsPatch{..}
+          = go _rppFileId _rppRevisionId (Just AltJSON)
+              _rppPayload
+              driveService
+          where go
+                  = buildClient (Proxy :: Proxy RevisionsPatchResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Drive/Revisions/Update.hs b/gen/Network/Google/Resource/Drive/Revisions/Update.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Drive/Revisions/Update.hs
@@ -0,0 +1,111 @@
+{-# 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.Revisions.Update
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates a revision.
+--
+-- /See:/ <https://developers.google.com/drive/ Drive API Reference> for @drive.revisions.update@.
+module Network.Google.Resource.Drive.Revisions.Update
+    (
+    -- * REST Resource
+      RevisionsUpdateResource
+
+    -- * Creating a Request
+    , revisionsUpdate
+    , RevisionsUpdate
+
+    -- * Request Lenses
+    , revPayload
+    , revFileId
+    , revRevisionId
+    ) where
+
+import           Network.Google.Drive.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @drive.revisions.update@ method which the
+-- 'RevisionsUpdate' request conforms to.
+type RevisionsUpdateResource =
+     "drive" :>
+       "v2" :>
+         "files" :>
+           Capture "fileId" Text :>
+             "revisions" :>
+               Capture "revisionId" Text :>
+                 QueryParam "alt" AltJSON :>
+                   ReqBody '[JSON] Revision :> Put '[JSON] Revision
+
+-- | Updates a revision.
+--
+-- /See:/ 'revisionsUpdate' smart constructor.
+data RevisionsUpdate = RevisionsUpdate
+    { _revPayload    :: !Revision
+    , _revFileId     :: !Text
+    , _revRevisionId :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RevisionsUpdate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'revPayload'
+--
+-- * 'revFileId'
+--
+-- * 'revRevisionId'
+revisionsUpdate
+    :: Revision -- ^ 'revPayload'
+    -> Text -- ^ 'revFileId'
+    -> Text -- ^ 'revRevisionId'
+    -> RevisionsUpdate
+revisionsUpdate pRevPayload_ pRevFileId_ pRevRevisionId_ =
+    RevisionsUpdate
+    { _revPayload = pRevPayload_
+    , _revFileId = pRevFileId_
+    , _revRevisionId = pRevRevisionId_
+    }
+
+-- | Multipart request metadata.
+revPayload :: Lens' RevisionsUpdate Revision
+revPayload
+  = lens _revPayload (\ s a -> s{_revPayload = a})
+
+-- | The ID for the file.
+revFileId :: Lens' RevisionsUpdate Text
+revFileId
+  = lens _revFileId (\ s a -> s{_revFileId = a})
+
+-- | The ID for the revision.
+revRevisionId :: Lens' RevisionsUpdate Text
+revRevisionId
+  = lens _revRevisionId
+      (\ s a -> s{_revRevisionId = a})
+
+instance GoogleRequest RevisionsUpdate where
+        type Rs RevisionsUpdate = Revision
+        requestClient RevisionsUpdate{..}
+          = go _revFileId _revRevisionId (Just AltJSON)
+              _revPayload
+              driveService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy RevisionsUpdateResource)
+                      mempty
diff --git a/gogol-drive.cabal b/gogol-drive.cabal
new file mode 100644
--- /dev/null
+++ b/gogol-drive.cabal
@@ -0,0 +1,105 @@
+name:                  gogol-drive
+version:               0.0.1
+synopsis:              Google Drive SDK.
+homepage:              https://github.com/brendanhay/gogol
+bug-reports:           https://github.com/brendanhay/gogol/issues
+license:               OtherLicense
+license-file:          LICENSE
+author:                Brendan Hay
+maintainer:            Brendan Hay <brendan.g.hay@gmail.com>
+copyright:             Copyright (c) 2015 Brendan Hay
+category:              Network, Google, Cloud
+build-type:            Simple
+cabal-version:         >= 1.10
+extra-source-files:    README.md
+
+description:
+    The API to interact with Drive.
+    .
+    /Warning:/ This is an experimental prototype/preview release which is still
+    under exploratory development and not intended for public use, caveat emptor!
+    .
+    This library is compatible with version @v2@
+    of the API.
+
+source-repository head
+    type:     git
+    location: git://github.com/brendanhay/gogol.git
+
+library
+    default-language:  Haskell2010
+    hs-source-dirs:    src gen
+
+    ghc-options:       -Wall
+
+    exposed-modules:
+          Network.Google.Drive
+        , Network.Google.Drive.Types
+        , Network.Google.Resource.Drive.About.Get
+        , Network.Google.Resource.Drive.Apps.Get
+        , Network.Google.Resource.Drive.Apps.List
+        , Network.Google.Resource.Drive.Changes.Get
+        , Network.Google.Resource.Drive.Changes.List
+        , Network.Google.Resource.Drive.Changes.Watch
+        , Network.Google.Resource.Drive.Channels.Stop
+        , Network.Google.Resource.Drive.Children.Delete
+        , Network.Google.Resource.Drive.Children.Get
+        , Network.Google.Resource.Drive.Children.Insert
+        , Network.Google.Resource.Drive.Children.List
+        , Network.Google.Resource.Drive.Comments.Delete
+        , Network.Google.Resource.Drive.Comments.Get
+        , Network.Google.Resource.Drive.Comments.Insert
+        , Network.Google.Resource.Drive.Comments.List
+        , Network.Google.Resource.Drive.Comments.Patch
+        , Network.Google.Resource.Drive.Comments.Update
+        , Network.Google.Resource.Drive.Files.Copy
+        , Network.Google.Resource.Drive.Files.Delete
+        , Network.Google.Resource.Drive.Files.EmptyTrash
+        , Network.Google.Resource.Drive.Files.GenerateIds
+        , Network.Google.Resource.Drive.Files.Get
+        , Network.Google.Resource.Drive.Files.Insert
+        , Network.Google.Resource.Drive.Files.List
+        , Network.Google.Resource.Drive.Files.Patch
+        , Network.Google.Resource.Drive.Files.Touch
+        , Network.Google.Resource.Drive.Files.Trash
+        , Network.Google.Resource.Drive.Files.Untrash
+        , Network.Google.Resource.Drive.Files.Update
+        , Network.Google.Resource.Drive.Files.Watch
+        , Network.Google.Resource.Drive.Parents.Delete
+        , Network.Google.Resource.Drive.Parents.Get
+        , Network.Google.Resource.Drive.Parents.Insert
+        , Network.Google.Resource.Drive.Parents.List
+        , Network.Google.Resource.Drive.Permissions.Delete
+        , Network.Google.Resource.Drive.Permissions.Get
+        , Network.Google.Resource.Drive.Permissions.GetIdForEmail
+        , Network.Google.Resource.Drive.Permissions.Insert
+        , Network.Google.Resource.Drive.Permissions.List
+        , Network.Google.Resource.Drive.Permissions.Patch
+        , Network.Google.Resource.Drive.Permissions.Update
+        , Network.Google.Resource.Drive.Properties.Delete
+        , Network.Google.Resource.Drive.Properties.Get
+        , Network.Google.Resource.Drive.Properties.Insert
+        , Network.Google.Resource.Drive.Properties.List
+        , Network.Google.Resource.Drive.Properties.Patch
+        , Network.Google.Resource.Drive.Properties.Update
+        , Network.Google.Resource.Drive.Realtime.Get
+        , Network.Google.Resource.Drive.Realtime.Update
+        , Network.Google.Resource.Drive.Replies.Delete
+        , Network.Google.Resource.Drive.Replies.Get
+        , Network.Google.Resource.Drive.Replies.Insert
+        , Network.Google.Resource.Drive.Replies.List
+        , Network.Google.Resource.Drive.Replies.Patch
+        , Network.Google.Resource.Drive.Replies.Update
+        , Network.Google.Resource.Drive.Revisions.Delete
+        , Network.Google.Resource.Drive.Revisions.Get
+        , Network.Google.Resource.Drive.Revisions.List
+        , Network.Google.Resource.Drive.Revisions.Patch
+        , Network.Google.Resource.Drive.Revisions.Update
+
+    other-modules:
+          Network.Google.Drive.Types.Product
+        , Network.Google.Drive.Types.Sum
+
+    build-depends:
+          gogol-core == 0.0.1.*
+        , base       >= 4.7 && < 5
