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-driveactivity
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+
+`0.3.0`
+
+
+## Description
+
+A client library for the Google Drive Activity.
+
+
+## Contribute
+
+For any problems, comments, or feedback please create an issue [here on GitHub](https://github.com/brendanhay/gogol/issues).
+
+> _Note:_ this library is an auto-generated Haskell package. Please see `gogol-gen` for more information.
+
+
+## Licence
+
+`gogol-driveactivity` 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/DriveActivity.hs b/gen/Network/Google/DriveActivity.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/DriveActivity.hs
@@ -0,0 +1,395 @@
+{-# LANGUAGE DataKinds         #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE TypeOperators     #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+
+-- |
+-- Module      : Network.Google.DriveActivity
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Provides a historical view of activity in Google Drive.
+--
+-- /See:/ <https://developers.google.com/drive/activity/ Drive Activity API Reference>
+module Network.Google.DriveActivity
+    (
+    -- * Service Configuration
+      driveActivityService
+
+    -- * OAuth Scopes
+    , driveActivityReadOnlyScope
+    , driveActivityScope
+
+    -- * API Declaration
+    , DriveActivityAPI
+
+    -- * Resources
+
+    -- ** driveactivity.activity.query
+    , module Network.Google.Resource.DriveActivity.Activity.Query
+
+    -- * Types
+
+    -- ** Suggestion
+    , Suggestion
+    , suggestion
+    , sSubtype
+
+    -- ** Impersonation
+    , Impersonation
+    , impersonation
+    , iImpersonatedUser
+
+    -- ** Edit
+    , Edit
+    , edit
+
+    -- ** ActionDetail
+    , ActionDetail
+    , actionDetail
+    , adEdit
+    , adPermissionChange
+    , adRestore
+    , adReference
+    , adCreate
+    , adRename
+    , adComment
+    , adSettingsChange
+    , adDlpChange
+    , adDelete
+    , adMove
+
+    -- ** PermissionRole
+    , PermissionRole (..)
+
+    -- ** Group
+    , Group
+    , group'
+    , gEmail
+    , gTitle
+
+    -- ** TimeRange
+    , TimeRange
+    , timeRange
+    , trStartTime
+    , trEndTime
+
+    -- ** RestrictionChangeNewRestriction
+    , RestrictionChangeNewRestriction (..)
+
+    -- ** QueryDriveActivityRequest
+    , QueryDriveActivityRequest
+    , queryDriveActivityRequest
+    , qdarAncestorName
+    , qdarItemName
+    , qdarConsolidationStrategy
+    , qdarFilter
+    , qdarPageToken
+    , qdarPageSize
+
+    -- ** DriveItemReference
+    , DriveItemReference
+    , driveItemReference
+    , dirFolder
+    , dirName
+    , dirTitle
+    , dirFile
+
+    -- ** KnownUser
+    , KnownUser
+    , knownUser
+    , kuPersonName
+    , kuIsCurrentUser
+
+    -- ** TargetReference
+    , TargetReference
+    , targetReference
+    , trTeamDrive
+    , trDriveItem
+
+    -- ** Copy
+    , Copy
+    , copy
+    , cOriginalObject
+
+    -- ** PermissionChange
+    , PermissionChange
+    , permissionChange
+    , pcAddedPermissions
+    , pcRemovedPermissions
+
+    -- ** QueryDriveActivityResponse
+    , QueryDriveActivityResponse
+    , queryDriveActivityResponse
+    , qdarNextPageToken
+    , qdarActivities
+
+    -- ** Post'
+    , Post'
+    , post
+    , pSubtype
+
+    -- ** Restore
+    , Restore
+    , restore
+    , rType
+
+    -- ** Domain
+    , Domain
+    , domain
+    , dLegacyId
+    , dName
+
+    -- ** Administrator
+    , Administrator
+    , administrator
+
+    -- ** DataLeakPreventionChange
+    , DataLeakPreventionChange
+    , dataLeakPreventionChange
+    , dlpcType
+
+    -- ** Actor
+    , Actor
+    , actor
+    , aImpersonation
+    , aSystem
+    , aAdministrator
+    , aUser
+    , aAnonymous
+
+    -- ** Folder
+    , Folder
+    , folder
+    , fType
+
+    -- ** RestrictionChangeFeature
+    , RestrictionChangeFeature (..)
+
+    -- ** Action
+    , Action
+    , action
+    , aTimeRange
+    , aActor
+    , aTimestamp
+    , aTarget
+    , aDetail
+
+    -- ** TeamDrive
+    , TeamDrive
+    , teamDrive
+    , tdRoot
+    , tdName
+    , tdTitle
+
+    -- ** UnknownUser
+    , UnknownUser
+    , unknownUser
+
+    -- ** Owner
+    , Owner
+    , owner
+    , oDomain
+    , oTeamDrive
+    , oUser
+
+    -- ** SystemEventType
+    , SystemEventType (..)
+
+    -- ** ApplicationReference
+    , ApplicationReference
+    , applicationReference
+    , arType
+
+    -- ** DeleteType
+    , DeleteType (..)
+
+    -- ** ConsolidationStrategy
+    , ConsolidationStrategy
+    , consolidationStrategy
+    , csNone
+    , csLegacy
+
+    -- ** User
+    , User
+    , user
+    , uKnownUser
+    , uUnknownUser
+    , uDeletedUser
+
+    -- ** DeletedUser
+    , DeletedUser
+    , deletedUser
+
+    -- ** Create
+    , Create
+    , create
+    , cCopy
+    , cNew
+    , cUpload
+
+    -- ** PostSubtype
+    , PostSubtype (..)
+
+    -- ** New
+    , New
+    , new
+
+    -- ** AssignmentSubtype
+    , AssignmentSubtype (..)
+
+    -- ** TeamDriveReference
+    , TeamDriveReference
+    , teamDriveReference
+    , tdrName
+    , tdrTitle
+
+    -- ** Xgafv
+    , Xgafv (..)
+
+    -- ** AnonymousUser
+    , AnonymousUser
+    , anonymousUser
+
+    -- ** Anyone
+    , Anyone
+    , anyone
+
+    -- ** RestrictionChange
+    , RestrictionChange
+    , restrictionChange
+    , rcFeature
+    , rcNewRestriction
+
+    -- ** Legacy
+    , Legacy
+    , legacy
+
+    -- ** FileComment
+    , FileComment
+    , fileComment
+    , fcParent
+    , fcLegacyDiscussionId
+    , fcLegacyCommentId
+    , fcLinkToDiscussion
+
+    -- ** RestoreType
+    , RestoreType (..)
+
+    -- ** Rename
+    , Rename
+    , rename
+    , rNewTitle
+    , rOldTitle
+
+    -- ** SuggestionSubtype
+    , SuggestionSubtype (..)
+
+    -- ** Upload
+    , Upload
+    , upload
+
+    -- ** NoConsolidation
+    , NoConsolidation
+    , noConsolidation
+
+    -- ** Assignment
+    , Assignment
+    , assignment
+    , aSubtype
+
+    -- ** SettingsChange
+    , SettingsChange
+    , settingsChange
+    , scRestrictionChanges
+
+    -- ** Comment
+    , Comment
+    , comment
+    , cSuggestion
+    , cPost
+    , cMentionedUsers
+    , cAssignment
+
+    -- ** Permission
+    , Permission
+    , permission
+    , pGroup
+    , pDomain
+    , pUser
+    , pRole
+    , pAnyone
+    , pAllowDiscovery
+
+    -- ** DataLeakPreventionChangeType
+    , DataLeakPreventionChangeType (..)
+
+    -- ** File
+    , File
+    , file
+
+    -- ** FolderType
+    , FolderType (..)
+
+    -- ** Delete'
+    , Delete'
+    , delete'
+    , dType
+
+    -- ** Target
+    , Target
+    , target
+    , tTeamDrive
+    , tFileComment
+    , tDriveItem
+
+    -- ** Move
+    , Move
+    , move
+    , mAddedParents
+    , mRemovedParents
+
+    -- ** ApplicationReferenceType
+    , ApplicationReferenceType (..)
+
+    -- ** DriveActivity
+    , DriveActivity
+    , driveActivity
+    , daTimeRange
+    , daActions
+    , daActors
+    , daTargets
+    , daPrimaryActionDetail
+    , daTimestamp
+
+    -- ** DriveItem
+    , DriveItem
+    , driveItem
+    , diFolder
+    , diOwner
+    , diMimeType
+    , diName
+    , diTitle
+    , diFile
+
+    -- ** SystemEvent
+    , SystemEvent
+    , systemEvent
+    , seType
+    ) where
+
+import           Network.Google.DriveActivity.Types
+import           Network.Google.Prelude
+import           Network.Google.Resource.DriveActivity.Activity.Query
+
+{- $resources
+TODO
+-}
+
+-- | Represents the entirety of the methods and resources available for the Drive Activity API service.
+type DriveActivityAPI = ActivityQueryResource
diff --git a/gen/Network/Google/DriveActivity/Types.hs b/gen/Network/Google/DriveActivity/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/DriveActivity/Types.hs
@@ -0,0 +1,390 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Network.Google.DriveActivity.Types
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.Google.DriveActivity.Types
+    (
+    -- * Service Configuration
+      driveActivityService
+
+    -- * OAuth Scopes
+    , driveActivityReadOnlyScope
+    , driveActivityScope
+
+    -- * Suggestion
+    , Suggestion
+    , suggestion
+    , sSubtype
+
+    -- * Impersonation
+    , Impersonation
+    , impersonation
+    , iImpersonatedUser
+
+    -- * Edit
+    , Edit
+    , edit
+
+    -- * ActionDetail
+    , ActionDetail
+    , actionDetail
+    , adEdit
+    , adPermissionChange
+    , adRestore
+    , adReference
+    , adCreate
+    , adRename
+    , adComment
+    , adSettingsChange
+    , adDlpChange
+    , adDelete
+    , adMove
+
+    -- * PermissionRole
+    , PermissionRole (..)
+
+    -- * Group
+    , Group
+    , group'
+    , gEmail
+    , gTitle
+
+    -- * TimeRange
+    , TimeRange
+    , timeRange
+    , trStartTime
+    , trEndTime
+
+    -- * RestrictionChangeNewRestriction
+    , RestrictionChangeNewRestriction (..)
+
+    -- * QueryDriveActivityRequest
+    , QueryDriveActivityRequest
+    , queryDriveActivityRequest
+    , qdarAncestorName
+    , qdarItemName
+    , qdarConsolidationStrategy
+    , qdarFilter
+    , qdarPageToken
+    , qdarPageSize
+
+    -- * DriveItemReference
+    , DriveItemReference
+    , driveItemReference
+    , dirFolder
+    , dirName
+    , dirTitle
+    , dirFile
+
+    -- * KnownUser
+    , KnownUser
+    , knownUser
+    , kuPersonName
+    , kuIsCurrentUser
+
+    -- * TargetReference
+    , TargetReference
+    , targetReference
+    , trTeamDrive
+    , trDriveItem
+
+    -- * Copy
+    , Copy
+    , copy
+    , cOriginalObject
+
+    -- * PermissionChange
+    , PermissionChange
+    , permissionChange
+    , pcAddedPermissions
+    , pcRemovedPermissions
+
+    -- * QueryDriveActivityResponse
+    , QueryDriveActivityResponse
+    , queryDriveActivityResponse
+    , qdarNextPageToken
+    , qdarActivities
+
+    -- * Post'
+    , Post'
+    , post
+    , pSubtype
+
+    -- * Restore
+    , Restore
+    , restore
+    , rType
+
+    -- * Domain
+    , Domain
+    , domain
+    , dLegacyId
+    , dName
+
+    -- * Administrator
+    , Administrator
+    , administrator
+
+    -- * DataLeakPreventionChange
+    , DataLeakPreventionChange
+    , dataLeakPreventionChange
+    , dlpcType
+
+    -- * Actor
+    , Actor
+    , actor
+    , aImpersonation
+    , aSystem
+    , aAdministrator
+    , aUser
+    , aAnonymous
+
+    -- * Folder
+    , Folder
+    , folder
+    , fType
+
+    -- * RestrictionChangeFeature
+    , RestrictionChangeFeature (..)
+
+    -- * Action
+    , Action
+    , action
+    , aTimeRange
+    , aActor
+    , aTimestamp
+    , aTarget
+    , aDetail
+
+    -- * TeamDrive
+    , TeamDrive
+    , teamDrive
+    , tdRoot
+    , tdName
+    , tdTitle
+
+    -- * UnknownUser
+    , UnknownUser
+    , unknownUser
+
+    -- * Owner
+    , Owner
+    , owner
+    , oDomain
+    , oTeamDrive
+    , oUser
+
+    -- * SystemEventType
+    , SystemEventType (..)
+
+    -- * ApplicationReference
+    , ApplicationReference
+    , applicationReference
+    , arType
+
+    -- * DeleteType
+    , DeleteType (..)
+
+    -- * ConsolidationStrategy
+    , ConsolidationStrategy
+    , consolidationStrategy
+    , csNone
+    , csLegacy
+
+    -- * User
+    , User
+    , user
+    , uKnownUser
+    , uUnknownUser
+    , uDeletedUser
+
+    -- * DeletedUser
+    , DeletedUser
+    , deletedUser
+
+    -- * Create
+    , Create
+    , create
+    , cCopy
+    , cNew
+    , cUpload
+
+    -- * PostSubtype
+    , PostSubtype (..)
+
+    -- * New
+    , New
+    , new
+
+    -- * AssignmentSubtype
+    , AssignmentSubtype (..)
+
+    -- * TeamDriveReference
+    , TeamDriveReference
+    , teamDriveReference
+    , tdrName
+    , tdrTitle
+
+    -- * Xgafv
+    , Xgafv (..)
+
+    -- * AnonymousUser
+    , AnonymousUser
+    , anonymousUser
+
+    -- * Anyone
+    , Anyone
+    , anyone
+
+    -- * RestrictionChange
+    , RestrictionChange
+    , restrictionChange
+    , rcFeature
+    , rcNewRestriction
+
+    -- * Legacy
+    , Legacy
+    , legacy
+
+    -- * FileComment
+    , FileComment
+    , fileComment
+    , fcParent
+    , fcLegacyDiscussionId
+    , fcLegacyCommentId
+    , fcLinkToDiscussion
+
+    -- * RestoreType
+    , RestoreType (..)
+
+    -- * Rename
+    , Rename
+    , rename
+    , rNewTitle
+    , rOldTitle
+
+    -- * SuggestionSubtype
+    , SuggestionSubtype (..)
+
+    -- * Upload
+    , Upload
+    , upload
+
+    -- * NoConsolidation
+    , NoConsolidation
+    , noConsolidation
+
+    -- * Assignment
+    , Assignment
+    , assignment
+    , aSubtype
+
+    -- * SettingsChange
+    , SettingsChange
+    , settingsChange
+    , scRestrictionChanges
+
+    -- * Comment
+    , Comment
+    , comment
+    , cSuggestion
+    , cPost
+    , cMentionedUsers
+    , cAssignment
+
+    -- * Permission
+    , Permission
+    , permission
+    , pGroup
+    , pDomain
+    , pUser
+    , pRole
+    , pAnyone
+    , pAllowDiscovery
+
+    -- * DataLeakPreventionChangeType
+    , DataLeakPreventionChangeType (..)
+
+    -- * File
+    , File
+    , file
+
+    -- * FolderType
+    , FolderType (..)
+
+    -- * Delete'
+    , Delete'
+    , delete'
+    , dType
+
+    -- * Target
+    , Target
+    , target
+    , tTeamDrive
+    , tFileComment
+    , tDriveItem
+
+    -- * Move
+    , Move
+    , move
+    , mAddedParents
+    , mRemovedParents
+
+    -- * ApplicationReferenceType
+    , ApplicationReferenceType (..)
+
+    -- * DriveActivity
+    , DriveActivity
+    , driveActivity
+    , daTimeRange
+    , daActions
+    , daActors
+    , daTargets
+    , daPrimaryActionDetail
+    , daTimestamp
+
+    -- * DriveItem
+    , DriveItem
+    , driveItem
+    , diFolder
+    , diOwner
+    , diMimeType
+    , diName
+    , diTitle
+    , diFile
+
+    -- * SystemEvent
+    , SystemEvent
+    , systemEvent
+    , seType
+    ) where
+
+import           Network.Google.DriveActivity.Types.Product
+import           Network.Google.DriveActivity.Types.Sum
+import           Network.Google.Prelude
+
+-- | Default request referring to version 'v2' of the Drive Activity API. This contains the host and root path used as a starting point for constructing service requests.
+driveActivityService :: ServiceConfig
+driveActivityService
+  = defaultService (ServiceId "driveactivity:v2")
+      "driveactivity.googleapis.com"
+
+-- | View the activity record of files in your Google Drive
+driveActivityReadOnlyScope :: Proxy '["https://www.googleapis.com/auth/drive.activity.readonly"]
+driveActivityReadOnlyScope = Proxy;
+
+-- | View and add to the activity record of files in your Google Drive
+driveActivityScope :: Proxy '["https://www.googleapis.com/auth/drive.activity"]
+driveActivityScope = Proxy;
diff --git a/gen/Network/Google/DriveActivity/Types/Product.hs b/gen/Network/Google/DriveActivity/Types/Product.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/DriveActivity/Types/Product.hs
@@ -0,0 +1,2428 @@
+{-# 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.DriveActivity.Types.Product
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.Google.DriveActivity.Types.Product where
+
+import           Network.Google.DriveActivity.Types.Sum
+import           Network.Google.Prelude
+
+-- | A suggestion.
+--
+-- /See:/ 'suggestion' smart constructor.
+newtype Suggestion = Suggestion'
+    { _sSubtype :: Maybe SuggestionSubtype
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Suggestion' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sSubtype'
+suggestion
+    :: Suggestion
+suggestion =
+    Suggestion'
+    { _sSubtype = Nothing
+    }
+
+-- | The sub-type of this event.
+sSubtype :: Lens' Suggestion (Maybe SuggestionSubtype)
+sSubtype = lens _sSubtype (\ s a -> s{_sSubtype = a})
+
+instance FromJSON Suggestion where
+        parseJSON
+          = withObject "Suggestion"
+              (\ o -> Suggestion' <$> (o .:? "subtype"))
+
+instance ToJSON Suggestion where
+        toJSON Suggestion'{..}
+          = object (catMaybes [("subtype" .=) <$> _sSubtype])
+
+-- | Information about an impersonation, where an admin acts on behalf of an
+-- end user. Information about the acting admin is not currently available.
+--
+-- /See:/ 'impersonation' smart constructor.
+newtype Impersonation = Impersonation'
+    { _iImpersonatedUser :: Maybe User
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Impersonation' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'iImpersonatedUser'
+impersonation
+    :: Impersonation
+impersonation =
+    Impersonation'
+    { _iImpersonatedUser = Nothing
+    }
+
+-- | The impersonated user.
+iImpersonatedUser :: Lens' Impersonation (Maybe User)
+iImpersonatedUser
+  = lens _iImpersonatedUser
+      (\ s a -> s{_iImpersonatedUser = a})
+
+instance FromJSON Impersonation where
+        parseJSON
+          = withObject "Impersonation"
+              (\ o ->
+                 Impersonation' <$> (o .:? "impersonatedUser"))
+
+instance ToJSON Impersonation where
+        toJSON Impersonation'{..}
+          = object
+              (catMaybes
+                 [("impersonatedUser" .=) <$> _iImpersonatedUser])
+
+-- | An empty message indicating an object was edited.
+--
+-- /See:/ 'edit' smart constructor.
+data Edit =
+    Edit'
+    deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Edit' with the minimum fields required to make a request.
+--
+edit
+    :: Edit
+edit = Edit'
+
+instance FromJSON Edit where
+        parseJSON = withObject "Edit" (\ o -> pure Edit')
+
+instance ToJSON Edit where
+        toJSON = const emptyObject
+
+-- | Data describing the type and additional information of an action.
+--
+-- /See:/ 'actionDetail' smart constructor.
+data ActionDetail = ActionDetail'
+    { _adEdit             :: !(Maybe Edit)
+    , _adPermissionChange :: !(Maybe PermissionChange)
+    , _adRestore          :: !(Maybe Restore)
+    , _adReference        :: !(Maybe ApplicationReference)
+    , _adCreate           :: !(Maybe Create)
+    , _adRename           :: !(Maybe Rename)
+    , _adComment          :: !(Maybe Comment)
+    , _adSettingsChange   :: !(Maybe SettingsChange)
+    , _adDlpChange        :: !(Maybe DataLeakPreventionChange)
+    , _adDelete           :: !(Maybe Delete')
+    , _adMove             :: !(Maybe Move)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ActionDetail' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'adEdit'
+--
+-- * 'adPermissionChange'
+--
+-- * 'adRestore'
+--
+-- * 'adReference'
+--
+-- * 'adCreate'
+--
+-- * 'adRename'
+--
+-- * 'adComment'
+--
+-- * 'adSettingsChange'
+--
+-- * 'adDlpChange'
+--
+-- * 'adDelete'
+--
+-- * 'adMove'
+actionDetail
+    :: ActionDetail
+actionDetail =
+    ActionDetail'
+    { _adEdit = Nothing
+    , _adPermissionChange = Nothing
+    , _adRestore = Nothing
+    , _adReference = Nothing
+    , _adCreate = Nothing
+    , _adRename = Nothing
+    , _adComment = Nothing
+    , _adSettingsChange = Nothing
+    , _adDlpChange = Nothing
+    , _adDelete = Nothing
+    , _adMove = Nothing
+    }
+
+-- | An object was edited.
+adEdit :: Lens' ActionDetail (Maybe Edit)
+adEdit = lens _adEdit (\ s a -> s{_adEdit = a})
+
+-- | The permission on an object was changed.
+adPermissionChange :: Lens' ActionDetail (Maybe PermissionChange)
+adPermissionChange
+  = lens _adPermissionChange
+      (\ s a -> s{_adPermissionChange = a})
+
+-- | A deleted object was restored.
+adRestore :: Lens' ActionDetail (Maybe Restore)
+adRestore
+  = lens _adRestore (\ s a -> s{_adRestore = a})
+
+-- | An object was referenced in an application outside of Drive\/Docs.
+adReference :: Lens' ActionDetail (Maybe ApplicationReference)
+adReference
+  = lens _adReference (\ s a -> s{_adReference = a})
+
+-- | An object was created.
+adCreate :: Lens' ActionDetail (Maybe Create)
+adCreate = lens _adCreate (\ s a -> s{_adCreate = a})
+
+-- | An object was renamed.
+adRename :: Lens' ActionDetail (Maybe Rename)
+adRename = lens _adRename (\ s a -> s{_adRename = a})
+
+-- | A change about comments was made.
+adComment :: Lens' ActionDetail (Maybe Comment)
+adComment
+  = lens _adComment (\ s a -> s{_adComment = a})
+
+-- | Settings were changed.
+adSettingsChange :: Lens' ActionDetail (Maybe SettingsChange)
+adSettingsChange
+  = lens _adSettingsChange
+      (\ s a -> s{_adSettingsChange = a})
+
+-- | A change happened in data leak prevention status.
+adDlpChange :: Lens' ActionDetail (Maybe DataLeakPreventionChange)
+adDlpChange
+  = lens _adDlpChange (\ s a -> s{_adDlpChange = a})
+
+-- | An object was deleted.
+adDelete :: Lens' ActionDetail (Maybe Delete')
+adDelete = lens _adDelete (\ s a -> s{_adDelete = a})
+
+-- | An object was moved.
+adMove :: Lens' ActionDetail (Maybe Move)
+adMove = lens _adMove (\ s a -> s{_adMove = a})
+
+instance FromJSON ActionDetail where
+        parseJSON
+          = withObject "ActionDetail"
+              (\ o ->
+                 ActionDetail' <$>
+                   (o .:? "edit") <*> (o .:? "permissionChange") <*>
+                     (o .:? "restore")
+                     <*> (o .:? "reference")
+                     <*> (o .:? "create")
+                     <*> (o .:? "rename")
+                     <*> (o .:? "comment")
+                     <*> (o .:? "settingsChange")
+                     <*> (o .:? "dlpChange")
+                     <*> (o .:? "delete")
+                     <*> (o .:? "move"))
+
+instance ToJSON ActionDetail where
+        toJSON ActionDetail'{..}
+          = object
+              (catMaybes
+                 [("edit" .=) <$> _adEdit,
+                  ("permissionChange" .=) <$> _adPermissionChange,
+                  ("restore" .=) <$> _adRestore,
+                  ("reference" .=) <$> _adReference,
+                  ("create" .=) <$> _adCreate,
+                  ("rename" .=) <$> _adRename,
+                  ("comment" .=) <$> _adComment,
+                  ("settingsChange" .=) <$> _adSettingsChange,
+                  ("dlpChange" .=) <$> _adDlpChange,
+                  ("delete" .=) <$> _adDelete,
+                  ("move" .=) <$> _adMove])
+
+-- | Information about a group.
+--
+-- /See:/ 'group'' smart constructor.
+data Group = Group'
+    { _gEmail :: !(Maybe Text)
+    , _gTitle :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Group' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gEmail'
+--
+-- * 'gTitle'
+group'
+    :: Group
+group' =
+    Group'
+    { _gEmail = Nothing
+    , _gTitle = Nothing
+    }
+
+-- | The email address of the group.
+gEmail :: Lens' Group (Maybe Text)
+gEmail = lens _gEmail (\ s a -> s{_gEmail = a})
+
+-- | The title of the group.
+gTitle :: Lens' Group (Maybe Text)
+gTitle = lens _gTitle (\ s a -> s{_gTitle = a})
+
+instance FromJSON Group where
+        parseJSON
+          = withObject "Group"
+              (\ o ->
+                 Group' <$> (o .:? "email") <*> (o .:? "title"))
+
+instance ToJSON Group where
+        toJSON Group'{..}
+          = object
+              (catMaybes
+                 [("email" .=) <$> _gEmail, ("title" .=) <$> _gTitle])
+
+-- | Information about time ranges.
+--
+-- /See:/ 'timeRange' smart constructor.
+data TimeRange = TimeRange'
+    { _trStartTime :: !(Maybe DateTime')
+    , _trEndTime   :: !(Maybe DateTime')
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TimeRange' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'trStartTime'
+--
+-- * 'trEndTime'
+timeRange
+    :: TimeRange
+timeRange =
+    TimeRange'
+    { _trStartTime = Nothing
+    , _trEndTime = Nothing
+    }
+
+-- | The start of the time range.
+trStartTime :: Lens' TimeRange (Maybe UTCTime)
+trStartTime
+  = lens _trStartTime (\ s a -> s{_trStartTime = a}) .
+      mapping _DateTime
+
+-- | The end of the time range.
+trEndTime :: Lens' TimeRange (Maybe UTCTime)
+trEndTime
+  = lens _trEndTime (\ s a -> s{_trEndTime = a}) .
+      mapping _DateTime
+
+instance FromJSON TimeRange where
+        parseJSON
+          = withObject "TimeRange"
+              (\ o ->
+                 TimeRange' <$>
+                   (o .:? "startTime") <*> (o .:? "endTime"))
+
+instance ToJSON TimeRange where
+        toJSON TimeRange'{..}
+          = object
+              (catMaybes
+                 [("startTime" .=) <$> _trStartTime,
+                  ("endTime" .=) <$> _trEndTime])
+
+-- | The request message for querying Drive activity.
+--
+-- /See:/ 'queryDriveActivityRequest' smart constructor.
+data QueryDriveActivityRequest = QueryDriveActivityRequest'
+    { _qdarAncestorName          :: !(Maybe Text)
+    , _qdarItemName              :: !(Maybe Text)
+    , _qdarConsolidationStrategy :: !(Maybe ConsolidationStrategy)
+    , _qdarFilter                :: !(Maybe Text)
+    , _qdarPageToken             :: !(Maybe Text)
+    , _qdarPageSize              :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'QueryDriveActivityRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'qdarAncestorName'
+--
+-- * 'qdarItemName'
+--
+-- * 'qdarConsolidationStrategy'
+--
+-- * 'qdarFilter'
+--
+-- * 'qdarPageToken'
+--
+-- * 'qdarPageSize'
+queryDriveActivityRequest
+    :: QueryDriveActivityRequest
+queryDriveActivityRequest =
+    QueryDriveActivityRequest'
+    { _qdarAncestorName = Nothing
+    , _qdarItemName = Nothing
+    , _qdarConsolidationStrategy = Nothing
+    , _qdarFilter = Nothing
+    , _qdarPageToken = Nothing
+    , _qdarPageSize = Nothing
+    }
+
+-- | Return activities for this Drive folder and all children and
+-- descendants. The format is \"items\/ITEM_ID\".
+qdarAncestorName :: Lens' QueryDriveActivityRequest (Maybe Text)
+qdarAncestorName
+  = lens _qdarAncestorName
+      (\ s a -> s{_qdarAncestorName = a})
+
+-- | Return activities for this Drive item. The format is \"items\/ITEM_ID\".
+qdarItemName :: Lens' QueryDriveActivityRequest (Maybe Text)
+qdarItemName
+  = lens _qdarItemName (\ s a -> s{_qdarItemName = a})
+
+-- | Details on how to consolidate related actions that make up the activity.
+-- If not set, then related actions will not be consolidated.
+qdarConsolidationStrategy :: Lens' QueryDriveActivityRequest (Maybe ConsolidationStrategy)
+qdarConsolidationStrategy
+  = lens _qdarConsolidationStrategy
+      (\ s a -> s{_qdarConsolidationStrategy = a})
+
+-- | The filtering for items returned from this query request. The format of
+-- the filter string is a sequence of expressions, joined by an optional
+-- \"AND\", where each expression is of the form \"field operator value\".
+-- Supported fields: - 'time': Uses numerical operators on date values
+-- either in terms of milliseconds since Jan 1, 1970 or in RFC 3339 format.
+-- Examples: - 'time > 1452409200000 AND time \<= 1492812924310' -
+-- 'time >= \"2016-01-10T01:02:03-05:00\"' - 'detail.action_detail_case':
+-- Uses the \"has\" operator (:) and either a singular value or a list of
+-- allowed action types enclosed in parentheses. Examples: -
+-- 'detail.action_detail_case: RENAME' -
+-- 'detail.action_detail_case:(CREATE UPLOAD)' -
+-- '-detail.action_detail_case:MOVE'
+qdarFilter :: Lens' QueryDriveActivityRequest (Maybe Text)
+qdarFilter
+  = lens _qdarFilter (\ s a -> s{_qdarFilter = a})
+
+-- | The next_page_token value returned from a previous QueryDriveActivity
+-- request, if any.
+qdarPageToken :: Lens' QueryDriveActivityRequest (Maybe Text)
+qdarPageToken
+  = lens _qdarPageToken
+      (\ s a -> s{_qdarPageToken = a})
+
+-- | The requested number of activity to return. If not set, a default value
+-- will be used.
+qdarPageSize :: Lens' QueryDriveActivityRequest (Maybe Int32)
+qdarPageSize
+  = lens _qdarPageSize (\ s a -> s{_qdarPageSize = a})
+      . mapping _Coerce
+
+instance FromJSON QueryDriveActivityRequest where
+        parseJSON
+          = withObject "QueryDriveActivityRequest"
+              (\ o ->
+                 QueryDriveActivityRequest' <$>
+                   (o .:? "ancestorName") <*> (o .:? "itemName") <*>
+                     (o .:? "consolidationStrategy")
+                     <*> (o .:? "filter")
+                     <*> (o .:? "pageToken")
+                     <*> (o .:? "pageSize"))
+
+instance ToJSON QueryDriveActivityRequest where
+        toJSON QueryDriveActivityRequest'{..}
+          = object
+              (catMaybes
+                 [("ancestorName" .=) <$> _qdarAncestorName,
+                  ("itemName" .=) <$> _qdarItemName,
+                  ("consolidationStrategy" .=) <$>
+                    _qdarConsolidationStrategy,
+                  ("filter" .=) <$> _qdarFilter,
+                  ("pageToken" .=) <$> _qdarPageToken,
+                  ("pageSize" .=) <$> _qdarPageSize])
+
+-- | A lightweight reference to a Drive item, such as a file or folder.
+--
+-- /See:/ 'driveItemReference' smart constructor.
+data DriveItemReference = DriveItemReference'
+    { _dirFolder :: !(Maybe Folder)
+    , _dirName   :: !(Maybe Text)
+    , _dirTitle  :: !(Maybe Text)
+    , _dirFile   :: !(Maybe File)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DriveItemReference' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dirFolder'
+--
+-- * 'dirName'
+--
+-- * 'dirTitle'
+--
+-- * 'dirFile'
+driveItemReference
+    :: DriveItemReference
+driveItemReference =
+    DriveItemReference'
+    { _dirFolder = Nothing
+    , _dirName = Nothing
+    , _dirTitle = Nothing
+    , _dirFile = Nothing
+    }
+
+-- | The Drive item is a folder.
+dirFolder :: Lens' DriveItemReference (Maybe Folder)
+dirFolder
+  = lens _dirFolder (\ s a -> s{_dirFolder = a})
+
+-- | The target Drive item. The format is \"items\/ITEM_ID\".
+dirName :: Lens' DriveItemReference (Maybe Text)
+dirName = lens _dirName (\ s a -> s{_dirName = a})
+
+-- | The title of the Drive item.
+dirTitle :: Lens' DriveItemReference (Maybe Text)
+dirTitle = lens _dirTitle (\ s a -> s{_dirTitle = a})
+
+-- | The Drive item is a file.
+dirFile :: Lens' DriveItemReference (Maybe File)
+dirFile = lens _dirFile (\ s a -> s{_dirFile = a})
+
+instance FromJSON DriveItemReference where
+        parseJSON
+          = withObject "DriveItemReference"
+              (\ o ->
+                 DriveItemReference' <$>
+                   (o .:? "folder") <*> (o .:? "name") <*>
+                     (o .:? "title")
+                     <*> (o .:? "file"))
+
+instance ToJSON DriveItemReference where
+        toJSON DriveItemReference'{..}
+          = object
+              (catMaybes
+                 [("folder" .=) <$> _dirFolder,
+                  ("name" .=) <$> _dirName, ("title" .=) <$> _dirTitle,
+                  ("file" .=) <$> _dirFile])
+
+-- | A known user.
+--
+-- /See:/ 'knownUser' smart constructor.
+data KnownUser = KnownUser'
+    { _kuPersonName    :: !(Maybe Text)
+    , _kuIsCurrentUser :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'KnownUser' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'kuPersonName'
+--
+-- * 'kuIsCurrentUser'
+knownUser
+    :: KnownUser
+knownUser =
+    KnownUser'
+    { _kuPersonName = Nothing
+    , _kuIsCurrentUser = Nothing
+    }
+
+-- | The identifier for this user that can be used with the People API to get
+-- more information. The format is \"people\/ACCOUNT_ID\". See
+-- https:\/\/developers.google.com\/people\/.
+kuPersonName :: Lens' KnownUser (Maybe Text)
+kuPersonName
+  = lens _kuPersonName (\ s a -> s{_kuPersonName = a})
+
+-- | True if this is the user making the request.
+kuIsCurrentUser :: Lens' KnownUser (Maybe Bool)
+kuIsCurrentUser
+  = lens _kuIsCurrentUser
+      (\ s a -> s{_kuIsCurrentUser = a})
+
+instance FromJSON KnownUser where
+        parseJSON
+          = withObject "KnownUser"
+              (\ o ->
+                 KnownUser' <$>
+                   (o .:? "personName") <*> (o .:? "isCurrentUser"))
+
+instance ToJSON KnownUser where
+        toJSON KnownUser'{..}
+          = object
+              (catMaybes
+                 [("personName" .=) <$> _kuPersonName,
+                  ("isCurrentUser" .=) <$> _kuIsCurrentUser])
+
+-- | A lightweight reference to the target of activity.
+--
+-- /See:/ 'targetReference' smart constructor.
+data TargetReference = TargetReference'
+    { _trTeamDrive :: !(Maybe TeamDriveReference)
+    , _trDriveItem :: !(Maybe DriveItemReference)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TargetReference' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'trTeamDrive'
+--
+-- * 'trDriveItem'
+targetReference
+    :: TargetReference
+targetReference =
+    TargetReference'
+    { _trTeamDrive = Nothing
+    , _trDriveItem = Nothing
+    }
+
+-- | The target is a Team Drive.
+trTeamDrive :: Lens' TargetReference (Maybe TeamDriveReference)
+trTeamDrive
+  = lens _trTeamDrive (\ s a -> s{_trTeamDrive = a})
+
+-- | The target is a Drive item.
+trDriveItem :: Lens' TargetReference (Maybe DriveItemReference)
+trDriveItem
+  = lens _trDriveItem (\ s a -> s{_trDriveItem = a})
+
+instance FromJSON TargetReference where
+        parseJSON
+          = withObject "TargetReference"
+              (\ o ->
+                 TargetReference' <$>
+                   (o .:? "teamDrive") <*> (o .:? "driveItem"))
+
+instance ToJSON TargetReference where
+        toJSON TargetReference'{..}
+          = object
+              (catMaybes
+                 [("teamDrive" .=) <$> _trTeamDrive,
+                  ("driveItem" .=) <$> _trDriveItem])
+
+-- | An object was created by copying an existing object.
+--
+-- /See:/ 'copy' smart constructor.
+newtype Copy = Copy'
+    { _cOriginalObject :: Maybe TargetReference
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Copy' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cOriginalObject'
+copy
+    :: Copy
+copy =
+    Copy'
+    { _cOriginalObject = Nothing
+    }
+
+-- | The the original object.
+cOriginalObject :: Lens' Copy (Maybe TargetReference)
+cOriginalObject
+  = lens _cOriginalObject
+      (\ s a -> s{_cOriginalObject = a})
+
+instance FromJSON Copy where
+        parseJSON
+          = withObject "Copy"
+              (\ o -> Copy' <$> (o .:? "originalObject"))
+
+instance ToJSON Copy where
+        toJSON Copy'{..}
+          = object
+              (catMaybes
+                 [("originalObject" .=) <$> _cOriginalObject])
+
+-- | A change of the permission setting on an item.
+--
+-- /See:/ 'permissionChange' smart constructor.
+data PermissionChange = PermissionChange'
+    { _pcAddedPermissions   :: !(Maybe [Permission])
+    , _pcRemovedPermissions :: !(Maybe [Permission])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PermissionChange' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pcAddedPermissions'
+--
+-- * 'pcRemovedPermissions'
+permissionChange
+    :: PermissionChange
+permissionChange =
+    PermissionChange'
+    { _pcAddedPermissions = Nothing
+    , _pcRemovedPermissions = Nothing
+    }
+
+-- | The set of permissions added by this change.
+pcAddedPermissions :: Lens' PermissionChange [Permission]
+pcAddedPermissions
+  = lens _pcAddedPermissions
+      (\ s a -> s{_pcAddedPermissions = a})
+      . _Default
+      . _Coerce
+
+-- | The set of permissions removed by this change.
+pcRemovedPermissions :: Lens' PermissionChange [Permission]
+pcRemovedPermissions
+  = lens _pcRemovedPermissions
+      (\ s a -> s{_pcRemovedPermissions = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON PermissionChange where
+        parseJSON
+          = withObject "PermissionChange"
+              (\ o ->
+                 PermissionChange' <$>
+                   (o .:? "addedPermissions" .!= mempty) <*>
+                     (o .:? "removedPermissions" .!= mempty))
+
+instance ToJSON PermissionChange where
+        toJSON PermissionChange'{..}
+          = object
+              (catMaybes
+                 [("addedPermissions" .=) <$> _pcAddedPermissions,
+                  ("removedPermissions" .=) <$> _pcRemovedPermissions])
+
+-- | Response message for querying Drive activity.
+--
+-- /See:/ 'queryDriveActivityResponse' smart constructor.
+data QueryDriveActivityResponse = QueryDriveActivityResponse'
+    { _qdarNextPageToken :: !(Maybe Text)
+    , _qdarActivities    :: !(Maybe [DriveActivity])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'QueryDriveActivityResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'qdarNextPageToken'
+--
+-- * 'qdarActivities'
+queryDriveActivityResponse
+    :: QueryDriveActivityResponse
+queryDriveActivityResponse =
+    QueryDriveActivityResponse'
+    { _qdarNextPageToken = Nothing
+    , _qdarActivities = Nothing
+    }
+
+-- | Token to retrieve the next page of results, or empty if there are no
+-- more results in the list.
+qdarNextPageToken :: Lens' QueryDriveActivityResponse (Maybe Text)
+qdarNextPageToken
+  = lens _qdarNextPageToken
+      (\ s a -> s{_qdarNextPageToken = a})
+
+-- | List of activity requested.
+qdarActivities :: Lens' QueryDriveActivityResponse [DriveActivity]
+qdarActivities
+  = lens _qdarActivities
+      (\ s a -> s{_qdarActivities = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON QueryDriveActivityResponse where
+        parseJSON
+          = withObject "QueryDriveActivityResponse"
+              (\ o ->
+                 QueryDriveActivityResponse' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "activities" .!= mempty))
+
+instance ToJSON QueryDriveActivityResponse where
+        toJSON QueryDriveActivityResponse'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _qdarNextPageToken,
+                  ("activities" .=) <$> _qdarActivities])
+
+-- | A regular posted comment.
+--
+-- /See:/ 'post' smart constructor.
+newtype Post' = Post''
+    { _pSubtype :: Maybe PostSubtype
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Post' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pSubtype'
+post
+    :: Post'
+post =
+    Post''
+    { _pSubtype = Nothing
+    }
+
+-- | The sub-type of this event.
+pSubtype :: Lens' Post' (Maybe PostSubtype)
+pSubtype = lens _pSubtype (\ s a -> s{_pSubtype = a})
+
+instance FromJSON Post' where
+        parseJSON
+          = withObject "Post"
+              (\ o -> Post'' <$> (o .:? "subtype"))
+
+instance ToJSON Post' where
+        toJSON Post''{..}
+          = object (catMaybes [("subtype" .=) <$> _pSubtype])
+
+-- | A deleted object was restored.
+--
+-- /See:/ 'restore' smart constructor.
+newtype Restore = Restore'
+    { _rType :: Maybe RestoreType
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Restore' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rType'
+restore
+    :: Restore
+restore =
+    Restore'
+    { _rType = Nothing
+    }
+
+-- | The type of restore action taken.
+rType :: Lens' Restore (Maybe RestoreType)
+rType = lens _rType (\ s a -> s{_rType = a})
+
+instance FromJSON Restore where
+        parseJSON
+          = withObject "Restore"
+              (\ o -> Restore' <$> (o .:? "type"))
+
+instance ToJSON Restore where
+        toJSON Restore'{..}
+          = object (catMaybes [("type" .=) <$> _rType])
+
+-- | Information about a domain.
+--
+-- /See:/ 'domain' smart constructor.
+data Domain = Domain'
+    { _dLegacyId :: !(Maybe Text)
+    , _dName     :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Domain' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dLegacyId'
+--
+-- * 'dName'
+domain
+    :: Domain
+domain =
+    Domain'
+    { _dLegacyId = Nothing
+    , _dName = Nothing
+    }
+
+-- | An opaque string used to identify this domain.
+dLegacyId :: Lens' Domain (Maybe Text)
+dLegacyId
+  = lens _dLegacyId (\ s a -> s{_dLegacyId = a})
+
+-- | The name of the domain, e.g. \"google.com\".
+dName :: Lens' Domain (Maybe Text)
+dName = lens _dName (\ s a -> s{_dName = a})
+
+instance FromJSON Domain where
+        parseJSON
+          = withObject "Domain"
+              (\ o ->
+                 Domain' <$> (o .:? "legacyId") <*> (o .:? "name"))
+
+instance ToJSON Domain where
+        toJSON Domain'{..}
+          = object
+              (catMaybes
+                 [("legacyId" .=) <$> _dLegacyId,
+                  ("name" .=) <$> _dName])
+
+-- | Empty message representing an administrator.
+--
+-- /See:/ 'administrator' smart constructor.
+data Administrator =
+    Administrator'
+    deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Administrator' with the minimum fields required to make a request.
+--
+administrator
+    :: Administrator
+administrator = Administrator'
+
+instance FromJSON Administrator where
+        parseJSON
+          = withObject "Administrator"
+              (\ o -> pure Administrator')
+
+instance ToJSON Administrator where
+        toJSON = const emptyObject
+
+-- | A change in the object\'s data leak prevention status.
+--
+-- /See:/ 'dataLeakPreventionChange' smart constructor.
+newtype DataLeakPreventionChange = DataLeakPreventionChange'
+    { _dlpcType :: Maybe DataLeakPreventionChangeType
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DataLeakPreventionChange' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dlpcType'
+dataLeakPreventionChange
+    :: DataLeakPreventionChange
+dataLeakPreventionChange =
+    DataLeakPreventionChange'
+    { _dlpcType = Nothing
+    }
+
+-- | The type of Data Leak Prevention (DLP) change.
+dlpcType :: Lens' DataLeakPreventionChange (Maybe DataLeakPreventionChangeType)
+dlpcType = lens _dlpcType (\ s a -> s{_dlpcType = a})
+
+instance FromJSON DataLeakPreventionChange where
+        parseJSON
+          = withObject "DataLeakPreventionChange"
+              (\ o -> DataLeakPreventionChange' <$> (o .:? "type"))
+
+instance ToJSON DataLeakPreventionChange where
+        toJSON DataLeakPreventionChange'{..}
+          = object (catMaybes [("type" .=) <$> _dlpcType])
+
+-- | The actor of a Drive activity.
+--
+-- /See:/ 'actor' smart constructor.
+data Actor = Actor'
+    { _aImpersonation :: !(Maybe Impersonation)
+    , _aSystem        :: !(Maybe SystemEvent)
+    , _aAdministrator :: !(Maybe Administrator)
+    , _aUser          :: !(Maybe User)
+    , _aAnonymous     :: !(Maybe AnonymousUser)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Actor' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aImpersonation'
+--
+-- * 'aSystem'
+--
+-- * 'aAdministrator'
+--
+-- * 'aUser'
+--
+-- * 'aAnonymous'
+actor
+    :: Actor
+actor =
+    Actor'
+    { _aImpersonation = Nothing
+    , _aSystem = Nothing
+    , _aAdministrator = Nothing
+    , _aUser = Nothing
+    , _aAnonymous = Nothing
+    }
+
+-- | An account acting on behalf of another.
+aImpersonation :: Lens' Actor (Maybe Impersonation)
+aImpersonation
+  = lens _aImpersonation
+      (\ s a -> s{_aImpersonation = a})
+
+-- | A non-user actor (i.e. system triggered).
+aSystem :: Lens' Actor (Maybe SystemEvent)
+aSystem = lens _aSystem (\ s a -> s{_aSystem = a})
+
+-- | An administrator.
+aAdministrator :: Lens' Actor (Maybe Administrator)
+aAdministrator
+  = lens _aAdministrator
+      (\ s a -> s{_aAdministrator = a})
+
+-- | An end user.
+aUser :: Lens' Actor (Maybe User)
+aUser = lens _aUser (\ s a -> s{_aUser = a})
+
+-- | An anonymous user.
+aAnonymous :: Lens' Actor (Maybe AnonymousUser)
+aAnonymous
+  = lens _aAnonymous (\ s a -> s{_aAnonymous = a})
+
+instance FromJSON Actor where
+        parseJSON
+          = withObject "Actor"
+              (\ o ->
+                 Actor' <$>
+                   (o .:? "impersonation") <*> (o .:? "system") <*>
+                     (o .:? "administrator")
+                     <*> (o .:? "user")
+                     <*> (o .:? "anonymous"))
+
+instance ToJSON Actor where
+        toJSON Actor'{..}
+          = object
+              (catMaybes
+                 [("impersonation" .=) <$> _aImpersonation,
+                  ("system" .=) <$> _aSystem,
+                  ("administrator" .=) <$> _aAdministrator,
+                  ("user" .=) <$> _aUser,
+                  ("anonymous" .=) <$> _aAnonymous])
+
+-- | A Drive item which is a folder.
+--
+-- /See:/ 'folder' smart constructor.
+newtype Folder = Folder'
+    { _fType :: Maybe FolderType
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Folder' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fType'
+folder
+    :: Folder
+folder =
+    Folder'
+    { _fType = Nothing
+    }
+
+-- | The type of Drive folder.
+fType :: Lens' Folder (Maybe FolderType)
+fType = lens _fType (\ s a -> s{_fType = a})
+
+instance FromJSON Folder where
+        parseJSON
+          = withObject "Folder"
+              (\ o -> Folder' <$> (o .:? "type"))
+
+instance ToJSON Folder where
+        toJSON Folder'{..}
+          = object (catMaybes [("type" .=) <$> _fType])
+
+-- | Information about the action.
+--
+-- /See:/ 'action' smart constructor.
+data Action = Action'
+    { _aTimeRange :: !(Maybe TimeRange)
+    , _aActor     :: !(Maybe Actor)
+    , _aTimestamp :: !(Maybe DateTime')
+    , _aTarget    :: !(Maybe Target)
+    , _aDetail    :: !(Maybe ActionDetail)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Action' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aTimeRange'
+--
+-- * 'aActor'
+--
+-- * 'aTimestamp'
+--
+-- * 'aTarget'
+--
+-- * 'aDetail'
+action
+    :: Action
+action =
+    Action'
+    { _aTimeRange = Nothing
+    , _aActor = Nothing
+    , _aTimestamp = Nothing
+    , _aTarget = Nothing
+    , _aDetail = Nothing
+    }
+
+-- | The action occurred over this time range.
+aTimeRange :: Lens' Action (Maybe TimeRange)
+aTimeRange
+  = lens _aTimeRange (\ s a -> s{_aTimeRange = a})
+
+-- | The actor responsible for this action (or empty if all actors are
+-- responsible).
+aActor :: Lens' Action (Maybe Actor)
+aActor = lens _aActor (\ s a -> s{_aActor = a})
+
+-- | The action occurred at this specific time.
+aTimestamp :: Lens' Action (Maybe UTCTime)
+aTimestamp
+  = lens _aTimestamp (\ s a -> s{_aTimestamp = a}) .
+      mapping _DateTime
+
+-- | The target this action affects (or empty if affecting all targets). This
+-- represents the state of the target immediately after this action
+-- occurred.
+aTarget :: Lens' Action (Maybe Target)
+aTarget = lens _aTarget (\ s a -> s{_aTarget = a})
+
+-- | The type and detailed information about the action.
+aDetail :: Lens' Action (Maybe ActionDetail)
+aDetail = lens _aDetail (\ s a -> s{_aDetail = a})
+
+instance FromJSON Action where
+        parseJSON
+          = withObject "Action"
+              (\ o ->
+                 Action' <$>
+                   (o .:? "timeRange") <*> (o .:? "actor") <*>
+                     (o .:? "timestamp")
+                     <*> (o .:? "target")
+                     <*> (o .:? "detail"))
+
+instance ToJSON Action where
+        toJSON Action'{..}
+          = object
+              (catMaybes
+                 [("timeRange" .=) <$> _aTimeRange,
+                  ("actor" .=) <$> _aActor,
+                  ("timestamp" .=) <$> _aTimestamp,
+                  ("target" .=) <$> _aTarget,
+                  ("detail" .=) <$> _aDetail])
+
+-- | Information about a Team Drive.
+--
+-- /See:/ 'teamDrive' smart constructor.
+data TeamDrive = TeamDrive'
+    { _tdRoot  :: !(Maybe DriveItem)
+    , _tdName  :: !(Maybe Text)
+    , _tdTitle :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TeamDrive' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tdRoot'
+--
+-- * 'tdName'
+--
+-- * 'tdTitle'
+teamDrive
+    :: TeamDrive
+teamDrive =
+    TeamDrive'
+    { _tdRoot = Nothing
+    , _tdName = Nothing
+    , _tdTitle = Nothing
+    }
+
+-- | The root of this Team Drive.
+tdRoot :: Lens' TeamDrive (Maybe DriveItem)
+tdRoot = lens _tdRoot (\ s a -> s{_tdRoot = a})
+
+-- | The resource name of the Team Drive. The format is
+-- \"teamDrives\/TEAM_DRIVE_ID\".
+tdName :: Lens' TeamDrive (Maybe Text)
+tdName = lens _tdName (\ s a -> s{_tdName = a})
+
+-- | The title of the Team Drive.
+tdTitle :: Lens' TeamDrive (Maybe Text)
+tdTitle = lens _tdTitle (\ s a -> s{_tdTitle = a})
+
+instance FromJSON TeamDrive where
+        parseJSON
+          = withObject "TeamDrive"
+              (\ o ->
+                 TeamDrive' <$>
+                   (o .:? "root") <*> (o .:? "name") <*>
+                     (o .:? "title"))
+
+instance ToJSON TeamDrive where
+        toJSON TeamDrive'{..}
+          = object
+              (catMaybes
+                 [("root" .=) <$> _tdRoot, ("name" .=) <$> _tdName,
+                  ("title" .=) <$> _tdTitle])
+
+-- | A user about whom nothing is currently known.
+--
+-- /See:/ 'unknownUser' smart constructor.
+data UnknownUser =
+    UnknownUser'
+    deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UnknownUser' with the minimum fields required to make a request.
+--
+unknownUser
+    :: UnknownUser
+unknownUser = UnknownUser'
+
+instance FromJSON UnknownUser where
+        parseJSON
+          = withObject "UnknownUser" (\ o -> pure UnknownUser')
+
+instance ToJSON UnknownUser where
+        toJSON = const emptyObject
+
+-- | Information about the owner of a Drive item.
+--
+-- /See:/ 'owner' smart constructor.
+data Owner = Owner'
+    { _oDomain    :: !(Maybe Domain)
+    , _oTeamDrive :: !(Maybe TeamDriveReference)
+    , _oUser      :: !(Maybe User)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Owner' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'oDomain'
+--
+-- * 'oTeamDrive'
+--
+-- * 'oUser'
+owner
+    :: Owner
+owner =
+    Owner'
+    { _oDomain = Nothing
+    , _oTeamDrive = Nothing
+    , _oUser = Nothing
+    }
+
+-- | The domain of the Drive item owner.
+oDomain :: Lens' Owner (Maybe Domain)
+oDomain = lens _oDomain (\ s a -> s{_oDomain = a})
+
+-- | The Team Drive that owns the Drive item.
+oTeamDrive :: Lens' Owner (Maybe TeamDriveReference)
+oTeamDrive
+  = lens _oTeamDrive (\ s a -> s{_oTeamDrive = a})
+
+-- | The user that owns the Drive item.
+oUser :: Lens' Owner (Maybe User)
+oUser = lens _oUser (\ s a -> s{_oUser = a})
+
+instance FromJSON Owner where
+        parseJSON
+          = withObject "Owner"
+              (\ o ->
+                 Owner' <$>
+                   (o .:? "domain") <*> (o .:? "teamDrive") <*>
+                     (o .:? "user"))
+
+instance ToJSON Owner where
+        toJSON Owner'{..}
+          = object
+              (catMaybes
+                 [("domain" .=) <$> _oDomain,
+                  ("teamDrive" .=) <$> _oTeamDrive,
+                  ("user" .=) <$> _oUser])
+
+-- | Activity in applications other than Drive.
+--
+-- /See:/ 'applicationReference' smart constructor.
+newtype ApplicationReference = ApplicationReference'
+    { _arType :: Maybe ApplicationReferenceType
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ApplicationReference' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'arType'
+applicationReference
+    :: ApplicationReference
+applicationReference =
+    ApplicationReference'
+    { _arType = Nothing
+    }
+
+-- | The reference type corresponding to this event.
+arType :: Lens' ApplicationReference (Maybe ApplicationReferenceType)
+arType = lens _arType (\ s a -> s{_arType = a})
+
+instance FromJSON ApplicationReference where
+        parseJSON
+          = withObject "ApplicationReference"
+              (\ o -> ApplicationReference' <$> (o .:? "type"))
+
+instance ToJSON ApplicationReference where
+        toJSON ApplicationReference'{..}
+          = object (catMaybes [("type" .=) <$> _arType])
+
+-- | How the individual activities are consolidated. A set of activities may
+-- be consolidated into one combined activity if they are related in some
+-- way, such as one actor performing the same action on multiple targets,
+-- or multiple actors performing the same action on a single target. The
+-- strategy defines the rules for which activities are related.
+--
+-- /See:/ 'consolidationStrategy' smart constructor.
+data ConsolidationStrategy = ConsolidationStrategy'
+    { _csNone   :: !(Maybe NoConsolidation)
+    , _csLegacy :: !(Maybe Legacy)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ConsolidationStrategy' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'csNone'
+--
+-- * 'csLegacy'
+consolidationStrategy
+    :: ConsolidationStrategy
+consolidationStrategy =
+    ConsolidationStrategy'
+    { _csNone = Nothing
+    , _csLegacy = Nothing
+    }
+
+-- | The individual activities are not consolidated.
+csNone :: Lens' ConsolidationStrategy (Maybe NoConsolidation)
+csNone = lens _csNone (\ s a -> s{_csNone = a})
+
+-- | The individual activities are consolidated using the legacy strategy.
+csLegacy :: Lens' ConsolidationStrategy (Maybe Legacy)
+csLegacy = lens _csLegacy (\ s a -> s{_csLegacy = a})
+
+instance FromJSON ConsolidationStrategy where
+        parseJSON
+          = withObject "ConsolidationStrategy"
+              (\ o ->
+                 ConsolidationStrategy' <$>
+                   (o .:? "none") <*> (o .:? "legacy"))
+
+instance ToJSON ConsolidationStrategy where
+        toJSON ConsolidationStrategy'{..}
+          = object
+              (catMaybes
+                 [("none" .=) <$> _csNone,
+                  ("legacy" .=) <$> _csLegacy])
+
+-- | Information about an end user.
+--
+-- /See:/ 'user' smart constructor.
+data User = User'
+    { _uKnownUser   :: !(Maybe KnownUser)
+    , _uUnknownUser :: !(Maybe UnknownUser)
+    , _uDeletedUser :: !(Maybe DeletedUser)
+    } 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:
+--
+-- * 'uKnownUser'
+--
+-- * 'uUnknownUser'
+--
+-- * 'uDeletedUser'
+user
+    :: User
+user =
+    User'
+    { _uKnownUser = Nothing
+    , _uUnknownUser = Nothing
+    , _uDeletedUser = Nothing
+    }
+
+-- | A known user.
+uKnownUser :: Lens' User (Maybe KnownUser)
+uKnownUser
+  = lens _uKnownUser (\ s a -> s{_uKnownUser = a})
+
+-- | A user about whom nothing is currently known.
+uUnknownUser :: Lens' User (Maybe UnknownUser)
+uUnknownUser
+  = lens _uUnknownUser (\ s a -> s{_uUnknownUser = a})
+
+-- | A user whose account has since been deleted.
+uDeletedUser :: Lens' User (Maybe DeletedUser)
+uDeletedUser
+  = lens _uDeletedUser (\ s a -> s{_uDeletedUser = a})
+
+instance FromJSON User where
+        parseJSON
+          = withObject "User"
+              (\ o ->
+                 User' <$>
+                   (o .:? "knownUser") <*> (o .:? "unknownUser") <*>
+                     (o .:? "deletedUser"))
+
+instance ToJSON User where
+        toJSON User'{..}
+          = object
+              (catMaybes
+                 [("knownUser" .=) <$> _uKnownUser,
+                  ("unknownUser" .=) <$> _uUnknownUser,
+                  ("deletedUser" .=) <$> _uDeletedUser])
+
+-- | A user whose account has since been deleted.
+--
+-- /See:/ 'deletedUser' smart constructor.
+data DeletedUser =
+    DeletedUser'
+    deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeletedUser' with the minimum fields required to make a request.
+--
+deletedUser
+    :: DeletedUser
+deletedUser = DeletedUser'
+
+instance FromJSON DeletedUser where
+        parseJSON
+          = withObject "DeletedUser" (\ o -> pure DeletedUser')
+
+instance ToJSON DeletedUser where
+        toJSON = const emptyObject
+
+-- | An object was created.
+--
+-- /See:/ 'create' smart constructor.
+data Create = Create'
+    { _cCopy   :: !(Maybe Copy)
+    , _cNew    :: !(Maybe New)
+    , _cUpload :: !(Maybe Upload)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Create' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cCopy'
+--
+-- * 'cNew'
+--
+-- * 'cUpload'
+create
+    :: Create
+create =
+    Create'
+    { _cCopy = Nothing
+    , _cNew = Nothing
+    , _cUpload = Nothing
+    }
+
+-- | If present, indicates the object was created by copying an existing
+-- Drive object.
+cCopy :: Lens' Create (Maybe Copy)
+cCopy = lens _cCopy (\ s a -> s{_cCopy = a})
+
+-- | If present, indicates the object was newly created (e.g. as a blank
+-- document), not derived from a Drive object or external object.
+cNew :: Lens' Create (Maybe New)
+cNew = lens _cNew (\ s a -> s{_cNew = a})
+
+-- | If present, indicates the object originated externally and was uploaded
+-- to Drive.
+cUpload :: Lens' Create (Maybe Upload)
+cUpload = lens _cUpload (\ s a -> s{_cUpload = a})
+
+instance FromJSON Create where
+        parseJSON
+          = withObject "Create"
+              (\ o ->
+                 Create' <$>
+                   (o .:? "copy") <*> (o .:? "new") <*>
+                     (o .:? "upload"))
+
+instance ToJSON Create where
+        toJSON Create'{..}
+          = object
+              (catMaybes
+                 [("copy" .=) <$> _cCopy, ("new" .=) <$> _cNew,
+                  ("upload" .=) <$> _cUpload])
+
+-- | An object was created from scratch.
+--
+-- /See:/ 'new' smart constructor.
+data New =
+    New'
+    deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'New' with the minimum fields required to make a request.
+--
+new
+    :: New
+new = New'
+
+instance FromJSON New where
+        parseJSON = withObject "New" (\ o -> pure New')
+
+instance ToJSON New where
+        toJSON = const emptyObject
+
+-- | A lightweight reference to a Team Drive.
+--
+-- /See:/ 'teamDriveReference' smart constructor.
+data TeamDriveReference = TeamDriveReference'
+    { _tdrName  :: !(Maybe Text)
+    , _tdrTitle :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TeamDriveReference' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tdrName'
+--
+-- * 'tdrTitle'
+teamDriveReference
+    :: TeamDriveReference
+teamDriveReference =
+    TeamDriveReference'
+    { _tdrName = Nothing
+    , _tdrTitle = Nothing
+    }
+
+-- | The resource name of the Team Drive. The format is
+-- \"teamDrives\/TEAM_DRIVE_ID\".
+tdrName :: Lens' TeamDriveReference (Maybe Text)
+tdrName = lens _tdrName (\ s a -> s{_tdrName = a})
+
+-- | The title of the Team Drive.
+tdrTitle :: Lens' TeamDriveReference (Maybe Text)
+tdrTitle = lens _tdrTitle (\ s a -> s{_tdrTitle = a})
+
+instance FromJSON TeamDriveReference where
+        parseJSON
+          = withObject "TeamDriveReference"
+              (\ o ->
+                 TeamDriveReference' <$>
+                   (o .:? "name") <*> (o .:? "title"))
+
+instance ToJSON TeamDriveReference where
+        toJSON TeamDriveReference'{..}
+          = object
+              (catMaybes
+                 [("name" .=) <$> _tdrName,
+                  ("title" .=) <$> _tdrTitle])
+
+-- | Empty message representing an anonymous user or indicating the
+-- authenticated user should be anonymized.
+--
+-- /See:/ 'anonymousUser' smart constructor.
+data AnonymousUser =
+    AnonymousUser'
+    deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AnonymousUser' with the minimum fields required to make a request.
+--
+anonymousUser
+    :: AnonymousUser
+anonymousUser = AnonymousUser'
+
+instance FromJSON AnonymousUser where
+        parseJSON
+          = withObject "AnonymousUser"
+              (\ o -> pure AnonymousUser')
+
+instance ToJSON AnonymousUser where
+        toJSON = const emptyObject
+
+-- | Represents any user (including a logged out user).
+--
+-- /See:/ 'anyone' smart constructor.
+data Anyone =
+    Anyone'
+    deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Anyone' with the minimum fields required to make a request.
+--
+anyone
+    :: Anyone
+anyone = Anyone'
+
+instance FromJSON Anyone where
+        parseJSON = withObject "Anyone" (\ o -> pure Anyone')
+
+instance ToJSON Anyone where
+        toJSON = const emptyObject
+
+-- | Information about restriction policy changes to a feature.
+--
+-- /See:/ 'restrictionChange' smart constructor.
+data RestrictionChange = RestrictionChange'
+    { _rcFeature        :: !(Maybe RestrictionChangeFeature)
+    , _rcNewRestriction :: !(Maybe RestrictionChangeNewRestriction)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RestrictionChange' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rcFeature'
+--
+-- * 'rcNewRestriction'
+restrictionChange
+    :: RestrictionChange
+restrictionChange =
+    RestrictionChange'
+    { _rcFeature = Nothing
+    , _rcNewRestriction = Nothing
+    }
+
+-- | The feature which had a change in restriction policy.
+rcFeature :: Lens' RestrictionChange (Maybe RestrictionChangeFeature)
+rcFeature
+  = lens _rcFeature (\ s a -> s{_rcFeature = a})
+
+-- | The restriction in place after the change.
+rcNewRestriction :: Lens' RestrictionChange (Maybe RestrictionChangeNewRestriction)
+rcNewRestriction
+  = lens _rcNewRestriction
+      (\ s a -> s{_rcNewRestriction = a})
+
+instance FromJSON RestrictionChange where
+        parseJSON
+          = withObject "RestrictionChange"
+              (\ o ->
+                 RestrictionChange' <$>
+                   (o .:? "feature") <*> (o .:? "newRestriction"))
+
+instance ToJSON RestrictionChange where
+        toJSON RestrictionChange'{..}
+          = object
+              (catMaybes
+                 [("feature" .=) <$> _rcFeature,
+                  ("newRestriction" .=) <$> _rcNewRestriction])
+
+-- | A strategy which consolidates activities using the grouping rules from
+-- the legacy V1 Activity API. Similar actions occurring within a window of
+-- time can be grouped across multiple targets (such as moving a set of
+-- files at once) or multiple actors (such as several users editing the
+-- same item). Grouping rules for this strategy are specific to each type
+-- of action.
+--
+-- /See:/ 'legacy' smart constructor.
+data Legacy =
+    Legacy'
+    deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Legacy' with the minimum fields required to make a request.
+--
+legacy
+    :: Legacy
+legacy = Legacy'
+
+instance FromJSON Legacy where
+        parseJSON = withObject "Legacy" (\ o -> pure Legacy')
+
+instance ToJSON Legacy where
+        toJSON = const emptyObject
+
+-- | A comment on a file.
+--
+-- /See:/ 'fileComment' smart constructor.
+data FileComment = FileComment'
+    { _fcParent             :: !(Maybe DriveItem)
+    , _fcLegacyDiscussionId :: !(Maybe Text)
+    , _fcLegacyCommentId    :: !(Maybe Text)
+    , _fcLinkToDiscussion   :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FileComment' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fcParent'
+--
+-- * 'fcLegacyDiscussionId'
+--
+-- * 'fcLegacyCommentId'
+--
+-- * 'fcLinkToDiscussion'
+fileComment
+    :: FileComment
+fileComment =
+    FileComment'
+    { _fcParent = Nothing
+    , _fcLegacyDiscussionId = Nothing
+    , _fcLegacyCommentId = Nothing
+    , _fcLinkToDiscussion = Nothing
+    }
+
+-- | The Drive item containing this comment.
+fcParent :: Lens' FileComment (Maybe DriveItem)
+fcParent = lens _fcParent (\ s a -> s{_fcParent = a})
+
+-- | The discussion thread to which the comment was added. This identifier is
+-- an opaque string compatible with the Drive API and references the first
+-- comment in a discussion; see
+-- https:\/\/developers.google.com\/drive\/v3\/reference\/comments\/get
+fcLegacyDiscussionId :: Lens' FileComment (Maybe Text)
+fcLegacyDiscussionId
+  = lens _fcLegacyDiscussionId
+      (\ s a -> s{_fcLegacyDiscussionId = a})
+
+-- | The comment in the discussion thread. This identifier is an opaque
+-- string compatible with the Drive API; see
+-- https:\/\/developers.google.com\/drive\/v3\/reference\/comments\/get
+fcLegacyCommentId :: Lens' FileComment (Maybe Text)
+fcLegacyCommentId
+  = lens _fcLegacyCommentId
+      (\ s a -> s{_fcLegacyCommentId = a})
+
+-- | The link to the discussion thread containing this comment, for example,
+-- \"https:\/\/docs.google.com\/DOCUMENT_ID\/edit?disco=THREAD_ID\".
+fcLinkToDiscussion :: Lens' FileComment (Maybe Text)
+fcLinkToDiscussion
+  = lens _fcLinkToDiscussion
+      (\ s a -> s{_fcLinkToDiscussion = a})
+
+instance FromJSON FileComment where
+        parseJSON
+          = withObject "FileComment"
+              (\ o ->
+                 FileComment' <$>
+                   (o .:? "parent") <*> (o .:? "legacyDiscussionId") <*>
+                     (o .:? "legacyCommentId")
+                     <*> (o .:? "linkToDiscussion"))
+
+instance ToJSON FileComment where
+        toJSON FileComment'{..}
+          = object
+              (catMaybes
+                 [("parent" .=) <$> _fcParent,
+                  ("legacyDiscussionId" .=) <$> _fcLegacyDiscussionId,
+                  ("legacyCommentId" .=) <$> _fcLegacyCommentId,
+                  ("linkToDiscussion" .=) <$> _fcLinkToDiscussion])
+
+-- | An object was renamed.
+--
+-- /See:/ 'rename' smart constructor.
+data Rename = Rename'
+    { _rNewTitle :: !(Maybe Text)
+    , _rOldTitle :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Rename' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rNewTitle'
+--
+-- * 'rOldTitle'
+rename
+    :: Rename
+rename =
+    Rename'
+    { _rNewTitle = Nothing
+    , _rOldTitle = Nothing
+    }
+
+-- | The new title of the drive object.
+rNewTitle :: Lens' Rename (Maybe Text)
+rNewTitle
+  = lens _rNewTitle (\ s a -> s{_rNewTitle = a})
+
+-- | The previous title of the drive object.
+rOldTitle :: Lens' Rename (Maybe Text)
+rOldTitle
+  = lens _rOldTitle (\ s a -> s{_rOldTitle = a})
+
+instance FromJSON Rename where
+        parseJSON
+          = withObject "Rename"
+              (\ o ->
+                 Rename' <$>
+                   (o .:? "newTitle") <*> (o .:? "oldTitle"))
+
+instance ToJSON Rename where
+        toJSON Rename'{..}
+          = object
+              (catMaybes
+                 [("newTitle" .=) <$> _rNewTitle,
+                  ("oldTitle" .=) <$> _rOldTitle])
+
+-- | An object was uploaded into Drive.
+--
+-- /See:/ 'upload' smart constructor.
+data Upload =
+    Upload'
+    deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Upload' with the minimum fields required to make a request.
+--
+upload
+    :: Upload
+upload = Upload'
+
+instance FromJSON Upload where
+        parseJSON = withObject "Upload" (\ o -> pure Upload')
+
+instance ToJSON Upload where
+        toJSON = const emptyObject
+
+-- | A strategy which does no consolidation of individual activities.
+--
+-- /See:/ 'noConsolidation' smart constructor.
+data NoConsolidation =
+    NoConsolidation'
+    deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'NoConsolidation' with the minimum fields required to make a request.
+--
+noConsolidation
+    :: NoConsolidation
+noConsolidation = NoConsolidation'
+
+instance FromJSON NoConsolidation where
+        parseJSON
+          = withObject "NoConsolidation"
+              (\ o -> pure NoConsolidation')
+
+instance ToJSON NoConsolidation where
+        toJSON = const emptyObject
+
+-- | A comment with an assignment.
+--
+-- /See:/ 'assignment' smart constructor.
+newtype Assignment = Assignment'
+    { _aSubtype :: Maybe AssignmentSubtype
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Assignment' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aSubtype'
+assignment
+    :: Assignment
+assignment =
+    Assignment'
+    { _aSubtype = Nothing
+    }
+
+-- | The sub-type of this event.
+aSubtype :: Lens' Assignment (Maybe AssignmentSubtype)
+aSubtype = lens _aSubtype (\ s a -> s{_aSubtype = a})
+
+instance FromJSON Assignment where
+        parseJSON
+          = withObject "Assignment"
+              (\ o -> Assignment' <$> (o .:? "subtype"))
+
+instance ToJSON Assignment where
+        toJSON Assignment'{..}
+          = object (catMaybes [("subtype" .=) <$> _aSubtype])
+
+-- | Information about settings changes.
+--
+-- /See:/ 'settingsChange' smart constructor.
+newtype SettingsChange = SettingsChange'
+    { _scRestrictionChanges :: Maybe [RestrictionChange]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SettingsChange' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'scRestrictionChanges'
+settingsChange
+    :: SettingsChange
+settingsChange =
+    SettingsChange'
+    { _scRestrictionChanges = Nothing
+    }
+
+-- | The set of changes made to restrictions.
+scRestrictionChanges :: Lens' SettingsChange [RestrictionChange]
+scRestrictionChanges
+  = lens _scRestrictionChanges
+      (\ s a -> s{_scRestrictionChanges = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON SettingsChange where
+        parseJSON
+          = withObject "SettingsChange"
+              (\ o ->
+                 SettingsChange' <$>
+                   (o .:? "restrictionChanges" .!= mempty))
+
+instance ToJSON SettingsChange where
+        toJSON SettingsChange'{..}
+          = object
+              (catMaybes
+                 [("restrictionChanges" .=) <$>
+                    _scRestrictionChanges])
+
+-- | A change about comments on an object.
+--
+-- /See:/ 'comment' smart constructor.
+data Comment = Comment'
+    { _cSuggestion     :: !(Maybe Suggestion)
+    , _cPost           :: !(Maybe Post')
+    , _cMentionedUsers :: !(Maybe [User])
+    , _cAssignment     :: !(Maybe Assignment)
+    } 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:
+--
+-- * 'cSuggestion'
+--
+-- * 'cPost'
+--
+-- * 'cMentionedUsers'
+--
+-- * 'cAssignment'
+comment
+    :: Comment
+comment =
+    Comment'
+    { _cSuggestion = Nothing
+    , _cPost = Nothing
+    , _cMentionedUsers = Nothing
+    , _cAssignment = Nothing
+    }
+
+-- | A change on a suggestion.
+cSuggestion :: Lens' Comment (Maybe Suggestion)
+cSuggestion
+  = lens _cSuggestion (\ s a -> s{_cSuggestion = a})
+
+-- | A change on a regular posted comment.
+cPost :: Lens' Comment (Maybe Post')
+cPost = lens _cPost (\ s a -> s{_cPost = a})
+
+-- | Users who are mentioned in this comment.
+cMentionedUsers :: Lens' Comment [User]
+cMentionedUsers
+  = lens _cMentionedUsers
+      (\ s a -> s{_cMentionedUsers = a})
+      . _Default
+      . _Coerce
+
+-- | A change on an assignment.
+cAssignment :: Lens' Comment (Maybe Assignment)
+cAssignment
+  = lens _cAssignment (\ s a -> s{_cAssignment = a})
+
+instance FromJSON Comment where
+        parseJSON
+          = withObject "Comment"
+              (\ o ->
+                 Comment' <$>
+                   (o .:? "suggestion") <*> (o .:? "post") <*>
+                     (o .:? "mentionedUsers" .!= mempty)
+                     <*> (o .:? "assignment"))
+
+instance ToJSON Comment where
+        toJSON Comment'{..}
+          = object
+              (catMaybes
+                 [("suggestion" .=) <$> _cSuggestion,
+                  ("post" .=) <$> _cPost,
+                  ("mentionedUsers" .=) <$> _cMentionedUsers,
+                  ("assignment" .=) <$> _cAssignment])
+
+-- | The permission setting of an object.
+--
+-- /See:/ 'permission' smart constructor.
+data Permission = Permission'
+    { _pGroup          :: !(Maybe Group)
+    , _pDomain         :: !(Maybe Domain)
+    , _pUser           :: !(Maybe User)
+    , _pRole           :: !(Maybe PermissionRole)
+    , _pAnyone         :: !(Maybe Anyone)
+    , _pAllowDiscovery :: !(Maybe Bool)
+    } 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:
+--
+-- * 'pGroup'
+--
+-- * 'pDomain'
+--
+-- * 'pUser'
+--
+-- * 'pRole'
+--
+-- * 'pAnyone'
+--
+-- * 'pAllowDiscovery'
+permission
+    :: Permission
+permission =
+    Permission'
+    { _pGroup = Nothing
+    , _pDomain = Nothing
+    , _pUser = Nothing
+    , _pRole = Nothing
+    , _pAnyone = Nothing
+    , _pAllowDiscovery = Nothing
+    }
+
+-- | The group to whom this permission applies.
+pGroup :: Lens' Permission (Maybe Group)
+pGroup = lens _pGroup (\ s a -> s{_pGroup = a})
+
+-- | The domain to whom this permission applies.
+pDomain :: Lens' Permission (Maybe Domain)
+pDomain = lens _pDomain (\ s a -> s{_pDomain = a})
+
+-- | The user to whom this permission applies.
+pUser :: Lens' Permission (Maybe User)
+pUser = lens _pUser (\ s a -> s{_pUser = a})
+
+-- | Indicates the
+-- </drive/web/manage-sharing#roles Google Drive permissions role>. The
+-- role determines a user\'s ability to read, write, and comment on items.
+pRole :: Lens' Permission (Maybe PermissionRole)
+pRole = lens _pRole (\ s a -> s{_pRole = a})
+
+-- | If set, this permission applies to anyone, even logged out users.
+pAnyone :: Lens' Permission (Maybe Anyone)
+pAnyone = lens _pAnyone (\ s a -> s{_pAnyone = a})
+
+-- | If true, the item can be discovered (e.g. in the user\'s \"Shared with
+-- me\" collection) without needing a link to the item.
+pAllowDiscovery :: Lens' Permission (Maybe Bool)
+pAllowDiscovery
+  = lens _pAllowDiscovery
+      (\ s a -> s{_pAllowDiscovery = a})
+
+instance FromJSON Permission where
+        parseJSON
+          = withObject "Permission"
+              (\ o ->
+                 Permission' <$>
+                   (o .:? "group") <*> (o .:? "domain") <*>
+                     (o .:? "user")
+                     <*> (o .:? "role")
+                     <*> (o .:? "anyone")
+                     <*> (o .:? "allowDiscovery"))
+
+instance ToJSON Permission where
+        toJSON Permission'{..}
+          = object
+              (catMaybes
+                 [("group" .=) <$> _pGroup,
+                  ("domain" .=) <$> _pDomain, ("user" .=) <$> _pUser,
+                  ("role" .=) <$> _pRole, ("anyone" .=) <$> _pAnyone,
+                  ("allowDiscovery" .=) <$> _pAllowDiscovery])
+
+-- | A Drive item which is a file.
+--
+-- /See:/ 'file' smart constructor.
+data File =
+    File'
+    deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'File' with the minimum fields required to make a request.
+--
+file
+    :: File
+file = File'
+
+instance FromJSON File where
+        parseJSON = withObject "File" (\ o -> pure File')
+
+instance ToJSON File where
+        toJSON = const emptyObject
+
+-- | An object was deleted.
+--
+-- /See:/ 'delete'' smart constructor.
+newtype Delete' = Delete''
+    { _dType :: Maybe DeleteType
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Delete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dType'
+delete'
+    :: Delete'
+delete' =
+    Delete''
+    { _dType = Nothing
+    }
+
+-- | The type of delete action taken.
+dType :: Lens' Delete' (Maybe DeleteType)
+dType = lens _dType (\ s a -> s{_dType = a})
+
+instance FromJSON Delete' where
+        parseJSON
+          = withObject "Delete"
+              (\ o -> Delete'' <$> (o .:? "type"))
+
+instance ToJSON Delete' where
+        toJSON Delete''{..}
+          = object (catMaybes [("type" .=) <$> _dType])
+
+-- | Information about the target of activity.
+--
+-- /See:/ 'target' smart constructor.
+data Target = Target'
+    { _tTeamDrive   :: !(Maybe TeamDrive)
+    , _tFileComment :: !(Maybe FileComment)
+    , _tDriveItem   :: !(Maybe DriveItem)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Target' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tTeamDrive'
+--
+-- * 'tFileComment'
+--
+-- * 'tDriveItem'
+target
+    :: Target
+target =
+    Target'
+    { _tTeamDrive = Nothing
+    , _tFileComment = Nothing
+    , _tDriveItem = Nothing
+    }
+
+-- | The target is a Team Drive.
+tTeamDrive :: Lens' Target (Maybe TeamDrive)
+tTeamDrive
+  = lens _tTeamDrive (\ s a -> s{_tTeamDrive = a})
+
+-- | The target is a comment on a Drive file.
+tFileComment :: Lens' Target (Maybe FileComment)
+tFileComment
+  = lens _tFileComment (\ s a -> s{_tFileComment = a})
+
+-- | The target is a Drive item.
+tDriveItem :: Lens' Target (Maybe DriveItem)
+tDriveItem
+  = lens _tDriveItem (\ s a -> s{_tDriveItem = a})
+
+instance FromJSON Target where
+        parseJSON
+          = withObject "Target"
+              (\ o ->
+                 Target' <$>
+                   (o .:? "teamDrive") <*> (o .:? "fileComment") <*>
+                     (o .:? "driveItem"))
+
+instance ToJSON Target where
+        toJSON Target'{..}
+          = object
+              (catMaybes
+                 [("teamDrive" .=) <$> _tTeamDrive,
+                  ("fileComment" .=) <$> _tFileComment,
+                  ("driveItem" .=) <$> _tDriveItem])
+
+-- | An object was moved.
+--
+-- /See:/ 'move' smart constructor.
+data Move = Move'
+    { _mAddedParents   :: !(Maybe [TargetReference])
+    , _mRemovedParents :: !(Maybe [TargetReference])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Move' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mAddedParents'
+--
+-- * 'mRemovedParents'
+move
+    :: Move
+move =
+    Move'
+    { _mAddedParents = Nothing
+    , _mRemovedParents = Nothing
+    }
+
+-- | The added parent object(s).
+mAddedParents :: Lens' Move [TargetReference]
+mAddedParents
+  = lens _mAddedParents
+      (\ s a -> s{_mAddedParents = a})
+      . _Default
+      . _Coerce
+
+-- | The removed parent object(s).
+mRemovedParents :: Lens' Move [TargetReference]
+mRemovedParents
+  = lens _mRemovedParents
+      (\ s a -> s{_mRemovedParents = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON Move where
+        parseJSON
+          = withObject "Move"
+              (\ o ->
+                 Move' <$>
+                   (o .:? "addedParents" .!= mempty) <*>
+                     (o .:? "removedParents" .!= mempty))
+
+instance ToJSON Move where
+        toJSON Move'{..}
+          = object
+              (catMaybes
+                 [("addedParents" .=) <$> _mAddedParents,
+                  ("removedParents" .=) <$> _mRemovedParents])
+
+-- | A single Drive activity comprising one or more Actions by one or more
+-- Actors on one or more Targets. Some Action groupings occur
+-- spontaneously, such as moving an item into a shared folder triggering a
+-- permission change. Other groupings of related Actions, such as multiple
+-- Actors editing one item or moving multiple files into a new folder, are
+-- controlled by the selection of a ConsolidationStrategy in the
+-- QueryDriveActivityRequest.
+--
+-- /See:/ 'driveActivity' smart constructor.
+data DriveActivity = DriveActivity'
+    { _daTimeRange           :: !(Maybe TimeRange)
+    , _daActions             :: !(Maybe [Action])
+    , _daActors              :: !(Maybe [Actor])
+    , _daTargets             :: !(Maybe [Target])
+    , _daPrimaryActionDetail :: !(Maybe ActionDetail)
+    , _daTimestamp           :: !(Maybe DateTime')
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DriveActivity' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'daTimeRange'
+--
+-- * 'daActions'
+--
+-- * 'daActors'
+--
+-- * 'daTargets'
+--
+-- * 'daPrimaryActionDetail'
+--
+-- * 'daTimestamp'
+driveActivity
+    :: DriveActivity
+driveActivity =
+    DriveActivity'
+    { _daTimeRange = Nothing
+    , _daActions = Nothing
+    , _daActors = Nothing
+    , _daTargets = Nothing
+    , _daPrimaryActionDetail = Nothing
+    , _daTimestamp = Nothing
+    }
+
+-- | The activity occurred over this time range.
+daTimeRange :: Lens' DriveActivity (Maybe TimeRange)
+daTimeRange
+  = lens _daTimeRange (\ s a -> s{_daTimeRange = a})
+
+-- | Details on all actions in this activity.
+daActions :: Lens' DriveActivity [Action]
+daActions
+  = lens _daActions (\ s a -> s{_daActions = a}) .
+      _Default
+      . _Coerce
+
+-- | All actor(s) responsible for the activity.
+daActors :: Lens' DriveActivity [Actor]
+daActors
+  = lens _daActors (\ s a -> s{_daActors = a}) .
+      _Default
+      . _Coerce
+
+-- | All Drive objects this activity is about (e.g. file, folder, Team
+-- Drive). This represents the state of the target immediately after the
+-- actions occurred.
+daTargets :: Lens' DriveActivity [Target]
+daTargets
+  = lens _daTargets (\ s a -> s{_daTargets = a}) .
+      _Default
+      . _Coerce
+
+-- | Key information about the primary action for this activity. This is
+-- either representative, or the most important, of all actions in the
+-- activity, according to the ConsolidationStrategy in the request.
+daPrimaryActionDetail :: Lens' DriveActivity (Maybe ActionDetail)
+daPrimaryActionDetail
+  = lens _daPrimaryActionDetail
+      (\ s a -> s{_daPrimaryActionDetail = a})
+
+-- | The activity occurred at this specific time.
+daTimestamp :: Lens' DriveActivity (Maybe UTCTime)
+daTimestamp
+  = lens _daTimestamp (\ s a -> s{_daTimestamp = a}) .
+      mapping _DateTime
+
+instance FromJSON DriveActivity where
+        parseJSON
+          = withObject "DriveActivity"
+              (\ o ->
+                 DriveActivity' <$>
+                   (o .:? "timeRange") <*> (o .:? "actions" .!= mempty)
+                     <*> (o .:? "actors" .!= mempty)
+                     <*> (o .:? "targets" .!= mempty)
+                     <*> (o .:? "primaryActionDetail")
+                     <*> (o .:? "timestamp"))
+
+instance ToJSON DriveActivity where
+        toJSON DriveActivity'{..}
+          = object
+              (catMaybes
+                 [("timeRange" .=) <$> _daTimeRange,
+                  ("actions" .=) <$> _daActions,
+                  ("actors" .=) <$> _daActors,
+                  ("targets" .=) <$> _daTargets,
+                  ("primaryActionDetail" .=) <$>
+                    _daPrimaryActionDetail,
+                  ("timestamp" .=) <$> _daTimestamp])
+
+-- | A Drive item, such as a file or folder.
+--
+-- /See:/ 'driveItem' smart constructor.
+data DriveItem = DriveItem'
+    { _diFolder   :: !(Maybe Folder)
+    , _diOwner    :: !(Maybe Owner)
+    , _diMimeType :: !(Maybe Text)
+    , _diName     :: !(Maybe Text)
+    , _diTitle    :: !(Maybe Text)
+    , _diFile     :: !(Maybe File)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DriveItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'diFolder'
+--
+-- * 'diOwner'
+--
+-- * 'diMimeType'
+--
+-- * 'diName'
+--
+-- * 'diTitle'
+--
+-- * 'diFile'
+driveItem
+    :: DriveItem
+driveItem =
+    DriveItem'
+    { _diFolder = Nothing
+    , _diOwner = Nothing
+    , _diMimeType = Nothing
+    , _diName = Nothing
+    , _diTitle = Nothing
+    , _diFile = Nothing
+    }
+
+-- | The Drive item is a folder.
+diFolder :: Lens' DriveItem (Maybe Folder)
+diFolder = lens _diFolder (\ s a -> s{_diFolder = a})
+
+-- | Information about the owner of this Drive item.
+diOwner :: Lens' DriveItem (Maybe Owner)
+diOwner = lens _diOwner (\ s a -> s{_diOwner = a})
+
+-- | The MIME type of the Drive item. See
+-- https:\/\/developers.google.com\/drive\/v3\/web\/mime-types.
+diMimeType :: Lens' DriveItem (Maybe Text)
+diMimeType
+  = lens _diMimeType (\ s a -> s{_diMimeType = a})
+
+-- | The target Drive item. The format is \"items\/ITEM_ID\".
+diName :: Lens' DriveItem (Maybe Text)
+diName = lens _diName (\ s a -> s{_diName = a})
+
+-- | The title of the Drive item.
+diTitle :: Lens' DriveItem (Maybe Text)
+diTitle = lens _diTitle (\ s a -> s{_diTitle = a})
+
+-- | The Drive item is a file.
+diFile :: Lens' DriveItem (Maybe File)
+diFile = lens _diFile (\ s a -> s{_diFile = a})
+
+instance FromJSON DriveItem where
+        parseJSON
+          = withObject "DriveItem"
+              (\ o ->
+                 DriveItem' <$>
+                   (o .:? "folder") <*> (o .:? "owner") <*>
+                     (o .:? "mimeType")
+                     <*> (o .:? "name")
+                     <*> (o .:? "title")
+                     <*> (o .:? "file"))
+
+instance ToJSON DriveItem where
+        toJSON DriveItem'{..}
+          = object
+              (catMaybes
+                 [("folder" .=) <$> _diFolder,
+                  ("owner" .=) <$> _diOwner,
+                  ("mimeType" .=) <$> _diMimeType,
+                  ("name" .=) <$> _diName, ("title" .=) <$> _diTitle,
+                  ("file" .=) <$> _diFile])
+
+-- | Event triggered by system operations instead of end users.
+--
+-- /See:/ 'systemEvent' smart constructor.
+newtype SystemEvent = SystemEvent'
+    { _seType :: Maybe SystemEventType
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SystemEvent' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'seType'
+systemEvent
+    :: SystemEvent
+systemEvent =
+    SystemEvent'
+    { _seType = Nothing
+    }
+
+-- | The type of the system event that may triggered activity.
+seType :: Lens' SystemEvent (Maybe SystemEventType)
+seType = lens _seType (\ s a -> s{_seType = a})
+
+instance FromJSON SystemEvent where
+        parseJSON
+          = withObject "SystemEvent"
+              (\ o -> SystemEvent' <$> (o .:? "type"))
+
+instance ToJSON SystemEvent where
+        toJSON SystemEvent'{..}
+          = object (catMaybes [("type" .=) <$> _seType])
diff --git a/gen/Network/Google/DriveActivity/Types/Sum.hs b/gen/Network/Google/DriveActivity/Types/Sum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/DriveActivity/Types/Sum.hs
@@ -0,0 +1,576 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE LambdaCase         #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Network.Google.DriveActivity.Types.Sum
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.Google.DriveActivity.Types.Sum where
+
+import           Network.Google.Prelude hiding (Bytes)
+
+-- | Indicates the
+-- </drive/web/manage-sharing#roles Google Drive permissions role>. The
+-- role determines a user\'s ability to read, write, and comment on items.
+data PermissionRole
+    = PRRoleUnspecified
+      -- ^ @ROLE_UNSPECIFIED@
+      -- The role is not available.
+    | PROwner
+      -- ^ @OWNER@
+      -- A role granting full access.
+    | PROrganizer
+      -- ^ @ORGANIZER@
+      -- A role granting the ability to manage people and settings.
+    | PRFileOrganizer
+      -- ^ @FILE_ORGANIZER@
+      -- A role granting the ability to contribute and manage content.
+    | PREditor
+      -- ^ @EDITOR@
+      -- A role granting the ability to contribute content. This role is
+      -- sometimes also known as \"writer\".
+    | PRCommenter
+      -- ^ @COMMENTER@
+      -- A role granting the ability to view and comment on content.
+    | PRViewer
+      -- ^ @VIEWER@
+      -- A role granting the ability to view content. This role is sometimes also
+      -- known as \"reader\".
+    | PRPublishedViewer
+      -- ^ @PUBLISHED_VIEWER@
+      -- A role granting the ability to view content only after it has been
+      -- published to the web. This role is sometimes also known as \"published
+      -- reader\". See https:\/\/support.google.com\/sites\/answer\/6372880 for
+      -- more information.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable PermissionRole
+
+instance FromHttpApiData PermissionRole where
+    parseQueryParam = \case
+        "ROLE_UNSPECIFIED" -> Right PRRoleUnspecified
+        "OWNER" -> Right PROwner
+        "ORGANIZER" -> Right PROrganizer
+        "FILE_ORGANIZER" -> Right PRFileOrganizer
+        "EDITOR" -> Right PREditor
+        "COMMENTER" -> Right PRCommenter
+        "VIEWER" -> Right PRViewer
+        "PUBLISHED_VIEWER" -> Right PRPublishedViewer
+        x -> Left ("Unable to parse PermissionRole from: " <> x)
+
+instance ToHttpApiData PermissionRole where
+    toQueryParam = \case
+        PRRoleUnspecified -> "ROLE_UNSPECIFIED"
+        PROwner -> "OWNER"
+        PROrganizer -> "ORGANIZER"
+        PRFileOrganizer -> "FILE_ORGANIZER"
+        PREditor -> "EDITOR"
+        PRCommenter -> "COMMENTER"
+        PRViewer -> "VIEWER"
+        PRPublishedViewer -> "PUBLISHED_VIEWER"
+
+instance FromJSON PermissionRole where
+    parseJSON = parseJSONText "PermissionRole"
+
+instance ToJSON PermissionRole where
+    toJSON = toJSONText
+
+-- | The restriction in place after the change.
+data RestrictionChangeNewRestriction
+    = RestrictionUnspecified
+      -- ^ @RESTRICTION_UNSPECIFIED@
+      -- The type of restriction is not available.
+    | Unrestricted
+      -- ^ @UNRESTRICTED@
+      -- The feature is available without restriction.
+    | FullyRestricted
+      -- ^ @FULLY_RESTRICTED@
+      -- The use of this feature is fully restricted.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable RestrictionChangeNewRestriction
+
+instance FromHttpApiData RestrictionChangeNewRestriction where
+    parseQueryParam = \case
+        "RESTRICTION_UNSPECIFIED" -> Right RestrictionUnspecified
+        "UNRESTRICTED" -> Right Unrestricted
+        "FULLY_RESTRICTED" -> Right FullyRestricted
+        x -> Left ("Unable to parse RestrictionChangeNewRestriction from: " <> x)
+
+instance ToHttpApiData RestrictionChangeNewRestriction where
+    toQueryParam = \case
+        RestrictionUnspecified -> "RESTRICTION_UNSPECIFIED"
+        Unrestricted -> "UNRESTRICTED"
+        FullyRestricted -> "FULLY_RESTRICTED"
+
+instance FromJSON RestrictionChangeNewRestriction where
+    parseJSON = parseJSONText "RestrictionChangeNewRestriction"
+
+instance ToJSON RestrictionChangeNewRestriction where
+    toJSON = toJSONText
+
+-- | The feature which had a change in restriction policy.
+data RestrictionChangeFeature
+    = FeatureUnspecified
+      -- ^ @FEATURE_UNSPECIFIED@
+      -- The feature which changed restriction settings was not available.
+    | SharingOutsideDomain
+      -- ^ @SHARING_OUTSIDE_DOMAIN@
+      -- When restricted, this prevents items from being shared outside the
+      -- domain.
+    | DirectSharing
+      -- ^ @DIRECT_SHARING@
+      -- When restricted, this prevents direct sharing of individual items.
+    | ItemDuplication
+      -- ^ @ITEM_DUPLICATION@
+      -- When restricted, this prevents actions like copy, download, and print
+      -- that might result in uncontrolled duplicates of items.
+    | DriveFileStream
+      -- ^ @DRIVE_FILE_STREAM@
+      -- When restricted, this prevents use of Drive File Stream.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable RestrictionChangeFeature
+
+instance FromHttpApiData RestrictionChangeFeature where
+    parseQueryParam = \case
+        "FEATURE_UNSPECIFIED" -> Right FeatureUnspecified
+        "SHARING_OUTSIDE_DOMAIN" -> Right SharingOutsideDomain
+        "DIRECT_SHARING" -> Right DirectSharing
+        "ITEM_DUPLICATION" -> Right ItemDuplication
+        "DRIVE_FILE_STREAM" -> Right DriveFileStream
+        x -> Left ("Unable to parse RestrictionChangeFeature from: " <> x)
+
+instance ToHttpApiData RestrictionChangeFeature where
+    toQueryParam = \case
+        FeatureUnspecified -> "FEATURE_UNSPECIFIED"
+        SharingOutsideDomain -> "SHARING_OUTSIDE_DOMAIN"
+        DirectSharing -> "DIRECT_SHARING"
+        ItemDuplication -> "ITEM_DUPLICATION"
+        DriveFileStream -> "DRIVE_FILE_STREAM"
+
+instance FromJSON RestrictionChangeFeature where
+    parseJSON = parseJSONText "RestrictionChangeFeature"
+
+instance ToJSON RestrictionChangeFeature where
+    toJSON = toJSONText
+
+-- | The type of the system event that may triggered activity.
+data SystemEventType
+    = TypeUnspecified
+      -- ^ @TYPE_UNSPECIFIED@
+      -- The event type is unspecified.
+    | UserDeletion
+      -- ^ @USER_DELETION@
+      -- The event is a consequence of a user account being deleted.
+    | TrashAutoPurge
+      -- ^ @TRASH_AUTO_PURGE@
+      -- The event is due to the system automatically purging trash.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable SystemEventType
+
+instance FromHttpApiData SystemEventType where
+    parseQueryParam = \case
+        "TYPE_UNSPECIFIED" -> Right TypeUnspecified
+        "USER_DELETION" -> Right UserDeletion
+        "TRASH_AUTO_PURGE" -> Right TrashAutoPurge
+        x -> Left ("Unable to parse SystemEventType from: " <> x)
+
+instance ToHttpApiData SystemEventType where
+    toQueryParam = \case
+        TypeUnspecified -> "TYPE_UNSPECIFIED"
+        UserDeletion -> "USER_DELETION"
+        TrashAutoPurge -> "TRASH_AUTO_PURGE"
+
+instance FromJSON SystemEventType where
+    parseJSON = parseJSONText "SystemEventType"
+
+instance ToJSON SystemEventType where
+    toJSON = toJSONText
+
+-- | The type of delete action taken.
+data DeleteType
+    = DTTypeUnspecified
+      -- ^ @TYPE_UNSPECIFIED@
+      -- Deletion type is not available.
+    | DTTrash
+      -- ^ @TRASH@
+      -- An object was put into the trash.
+    | DTPermanentDelete
+      -- ^ @PERMANENT_DELETE@
+      -- An object was deleted permanently.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable DeleteType
+
+instance FromHttpApiData DeleteType where
+    parseQueryParam = \case
+        "TYPE_UNSPECIFIED" -> Right DTTypeUnspecified
+        "TRASH" -> Right DTTrash
+        "PERMANENT_DELETE" -> Right DTPermanentDelete
+        x -> Left ("Unable to parse DeleteType from: " <> x)
+
+instance ToHttpApiData DeleteType where
+    toQueryParam = \case
+        DTTypeUnspecified -> "TYPE_UNSPECIFIED"
+        DTTrash -> "TRASH"
+        DTPermanentDelete -> "PERMANENT_DELETE"
+
+instance FromJSON DeleteType where
+    parseJSON = parseJSONText "DeleteType"
+
+instance ToJSON DeleteType where
+    toJSON = toJSONText
+
+-- | The sub-type of this event.
+data PostSubtype
+    = SubtypeUnspecified
+      -- ^ @SUBTYPE_UNSPECIFIED@
+      -- Subtype not available.
+    | Added
+      -- ^ @ADDED@
+      -- A post was added.
+    | Deleted
+      -- ^ @DELETED@
+      -- A post was deleted.
+    | ReplyAdded
+      -- ^ @REPLY_ADDED@
+      -- A reply was added.
+    | ReplyDeleted
+      -- ^ @REPLY_DELETED@
+      -- A reply was deleted.
+    | Resolved
+      -- ^ @RESOLVED@
+      -- A posted comment was resolved.
+    | Reopened
+      -- ^ @REOPENED@
+      -- A posted comment was reopened.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable PostSubtype
+
+instance FromHttpApiData PostSubtype where
+    parseQueryParam = \case
+        "SUBTYPE_UNSPECIFIED" -> Right SubtypeUnspecified
+        "ADDED" -> Right Added
+        "DELETED" -> Right Deleted
+        "REPLY_ADDED" -> Right ReplyAdded
+        "REPLY_DELETED" -> Right ReplyDeleted
+        "RESOLVED" -> Right Resolved
+        "REOPENED" -> Right Reopened
+        x -> Left ("Unable to parse PostSubtype from: " <> x)
+
+instance ToHttpApiData PostSubtype where
+    toQueryParam = \case
+        SubtypeUnspecified -> "SUBTYPE_UNSPECIFIED"
+        Added -> "ADDED"
+        Deleted -> "DELETED"
+        ReplyAdded -> "REPLY_ADDED"
+        ReplyDeleted -> "REPLY_DELETED"
+        Resolved -> "RESOLVED"
+        Reopened -> "REOPENED"
+
+instance FromJSON PostSubtype where
+    parseJSON = parseJSONText "PostSubtype"
+
+instance ToJSON PostSubtype where
+    toJSON = toJSONText
+
+-- | The sub-type of this event.
+data AssignmentSubtype
+    = ASSubtypeUnspecified
+      -- ^ @SUBTYPE_UNSPECIFIED@
+      -- Subtype not available.
+    | ASAdded
+      -- ^ @ADDED@
+      -- An assignment was added.
+    | ASDeleted
+      -- ^ @DELETED@
+      -- An assignment was deleted.
+    | ASReplyAdded
+      -- ^ @REPLY_ADDED@
+      -- An assignment reply was added.
+    | ASReplyDeleted
+      -- ^ @REPLY_DELETED@
+      -- An assignment reply was deleted.
+    | ASResolved
+      -- ^ @RESOLVED@
+      -- An assignment was resolved.
+    | ASReopened
+      -- ^ @REOPENED@
+      -- A resolved assignment was reopened.
+    | ASReassigned
+      -- ^ @REASSIGNED@
+      -- An assignment was reassigned.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable AssignmentSubtype
+
+instance FromHttpApiData AssignmentSubtype where
+    parseQueryParam = \case
+        "SUBTYPE_UNSPECIFIED" -> Right ASSubtypeUnspecified
+        "ADDED" -> Right ASAdded
+        "DELETED" -> Right ASDeleted
+        "REPLY_ADDED" -> Right ASReplyAdded
+        "REPLY_DELETED" -> Right ASReplyDeleted
+        "RESOLVED" -> Right ASResolved
+        "REOPENED" -> Right ASReopened
+        "REASSIGNED" -> Right ASReassigned
+        x -> Left ("Unable to parse AssignmentSubtype from: " <> x)
+
+instance ToHttpApiData AssignmentSubtype where
+    toQueryParam = \case
+        ASSubtypeUnspecified -> "SUBTYPE_UNSPECIFIED"
+        ASAdded -> "ADDED"
+        ASDeleted -> "DELETED"
+        ASReplyAdded -> "REPLY_ADDED"
+        ASReplyDeleted -> "REPLY_DELETED"
+        ASResolved -> "RESOLVED"
+        ASReopened -> "REOPENED"
+        ASReassigned -> "REASSIGNED"
+
+instance FromJSON AssignmentSubtype where
+    parseJSON = parseJSONText "AssignmentSubtype"
+
+instance ToJSON AssignmentSubtype where
+    toJSON = toJSONText
+
+-- | V1 error format.
+data Xgafv
+    = X1
+      -- ^ @1@
+      -- v1 error format
+    | X2
+      -- ^ @2@
+      -- v2 error format
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable Xgafv
+
+instance FromHttpApiData Xgafv where
+    parseQueryParam = \case
+        "1" -> Right X1
+        "2" -> Right X2
+        x -> Left ("Unable to parse Xgafv from: " <> x)
+
+instance ToHttpApiData Xgafv where
+    toQueryParam = \case
+        X1 -> "1"
+        X2 -> "2"
+
+instance FromJSON Xgafv where
+    parseJSON = parseJSONText "Xgafv"
+
+instance ToJSON Xgafv where
+    toJSON = toJSONText
+
+-- | The type of restore action taken.
+data RestoreType
+    = RTTypeUnspecified
+      -- ^ @TYPE_UNSPECIFIED@
+      -- The type is not available.
+    | RTUntrash
+      -- ^ @UNTRASH@
+      -- An object was restored from the trash.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable RestoreType
+
+instance FromHttpApiData RestoreType where
+    parseQueryParam = \case
+        "TYPE_UNSPECIFIED" -> Right RTTypeUnspecified
+        "UNTRASH" -> Right RTUntrash
+        x -> Left ("Unable to parse RestoreType from: " <> x)
+
+instance ToHttpApiData RestoreType where
+    toQueryParam = \case
+        RTTypeUnspecified -> "TYPE_UNSPECIFIED"
+        RTUntrash -> "UNTRASH"
+
+instance FromJSON RestoreType where
+    parseJSON = parseJSONText "RestoreType"
+
+instance ToJSON RestoreType where
+    toJSON = toJSONText
+
+-- | The sub-type of this event.
+data SuggestionSubtype
+    = SSSubtypeUnspecified
+      -- ^ @SUBTYPE_UNSPECIFIED@
+      -- Subtype not available.
+    | SSAdded
+      -- ^ @ADDED@
+      -- A suggestion was added.
+    | SSDeleted
+      -- ^ @DELETED@
+      -- A suggestion was deleted.
+    | SSReplyAdded
+      -- ^ @REPLY_ADDED@
+      -- A suggestion reply was added.
+    | SSReplyDeleted
+      -- ^ @REPLY_DELETED@
+      -- A suggestion reply was deleted.
+    | SSAccepted
+      -- ^ @ACCEPTED@
+      -- A suggestion was accepted.
+    | SSRejected
+      -- ^ @REJECTED@
+      -- A suggestion was rejected.
+    | SSAcceptDeleted
+      -- ^ @ACCEPT_DELETED@
+      -- An accepted suggestion was deleted.
+    | SSRejectDeleted
+      -- ^ @REJECT_DELETED@
+      -- A rejected suggestion was deleted.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable SuggestionSubtype
+
+instance FromHttpApiData SuggestionSubtype where
+    parseQueryParam = \case
+        "SUBTYPE_UNSPECIFIED" -> Right SSSubtypeUnspecified
+        "ADDED" -> Right SSAdded
+        "DELETED" -> Right SSDeleted
+        "REPLY_ADDED" -> Right SSReplyAdded
+        "REPLY_DELETED" -> Right SSReplyDeleted
+        "ACCEPTED" -> Right SSAccepted
+        "REJECTED" -> Right SSRejected
+        "ACCEPT_DELETED" -> Right SSAcceptDeleted
+        "REJECT_DELETED" -> Right SSRejectDeleted
+        x -> Left ("Unable to parse SuggestionSubtype from: " <> x)
+
+instance ToHttpApiData SuggestionSubtype where
+    toQueryParam = \case
+        SSSubtypeUnspecified -> "SUBTYPE_UNSPECIFIED"
+        SSAdded -> "ADDED"
+        SSDeleted -> "DELETED"
+        SSReplyAdded -> "REPLY_ADDED"
+        SSReplyDeleted -> "REPLY_DELETED"
+        SSAccepted -> "ACCEPTED"
+        SSRejected -> "REJECTED"
+        SSAcceptDeleted -> "ACCEPT_DELETED"
+        SSRejectDeleted -> "REJECT_DELETED"
+
+instance FromJSON SuggestionSubtype where
+    parseJSON = parseJSONText "SuggestionSubtype"
+
+instance ToJSON SuggestionSubtype where
+    toJSON = toJSONText
+
+-- | The type of Data Leak Prevention (DLP) change.
+data DataLeakPreventionChangeType
+    = DLPCTTypeUnspecified
+      -- ^ @TYPE_UNSPECIFIED@
+      -- An update to the DLP state that is neither FLAGGED or CLEARED.
+    | DLPCTFlagged
+      -- ^ @FLAGGED@
+      -- Document has been flagged as containing sensitive content.
+    | DLPCTCleared
+      -- ^ @CLEARED@
+      -- Document is no longer flagged as containing sensitive content.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable DataLeakPreventionChangeType
+
+instance FromHttpApiData DataLeakPreventionChangeType where
+    parseQueryParam = \case
+        "TYPE_UNSPECIFIED" -> Right DLPCTTypeUnspecified
+        "FLAGGED" -> Right DLPCTFlagged
+        "CLEARED" -> Right DLPCTCleared
+        x -> Left ("Unable to parse DataLeakPreventionChangeType from: " <> x)
+
+instance ToHttpApiData DataLeakPreventionChangeType where
+    toQueryParam = \case
+        DLPCTTypeUnspecified -> "TYPE_UNSPECIFIED"
+        DLPCTFlagged -> "FLAGGED"
+        DLPCTCleared -> "CLEARED"
+
+instance FromJSON DataLeakPreventionChangeType where
+    parseJSON = parseJSONText "DataLeakPreventionChangeType"
+
+instance ToJSON DataLeakPreventionChangeType where
+    toJSON = toJSONText
+
+-- | The type of Drive folder.
+data FolderType
+    = FTTypeUnspecified
+      -- ^ @TYPE_UNSPECIFIED@
+      -- The folder type is unknown.
+    | FTMyDriveRoot
+      -- ^ @MY_DRIVE_ROOT@
+      -- The folder is the root of a user\'s MyDrive.
+    | FTTeamDriveRoot
+      -- ^ @TEAM_DRIVE_ROOT@
+      -- The folder is the root of a Team Drive. Note that this folder is a Drive
+      -- item, and is a distinct entity from the Team Drive itself.
+    | FTStandardFolder
+      -- ^ @STANDARD_FOLDER@
+      -- The folder is a standard, non-root, folder.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable FolderType
+
+instance FromHttpApiData FolderType where
+    parseQueryParam = \case
+        "TYPE_UNSPECIFIED" -> Right FTTypeUnspecified
+        "MY_DRIVE_ROOT" -> Right FTMyDriveRoot
+        "TEAM_DRIVE_ROOT" -> Right FTTeamDriveRoot
+        "STANDARD_FOLDER" -> Right FTStandardFolder
+        x -> Left ("Unable to parse FolderType from: " <> x)
+
+instance ToHttpApiData FolderType where
+    toQueryParam = \case
+        FTTypeUnspecified -> "TYPE_UNSPECIFIED"
+        FTMyDriveRoot -> "MY_DRIVE_ROOT"
+        FTTeamDriveRoot -> "TEAM_DRIVE_ROOT"
+        FTStandardFolder -> "STANDARD_FOLDER"
+
+instance FromJSON FolderType where
+    parseJSON = parseJSONText "FolderType"
+
+instance ToJSON FolderType where
+    toJSON = toJSONText
+
+-- | The reference type corresponding to this event.
+data ApplicationReferenceType
+    = UnspecifiedReferenceType
+      -- ^ @UNSPECIFIED_REFERENCE_TYPE@
+      -- The type is not available.
+    | Link
+      -- ^ @LINK@
+      -- The links of one or more Drive items were posted.
+    | Discuss
+      -- ^ @DISCUSS@
+      -- Comments were made regarding a Drive item.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable ApplicationReferenceType
+
+instance FromHttpApiData ApplicationReferenceType where
+    parseQueryParam = \case
+        "UNSPECIFIED_REFERENCE_TYPE" -> Right UnspecifiedReferenceType
+        "LINK" -> Right Link
+        "DISCUSS" -> Right Discuss
+        x -> Left ("Unable to parse ApplicationReferenceType from: " <> x)
+
+instance ToHttpApiData ApplicationReferenceType where
+    toQueryParam = \case
+        UnspecifiedReferenceType -> "UNSPECIFIED_REFERENCE_TYPE"
+        Link -> "LINK"
+        Discuss -> "DISCUSS"
+
+instance FromJSON ApplicationReferenceType where
+    parseJSON = parseJSONText "ApplicationReferenceType"
+
+instance ToJSON ApplicationReferenceType where
+    toJSON = toJSONText
diff --git a/gen/Network/Google/Resource/DriveActivity/Activity/Query.hs b/gen/Network/Google/Resource/DriveActivity/Activity/Query.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/DriveActivity/Activity/Query.hs
@@ -0,0 +1,146 @@
+{-# 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.DriveActivity.Activity.Query
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Query past activity in Google Drive.
+--
+-- /See:/ <https://developers.google.com/drive/activity/ Drive Activity API Reference> for @driveactivity.activity.query@.
+module Network.Google.Resource.DriveActivity.Activity.Query
+    (
+    -- * REST Resource
+      ActivityQueryResource
+
+    -- * Creating a Request
+    , activityQuery
+    , ActivityQuery
+
+    -- * Request Lenses
+    , aqXgafv
+    , aqUploadProtocol
+    , aqAccessToken
+    , aqUploadType
+    , aqPayload
+    , aqCallback
+    ) where
+
+import           Network.Google.DriveActivity.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @driveactivity.activity.query@ method which the
+-- 'ActivityQuery' request conforms to.
+type ActivityQueryResource =
+     "v2" :>
+       "activity:query" :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "callback" Text :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON] QueryDriveActivityRequest :>
+                       Post '[JSON] QueryDriveActivityResponse
+
+-- | Query past activity in Google Drive.
+--
+-- /See:/ 'activityQuery' smart constructor.
+data ActivityQuery = ActivityQuery'
+    { _aqXgafv          :: !(Maybe Xgafv)
+    , _aqUploadProtocol :: !(Maybe Text)
+    , _aqAccessToken    :: !(Maybe Text)
+    , _aqUploadType     :: !(Maybe Text)
+    , _aqPayload        :: !QueryDriveActivityRequest
+    , _aqCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ActivityQuery' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aqXgafv'
+--
+-- * 'aqUploadProtocol'
+--
+-- * 'aqAccessToken'
+--
+-- * 'aqUploadType'
+--
+-- * 'aqPayload'
+--
+-- * 'aqCallback'
+activityQuery
+    :: QueryDriveActivityRequest -- ^ 'aqPayload'
+    -> ActivityQuery
+activityQuery pAqPayload_ =
+    ActivityQuery'
+    { _aqXgafv = Nothing
+    , _aqUploadProtocol = Nothing
+    , _aqAccessToken = Nothing
+    , _aqUploadType = Nothing
+    , _aqPayload = pAqPayload_
+    , _aqCallback = Nothing
+    }
+
+-- | V1 error format.
+aqXgafv :: Lens' ActivityQuery (Maybe Xgafv)
+aqXgafv = lens _aqXgafv (\ s a -> s{_aqXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+aqUploadProtocol :: Lens' ActivityQuery (Maybe Text)
+aqUploadProtocol
+  = lens _aqUploadProtocol
+      (\ s a -> s{_aqUploadProtocol = a})
+
+-- | OAuth access token.
+aqAccessToken :: Lens' ActivityQuery (Maybe Text)
+aqAccessToken
+  = lens _aqAccessToken
+      (\ s a -> s{_aqAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+aqUploadType :: Lens' ActivityQuery (Maybe Text)
+aqUploadType
+  = lens _aqUploadType (\ s a -> s{_aqUploadType = a})
+
+-- | Multipart request metadata.
+aqPayload :: Lens' ActivityQuery QueryDriveActivityRequest
+aqPayload
+  = lens _aqPayload (\ s a -> s{_aqPayload = a})
+
+-- | JSONP
+aqCallback :: Lens' ActivityQuery (Maybe Text)
+aqCallback
+  = lens _aqCallback (\ s a -> s{_aqCallback = a})
+
+instance GoogleRequest ActivityQuery where
+        type Rs ActivityQuery = QueryDriveActivityResponse
+        type Scopes ActivityQuery =
+             '["https://www.googleapis.com/auth/drive.activity",
+               "https://www.googleapis.com/auth/drive.activity.readonly"]
+        requestClient ActivityQuery'{..}
+          = go _aqXgafv _aqUploadProtocol _aqAccessToken
+              _aqUploadType
+              _aqCallback
+              (Just AltJSON)
+              _aqPayload
+              driveActivityService
+          where go
+                  = buildClient (Proxy :: Proxy ActivityQueryResource)
+                      mempty
diff --git a/gogol-driveactivity.cabal b/gogol-driveactivity.cabal
new file mode 100644
--- /dev/null
+++ b/gogol-driveactivity.cabal
@@ -0,0 +1,46 @@
+name:                  gogol-driveactivity
+version:               0.4.0
+synopsis:              Google Drive Activity 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-2016 Brendan Hay
+category:              Network, Google, Cloud
+build-type:            Simple
+cabal-version:         >= 1.10
+extra-source-files:    README.md src/.gitkeep
+
+description:
+    Provides a historical view of activity in Google 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.DriveActivity
+        , Network.Google.DriveActivity.Types
+        , Network.Google.Resource.DriveActivity.Activity.Query
+
+    other-modules:
+          Network.Google.DriveActivity.Types.Product
+        , Network.Google.DriveActivity.Types.Sum
+
+    build-depends:
+          gogol-core == 0.4.0.*
+        , base       >= 4.7 && < 5
diff --git a/src/.gitkeep b/src/.gitkeep
new file mode 100644
--- /dev/null
+++ b/src/.gitkeep
