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-apps-calendar
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+
+`0.0.1`
+
+
+## Description
+
+A client library for the Google Calendar.
+
+
+## Contribute
+
+For any problems, comments, or feedback please create an issue [here on GitHub](https://github.com/brendanhay/amazonka/issues).
+
+> _Note:_ this library is an auto-generated Haskell package. Please see `amazonka-gen` for more information.
+
+
+## Licence
+
+`gogol-apps-calendar` 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/AppsCalendar.hs b/gen/Network/Google/AppsCalendar.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/AppsCalendar.hs
@@ -0,0 +1,584 @@
+{-# LANGUAGE DataKinds         #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE TypeOperators     #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+
+-- |
+-- Module      : Network.Google.AppsCalendar
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lets you manipulate events and other calendar data.
+--
+-- /See:/ <https://developers.google.com/google-apps/calendar/firstapp Calendar API Reference>
+module Network.Google.AppsCalendar
+    (
+    -- * Service Configuration
+      appsCalendarService
+
+    -- * API Declaration
+    , AppsCalendarAPI
+
+    -- * Resources
+
+    -- ** calendar.acl.delete
+    , module Network.Google.Resource.Calendar.ACL.Delete
+
+    -- ** calendar.acl.get
+    , module Network.Google.Resource.Calendar.ACL.Get
+
+    -- ** calendar.acl.insert
+    , module Network.Google.Resource.Calendar.ACL.Insert
+
+    -- ** calendar.acl.list
+    , module Network.Google.Resource.Calendar.ACL.List
+
+    -- ** calendar.acl.patch
+    , module Network.Google.Resource.Calendar.ACL.Patch
+
+    -- ** calendar.acl.update
+    , module Network.Google.Resource.Calendar.ACL.Update
+
+    -- ** calendar.acl.watch
+    , module Network.Google.Resource.Calendar.ACL.Watch
+
+    -- ** calendar.calendarList.delete
+    , module Network.Google.Resource.Calendar.CalendarList.Delete
+
+    -- ** calendar.calendarList.get
+    , module Network.Google.Resource.Calendar.CalendarList.Get
+
+    -- ** calendar.calendarList.insert
+    , module Network.Google.Resource.Calendar.CalendarList.Insert
+
+    -- ** calendar.calendarList.list
+    , module Network.Google.Resource.Calendar.CalendarList.List
+
+    -- ** calendar.calendarList.patch
+    , module Network.Google.Resource.Calendar.CalendarList.Patch
+
+    -- ** calendar.calendarList.update
+    , module Network.Google.Resource.Calendar.CalendarList.Update
+
+    -- ** calendar.calendarList.watch
+    , module Network.Google.Resource.Calendar.CalendarList.Watch
+
+    -- ** calendar.calendars.clear
+    , module Network.Google.Resource.Calendar.Calendars.Clear
+
+    -- ** calendar.calendars.delete
+    , module Network.Google.Resource.Calendar.Calendars.Delete
+
+    -- ** calendar.calendars.get
+    , module Network.Google.Resource.Calendar.Calendars.Get
+
+    -- ** calendar.calendars.insert
+    , module Network.Google.Resource.Calendar.Calendars.Insert
+
+    -- ** calendar.calendars.patch
+    , module Network.Google.Resource.Calendar.Calendars.Patch
+
+    -- ** calendar.calendars.update
+    , module Network.Google.Resource.Calendar.Calendars.Update
+
+    -- ** calendar.channels.stop
+    , module Network.Google.Resource.Calendar.Channels.Stop
+
+    -- ** calendar.colors.get
+    , module Network.Google.Resource.Calendar.Colors.Get
+
+    -- ** calendar.events.delete
+    , module Network.Google.Resource.Calendar.Events.Delete
+
+    -- ** calendar.events.get
+    , module Network.Google.Resource.Calendar.Events.Get
+
+    -- ** calendar.events.import
+    , module Network.Google.Resource.Calendar.Events.Import
+
+    -- ** calendar.events.insert
+    , module Network.Google.Resource.Calendar.Events.Insert
+
+    -- ** calendar.events.instances
+    , module Network.Google.Resource.Calendar.Events.Instances
+
+    -- ** calendar.events.list
+    , module Network.Google.Resource.Calendar.Events.List
+
+    -- ** calendar.events.move
+    , module Network.Google.Resource.Calendar.Events.Move
+
+    -- ** calendar.events.patch
+    , module Network.Google.Resource.Calendar.Events.Patch
+
+    -- ** calendar.events.quickAdd
+    , module Network.Google.Resource.Calendar.Events.QuickAdd
+
+    -- ** calendar.events.update
+    , module Network.Google.Resource.Calendar.Events.Update
+
+    -- ** calendar.events.watch
+    , module Network.Google.Resource.Calendar.Events.Watch
+
+    -- ** calendar.freebusy.query
+    , module Network.Google.Resource.Calendar.FreeBusy.Query
+
+    -- ** calendar.settings.get
+    , module Network.Google.Resource.Calendar.Settings.Get
+
+    -- ** calendar.settings.list
+    , module Network.Google.Resource.Calendar.Settings.List
+
+    -- ** calendar.settings.watch
+    , module Network.Google.Resource.Calendar.Settings.Watch
+
+    -- * Types
+
+    -- ** CalendarListEntry
+    , CalendarListEntry
+    , calendarListEntry
+    , cleSummary
+    , cleEtag
+    , cleLocation
+    , cleKind
+    , cleNotificationSettings
+    , cleBackgRoundColor
+    , cleForegRoundColor
+    , cleDefaultReminders
+    , cleSelected
+    , clePrimary
+    , cleHidden
+    , cleId
+    , cleDeleted
+    , cleAccessRole
+    , cleSummaryOverride
+    , cleColorId
+    , cleTimeZone
+    , cleDescription
+
+    -- ** Event
+    , Event
+    , event
+    , eSummary
+    , eOriginalStartTime
+    , eCreator
+    , eStatus
+    , eGuestsCanModify
+    , eEtag
+    , eAttachments
+    , eLocked
+    , eLocation
+    , eAttendees
+    , eReminders
+    , eKind
+    , eCreated
+    , eTransparency
+    , eRecurringEventId
+    , eStart
+    , ePrivateCopy
+    , eEndTimeUnspecified
+    , eExtendedProperties
+    , eVisibility
+    , eGuestsCanInviteOthers
+    , eRecurrence
+    , eGadget
+    , eSequence
+    , eICalUId
+    , eEnd
+    , eAttendeesOmitted
+    , eSource
+    , eId
+    , eHTMLLink
+    , eUpdated
+    , eColorId
+    , eAnyoneCanAddSelf
+    , eGuestsCanSeeOtherGuests
+    , eHangoutLink
+    , eDescription
+    , eOrganizer
+
+    -- ** CalendarListEntryNotificationSettings
+    , CalendarListEntryNotificationSettings
+    , calendarListEntryNotificationSettings
+    , clensNotifications
+
+    -- ** ACLRuleScope
+    , ACLRuleScope
+    , aclRuleScope
+    , arsValue
+    , arsType
+
+    -- ** ColorsEvent
+    , ColorsEvent
+    , colorsEvent
+    , ceAddtional
+
+    -- ** Settings
+    , Settings
+    , settings
+    , sEtag
+    , sNextPageToken
+    , sKind
+    , sItems
+    , sNextSyncToken
+
+    -- ** FreeBusyRequestItem
+    , FreeBusyRequestItem
+    , freeBusyRequestItem
+    , fbriId
+
+    -- ** EventAttachment
+    , EventAttachment
+    , eventAttachment
+    , eaFileURL
+    , eaIconLink
+    , eaMimeType
+    , eaTitle
+    , eaFileId
+
+    -- ** TimePeriod
+    , TimePeriod
+    , timePeriod
+    , tpStart
+    , tpEnd
+
+    -- ** EventCreator
+    , EventCreator
+    , eventCreator
+    , ecEmail
+    , ecSelf
+    , ecDisplayName
+    , ecId
+
+    -- ** Error'
+    , Error'
+    , error'
+    , eDomain
+    , eReason
+
+    -- ** ColorDefinition
+    , ColorDefinition
+    , colorDefinition
+    , cdForegRound
+    , cdBackgRound
+
+    -- ** EventsListOrderBy
+    , EventsListOrderBy (..)
+
+    -- ** Channel
+    , Channel
+    , channel
+    , cResourceURI
+    , cResourceId
+    , cKind
+    , cExpiration
+    , cToken
+    , cAddress
+    , cPayload
+    , cParams
+    , cId
+    , cType
+
+    -- ** FreeBusyCalendar
+    , FreeBusyCalendar
+    , freeBusyCalendar
+    , fbcBusy
+    , fbcErrors
+
+    -- ** Setting
+    , Setting
+    , setting
+    , setEtag
+    , setKind
+    , setValue
+    , setId
+
+    -- ** FreeBusyResponseGroups
+    , FreeBusyResponseGroups
+    , freeBusyResponseGroups
+    , fbrgAddtional
+
+    -- ** EventReminders
+    , EventReminders
+    , eventReminders
+    , erOverrides
+    , erUseDefault
+
+    -- ** ColorsCalendar
+    , ColorsCalendar
+    , colorsCalendar
+    , ccAddtional
+
+    -- ** CalendarNotification
+    , CalendarNotification
+    , calendarNotification
+    , cnMethod
+    , cnType
+
+    -- ** EventExtendedPropertiesPrivate
+    , EventExtendedPropertiesPrivate
+    , eventExtendedPropertiesPrivate
+    , eeppAddtional
+
+    -- ** ChannelParams
+    , ChannelParams
+    , channelParams
+    , cpAddtional
+
+    -- ** Events
+    , Events
+    , events
+    , eveSummary
+    , eveEtag
+    , eveNextPageToken
+    , eveKind
+    , eveItems
+    , eveDefaultReminders
+    , eveUpdated
+    , eveAccessRole
+    , eveTimeZone
+    , eveNextSyncToken
+    , eveDescription
+
+    -- ** EventAttendee
+    , EventAttendee
+    , eventAttendee
+    , eaEmail
+    , eaResponseStatus
+    , eaSelf
+    , eaResource
+    , eaAdditionalGuests
+    , eaDisplayName
+    , eaId
+    , eaComment
+    , eaOptional
+    , eaOrganizer
+
+    -- ** Calendar
+    , Calendar
+    , calendar
+    , calSummary
+    , calEtag
+    , calLocation
+    , calKind
+    , calId
+    , calTimeZone
+    , calDescription
+
+    -- ** FreeBusyResponse
+    , FreeBusyResponse
+    , freeBusyResponse
+    , fbrGroups
+    , fbrTimeMin
+    , fbrKind
+    , fbrCalendars
+    , fbrTimeMax
+
+    -- ** EventReminder
+    , EventReminder
+    , eventReminder
+    , erMethod
+    , erMinutes
+
+    -- ** EventExtendedProperties
+    , EventExtendedProperties
+    , eventExtendedProperties
+    , eepPrivate
+    , eepShared
+
+    -- ** EventDateTime
+    , EventDateTime
+    , eventDateTime
+    , edtDate
+    , edtTimeZone
+    , edtDateTime
+
+    -- ** EventOrganizer
+    , EventOrganizer
+    , eventOrganizer
+    , eoEmail
+    , eoSelf
+    , eoDisplayName
+    , eoId
+
+    -- ** CalendarList
+    , CalendarList
+    , calendarList
+    , clEtag
+    , clNextPageToken
+    , clKind
+    , clItems
+    , clNextSyncToken
+
+    -- ** CalendarListListMinAccessRole
+    , CalendarListListMinAccessRole (..)
+
+    -- ** EventGadget
+    , EventGadget
+    , eventGadget
+    , egHeight
+    , egDisplay
+    , egPreferences
+    , egLink
+    , egIconLink
+    , egWidth
+    , egTitle
+    , egType
+
+    -- ** EventGadgetPreferences
+    , EventGadgetPreferences
+    , eventGadgetPreferences
+    , egpAddtional
+
+    -- ** FreeBusyRequest
+    , FreeBusyRequest
+    , freeBusyRequest
+    , fCalendarExpansionMax
+    , fTimeMin
+    , fItems
+    , fGroupExpansionMax
+    , fTimeZone
+    , fTimeMax
+
+    -- ** ACLRule
+    , ACLRule
+    , aclRule
+    , arEtag
+    , arKind
+    , arRole
+    , arScope
+    , arId
+
+    -- ** EventsWatchOrderBy
+    , EventsWatchOrderBy (..)
+
+    -- ** EventExtendedPropertiesShared
+    , EventExtendedPropertiesShared
+    , eventExtendedPropertiesShared
+    , eepsAddtional
+
+    -- ** CalendarListWatchMinAccessRole
+    , CalendarListWatchMinAccessRole (..)
+
+    -- ** FreeBusyResponseCalendars
+    , FreeBusyResponseCalendars
+    , freeBusyResponseCalendars
+    , fbrcAddtional
+
+    -- ** ACL
+    , ACL
+    , acl
+    , aEtag
+    , aNextPageToken
+    , aKind
+    , aItems
+    , aNextSyncToken
+
+    -- ** Colors
+    , Colors
+    , colors
+    , colEvent
+    , colKind
+    , colCalendar
+    , colUpdated
+
+    -- ** FreeBusyGroup
+    , FreeBusyGroup
+    , freeBusyGroup
+    , fbgCalendars
+    , fbgErrors
+
+    -- ** EventSource
+    , EventSource
+    , eventSource
+    , esURL
+    , esTitle
+    ) where
+
+import           Network.Google.AppsCalendar.Types
+import           Network.Google.Prelude
+import           Network.Google.Resource.Calendar.ACL.Delete
+import           Network.Google.Resource.Calendar.ACL.Get
+import           Network.Google.Resource.Calendar.ACL.Insert
+import           Network.Google.Resource.Calendar.ACL.List
+import           Network.Google.Resource.Calendar.ACL.Patch
+import           Network.Google.Resource.Calendar.ACL.Update
+import           Network.Google.Resource.Calendar.ACL.Watch
+import           Network.Google.Resource.Calendar.CalendarList.Delete
+import           Network.Google.Resource.Calendar.CalendarList.Get
+import           Network.Google.Resource.Calendar.CalendarList.Insert
+import           Network.Google.Resource.Calendar.CalendarList.List
+import           Network.Google.Resource.Calendar.CalendarList.Patch
+import           Network.Google.Resource.Calendar.CalendarList.Update
+import           Network.Google.Resource.Calendar.CalendarList.Watch
+import           Network.Google.Resource.Calendar.Calendars.Clear
+import           Network.Google.Resource.Calendar.Calendars.Delete
+import           Network.Google.Resource.Calendar.Calendars.Get
+import           Network.Google.Resource.Calendar.Calendars.Insert
+import           Network.Google.Resource.Calendar.Calendars.Patch
+import           Network.Google.Resource.Calendar.Calendars.Update
+import           Network.Google.Resource.Calendar.Channels.Stop
+import           Network.Google.Resource.Calendar.Colors.Get
+import           Network.Google.Resource.Calendar.Events.Delete
+import           Network.Google.Resource.Calendar.Events.Get
+import           Network.Google.Resource.Calendar.Events.Import
+import           Network.Google.Resource.Calendar.Events.Insert
+import           Network.Google.Resource.Calendar.Events.Instances
+import           Network.Google.Resource.Calendar.Events.List
+import           Network.Google.Resource.Calendar.Events.Move
+import           Network.Google.Resource.Calendar.Events.Patch
+import           Network.Google.Resource.Calendar.Events.QuickAdd
+import           Network.Google.Resource.Calendar.Events.Update
+import           Network.Google.Resource.Calendar.Events.Watch
+import           Network.Google.Resource.Calendar.FreeBusy.Query
+import           Network.Google.Resource.Calendar.Settings.Get
+import           Network.Google.Resource.Calendar.Settings.List
+import           Network.Google.Resource.Calendar.Settings.Watch
+
+{- $resources
+TODO
+-}
+
+-- | Represents the entirety of the methods and resources available for the Calendar API service.
+type AppsCalendarAPI =
+     SettingsListResource :<|> SettingsGetResource :<|>
+       SettingsWatchResource
+       :<|> ChannelsStopResource
+       :<|> CalendarsInsertResource
+       :<|> CalendarsPatchResource
+       :<|> CalendarsGetResource
+       :<|> CalendarsClearResource
+       :<|> CalendarsDeleteResource
+       :<|> CalendarsUpdateResource
+       :<|> EventsQuickAddResource
+       :<|> EventsInsertResource
+       :<|> EventsListResource
+       :<|> EventsPatchResource
+       :<|> EventsGetResource
+       :<|> EventsInstancesResource
+       :<|> EventsImportResource
+       :<|> EventsDeleteResource
+       :<|> EventsUpdateResource
+       :<|> EventsMoveResource
+       :<|> EventsWatchResource
+       :<|> CalendarListInsertResource
+       :<|> CalendarListListResource
+       :<|> CalendarListPatchResource
+       :<|> CalendarListGetResource
+       :<|> CalendarListDeleteResource
+       :<|> CalendarListUpdateResource
+       :<|> CalendarListWatchResource
+       :<|> ACLInsertResource
+       :<|> ACLListResource
+       :<|> ACLPatchResource
+       :<|> ACLGetResource
+       :<|> ACLDeleteResource
+       :<|> ACLUpdateResource
+       :<|> ACLWatchResource
+       :<|> ColorsGetResource
+       :<|> FreeBusyQueryResource
diff --git a/gen/Network/Google/AppsCalendar/Types.hs b/gen/Network/Google/AppsCalendar/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/AppsCalendar/Types.hs
@@ -0,0 +1,402 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Network.Google.AppsCalendar.Types
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.Google.AppsCalendar.Types
+    (
+    -- * Service Configuration
+      appsCalendarService
+
+    -- * OAuth Scopes
+    , calendarScope
+    , calendarReadonlyScope
+
+    -- * CalendarListEntry
+    , CalendarListEntry
+    , calendarListEntry
+    , cleSummary
+    , cleEtag
+    , cleLocation
+    , cleKind
+    , cleNotificationSettings
+    , cleBackgRoundColor
+    , cleForegRoundColor
+    , cleDefaultReminders
+    , cleSelected
+    , clePrimary
+    , cleHidden
+    , cleId
+    , cleDeleted
+    , cleAccessRole
+    , cleSummaryOverride
+    , cleColorId
+    , cleTimeZone
+    , cleDescription
+
+    -- * Event
+    , Event
+    , event
+    , eSummary
+    , eOriginalStartTime
+    , eCreator
+    , eStatus
+    , eGuestsCanModify
+    , eEtag
+    , eAttachments
+    , eLocked
+    , eLocation
+    , eAttendees
+    , eReminders
+    , eKind
+    , eCreated
+    , eTransparency
+    , eRecurringEventId
+    , eStart
+    , ePrivateCopy
+    , eEndTimeUnspecified
+    , eExtendedProperties
+    , eVisibility
+    , eGuestsCanInviteOthers
+    , eRecurrence
+    , eGadget
+    , eSequence
+    , eICalUId
+    , eEnd
+    , eAttendeesOmitted
+    , eSource
+    , eId
+    , eHTMLLink
+    , eUpdated
+    , eColorId
+    , eAnyoneCanAddSelf
+    , eGuestsCanSeeOtherGuests
+    , eHangoutLink
+    , eDescription
+    , eOrganizer
+
+    -- * CalendarListEntryNotificationSettings
+    , CalendarListEntryNotificationSettings
+    , calendarListEntryNotificationSettings
+    , clensNotifications
+
+    -- * ACLRuleScope
+    , ACLRuleScope
+    , aclRuleScope
+    , arsValue
+    , arsType
+
+    -- * ColorsEvent
+    , ColorsEvent
+    , colorsEvent
+    , ceAddtional
+
+    -- * Settings
+    , Settings
+    , settings
+    , sEtag
+    , sNextPageToken
+    , sKind
+    , sItems
+    , sNextSyncToken
+
+    -- * FreeBusyRequestItem
+    , FreeBusyRequestItem
+    , freeBusyRequestItem
+    , fbriId
+
+    -- * EventAttachment
+    , EventAttachment
+    , eventAttachment
+    , eaFileURL
+    , eaIconLink
+    , eaMimeType
+    , eaTitle
+    , eaFileId
+
+    -- * TimePeriod
+    , TimePeriod
+    , timePeriod
+    , tpStart
+    , tpEnd
+
+    -- * EventCreator
+    , EventCreator
+    , eventCreator
+    , ecEmail
+    , ecSelf
+    , ecDisplayName
+    , ecId
+
+    -- * Error'
+    , Error'
+    , error'
+    , eDomain
+    , eReason
+
+    -- * ColorDefinition
+    , ColorDefinition
+    , colorDefinition
+    , cdForegRound
+    , cdBackgRound
+
+    -- * EventsListOrderBy
+    , EventsListOrderBy (..)
+
+    -- * Channel
+    , Channel
+    , channel
+    , cResourceURI
+    , cResourceId
+    , cKind
+    , cExpiration
+    , cToken
+    , cAddress
+    , cPayload
+    , cParams
+    , cId
+    , cType
+
+    -- * FreeBusyCalendar
+    , FreeBusyCalendar
+    , freeBusyCalendar
+    , fbcBusy
+    , fbcErrors
+
+    -- * Setting
+    , Setting
+    , setting
+    , setEtag
+    , setKind
+    , setValue
+    , setId
+
+    -- * FreeBusyResponseGroups
+    , FreeBusyResponseGroups
+    , freeBusyResponseGroups
+    , fbrgAddtional
+
+    -- * EventReminders
+    , EventReminders
+    , eventReminders
+    , erOverrides
+    , erUseDefault
+
+    -- * ColorsCalendar
+    , ColorsCalendar
+    , colorsCalendar
+    , ccAddtional
+
+    -- * CalendarNotification
+    , CalendarNotification
+    , calendarNotification
+    , cnMethod
+    , cnType
+
+    -- * EventExtendedPropertiesPrivate
+    , EventExtendedPropertiesPrivate
+    , eventExtendedPropertiesPrivate
+    , eeppAddtional
+
+    -- * ChannelParams
+    , ChannelParams
+    , channelParams
+    , cpAddtional
+
+    -- * Events
+    , Events
+    , events
+    , eveSummary
+    , eveEtag
+    , eveNextPageToken
+    , eveKind
+    , eveItems
+    , eveDefaultReminders
+    , eveUpdated
+    , eveAccessRole
+    , eveTimeZone
+    , eveNextSyncToken
+    , eveDescription
+
+    -- * EventAttendee
+    , EventAttendee
+    , eventAttendee
+    , eaEmail
+    , eaResponseStatus
+    , eaSelf
+    , eaResource
+    , eaAdditionalGuests
+    , eaDisplayName
+    , eaId
+    , eaComment
+    , eaOptional
+    , eaOrganizer
+
+    -- * Calendar
+    , Calendar
+    , calendar
+    , calSummary
+    , calEtag
+    , calLocation
+    , calKind
+    , calId
+    , calTimeZone
+    , calDescription
+
+    -- * FreeBusyResponse
+    , FreeBusyResponse
+    , freeBusyResponse
+    , fbrGroups
+    , fbrTimeMin
+    , fbrKind
+    , fbrCalendars
+    , fbrTimeMax
+
+    -- * EventReminder
+    , EventReminder
+    , eventReminder
+    , erMethod
+    , erMinutes
+
+    -- * EventExtendedProperties
+    , EventExtendedProperties
+    , eventExtendedProperties
+    , eepPrivate
+    , eepShared
+
+    -- * EventDateTime
+    , EventDateTime
+    , eventDateTime
+    , edtDate
+    , edtTimeZone
+    , edtDateTime
+
+    -- * EventOrganizer
+    , EventOrganizer
+    , eventOrganizer
+    , eoEmail
+    , eoSelf
+    , eoDisplayName
+    , eoId
+
+    -- * CalendarList
+    , CalendarList
+    , calendarList
+    , clEtag
+    , clNextPageToken
+    , clKind
+    , clItems
+    , clNextSyncToken
+
+    -- * CalendarListListMinAccessRole
+    , CalendarListListMinAccessRole (..)
+
+    -- * EventGadget
+    , EventGadget
+    , eventGadget
+    , egHeight
+    , egDisplay
+    , egPreferences
+    , egLink
+    , egIconLink
+    , egWidth
+    , egTitle
+    , egType
+
+    -- * EventGadgetPreferences
+    , EventGadgetPreferences
+    , eventGadgetPreferences
+    , egpAddtional
+
+    -- * FreeBusyRequest
+    , FreeBusyRequest
+    , freeBusyRequest
+    , fCalendarExpansionMax
+    , fTimeMin
+    , fItems
+    , fGroupExpansionMax
+    , fTimeZone
+    , fTimeMax
+
+    -- * ACLRule
+    , ACLRule
+    , aclRule
+    , arEtag
+    , arKind
+    , arRole
+    , arScope
+    , arId
+
+    -- * EventsWatchOrderBy
+    , EventsWatchOrderBy (..)
+
+    -- * EventExtendedPropertiesShared
+    , EventExtendedPropertiesShared
+    , eventExtendedPropertiesShared
+    , eepsAddtional
+
+    -- * CalendarListWatchMinAccessRole
+    , CalendarListWatchMinAccessRole (..)
+
+    -- * FreeBusyResponseCalendars
+    , FreeBusyResponseCalendars
+    , freeBusyResponseCalendars
+    , fbrcAddtional
+
+    -- * ACL
+    , ACL
+    , acl
+    , aEtag
+    , aNextPageToken
+    , aKind
+    , aItems
+    , aNextSyncToken
+
+    -- * Colors
+    , Colors
+    , colors
+    , colEvent
+    , colKind
+    , colCalendar
+    , colUpdated
+
+    -- * FreeBusyGroup
+    , FreeBusyGroup
+    , freeBusyGroup
+    , fbgCalendars
+    , fbgErrors
+
+    -- * EventSource
+    , EventSource
+    , eventSource
+    , esURL
+    , esTitle
+    ) where
+
+import           Network.Google.AppsCalendar.Types.Product
+import           Network.Google.AppsCalendar.Types.Sum
+import           Network.Google.Prelude
+
+-- | Default request referring to version 'v3' of the Calendar API. This contains the host and root path used as a starting point for constructing service requests.
+appsCalendarService :: Service
+appsCalendarService
+  = defaultService (ServiceId "calendar:v3")
+      "www.googleapis.com"
+
+-- | Manage your calendars
+calendarScope :: OAuthScope
+calendarScope = "https://www.googleapis.com/auth/calendar";
+
+-- | View your calendars
+calendarReadonlyScope :: OAuthScope
+calendarReadonlyScope = "https://www.googleapis.com/auth/calendar.readonly";
diff --git a/gen/Network/Google/AppsCalendar/Types/Product.hs b/gen/Network/Google/AppsCalendar/Types/Product.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/AppsCalendar/Types/Product.hs
@@ -0,0 +1,3278 @@
+{-# 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.AppsCalendar.Types.Product
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.Google.AppsCalendar.Types.Product where
+
+import           Network.Google.AppsCalendar.Types.Sum
+import           Network.Google.Prelude
+
+--
+-- /See:/ 'calendarListEntry' smart constructor.
+data CalendarListEntry = CalendarListEntry
+    { _cleSummary              :: !(Maybe Text)
+    , _cleEtag                 :: !(Maybe Text)
+    , _cleLocation             :: !(Maybe Text)
+    , _cleKind                 :: !Text
+    , _cleNotificationSettings :: !(Maybe CalendarListEntryNotificationSettings)
+    , _cleBackgRoundColor      :: !(Maybe Text)
+    , _cleForegRoundColor      :: !(Maybe Text)
+    , _cleDefaultReminders     :: !(Maybe [EventReminder])
+    , _cleSelected             :: !Bool
+    , _clePrimary              :: !Bool
+    , _cleHidden               :: !Bool
+    , _cleId                   :: !(Maybe Text)
+    , _cleDeleted              :: !Bool
+    , _cleAccessRole           :: !(Maybe Text)
+    , _cleSummaryOverride      :: !(Maybe Text)
+    , _cleColorId              :: !(Maybe Text)
+    , _cleTimeZone             :: !(Maybe Text)
+    , _cleDescription          :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CalendarListEntry' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cleSummary'
+--
+-- * 'cleEtag'
+--
+-- * 'cleLocation'
+--
+-- * 'cleKind'
+--
+-- * 'cleNotificationSettings'
+--
+-- * 'cleBackgRoundColor'
+--
+-- * 'cleForegRoundColor'
+--
+-- * 'cleDefaultReminders'
+--
+-- * 'cleSelected'
+--
+-- * 'clePrimary'
+--
+-- * 'cleHidden'
+--
+-- * 'cleId'
+--
+-- * 'cleDeleted'
+--
+-- * 'cleAccessRole'
+--
+-- * 'cleSummaryOverride'
+--
+-- * 'cleColorId'
+--
+-- * 'cleTimeZone'
+--
+-- * 'cleDescription'
+calendarListEntry
+    :: CalendarListEntry
+calendarListEntry =
+    CalendarListEntry
+    { _cleSummary = Nothing
+    , _cleEtag = Nothing
+    , _cleLocation = Nothing
+    , _cleKind = "calendar#calendarListEntry"
+    , _cleNotificationSettings = Nothing
+    , _cleBackgRoundColor = Nothing
+    , _cleForegRoundColor = Nothing
+    , _cleDefaultReminders = Nothing
+    , _cleSelected = False
+    , _clePrimary = False
+    , _cleHidden = False
+    , _cleId = Nothing
+    , _cleDeleted = False
+    , _cleAccessRole = Nothing
+    , _cleSummaryOverride = Nothing
+    , _cleColorId = Nothing
+    , _cleTimeZone = Nothing
+    , _cleDescription = Nothing
+    }
+
+-- | Title of the calendar. Read-only.
+cleSummary :: Lens' CalendarListEntry (Maybe Text)
+cleSummary
+  = lens _cleSummary (\ s a -> s{_cleSummary = a})
+
+-- | ETag of the resource.
+cleEtag :: Lens' CalendarListEntry (Maybe Text)
+cleEtag = lens _cleEtag (\ s a -> s{_cleEtag = a})
+
+-- | Geographic location of the calendar as free-form text. Optional.
+-- Read-only.
+cleLocation :: Lens' CalendarListEntry (Maybe Text)
+cleLocation
+  = lens _cleLocation (\ s a -> s{_cleLocation = a})
+
+-- | Type of the resource (\"calendar#calendarListEntry\").
+cleKind :: Lens' CalendarListEntry Text
+cleKind = lens _cleKind (\ s a -> s{_cleKind = a})
+
+-- | The notifications that the authenticated user is receiving for this
+-- calendar.
+cleNotificationSettings :: Lens' CalendarListEntry (Maybe CalendarListEntryNotificationSettings)
+cleNotificationSettings
+  = lens _cleNotificationSettings
+      (\ s a -> s{_cleNotificationSettings = a})
+
+-- | The main color of the calendar in the hexadecimal format \"#0088aa\".
+-- This property supersedes the index-based colorId property. To set or
+-- change this property, you need to specify colorRgbFormat=true in the
+-- parameters of the insert, update and patch methods. Optional.
+cleBackgRoundColor :: Lens' CalendarListEntry (Maybe Text)
+cleBackgRoundColor
+  = lens _cleBackgRoundColor
+      (\ s a -> s{_cleBackgRoundColor = a})
+
+-- | The foreground color of the calendar in the hexadecimal format
+-- \"#ffffff\". This property supersedes the index-based colorId property.
+-- To set or change this property, you need to specify colorRgbFormat=true
+-- in the parameters of the insert, update and patch methods. Optional.
+cleForegRoundColor :: Lens' CalendarListEntry (Maybe Text)
+cleForegRoundColor
+  = lens _cleForegRoundColor
+      (\ s a -> s{_cleForegRoundColor = a})
+
+-- | The default reminders that the authenticated user has for this calendar.
+cleDefaultReminders :: Lens' CalendarListEntry [EventReminder]
+cleDefaultReminders
+  = lens _cleDefaultReminders
+      (\ s a -> s{_cleDefaultReminders = a})
+      . _Default
+      . _Coerce
+
+-- | Whether the calendar content shows up in the calendar UI. Optional. The
+-- default is False.
+cleSelected :: Lens' CalendarListEntry Bool
+cleSelected
+  = lens _cleSelected (\ s a -> s{_cleSelected = a})
+
+-- | Whether the calendar is the primary calendar of the authenticated user.
+-- Read-only. Optional. The default is False.
+clePrimary :: Lens' CalendarListEntry Bool
+clePrimary
+  = lens _clePrimary (\ s a -> s{_clePrimary = a})
+
+-- | Whether the calendar has been hidden from the list. Optional. The
+-- default is False.
+cleHidden :: Lens' CalendarListEntry Bool
+cleHidden
+  = lens _cleHidden (\ s a -> s{_cleHidden = a})
+
+-- | Identifier of the calendar.
+cleId :: Lens' CalendarListEntry (Maybe Text)
+cleId = lens _cleId (\ s a -> s{_cleId = a})
+
+-- | Whether this calendar list entry has been deleted from the calendar
+-- list. Read-only. Optional. The default is False.
+cleDeleted :: Lens' CalendarListEntry Bool
+cleDeleted
+  = lens _cleDeleted (\ s a -> s{_cleDeleted = a})
+
+-- | The effective access role that the authenticated user has on the
+-- calendar. Read-only. Possible values are: - \"freeBusyReader\" -
+-- Provides read access to free\/busy information. - \"reader\" - Provides
+-- read access to the calendar. Private events will appear to users with
+-- reader access, but event details will be hidden. - \"writer\" - Provides
+-- read and write access to the calendar. Private events will appear to
+-- users with writer access, and event details will be visible. - \"owner\"
+-- - Provides ownership of the calendar. This role has all of the
+-- permissions of the writer role with the additional ability to see and
+-- manipulate ACLs.
+cleAccessRole :: Lens' CalendarListEntry (Maybe Text)
+cleAccessRole
+  = lens _cleAccessRole
+      (\ s a -> s{_cleAccessRole = a})
+
+-- | The summary that the authenticated user has set for this calendar.
+-- Optional.
+cleSummaryOverride :: Lens' CalendarListEntry (Maybe Text)
+cleSummaryOverride
+  = lens _cleSummaryOverride
+      (\ s a -> s{_cleSummaryOverride = a})
+
+-- | The color of the calendar. This is an ID referring to an entry in the
+-- calendar section of the colors definition (see the colors endpoint).
+-- This property is superseded by the backgroundColor and foregroundColor
+-- properties and can be ignored when using these properties. Optional.
+cleColorId :: Lens' CalendarListEntry (Maybe Text)
+cleColorId
+  = lens _cleColorId (\ s a -> s{_cleColorId = a})
+
+-- | The time zone of the calendar. Optional. Read-only.
+cleTimeZone :: Lens' CalendarListEntry (Maybe Text)
+cleTimeZone
+  = lens _cleTimeZone (\ s a -> s{_cleTimeZone = a})
+
+-- | Description of the calendar. Optional. Read-only.
+cleDescription :: Lens' CalendarListEntry (Maybe Text)
+cleDescription
+  = lens _cleDescription
+      (\ s a -> s{_cleDescription = a})
+
+instance FromJSON CalendarListEntry where
+        parseJSON
+          = withObject "CalendarListEntry"
+              (\ o ->
+                 CalendarListEntry <$>
+                   (o .:? "summary") <*> (o .:? "etag") <*>
+                     (o .:? "location")
+                     <*> (o .:? "kind" .!= "calendar#calendarListEntry")
+                     <*> (o .:? "notificationSettings")
+                     <*> (o .:? "backgroundColor")
+                     <*> (o .:? "foregroundColor")
+                     <*> (o .:? "defaultReminders" .!= mempty)
+                     <*> (o .:? "selected" .!= False)
+                     <*> (o .:? "primary" .!= False)
+                     <*> (o .:? "hidden" .!= False)
+                     <*> (o .:? "id")
+                     <*> (o .:? "deleted" .!= False)
+                     <*> (o .:? "accessRole")
+                     <*> (o .:? "summaryOverride")
+                     <*> (o .:? "colorId")
+                     <*> (o .:? "timeZone")
+                     <*> (o .:? "description"))
+
+instance ToJSON CalendarListEntry where
+        toJSON CalendarListEntry{..}
+          = object
+              (catMaybes
+                 [("summary" .=) <$> _cleSummary,
+                  ("etag" .=) <$> _cleEtag,
+                  ("location" .=) <$> _cleLocation,
+                  Just ("kind" .= _cleKind),
+                  ("notificationSettings" .=) <$>
+                    _cleNotificationSettings,
+                  ("backgroundColor" .=) <$> _cleBackgRoundColor,
+                  ("foregroundColor" .=) <$> _cleForegRoundColor,
+                  ("defaultReminders" .=) <$> _cleDefaultReminders,
+                  Just ("selected" .= _cleSelected),
+                  Just ("primary" .= _clePrimary),
+                  Just ("hidden" .= _cleHidden), ("id" .=) <$> _cleId,
+                  Just ("deleted" .= _cleDeleted),
+                  ("accessRole" .=) <$> _cleAccessRole,
+                  ("summaryOverride" .=) <$> _cleSummaryOverride,
+                  ("colorId" .=) <$> _cleColorId,
+                  ("timeZone" .=) <$> _cleTimeZone,
+                  ("description" .=) <$> _cleDescription])
+
+--
+-- /See:/ 'event' smart constructor.
+data Event = Event
+    { _eSummary                 :: !(Maybe Text)
+    , _eOriginalStartTime       :: !(Maybe EventDateTime)
+    , _eCreator                 :: !(Maybe EventCreator)
+    , _eStatus                  :: !(Maybe Text)
+    , _eGuestsCanModify         :: !Bool
+    , _eEtag                    :: !(Maybe Text)
+    , _eAttachments             :: !(Maybe [EventAttachment])
+    , _eLocked                  :: !Bool
+    , _eLocation                :: !(Maybe Text)
+    , _eAttendees               :: !(Maybe [EventAttendee])
+    , _eReminders               :: !(Maybe EventReminders)
+    , _eKind                    :: !Text
+    , _eCreated                 :: !(Maybe DateTime')
+    , _eTransparency            :: !Text
+    , _eRecurringEventId        :: !(Maybe Text)
+    , _eStart                   :: !(Maybe EventDateTime)
+    , _ePrivateCopy             :: !Bool
+    , _eEndTimeUnspecified      :: !Bool
+    , _eExtendedProperties      :: !(Maybe EventExtendedProperties)
+    , _eVisibility              :: !Text
+    , _eGuestsCanInviteOthers   :: !Bool
+    , _eRecurrence              :: !(Maybe [Text])
+    , _eGadget                  :: !(Maybe EventGadget)
+    , _eSequence                :: !(Maybe (Textual Int32))
+    , _eICalUId                 :: !(Maybe Text)
+    , _eEnd                     :: !(Maybe EventDateTime)
+    , _eAttendeesOmitted        :: !Bool
+    , _eSource                  :: !(Maybe EventSource)
+    , _eId                      :: !(Maybe Text)
+    , _eHTMLLink                :: !(Maybe Text)
+    , _eUpdated                 :: !(Maybe DateTime')
+    , _eColorId                 :: !(Maybe Text)
+    , _eAnyoneCanAddSelf        :: !Bool
+    , _eGuestsCanSeeOtherGuests :: !Bool
+    , _eHangoutLink             :: !(Maybe Text)
+    , _eDescription             :: !(Maybe Text)
+    , _eOrganizer               :: !(Maybe EventOrganizer)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Event' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'eSummary'
+--
+-- * 'eOriginalStartTime'
+--
+-- * 'eCreator'
+--
+-- * 'eStatus'
+--
+-- * 'eGuestsCanModify'
+--
+-- * 'eEtag'
+--
+-- * 'eAttachments'
+--
+-- * 'eLocked'
+--
+-- * 'eLocation'
+--
+-- * 'eAttendees'
+--
+-- * 'eReminders'
+--
+-- * 'eKind'
+--
+-- * 'eCreated'
+--
+-- * 'eTransparency'
+--
+-- * 'eRecurringEventId'
+--
+-- * 'eStart'
+--
+-- * 'ePrivateCopy'
+--
+-- * 'eEndTimeUnspecified'
+--
+-- * 'eExtendedProperties'
+--
+-- * 'eVisibility'
+--
+-- * 'eGuestsCanInviteOthers'
+--
+-- * 'eRecurrence'
+--
+-- * 'eGadget'
+--
+-- * 'eSequence'
+--
+-- * 'eICalUId'
+--
+-- * 'eEnd'
+--
+-- * 'eAttendeesOmitted'
+--
+-- * 'eSource'
+--
+-- * 'eId'
+--
+-- * 'eHTMLLink'
+--
+-- * 'eUpdated'
+--
+-- * 'eColorId'
+--
+-- * 'eAnyoneCanAddSelf'
+--
+-- * 'eGuestsCanSeeOtherGuests'
+--
+-- * 'eHangoutLink'
+--
+-- * 'eDescription'
+--
+-- * 'eOrganizer'
+event
+    :: Event
+event =
+    Event
+    { _eSummary = Nothing
+    , _eOriginalStartTime = Nothing
+    , _eCreator = Nothing
+    , _eStatus = Nothing
+    , _eGuestsCanModify = False
+    , _eEtag = Nothing
+    , _eAttachments = Nothing
+    , _eLocked = False
+    , _eLocation = Nothing
+    , _eAttendees = Nothing
+    , _eReminders = Nothing
+    , _eKind = "calendar#event"
+    , _eCreated = Nothing
+    , _eTransparency = "opaque"
+    , _eRecurringEventId = Nothing
+    , _eStart = Nothing
+    , _ePrivateCopy = False
+    , _eEndTimeUnspecified = False
+    , _eExtendedProperties = Nothing
+    , _eVisibility = "default"
+    , _eGuestsCanInviteOthers = True
+    , _eRecurrence = Nothing
+    , _eGadget = Nothing
+    , _eSequence = Nothing
+    , _eICalUId = Nothing
+    , _eEnd = Nothing
+    , _eAttendeesOmitted = False
+    , _eSource = Nothing
+    , _eId = Nothing
+    , _eHTMLLink = Nothing
+    , _eUpdated = Nothing
+    , _eColorId = Nothing
+    , _eAnyoneCanAddSelf = False
+    , _eGuestsCanSeeOtherGuests = True
+    , _eHangoutLink = Nothing
+    , _eDescription = Nothing
+    , _eOrganizer = Nothing
+    }
+
+-- | Title of the event.
+eSummary :: Lens' Event (Maybe Text)
+eSummary = lens _eSummary (\ s a -> s{_eSummary = a})
+
+-- | For an instance of a recurring event, this is the time at which this
+-- event would start according to the recurrence data in the recurring
+-- event identified by recurringEventId. Immutable.
+eOriginalStartTime :: Lens' Event (Maybe EventDateTime)
+eOriginalStartTime
+  = lens _eOriginalStartTime
+      (\ s a -> s{_eOriginalStartTime = a})
+
+-- | The creator of the event. Read-only.
+eCreator :: Lens' Event (Maybe EventCreator)
+eCreator = lens _eCreator (\ s a -> s{_eCreator = a})
+
+-- | Status of the event. Optional. Possible values are: - \"confirmed\" -
+-- The event is confirmed. This is the default status. - \"tentative\" -
+-- The event is tentatively confirmed. - \"cancelled\" - The event is
+-- cancelled.
+eStatus :: Lens' Event (Maybe Text)
+eStatus = lens _eStatus (\ s a -> s{_eStatus = a})
+
+-- | Whether attendees other than the organizer can modify the event.
+-- Optional. The default is False.
+eGuestsCanModify :: Lens' Event Bool
+eGuestsCanModify
+  = lens _eGuestsCanModify
+      (\ s a -> s{_eGuestsCanModify = a})
+
+-- | ETag of the resource.
+eEtag :: Lens' Event (Maybe Text)
+eEtag = lens _eEtag (\ s a -> s{_eEtag = a})
+
+-- | File attachments for the event. Currently only Google Drive attachments
+-- are supported. In order to modify attachments the supportsAttachments
+-- request parameter should be set to true. There can be at most 25
+-- attachments per event,
+eAttachments :: Lens' Event [EventAttachment]
+eAttachments
+  = lens _eAttachments (\ s a -> s{_eAttachments = a})
+      . _Default
+      . _Coerce
+
+-- | Whether this is a locked event copy where no changes can be made to the
+-- main event fields \"summary\", \"description\", \"location\", \"start\",
+-- \"end\" or \"recurrence\". The default is False. Read-Only.
+eLocked :: Lens' Event Bool
+eLocked = lens _eLocked (\ s a -> s{_eLocked = a})
+
+-- | Geographic location of the event as free-form text. Optional.
+eLocation :: Lens' Event (Maybe Text)
+eLocation
+  = lens _eLocation (\ s a -> s{_eLocation = a})
+
+-- | The attendees of the event. See the Events with attendees guide for more
+-- information on scheduling events with other calendar users.
+eAttendees :: Lens' Event [EventAttendee]
+eAttendees
+  = lens _eAttendees (\ s a -> s{_eAttendees = a}) .
+      _Default
+      . _Coerce
+
+-- | Information about the event\'s reminders for the authenticated user.
+eReminders :: Lens' Event (Maybe EventReminders)
+eReminders
+  = lens _eReminders (\ s a -> s{_eReminders = a})
+
+-- | Type of the resource (\"calendar#event\").
+eKind :: Lens' Event Text
+eKind = lens _eKind (\ s a -> s{_eKind = a})
+
+-- | Creation time of the event (as a RFC3339 timestamp). Read-only.
+eCreated :: Lens' Event (Maybe UTCTime)
+eCreated
+  = lens _eCreated (\ s a -> s{_eCreated = a}) .
+      mapping _DateTime
+
+-- | Whether the event blocks time on the calendar. Optional. Possible values
+-- are: - \"opaque\" - The event blocks time on the calendar. This is the
+-- default value. - \"transparent\" - The event does not block time on the
+-- calendar.
+eTransparency :: Lens' Event Text
+eTransparency
+  = lens _eTransparency
+      (\ s a -> s{_eTransparency = a})
+
+-- | For an instance of a recurring event, this is the id of the recurring
+-- event to which this instance belongs. Immutable.
+eRecurringEventId :: Lens' Event (Maybe Text)
+eRecurringEventId
+  = lens _eRecurringEventId
+      (\ s a -> s{_eRecurringEventId = a})
+
+-- | The (inclusive) start time of the event. For a recurring event, this is
+-- the start time of the first instance.
+eStart :: Lens' Event (Maybe EventDateTime)
+eStart = lens _eStart (\ s a -> s{_eStart = a})
+
+-- | Whether this is a private event copy where changes are not shared with
+-- other copies on other calendars. Optional. Immutable. The default is
+-- False.
+ePrivateCopy :: Lens' Event Bool
+ePrivateCopy
+  = lens _ePrivateCopy (\ s a -> s{_ePrivateCopy = a})
+
+-- | Whether the end time is actually unspecified. An end time is still
+-- provided for compatibility reasons, even if this attribute is set to
+-- True. The default is False.
+eEndTimeUnspecified :: Lens' Event Bool
+eEndTimeUnspecified
+  = lens _eEndTimeUnspecified
+      (\ s a -> s{_eEndTimeUnspecified = a})
+
+-- | Extended properties of the event.
+eExtendedProperties :: Lens' Event (Maybe EventExtendedProperties)
+eExtendedProperties
+  = lens _eExtendedProperties
+      (\ s a -> s{_eExtendedProperties = a})
+
+-- | Visibility of the event. Optional. Possible values are: - \"default\" -
+-- Uses the default visibility for events on the calendar. This is the
+-- default value. - \"public\" - The event is public and event details are
+-- visible to all readers of the calendar. - \"private\" - The event is
+-- private and only event attendees may view event details. -
+-- \"confidential\" - The event is private. This value is provided for
+-- compatibility reasons.
+eVisibility :: Lens' Event Text
+eVisibility
+  = lens _eVisibility (\ s a -> s{_eVisibility = a})
+
+-- | Whether attendees other than the organizer can invite others to the
+-- event. Optional. The default is True.
+eGuestsCanInviteOthers :: Lens' Event Bool
+eGuestsCanInviteOthers
+  = lens _eGuestsCanInviteOthers
+      (\ s a -> s{_eGuestsCanInviteOthers = a})
+
+-- | List of RRULE, EXRULE, RDATE and EXDATE lines for a recurring event, as
+-- specified in RFC5545. Note that DTSTART and DTEND lines are not allowed
+-- in this field; event start and end times are specified in the start and
+-- end fields. This field is omitted for single events or instances of
+-- recurring events.
+eRecurrence :: Lens' Event [Text]
+eRecurrence
+  = lens _eRecurrence (\ s a -> s{_eRecurrence = a}) .
+      _Default
+      . _Coerce
+
+-- | A gadget that extends this event.
+eGadget :: Lens' Event (Maybe EventGadget)
+eGadget = lens _eGadget (\ s a -> s{_eGadget = a})
+
+-- | Sequence number as per iCalendar.
+eSequence :: Lens' Event (Maybe Int32)
+eSequence
+  = lens _eSequence (\ s a -> s{_eSequence = a}) .
+      mapping _Coerce
+
+-- | Event unique identifier as defined in RFC5545. It is used to uniquely
+-- identify events accross calendaring systems and must be supplied when
+-- importing events via the import method. Note that the icalUID and the id
+-- are not identical and only one of them should be supplied at event
+-- creation time. One difference in their semantics is that in recurring
+-- events, all occurrences of one event have different ids while they all
+-- share the same icalUIDs.
+eICalUId :: Lens' Event (Maybe Text)
+eICalUId = lens _eICalUId (\ s a -> s{_eICalUId = a})
+
+-- | The (exclusive) end time of the event. For a recurring event, this is
+-- the end time of the first instance.
+eEnd :: Lens' Event (Maybe EventDateTime)
+eEnd = lens _eEnd (\ s a -> s{_eEnd = a})
+
+-- | Whether attendees may have been omitted from the event\'s
+-- representation. When retrieving an event, this may be due to a
+-- restriction specified by the maxAttendee query parameter. When updating
+-- an event, this can be used to only update the participant\'s response.
+-- Optional. The default is False.
+eAttendeesOmitted :: Lens' Event Bool
+eAttendeesOmitted
+  = lens _eAttendeesOmitted
+      (\ s a -> s{_eAttendeesOmitted = a})
+
+-- | Source from which the event was created. For example, a web page, an
+-- email message or any document identifiable by an URL with HTTP or HTTPS
+-- scheme. Can only be seen or modified by the creator of the event.
+eSource :: Lens' Event (Maybe EventSource)
+eSource = lens _eSource (\ s a -> s{_eSource = a})
+
+-- | Opaque identifier of the event. When creating new single or recurring
+-- events, you can specify their IDs. Provided IDs must follow these rules:
+-- - characters allowed in the ID are those used in base32hex encoding,
+-- i.e. lowercase letters a-v and digits 0-9, see section 3.1.2 in RFC2938
+-- - the length of the ID must be between 5 and 1024 characters - the ID
+-- must be unique per calendar Due to the globally distributed nature of
+-- the system, we cannot guarantee that ID collisions will be detected at
+-- event creation time. To minimize the risk of collisions we recommend
+-- using an established UUID algorithm such as one described in RFC4122. If
+-- you do not specify an ID, it will be automatically generated by the
+-- server. Note that the icalUID and the id are not identical and only one
+-- of them should be supplied at event creation time. One difference in
+-- their semantics is that in recurring events, all occurrences of one
+-- event have different ids while they all share the same icalUIDs.
+eId :: Lens' Event (Maybe Text)
+eId = lens _eId (\ s a -> s{_eId = a})
+
+-- | An absolute link to this event in the Google Calendar Web UI. Read-only.
+eHTMLLink :: Lens' Event (Maybe Text)
+eHTMLLink
+  = lens _eHTMLLink (\ s a -> s{_eHTMLLink = a})
+
+-- | Last modification time of the event (as a RFC3339 timestamp). Read-only.
+eUpdated :: Lens' Event (Maybe UTCTime)
+eUpdated
+  = lens _eUpdated (\ s a -> s{_eUpdated = a}) .
+      mapping _DateTime
+
+-- | The color of the event. This is an ID referring to an entry in the event
+-- section of the colors definition (see the colors endpoint). Optional.
+eColorId :: Lens' Event (Maybe Text)
+eColorId = lens _eColorId (\ s a -> s{_eColorId = a})
+
+-- | Whether anyone can invite themselves to the event. Optional. The default
+-- is False.
+eAnyoneCanAddSelf :: Lens' Event Bool
+eAnyoneCanAddSelf
+  = lens _eAnyoneCanAddSelf
+      (\ s a -> s{_eAnyoneCanAddSelf = a})
+
+-- | Whether attendees other than the organizer can see who the event\'s
+-- attendees are. Optional. The default is True.
+eGuestsCanSeeOtherGuests :: Lens' Event Bool
+eGuestsCanSeeOtherGuests
+  = lens _eGuestsCanSeeOtherGuests
+      (\ s a -> s{_eGuestsCanSeeOtherGuests = a})
+
+-- | An absolute link to the Google+ hangout associated with this event.
+-- Read-only.
+eHangoutLink :: Lens' Event (Maybe Text)
+eHangoutLink
+  = lens _eHangoutLink (\ s a -> s{_eHangoutLink = a})
+
+-- | Description of the event. Optional.
+eDescription :: Lens' Event (Maybe Text)
+eDescription
+  = lens _eDescription (\ s a -> s{_eDescription = a})
+
+-- | The organizer of the event. If the organizer is also an attendee, this
+-- is indicated with a separate entry in attendees with the organizer field
+-- set to True. To change the organizer, use the move operation. Read-only,
+-- except when importing an event.
+eOrganizer :: Lens' Event (Maybe EventOrganizer)
+eOrganizer
+  = lens _eOrganizer (\ s a -> s{_eOrganizer = a})
+
+instance FromJSON Event where
+        parseJSON
+          = withObject "Event"
+              (\ o ->
+                 Event <$>
+                   (o .:? "summary") <*> (o .:? "originalStartTime") <*>
+                     (o .:? "creator")
+                     <*> (o .:? "status")
+                     <*> (o .:? "guestsCanModify" .!= False)
+                     <*> (o .:? "etag")
+                     <*> (o .:? "attachments" .!= mempty)
+                     <*> (o .:? "locked" .!= False)
+                     <*> (o .:? "location")
+                     <*> (o .:? "attendees" .!= mempty)
+                     <*> (o .:? "reminders")
+                     <*> (o .:? "kind" .!= "calendar#event")
+                     <*> (o .:? "created")
+                     <*> (o .:? "transparency" .!= "opaque")
+                     <*> (o .:? "recurringEventId")
+                     <*> (o .:? "start")
+                     <*> (o .:? "privateCopy" .!= False)
+                     <*> (o .:? "endTimeUnspecified" .!= False)
+                     <*> (o .:? "extendedProperties")
+                     <*> (o .:? "visibility" .!= "default")
+                     <*> (o .:? "guestsCanInviteOthers" .!= True)
+                     <*> (o .:? "recurrence" .!= mempty)
+                     <*> (o .:? "gadget")
+                     <*> (o .:? "sequence")
+                     <*> (o .:? "iCalUID")
+                     <*> (o .:? "end")
+                     <*> (o .:? "attendeesOmitted" .!= False)
+                     <*> (o .:? "source")
+                     <*> (o .:? "id")
+                     <*> (o .:? "htmlLink")
+                     <*> (o .:? "updated")
+                     <*> (o .:? "colorId")
+                     <*> (o .:? "anyoneCanAddSelf" .!= False)
+                     <*> (o .:? "guestsCanSeeOtherGuests" .!= True)
+                     <*> (o .:? "hangoutLink")
+                     <*> (o .:? "description")
+                     <*> (o .:? "organizer"))
+
+instance ToJSON Event where
+        toJSON Event{..}
+          = object
+              (catMaybes
+                 [("summary" .=) <$> _eSummary,
+                  ("originalStartTime" .=) <$> _eOriginalStartTime,
+                  ("creator" .=) <$> _eCreator,
+                  ("status" .=) <$> _eStatus,
+                  Just ("guestsCanModify" .= _eGuestsCanModify),
+                  ("etag" .=) <$> _eEtag,
+                  ("attachments" .=) <$> _eAttachments,
+                  Just ("locked" .= _eLocked),
+                  ("location" .=) <$> _eLocation,
+                  ("attendees" .=) <$> _eAttendees,
+                  ("reminders" .=) <$> _eReminders,
+                  Just ("kind" .= _eKind),
+                  ("created" .=) <$> _eCreated,
+                  Just ("transparency" .= _eTransparency),
+                  ("recurringEventId" .=) <$> _eRecurringEventId,
+                  ("start" .=) <$> _eStart,
+                  Just ("privateCopy" .= _ePrivateCopy),
+                  Just ("endTimeUnspecified" .= _eEndTimeUnspecified),
+                  ("extendedProperties" .=) <$> _eExtendedProperties,
+                  Just ("visibility" .= _eVisibility),
+                  Just
+                    ("guestsCanInviteOthers" .= _eGuestsCanInviteOthers),
+                  ("recurrence" .=) <$> _eRecurrence,
+                  ("gadget" .=) <$> _eGadget,
+                  ("sequence" .=) <$> _eSequence,
+                  ("iCalUID" .=) <$> _eICalUId, ("end" .=) <$> _eEnd,
+                  Just ("attendeesOmitted" .= _eAttendeesOmitted),
+                  ("source" .=) <$> _eSource, ("id" .=) <$> _eId,
+                  ("htmlLink" .=) <$> _eHTMLLink,
+                  ("updated" .=) <$> _eUpdated,
+                  ("colorId" .=) <$> _eColorId,
+                  Just ("anyoneCanAddSelf" .= _eAnyoneCanAddSelf),
+                  Just
+                    ("guestsCanSeeOtherGuests" .=
+                       _eGuestsCanSeeOtherGuests),
+                  ("hangoutLink" .=) <$> _eHangoutLink,
+                  ("description" .=) <$> _eDescription,
+                  ("organizer" .=) <$> _eOrganizer])
+
+-- | The notifications that the authenticated user is receiving for this
+-- calendar.
+--
+-- /See:/ 'calendarListEntryNotificationSettings' smart constructor.
+newtype CalendarListEntryNotificationSettings = CalendarListEntryNotificationSettings
+    { _clensNotifications :: Maybe [CalendarNotification]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CalendarListEntryNotificationSettings' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'clensNotifications'
+calendarListEntryNotificationSettings
+    :: CalendarListEntryNotificationSettings
+calendarListEntryNotificationSettings =
+    CalendarListEntryNotificationSettings
+    { _clensNotifications = Nothing
+    }
+
+-- | The list of notifications set for this calendar.
+clensNotifications :: Lens' CalendarListEntryNotificationSettings [CalendarNotification]
+clensNotifications
+  = lens _clensNotifications
+      (\ s a -> s{_clensNotifications = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON
+         CalendarListEntryNotificationSettings where
+        parseJSON
+          = withObject "CalendarListEntryNotificationSettings"
+              (\ o ->
+                 CalendarListEntryNotificationSettings <$>
+                   (o .:? "notifications" .!= mempty))
+
+instance ToJSON CalendarListEntryNotificationSettings
+         where
+        toJSON CalendarListEntryNotificationSettings{..}
+          = object
+              (catMaybes
+                 [("notifications" .=) <$> _clensNotifications])
+
+-- | The scope of the rule.
+--
+-- /See:/ 'aclRuleScope' smart constructor.
+data ACLRuleScope = ACLRuleScope
+    { _arsValue :: !(Maybe Text)
+    , _arsType  :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ACLRuleScope' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'arsValue'
+--
+-- * 'arsType'
+aclRuleScope
+    :: ACLRuleScope
+aclRuleScope =
+    ACLRuleScope
+    { _arsValue = Nothing
+    , _arsType = Nothing
+    }
+
+-- | The email address of a user or group, or the name of a domain, depending
+-- on the scope type. Omitted for type \"default\".
+arsValue :: Lens' ACLRuleScope (Maybe Text)
+arsValue = lens _arsValue (\ s a -> s{_arsValue = a})
+
+-- | The type of the scope. Possible values are: - \"default\" - The public
+-- scope. This is the default value. - \"user\" - Limits the scope to a
+-- single user. - \"group\" - Limits the scope to a group. - \"domain\" -
+-- Limits the scope to a domain. Note: The permissions granted to the
+-- \"default\", or public, scope apply to any user, authenticated or not.
+arsType :: Lens' ACLRuleScope (Maybe Text)
+arsType = lens _arsType (\ s a -> s{_arsType = a})
+
+instance FromJSON ACLRuleScope where
+        parseJSON
+          = withObject "ACLRuleScope"
+              (\ o ->
+                 ACLRuleScope <$> (o .:? "value") <*> (o .:? "type"))
+
+instance ToJSON ACLRuleScope where
+        toJSON ACLRuleScope{..}
+          = object
+              (catMaybes
+                 [("value" .=) <$> _arsValue,
+                  ("type" .=) <$> _arsType])
+
+-- | A global palette of event colors, mapping from the color ID to its
+-- definition. An event resource may refer to one of these color IDs in its
+-- color field. Read-only.
+--
+-- /See:/ 'colorsEvent' smart constructor.
+newtype ColorsEvent = ColorsEvent
+    { _ceAddtional :: HashMap Text ColorDefinition
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ColorsEvent' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ceAddtional'
+colorsEvent
+    :: HashMap Text ColorDefinition -- ^ 'ceAddtional'
+    -> ColorsEvent
+colorsEvent pCeAddtional_ =
+    ColorsEvent
+    { _ceAddtional = _Coerce # pCeAddtional_
+    }
+
+-- | An event color definition.
+ceAddtional :: Lens' ColorsEvent (HashMap Text ColorDefinition)
+ceAddtional
+  = lens _ceAddtional (\ s a -> s{_ceAddtional = a}) .
+      _Coerce
+
+instance FromJSON ColorsEvent where
+        parseJSON
+          = withObject "ColorsEvent"
+              (\ o -> ColorsEvent <$> (parseJSONObject o))
+
+instance ToJSON ColorsEvent where
+        toJSON = toJSON . _ceAddtional
+
+--
+-- /See:/ 'settings' smart constructor.
+data Settings = Settings
+    { _sEtag          :: !(Maybe Text)
+    , _sNextPageToken :: !(Maybe Text)
+    , _sKind          :: !Text
+    , _sItems         :: !(Maybe [Setting])
+    , _sNextSyncToken :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Settings' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sEtag'
+--
+-- * 'sNextPageToken'
+--
+-- * 'sKind'
+--
+-- * 'sItems'
+--
+-- * 'sNextSyncToken'
+settings
+    :: Settings
+settings =
+    Settings
+    { _sEtag = Nothing
+    , _sNextPageToken = Nothing
+    , _sKind = "calendar#settings"
+    , _sItems = Nothing
+    , _sNextSyncToken = Nothing
+    }
+
+-- | Etag of the collection.
+sEtag :: Lens' Settings (Maybe Text)
+sEtag = lens _sEtag (\ s a -> s{_sEtag = a})
+
+-- | Token used to access the next page of this result. Omitted if no further
+-- results are available, in which case nextSyncToken is provided.
+sNextPageToken :: Lens' Settings (Maybe Text)
+sNextPageToken
+  = lens _sNextPageToken
+      (\ s a -> s{_sNextPageToken = a})
+
+-- | Type of the collection (\"calendar#settings\").
+sKind :: Lens' Settings Text
+sKind = lens _sKind (\ s a -> s{_sKind = a})
+
+-- | List of user settings.
+sItems :: Lens' Settings [Setting]
+sItems
+  = lens _sItems (\ s a -> s{_sItems = a}) . _Default .
+      _Coerce
+
+-- | Token used at a later point in time to retrieve only the entries that
+-- have changed since this result was returned. Omitted if further results
+-- are available, in which case nextPageToken is provided.
+sNextSyncToken :: Lens' Settings (Maybe Text)
+sNextSyncToken
+  = lens _sNextSyncToken
+      (\ s a -> s{_sNextSyncToken = a})
+
+instance FromJSON Settings where
+        parseJSON
+          = withObject "Settings"
+              (\ o ->
+                 Settings <$>
+                   (o .:? "etag") <*> (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "calendar#settings")
+                     <*> (o .:? "items" .!= mempty)
+                     <*> (o .:? "nextSyncToken"))
+
+instance ToJSON Settings where
+        toJSON Settings{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _sEtag,
+                  ("nextPageToken" .=) <$> _sNextPageToken,
+                  Just ("kind" .= _sKind), ("items" .=) <$> _sItems,
+                  ("nextSyncToken" .=) <$> _sNextSyncToken])
+
+--
+-- /See:/ 'freeBusyRequestItem' smart constructor.
+newtype FreeBusyRequestItem = FreeBusyRequestItem
+    { _fbriId :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FreeBusyRequestItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fbriId'
+freeBusyRequestItem
+    :: FreeBusyRequestItem
+freeBusyRequestItem =
+    FreeBusyRequestItem
+    { _fbriId = Nothing
+    }
+
+-- | The identifier of a calendar or a group.
+fbriId :: Lens' FreeBusyRequestItem (Maybe Text)
+fbriId = lens _fbriId (\ s a -> s{_fbriId = a})
+
+instance FromJSON FreeBusyRequestItem where
+        parseJSON
+          = withObject "FreeBusyRequestItem"
+              (\ o -> FreeBusyRequestItem <$> (o .:? "id"))
+
+instance ToJSON FreeBusyRequestItem where
+        toJSON FreeBusyRequestItem{..}
+          = object (catMaybes [("id" .=) <$> _fbriId])
+
+--
+-- /See:/ 'eventAttachment' smart constructor.
+data EventAttachment = EventAttachment
+    { _eaFileURL  :: !(Maybe Text)
+    , _eaIconLink :: !(Maybe Text)
+    , _eaMimeType :: !(Maybe Text)
+    , _eaTitle    :: !(Maybe Text)
+    , _eaFileId   :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EventAttachment' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'eaFileURL'
+--
+-- * 'eaIconLink'
+--
+-- * 'eaMimeType'
+--
+-- * 'eaTitle'
+--
+-- * 'eaFileId'
+eventAttachment
+    :: EventAttachment
+eventAttachment =
+    EventAttachment
+    { _eaFileURL = Nothing
+    , _eaIconLink = Nothing
+    , _eaMimeType = Nothing
+    , _eaTitle = Nothing
+    , _eaFileId = Nothing
+    }
+
+-- | URL link to the attachment. For adding Google Drive file attachments use
+-- the same format as in alternateLink property of the Files resource in
+-- the Drive API.
+eaFileURL :: Lens' EventAttachment (Maybe Text)
+eaFileURL
+  = lens _eaFileURL (\ s a -> s{_eaFileURL = a})
+
+-- | URL link to the attachment\'s icon. Read-only.
+eaIconLink :: Lens' EventAttachment (Maybe Text)
+eaIconLink
+  = lens _eaIconLink (\ s a -> s{_eaIconLink = a})
+
+-- | Internet media type (MIME type) of the attachment.
+eaMimeType :: Lens' EventAttachment (Maybe Text)
+eaMimeType
+  = lens _eaMimeType (\ s a -> s{_eaMimeType = a})
+
+-- | Attachment title.
+eaTitle :: Lens' EventAttachment (Maybe Text)
+eaTitle = lens _eaTitle (\ s a -> s{_eaTitle = a})
+
+-- | ID of the attached file. Read-only. For Google Drive files, this is the
+-- ID of the corresponding Files resource entry in the Drive API.
+eaFileId :: Lens' EventAttachment (Maybe Text)
+eaFileId = lens _eaFileId (\ s a -> s{_eaFileId = a})
+
+instance FromJSON EventAttachment where
+        parseJSON
+          = withObject "EventAttachment"
+              (\ o ->
+                 EventAttachment <$>
+                   (o .:? "fileUrl") <*> (o .:? "iconLink") <*>
+                     (o .:? "mimeType")
+                     <*> (o .:? "title")
+                     <*> (o .:? "fileId"))
+
+instance ToJSON EventAttachment where
+        toJSON EventAttachment{..}
+          = object
+              (catMaybes
+                 [("fileUrl" .=) <$> _eaFileURL,
+                  ("iconLink" .=) <$> _eaIconLink,
+                  ("mimeType" .=) <$> _eaMimeType,
+                  ("title" .=) <$> _eaTitle,
+                  ("fileId" .=) <$> _eaFileId])
+
+--
+-- /See:/ 'timePeriod' smart constructor.
+data TimePeriod = TimePeriod
+    { _tpStart :: !(Maybe DateTime')
+    , _tpEnd   :: !(Maybe DateTime')
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TimePeriod' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tpStart'
+--
+-- * 'tpEnd'
+timePeriod
+    :: TimePeriod
+timePeriod =
+    TimePeriod
+    { _tpStart = Nothing
+    , _tpEnd = Nothing
+    }
+
+-- | The (inclusive) start of the time period.
+tpStart :: Lens' TimePeriod (Maybe UTCTime)
+tpStart
+  = lens _tpStart (\ s a -> s{_tpStart = a}) .
+      mapping _DateTime
+
+-- | The (exclusive) end of the time period.
+tpEnd :: Lens' TimePeriod (Maybe UTCTime)
+tpEnd
+  = lens _tpEnd (\ s a -> s{_tpEnd = a}) .
+      mapping _DateTime
+
+instance FromJSON TimePeriod where
+        parseJSON
+          = withObject "TimePeriod"
+              (\ o ->
+                 TimePeriod <$> (o .:? "start") <*> (o .:? "end"))
+
+instance ToJSON TimePeriod where
+        toJSON TimePeriod{..}
+          = object
+              (catMaybes
+                 [("start" .=) <$> _tpStart, ("end" .=) <$> _tpEnd])
+
+-- | The creator of the event. Read-only.
+--
+-- /See:/ 'eventCreator' smart constructor.
+data EventCreator = EventCreator
+    { _ecEmail       :: !(Maybe Text)
+    , _ecSelf        :: !Bool
+    , _ecDisplayName :: !(Maybe Text)
+    , _ecId          :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EventCreator' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ecEmail'
+--
+-- * 'ecSelf'
+--
+-- * 'ecDisplayName'
+--
+-- * 'ecId'
+eventCreator
+    :: EventCreator
+eventCreator =
+    EventCreator
+    { _ecEmail = Nothing
+    , _ecSelf = False
+    , _ecDisplayName = Nothing
+    , _ecId = Nothing
+    }
+
+-- | The creator\'s email address, if available.
+ecEmail :: Lens' EventCreator (Maybe Text)
+ecEmail = lens _ecEmail (\ s a -> s{_ecEmail = a})
+
+-- | Whether the creator corresponds to the calendar on which this copy of
+-- the event appears. Read-only. The default is False.
+ecSelf :: Lens' EventCreator Bool
+ecSelf = lens _ecSelf (\ s a -> s{_ecSelf = a})
+
+-- | The creator\'s name, if available.
+ecDisplayName :: Lens' EventCreator (Maybe Text)
+ecDisplayName
+  = lens _ecDisplayName
+      (\ s a -> s{_ecDisplayName = a})
+
+-- | The creator\'s Profile ID, if available. It corresponds to theid field
+-- in the People collection of the Google+ API
+ecId :: Lens' EventCreator (Maybe Text)
+ecId = lens _ecId (\ s a -> s{_ecId = a})
+
+instance FromJSON EventCreator where
+        parseJSON
+          = withObject "EventCreator"
+              (\ o ->
+                 EventCreator <$>
+                   (o .:? "email") <*> (o .:? "self" .!= False) <*>
+                     (o .:? "displayName")
+                     <*> (o .:? "id"))
+
+instance ToJSON EventCreator where
+        toJSON EventCreator{..}
+          = object
+              (catMaybes
+                 [("email" .=) <$> _ecEmail, Just ("self" .= _ecSelf),
+                  ("displayName" .=) <$> _ecDisplayName,
+                  ("id" .=) <$> _ecId])
+
+--
+-- /See:/ 'error'' smart constructor.
+data Error' = Error'
+    { _eDomain :: !(Maybe Text)
+    , _eReason :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Error' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'eDomain'
+--
+-- * 'eReason'
+error'
+    :: Error'
+error' =
+    Error'
+    { _eDomain = Nothing
+    , _eReason = Nothing
+    }
+
+-- | Domain, or broad category, of the error.
+eDomain :: Lens' Error' (Maybe Text)
+eDomain = lens _eDomain (\ s a -> s{_eDomain = a})
+
+-- | Specific reason for the error. Some of the possible values are: -
+-- \"groupTooBig\" - The group of users requested is too large for a single
+-- query. - \"tooManyCalendarsRequested\" - The number of calendars
+-- requested is too large for a single query. - \"notFound\" - The
+-- requested resource was not found. - \"internalError\" - The API service
+-- has encountered an internal error. Additional error types may be added
+-- in the future, so clients should gracefully handle additional error
+-- statuses not included in this list.
+eReason :: Lens' Error' (Maybe Text)
+eReason = lens _eReason (\ s a -> s{_eReason = a})
+
+instance FromJSON Error' where
+        parseJSON
+          = withObject "Error"
+              (\ o ->
+                 Error' <$> (o .:? "domain") <*> (o .:? "reason"))
+
+instance ToJSON Error' where
+        toJSON Error'{..}
+          = object
+              (catMaybes
+                 [("domain" .=) <$> _eDomain,
+                  ("reason" .=) <$> _eReason])
+
+--
+-- /See:/ 'colorDefinition' smart constructor.
+data ColorDefinition = ColorDefinition
+    { _cdForegRound :: !(Maybe Text)
+    , _cdBackgRound :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ColorDefinition' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cdForegRound'
+--
+-- * 'cdBackgRound'
+colorDefinition
+    :: ColorDefinition
+colorDefinition =
+    ColorDefinition
+    { _cdForegRound = Nothing
+    , _cdBackgRound = Nothing
+    }
+
+-- | The foreground color that can be used to write on top of a background
+-- with \'background\' color.
+cdForegRound :: Lens' ColorDefinition (Maybe Text)
+cdForegRound
+  = lens _cdForegRound (\ s a -> s{_cdForegRound = a})
+
+-- | The background color associated with this color definition.
+cdBackgRound :: Lens' ColorDefinition (Maybe Text)
+cdBackgRound
+  = lens _cdBackgRound (\ s a -> s{_cdBackgRound = a})
+
+instance FromJSON ColorDefinition where
+        parseJSON
+          = withObject "ColorDefinition"
+              (\ o ->
+                 ColorDefinition <$>
+                   (o .:? "foreground") <*> (o .:? "background"))
+
+instance ToJSON ColorDefinition where
+        toJSON ColorDefinition{..}
+          = object
+              (catMaybes
+                 [("foreground" .=) <$> _cdForegRound,
+                  ("background" .=) <$> _cdBackgRound])
+
+--
+-- /See:/ 'channel' smart constructor.
+data Channel = Channel
+    { _cResourceURI :: !(Maybe Text)
+    , _cResourceId  :: !(Maybe Text)
+    , _cKind        :: !Text
+    , _cExpiration  :: !(Maybe (Textual Int64))
+    , _cToken       :: !(Maybe Text)
+    , _cAddress     :: !(Maybe Text)
+    , _cPayload     :: !(Maybe Bool)
+    , _cParams      :: !(Maybe ChannelParams)
+    , _cId          :: !(Maybe Text)
+    , _cType        :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Channel' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cResourceURI'
+--
+-- * 'cResourceId'
+--
+-- * 'cKind'
+--
+-- * 'cExpiration'
+--
+-- * 'cToken'
+--
+-- * 'cAddress'
+--
+-- * 'cPayload'
+--
+-- * 'cParams'
+--
+-- * 'cId'
+--
+-- * 'cType'
+channel
+    :: Channel
+channel =
+    Channel
+    { _cResourceURI = Nothing
+    , _cResourceId = Nothing
+    , _cKind = "api#channel"
+    , _cExpiration = Nothing
+    , _cToken = Nothing
+    , _cAddress = Nothing
+    , _cPayload = Nothing
+    , _cParams = Nothing
+    , _cId = Nothing
+    , _cType = Nothing
+    }
+
+-- | A version-specific identifier for the watched resource.
+cResourceURI :: Lens' Channel (Maybe Text)
+cResourceURI
+  = lens _cResourceURI (\ s a -> s{_cResourceURI = a})
+
+-- | An opaque ID that identifies the resource being watched on this channel.
+-- Stable across different API versions.
+cResourceId :: Lens' Channel (Maybe Text)
+cResourceId
+  = lens _cResourceId (\ s a -> s{_cResourceId = a})
+
+-- | Identifies this as a notification channel used to watch for changes to a
+-- resource. Value: the fixed string \"api#channel\".
+cKind :: Lens' Channel Text
+cKind = lens _cKind (\ s a -> s{_cKind = a})
+
+-- | Date and time of notification channel expiration, expressed as a Unix
+-- timestamp, in milliseconds. Optional.
+cExpiration :: Lens' Channel (Maybe Int64)
+cExpiration
+  = lens _cExpiration (\ s a -> s{_cExpiration = a}) .
+      mapping _Coerce
+
+-- | An arbitrary string delivered to the target address with each
+-- notification delivered over this channel. Optional.
+cToken :: Lens' Channel (Maybe Text)
+cToken = lens _cToken (\ s a -> s{_cToken = a})
+
+-- | The address where notifications are delivered for this channel.
+cAddress :: Lens' Channel (Maybe Text)
+cAddress = lens _cAddress (\ s a -> s{_cAddress = a})
+
+-- | A Boolean value to indicate whether payload is wanted. Optional.
+cPayload :: Lens' Channel (Maybe Bool)
+cPayload = lens _cPayload (\ s a -> s{_cPayload = a})
+
+-- | Additional parameters controlling delivery channel behavior. Optional.
+cParams :: Lens' Channel (Maybe ChannelParams)
+cParams = lens _cParams (\ s a -> s{_cParams = a})
+
+-- | A UUID or similar unique string that identifies this channel.
+cId :: Lens' Channel (Maybe Text)
+cId = lens _cId (\ s a -> s{_cId = a})
+
+-- | The type of delivery mechanism used for this channel.
+cType :: Lens' Channel (Maybe Text)
+cType = lens _cType (\ s a -> s{_cType = a})
+
+instance FromJSON Channel where
+        parseJSON
+          = withObject "Channel"
+              (\ o ->
+                 Channel <$>
+                   (o .:? "resourceUri") <*> (o .:? "resourceId") <*>
+                     (o .:? "kind" .!= "api#channel")
+                     <*> (o .:? "expiration")
+                     <*> (o .:? "token")
+                     <*> (o .:? "address")
+                     <*> (o .:? "payload")
+                     <*> (o .:? "params")
+                     <*> (o .:? "id")
+                     <*> (o .:? "type"))
+
+instance ToJSON Channel where
+        toJSON Channel{..}
+          = object
+              (catMaybes
+                 [("resourceUri" .=) <$> _cResourceURI,
+                  ("resourceId" .=) <$> _cResourceId,
+                  Just ("kind" .= _cKind),
+                  ("expiration" .=) <$> _cExpiration,
+                  ("token" .=) <$> _cToken,
+                  ("address" .=) <$> _cAddress,
+                  ("payload" .=) <$> _cPayload,
+                  ("params" .=) <$> _cParams, ("id" .=) <$> _cId,
+                  ("type" .=) <$> _cType])
+
+--
+-- /See:/ 'freeBusyCalendar' smart constructor.
+data FreeBusyCalendar = FreeBusyCalendar
+    { _fbcBusy   :: !(Maybe [TimePeriod])
+    , _fbcErrors :: !(Maybe [Error'])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FreeBusyCalendar' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fbcBusy'
+--
+-- * 'fbcErrors'
+freeBusyCalendar
+    :: FreeBusyCalendar
+freeBusyCalendar =
+    FreeBusyCalendar
+    { _fbcBusy = Nothing
+    , _fbcErrors = Nothing
+    }
+
+-- | List of time ranges during which this calendar should be regarded as
+-- busy.
+fbcBusy :: Lens' FreeBusyCalendar [TimePeriod]
+fbcBusy
+  = lens _fbcBusy (\ s a -> s{_fbcBusy = a}) . _Default
+      . _Coerce
+
+-- | Optional error(s) (if computation for the calendar failed).
+fbcErrors :: Lens' FreeBusyCalendar [Error']
+fbcErrors
+  = lens _fbcErrors (\ s a -> s{_fbcErrors = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON FreeBusyCalendar where
+        parseJSON
+          = withObject "FreeBusyCalendar"
+              (\ o ->
+                 FreeBusyCalendar <$>
+                   (o .:? "busy" .!= mempty) <*>
+                     (o .:? "errors" .!= mempty))
+
+instance ToJSON FreeBusyCalendar where
+        toJSON FreeBusyCalendar{..}
+          = object
+              (catMaybes
+                 [("busy" .=) <$> _fbcBusy,
+                  ("errors" .=) <$> _fbcErrors])
+
+--
+-- /See:/ 'setting' smart constructor.
+data Setting = Setting
+    { _setEtag  :: !(Maybe Text)
+    , _setKind  :: !Text
+    , _setValue :: !(Maybe Text)
+    , _setId    :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Setting' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'setEtag'
+--
+-- * 'setKind'
+--
+-- * 'setValue'
+--
+-- * 'setId'
+setting
+    :: Setting
+setting =
+    Setting
+    { _setEtag = Nothing
+    , _setKind = "calendar#setting"
+    , _setValue = Nothing
+    , _setId = Nothing
+    }
+
+-- | ETag of the resource.
+setEtag :: Lens' Setting (Maybe Text)
+setEtag = lens _setEtag (\ s a -> s{_setEtag = a})
+
+-- | Type of the resource (\"calendar#setting\").
+setKind :: Lens' Setting Text
+setKind = lens _setKind (\ s a -> s{_setKind = a})
+
+-- | Value of the user setting. The format of the value depends on the ID of
+-- the setting. It must always be a UTF-8 string of length up to 1024
+-- characters.
+setValue :: Lens' Setting (Maybe Text)
+setValue = lens _setValue (\ s a -> s{_setValue = a})
+
+-- | The id of the user setting.
+setId :: Lens' Setting (Maybe Text)
+setId = lens _setId (\ s a -> s{_setId = a})
+
+instance FromJSON Setting where
+        parseJSON
+          = withObject "Setting"
+              (\ o ->
+                 Setting <$>
+                   (o .:? "etag") <*>
+                     (o .:? "kind" .!= "calendar#setting")
+                     <*> (o .:? "value")
+                     <*> (o .:? "id"))
+
+instance ToJSON Setting where
+        toJSON Setting{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _setEtag, Just ("kind" .= _setKind),
+                  ("value" .=) <$> _setValue, ("id" .=) <$> _setId])
+
+-- | Expansion of groups.
+--
+-- /See:/ 'freeBusyResponseGroups' smart constructor.
+newtype FreeBusyResponseGroups = FreeBusyResponseGroups
+    { _fbrgAddtional :: HashMap Text FreeBusyGroup
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FreeBusyResponseGroups' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fbrgAddtional'
+freeBusyResponseGroups
+    :: HashMap Text FreeBusyGroup -- ^ 'fbrgAddtional'
+    -> FreeBusyResponseGroups
+freeBusyResponseGroups pFbrgAddtional_ =
+    FreeBusyResponseGroups
+    { _fbrgAddtional = _Coerce # pFbrgAddtional_
+    }
+
+-- | List of calendars that are members of this group.
+fbrgAddtional :: Lens' FreeBusyResponseGroups (HashMap Text FreeBusyGroup)
+fbrgAddtional
+  = lens _fbrgAddtional
+      (\ s a -> s{_fbrgAddtional = a})
+      . _Coerce
+
+instance FromJSON FreeBusyResponseGroups where
+        parseJSON
+          = withObject "FreeBusyResponseGroups"
+              (\ o ->
+                 FreeBusyResponseGroups <$> (parseJSONObject o))
+
+instance ToJSON FreeBusyResponseGroups where
+        toJSON = toJSON . _fbrgAddtional
+
+-- | Information about the event\'s reminders for the authenticated user.
+--
+-- /See:/ 'eventReminders' smart constructor.
+data EventReminders = EventReminders
+    { _erOverrides  :: !(Maybe [EventReminder])
+    , _erUseDefault :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EventReminders' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'erOverrides'
+--
+-- * 'erUseDefault'
+eventReminders
+    :: EventReminders
+eventReminders =
+    EventReminders
+    { _erOverrides = Nothing
+    , _erUseDefault = Nothing
+    }
+
+-- | If the event doesn\'t use the default reminders, this lists the
+-- reminders specific to the event, or, if not set, indicates that no
+-- reminders are set for this event. The maximum number of override
+-- reminders is 5.
+erOverrides :: Lens' EventReminders [EventReminder]
+erOverrides
+  = lens _erOverrides (\ s a -> s{_erOverrides = a}) .
+      _Default
+      . _Coerce
+
+-- | Whether the default reminders of the calendar apply to the event.
+erUseDefault :: Lens' EventReminders (Maybe Bool)
+erUseDefault
+  = lens _erUseDefault (\ s a -> s{_erUseDefault = a})
+
+instance FromJSON EventReminders where
+        parseJSON
+          = withObject "EventReminders"
+              (\ o ->
+                 EventReminders <$>
+                   (o .:? "overrides" .!= mempty) <*>
+                     (o .:? "useDefault"))
+
+instance ToJSON EventReminders where
+        toJSON EventReminders{..}
+          = object
+              (catMaybes
+                 [("overrides" .=) <$> _erOverrides,
+                  ("useDefault" .=) <$> _erUseDefault])
+
+-- | A global palette of calendar colors, mapping from the color ID to its
+-- definition. A calendarListEntry resource refers to one of these color
+-- IDs in its color field. Read-only.
+--
+-- /See:/ 'colorsCalendar' smart constructor.
+newtype ColorsCalendar = ColorsCalendar
+    { _ccAddtional :: HashMap Text ColorDefinition
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ColorsCalendar' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ccAddtional'
+colorsCalendar
+    :: HashMap Text ColorDefinition -- ^ 'ccAddtional'
+    -> ColorsCalendar
+colorsCalendar pCcAddtional_ =
+    ColorsCalendar
+    { _ccAddtional = _Coerce # pCcAddtional_
+    }
+
+-- | A calendar color defintion.
+ccAddtional :: Lens' ColorsCalendar (HashMap Text ColorDefinition)
+ccAddtional
+  = lens _ccAddtional (\ s a -> s{_ccAddtional = a}) .
+      _Coerce
+
+instance FromJSON ColorsCalendar where
+        parseJSON
+          = withObject "ColorsCalendar"
+              (\ o -> ColorsCalendar <$> (parseJSONObject o))
+
+instance ToJSON ColorsCalendar where
+        toJSON = toJSON . _ccAddtional
+
+--
+-- /See:/ 'calendarNotification' smart constructor.
+data CalendarNotification = CalendarNotification
+    { _cnMethod :: !(Maybe Text)
+    , _cnType   :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CalendarNotification' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cnMethod'
+--
+-- * 'cnType'
+calendarNotification
+    :: CalendarNotification
+calendarNotification =
+    CalendarNotification
+    { _cnMethod = Nothing
+    , _cnType = Nothing
+    }
+
+-- | The method used to deliver the notification. Possible values are: -
+-- \"email\" - Reminders are sent via email. - \"sms\" - Reminders are sent
+-- via SMS. This value is read-only and is ignored on inserts and updates.
+-- SMS reminders are only available for Google Apps for Work, Education,
+-- and Government customers.
+cnMethod :: Lens' CalendarNotification (Maybe Text)
+cnMethod = lens _cnMethod (\ s a -> s{_cnMethod = a})
+
+-- | The type of notification. Possible values are: - \"eventCreation\" -
+-- Notification sent when a new event is put on the calendar. -
+-- \"eventChange\" - Notification sent when an event is changed. -
+-- \"eventCancellation\" - Notification sent when an event is cancelled. -
+-- \"eventResponse\" - Notification sent when an event is changed. -
+-- \"agenda\" - An agenda with the events of the day (sent out in the
+-- morning).
+cnType :: Lens' CalendarNotification (Maybe Text)
+cnType = lens _cnType (\ s a -> s{_cnType = a})
+
+instance FromJSON CalendarNotification where
+        parseJSON
+          = withObject "CalendarNotification"
+              (\ o ->
+                 CalendarNotification <$>
+                   (o .:? "method") <*> (o .:? "type"))
+
+instance ToJSON CalendarNotification where
+        toJSON CalendarNotification{..}
+          = object
+              (catMaybes
+                 [("method" .=) <$> _cnMethod,
+                  ("type" .=) <$> _cnType])
+
+-- | Properties that are private to the copy of the event that appears on
+-- this calendar.
+--
+-- /See:/ 'eventExtendedPropertiesPrivate' smart constructor.
+newtype EventExtendedPropertiesPrivate = EventExtendedPropertiesPrivate
+    { _eeppAddtional :: HashMap Text Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EventExtendedPropertiesPrivate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'eeppAddtional'
+eventExtendedPropertiesPrivate
+    :: HashMap Text Text -- ^ 'eeppAddtional'
+    -> EventExtendedPropertiesPrivate
+eventExtendedPropertiesPrivate pEeppAddtional_ =
+    EventExtendedPropertiesPrivate
+    { _eeppAddtional = _Coerce # pEeppAddtional_
+    }
+
+-- | The name of the private property and the corresponding value.
+eeppAddtional :: Lens' EventExtendedPropertiesPrivate (HashMap Text Text)
+eeppAddtional
+  = lens _eeppAddtional
+      (\ s a -> s{_eeppAddtional = a})
+      . _Coerce
+
+instance FromJSON EventExtendedPropertiesPrivate
+         where
+        parseJSON
+          = withObject "EventExtendedPropertiesPrivate"
+              (\ o ->
+                 EventExtendedPropertiesPrivate <$>
+                   (parseJSONObject o))
+
+instance ToJSON EventExtendedPropertiesPrivate where
+        toJSON = toJSON . _eeppAddtional
+
+-- | Additional parameters controlling delivery channel behavior. Optional.
+--
+-- /See:/ 'channelParams' smart constructor.
+newtype ChannelParams = ChannelParams
+    { _cpAddtional :: HashMap Text Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ChannelParams' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cpAddtional'
+channelParams
+    :: HashMap Text Text -- ^ 'cpAddtional'
+    -> ChannelParams
+channelParams pCpAddtional_ =
+    ChannelParams
+    { _cpAddtional = _Coerce # pCpAddtional_
+    }
+
+-- | Declares a new parameter by name.
+cpAddtional :: Lens' ChannelParams (HashMap Text Text)
+cpAddtional
+  = lens _cpAddtional (\ s a -> s{_cpAddtional = a}) .
+      _Coerce
+
+instance FromJSON ChannelParams where
+        parseJSON
+          = withObject "ChannelParams"
+              (\ o -> ChannelParams <$> (parseJSONObject o))
+
+instance ToJSON ChannelParams where
+        toJSON = toJSON . _cpAddtional
+
+--
+-- /See:/ 'events' smart constructor.
+data Events = Events
+    { _eveSummary          :: !(Maybe Text)
+    , _eveEtag             :: !(Maybe Text)
+    , _eveNextPageToken    :: !(Maybe Text)
+    , _eveKind             :: !Text
+    , _eveItems            :: !(Maybe [Event])
+    , _eveDefaultReminders :: !(Maybe [EventReminder])
+    , _eveUpdated          :: !(Maybe DateTime')
+    , _eveAccessRole       :: !(Maybe Text)
+    , _eveTimeZone         :: !(Maybe Text)
+    , _eveNextSyncToken    :: !(Maybe Text)
+    , _eveDescription      :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Events' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'eveSummary'
+--
+-- * 'eveEtag'
+--
+-- * 'eveNextPageToken'
+--
+-- * 'eveKind'
+--
+-- * 'eveItems'
+--
+-- * 'eveDefaultReminders'
+--
+-- * 'eveUpdated'
+--
+-- * 'eveAccessRole'
+--
+-- * 'eveTimeZone'
+--
+-- * 'eveNextSyncToken'
+--
+-- * 'eveDescription'
+events
+    :: Events
+events =
+    Events
+    { _eveSummary = Nothing
+    , _eveEtag = Nothing
+    , _eveNextPageToken = Nothing
+    , _eveKind = "calendar#events"
+    , _eveItems = Nothing
+    , _eveDefaultReminders = Nothing
+    , _eveUpdated = Nothing
+    , _eveAccessRole = Nothing
+    , _eveTimeZone = Nothing
+    , _eveNextSyncToken = Nothing
+    , _eveDescription = Nothing
+    }
+
+-- | Title of the calendar. Read-only.
+eveSummary :: Lens' Events (Maybe Text)
+eveSummary
+  = lens _eveSummary (\ s a -> s{_eveSummary = a})
+
+-- | ETag of the collection.
+eveEtag :: Lens' Events (Maybe Text)
+eveEtag = lens _eveEtag (\ s a -> s{_eveEtag = a})
+
+-- | Token used to access the next page of this result. Omitted if no further
+-- results are available, in which case nextSyncToken is provided.
+eveNextPageToken :: Lens' Events (Maybe Text)
+eveNextPageToken
+  = lens _eveNextPageToken
+      (\ s a -> s{_eveNextPageToken = a})
+
+-- | Type of the collection (\"calendar#events\").
+eveKind :: Lens' Events Text
+eveKind = lens _eveKind (\ s a -> s{_eveKind = a})
+
+-- | List of events on the calendar.
+eveItems :: Lens' Events [Event]
+eveItems
+  = lens _eveItems (\ s a -> s{_eveItems = a}) .
+      _Default
+      . _Coerce
+
+-- | The default reminders on the calendar for the authenticated user. These
+-- reminders apply to all events on this calendar that do not explicitly
+-- override them (i.e. do not have reminders.useDefault set to True).
+eveDefaultReminders :: Lens' Events [EventReminder]
+eveDefaultReminders
+  = lens _eveDefaultReminders
+      (\ s a -> s{_eveDefaultReminders = a})
+      . _Default
+      . _Coerce
+
+-- | Last modification time of the calendar (as a RFC3339 timestamp).
+-- Read-only.
+eveUpdated :: Lens' Events (Maybe UTCTime)
+eveUpdated
+  = lens _eveUpdated (\ s a -> s{_eveUpdated = a}) .
+      mapping _DateTime
+
+-- | The user\'s access role for this calendar. Read-only. Possible values
+-- are: - \"none\" - The user has no access. - \"freeBusyReader\" - The
+-- user has read access to free\/busy information. - \"reader\" - The user
+-- has read access to the calendar. Private events will appear to users
+-- with reader access, but event details will be hidden. - \"writer\" - The
+-- user has read and write access to the calendar. Private events will
+-- appear to users with writer access, and event details will be visible. -
+-- \"owner\" - The user has ownership of the calendar. This role has all of
+-- the permissions of the writer role with the additional ability to see
+-- and manipulate ACLs.
+eveAccessRole :: Lens' Events (Maybe Text)
+eveAccessRole
+  = lens _eveAccessRole
+      (\ s a -> s{_eveAccessRole = a})
+
+-- | The time zone of the calendar. Read-only.
+eveTimeZone :: Lens' Events (Maybe Text)
+eveTimeZone
+  = lens _eveTimeZone (\ s a -> s{_eveTimeZone = a})
+
+-- | Token used at a later point in time to retrieve only the entries that
+-- have changed since this result was returned. Omitted if further results
+-- are available, in which case nextPageToken is provided.
+eveNextSyncToken :: Lens' Events (Maybe Text)
+eveNextSyncToken
+  = lens _eveNextSyncToken
+      (\ s a -> s{_eveNextSyncToken = a})
+
+-- | Description of the calendar. Read-only.
+eveDescription :: Lens' Events (Maybe Text)
+eveDescription
+  = lens _eveDescription
+      (\ s a -> s{_eveDescription = a})
+
+instance FromJSON Events where
+        parseJSON
+          = withObject "Events"
+              (\ o ->
+                 Events <$>
+                   (o .:? "summary") <*> (o .:? "etag") <*>
+                     (o .:? "nextPageToken")
+                     <*> (o .:? "kind" .!= "calendar#events")
+                     <*> (o .:? "items" .!= mempty)
+                     <*> (o .:? "defaultReminders" .!= mempty)
+                     <*> (o .:? "updated")
+                     <*> (o .:? "accessRole")
+                     <*> (o .:? "timeZone")
+                     <*> (o .:? "nextSyncToken")
+                     <*> (o .:? "description"))
+
+instance ToJSON Events where
+        toJSON Events{..}
+          = object
+              (catMaybes
+                 [("summary" .=) <$> _eveSummary,
+                  ("etag" .=) <$> _eveEtag,
+                  ("nextPageToken" .=) <$> _eveNextPageToken,
+                  Just ("kind" .= _eveKind),
+                  ("items" .=) <$> _eveItems,
+                  ("defaultReminders" .=) <$> _eveDefaultReminders,
+                  ("updated" .=) <$> _eveUpdated,
+                  ("accessRole" .=) <$> _eveAccessRole,
+                  ("timeZone" .=) <$> _eveTimeZone,
+                  ("nextSyncToken" .=) <$> _eveNextSyncToken,
+                  ("description" .=) <$> _eveDescription])
+
+--
+-- /See:/ 'eventAttendee' smart constructor.
+data EventAttendee = EventAttendee
+    { _eaEmail            :: !(Maybe Text)
+    , _eaResponseStatus   :: !(Maybe Text)
+    , _eaSelf             :: !Bool
+    , _eaResource         :: !Bool
+    , _eaAdditionalGuests :: !(Textual Int32)
+    , _eaDisplayName      :: !(Maybe Text)
+    , _eaId               :: !(Maybe Text)
+    , _eaComment          :: !(Maybe Text)
+    , _eaOptional         :: !Bool
+    , _eaOrganizer        :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EventAttendee' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'eaEmail'
+--
+-- * 'eaResponseStatus'
+--
+-- * 'eaSelf'
+--
+-- * 'eaResource'
+--
+-- * 'eaAdditionalGuests'
+--
+-- * 'eaDisplayName'
+--
+-- * 'eaId'
+--
+-- * 'eaComment'
+--
+-- * 'eaOptional'
+--
+-- * 'eaOrganizer'
+eventAttendee
+    :: EventAttendee
+eventAttendee =
+    EventAttendee
+    { _eaEmail = Nothing
+    , _eaResponseStatus = Nothing
+    , _eaSelf = False
+    , _eaResource = False
+    , _eaAdditionalGuests = 0
+    , _eaDisplayName = Nothing
+    , _eaId = Nothing
+    , _eaComment = Nothing
+    , _eaOptional = False
+    , _eaOrganizer = Nothing
+    }
+
+-- | The attendee\'s email address, if available. This field must be present
+-- when adding an attendee. It must be a valid email address as per
+-- RFC5322.
+eaEmail :: Lens' EventAttendee (Maybe Text)
+eaEmail = lens _eaEmail (\ s a -> s{_eaEmail = a})
+
+-- | The attendee\'s response status. Possible values are: - \"needsAction\"
+-- - The attendee has not responded to the invitation. - \"declined\" - The
+-- attendee has declined the invitation. - \"tentative\" - The attendee has
+-- tentatively accepted the invitation. - \"accepted\" - The attendee has
+-- accepted the invitation.
+eaResponseStatus :: Lens' EventAttendee (Maybe Text)
+eaResponseStatus
+  = lens _eaResponseStatus
+      (\ s a -> s{_eaResponseStatus = a})
+
+-- | Whether this entry represents the calendar on which this copy of the
+-- event appears. Read-only. The default is False.
+eaSelf :: Lens' EventAttendee Bool
+eaSelf = lens _eaSelf (\ s a -> s{_eaSelf = a})
+
+-- | Whether the attendee is a resource. Read-only. The default is False.
+eaResource :: Lens' EventAttendee Bool
+eaResource
+  = lens _eaResource (\ s a -> s{_eaResource = a})
+
+-- | Number of additional guests. Optional. The default is 0.
+eaAdditionalGuests :: Lens' EventAttendee Int32
+eaAdditionalGuests
+  = lens _eaAdditionalGuests
+      (\ s a -> s{_eaAdditionalGuests = a})
+      . _Coerce
+
+-- | The attendee\'s name, if available. Optional.
+eaDisplayName :: Lens' EventAttendee (Maybe Text)
+eaDisplayName
+  = lens _eaDisplayName
+      (\ s a -> s{_eaDisplayName = a})
+
+-- | The attendee\'s Profile ID, if available. It corresponds to theid field
+-- in the People collection of the Google+ API
+eaId :: Lens' EventAttendee (Maybe Text)
+eaId = lens _eaId (\ s a -> s{_eaId = a})
+
+-- | The attendee\'s response comment. Optional.
+eaComment :: Lens' EventAttendee (Maybe Text)
+eaComment
+  = lens _eaComment (\ s a -> s{_eaComment = a})
+
+-- | Whether this is an optional attendee. Optional. The default is False.
+eaOptional :: Lens' EventAttendee Bool
+eaOptional
+  = lens _eaOptional (\ s a -> s{_eaOptional = a})
+
+-- | Whether the attendee is the organizer of the event. Read-only. The
+-- default is False.
+eaOrganizer :: Lens' EventAttendee (Maybe Bool)
+eaOrganizer
+  = lens _eaOrganizer (\ s a -> s{_eaOrganizer = a})
+
+instance FromJSON EventAttendee where
+        parseJSON
+          = withObject "EventAttendee"
+              (\ o ->
+                 EventAttendee <$>
+                   (o .:? "email") <*> (o .:? "responseStatus") <*>
+                     (o .:? "self" .!= False)
+                     <*> (o .:? "resource" .!= False)
+                     <*> (o .:? "additionalGuests" .!= 0)
+                     <*> (o .:? "displayName")
+                     <*> (o .:? "id")
+                     <*> (o .:? "comment")
+                     <*> (o .:? "optional" .!= False)
+                     <*> (o .:? "organizer"))
+
+instance ToJSON EventAttendee where
+        toJSON EventAttendee{..}
+          = object
+              (catMaybes
+                 [("email" .=) <$> _eaEmail,
+                  ("responseStatus" .=) <$> _eaResponseStatus,
+                  Just ("self" .= _eaSelf),
+                  Just ("resource" .= _eaResource),
+                  Just ("additionalGuests" .= _eaAdditionalGuests),
+                  ("displayName" .=) <$> _eaDisplayName,
+                  ("id" .=) <$> _eaId, ("comment" .=) <$> _eaComment,
+                  Just ("optional" .= _eaOptional),
+                  ("organizer" .=) <$> _eaOrganizer])
+
+--
+-- /See:/ 'calendar' smart constructor.
+data Calendar = Calendar
+    { _calSummary     :: !(Maybe Text)
+    , _calEtag        :: !(Maybe Text)
+    , _calLocation    :: !(Maybe Text)
+    , _calKind        :: !Text
+    , _calId          :: !(Maybe Text)
+    , _calTimeZone    :: !(Maybe Text)
+    , _calDescription :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Calendar' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'calSummary'
+--
+-- * 'calEtag'
+--
+-- * 'calLocation'
+--
+-- * 'calKind'
+--
+-- * 'calId'
+--
+-- * 'calTimeZone'
+--
+-- * 'calDescription'
+calendar
+    :: Calendar
+calendar =
+    Calendar
+    { _calSummary = Nothing
+    , _calEtag = Nothing
+    , _calLocation = Nothing
+    , _calKind = "calendar#calendar"
+    , _calId = Nothing
+    , _calTimeZone = Nothing
+    , _calDescription = Nothing
+    }
+
+-- | Title of the calendar.
+calSummary :: Lens' Calendar (Maybe Text)
+calSummary
+  = lens _calSummary (\ s a -> s{_calSummary = a})
+
+-- | ETag of the resource.
+calEtag :: Lens' Calendar (Maybe Text)
+calEtag = lens _calEtag (\ s a -> s{_calEtag = a})
+
+-- | Geographic location of the calendar as free-form text. Optional.
+calLocation :: Lens' Calendar (Maybe Text)
+calLocation
+  = lens _calLocation (\ s a -> s{_calLocation = a})
+
+-- | Type of the resource (\"calendar#calendar\").
+calKind :: Lens' Calendar Text
+calKind = lens _calKind (\ s a -> s{_calKind = a})
+
+-- | Identifier of the calendar. To retrieve IDs call the calendarList.list()
+-- method.
+calId :: Lens' Calendar (Maybe Text)
+calId = lens _calId (\ s a -> s{_calId = a})
+
+-- | The time zone of the calendar. (Formatted as an IANA Time Zone Database
+-- name, e.g. \"Europe\/Zurich\".) Optional.
+calTimeZone :: Lens' Calendar (Maybe Text)
+calTimeZone
+  = lens _calTimeZone (\ s a -> s{_calTimeZone = a})
+
+-- | Description of the calendar. Optional.
+calDescription :: Lens' Calendar (Maybe Text)
+calDescription
+  = lens _calDescription
+      (\ s a -> s{_calDescription = a})
+
+instance FromJSON Calendar where
+        parseJSON
+          = withObject "Calendar"
+              (\ o ->
+                 Calendar <$>
+                   (o .:? "summary") <*> (o .:? "etag") <*>
+                     (o .:? "location")
+                     <*> (o .:? "kind" .!= "calendar#calendar")
+                     <*> (o .:? "id")
+                     <*> (o .:? "timeZone")
+                     <*> (o .:? "description"))
+
+instance ToJSON Calendar where
+        toJSON Calendar{..}
+          = object
+              (catMaybes
+                 [("summary" .=) <$> _calSummary,
+                  ("etag" .=) <$> _calEtag,
+                  ("location" .=) <$> _calLocation,
+                  Just ("kind" .= _calKind), ("id" .=) <$> _calId,
+                  ("timeZone" .=) <$> _calTimeZone,
+                  ("description" .=) <$> _calDescription])
+
+--
+-- /See:/ 'freeBusyResponse' smart constructor.
+data FreeBusyResponse = FreeBusyResponse
+    { _fbrGroups    :: !(Maybe FreeBusyResponseGroups)
+    , _fbrTimeMin   :: !(Maybe DateTime')
+    , _fbrKind      :: !Text
+    , _fbrCalendars :: !(Maybe FreeBusyResponseCalendars)
+    , _fbrTimeMax   :: !(Maybe DateTime')
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FreeBusyResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fbrGroups'
+--
+-- * 'fbrTimeMin'
+--
+-- * 'fbrKind'
+--
+-- * 'fbrCalendars'
+--
+-- * 'fbrTimeMax'
+freeBusyResponse
+    :: FreeBusyResponse
+freeBusyResponse =
+    FreeBusyResponse
+    { _fbrGroups = Nothing
+    , _fbrTimeMin = Nothing
+    , _fbrKind = "calendar#freeBusy"
+    , _fbrCalendars = Nothing
+    , _fbrTimeMax = Nothing
+    }
+
+-- | Expansion of groups.
+fbrGroups :: Lens' FreeBusyResponse (Maybe FreeBusyResponseGroups)
+fbrGroups
+  = lens _fbrGroups (\ s a -> s{_fbrGroups = a})
+
+-- | The start of the interval.
+fbrTimeMin :: Lens' FreeBusyResponse (Maybe UTCTime)
+fbrTimeMin
+  = lens _fbrTimeMin (\ s a -> s{_fbrTimeMin = a}) .
+      mapping _DateTime
+
+-- | Type of the resource (\"calendar#freeBusy\").
+fbrKind :: Lens' FreeBusyResponse Text
+fbrKind = lens _fbrKind (\ s a -> s{_fbrKind = a})
+
+-- | List of free\/busy information for calendars.
+fbrCalendars :: Lens' FreeBusyResponse (Maybe FreeBusyResponseCalendars)
+fbrCalendars
+  = lens _fbrCalendars (\ s a -> s{_fbrCalendars = a})
+
+-- | The end of the interval.
+fbrTimeMax :: Lens' FreeBusyResponse (Maybe UTCTime)
+fbrTimeMax
+  = lens _fbrTimeMax (\ s a -> s{_fbrTimeMax = a}) .
+      mapping _DateTime
+
+instance FromJSON FreeBusyResponse where
+        parseJSON
+          = withObject "FreeBusyResponse"
+              (\ o ->
+                 FreeBusyResponse <$>
+                   (o .:? "groups") <*> (o .:? "timeMin") <*>
+                     (o .:? "kind" .!= "calendar#freeBusy")
+                     <*> (o .:? "calendars")
+                     <*> (o .:? "timeMax"))
+
+instance ToJSON FreeBusyResponse where
+        toJSON FreeBusyResponse{..}
+          = object
+              (catMaybes
+                 [("groups" .=) <$> _fbrGroups,
+                  ("timeMin" .=) <$> _fbrTimeMin,
+                  Just ("kind" .= _fbrKind),
+                  ("calendars" .=) <$> _fbrCalendars,
+                  ("timeMax" .=) <$> _fbrTimeMax])
+
+--
+-- /See:/ 'eventReminder' smart constructor.
+data EventReminder = EventReminder
+    { _erMethod  :: !(Maybe Text)
+    , _erMinutes :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EventReminder' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'erMethod'
+--
+-- * 'erMinutes'
+eventReminder
+    :: EventReminder
+eventReminder =
+    EventReminder
+    { _erMethod = Nothing
+    , _erMinutes = Nothing
+    }
+
+-- | The method used by this reminder. Possible values are: - \"email\" -
+-- Reminders are sent via email. - \"sms\" - Reminders are sent via SMS.
+-- These are only available for Google Apps for Work, Education, and
+-- Government customers. Requests to set SMS reminders for other account
+-- types are ignored. - \"popup\" - Reminders are sent via a UI popup.
+erMethod :: Lens' EventReminder (Maybe Text)
+erMethod = lens _erMethod (\ s a -> s{_erMethod = a})
+
+-- | Number of minutes before the start of the event when the reminder should
+-- trigger. Valid values are between 0 and 40320 (4 weeks in minutes).
+erMinutes :: Lens' EventReminder (Maybe Int32)
+erMinutes
+  = lens _erMinutes (\ s a -> s{_erMinutes = a}) .
+      mapping _Coerce
+
+instance FromJSON EventReminder where
+        parseJSON
+          = withObject "EventReminder"
+              (\ o ->
+                 EventReminder <$>
+                   (o .:? "method") <*> (o .:? "minutes"))
+
+instance ToJSON EventReminder where
+        toJSON EventReminder{..}
+          = object
+              (catMaybes
+                 [("method" .=) <$> _erMethod,
+                  ("minutes" .=) <$> _erMinutes])
+
+-- | Extended properties of the event.
+--
+-- /See:/ 'eventExtendedProperties' smart constructor.
+data EventExtendedProperties = EventExtendedProperties
+    { _eepPrivate :: !(Maybe EventExtendedPropertiesPrivate)
+    , _eepShared  :: !(Maybe EventExtendedPropertiesShared)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EventExtendedProperties' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'eepPrivate'
+--
+-- * 'eepShared'
+eventExtendedProperties
+    :: EventExtendedProperties
+eventExtendedProperties =
+    EventExtendedProperties
+    { _eepPrivate = Nothing
+    , _eepShared = Nothing
+    }
+
+-- | Properties that are private to the copy of the event that appears on
+-- this calendar.
+eepPrivate :: Lens' EventExtendedProperties (Maybe EventExtendedPropertiesPrivate)
+eepPrivate
+  = lens _eepPrivate (\ s a -> s{_eepPrivate = a})
+
+-- | Properties that are shared between copies of the event on other
+-- attendees\' calendars.
+eepShared :: Lens' EventExtendedProperties (Maybe EventExtendedPropertiesShared)
+eepShared
+  = lens _eepShared (\ s a -> s{_eepShared = a})
+
+instance FromJSON EventExtendedProperties where
+        parseJSON
+          = withObject "EventExtendedProperties"
+              (\ o ->
+                 EventExtendedProperties <$>
+                   (o .:? "private") <*> (o .:? "shared"))
+
+instance ToJSON EventExtendedProperties where
+        toJSON EventExtendedProperties{..}
+          = object
+              (catMaybes
+                 [("private" .=) <$> _eepPrivate,
+                  ("shared" .=) <$> _eepShared])
+
+--
+-- /See:/ 'eventDateTime' smart constructor.
+data EventDateTime = EventDateTime
+    { _edtDate     :: !(Maybe Date')
+    , _edtTimeZone :: !(Maybe Text)
+    , _edtDateTime :: !(Maybe DateTime')
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EventDateTime' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'edtDate'
+--
+-- * 'edtTimeZone'
+--
+-- * 'edtDateTime'
+eventDateTime
+    :: EventDateTime
+eventDateTime =
+    EventDateTime
+    { _edtDate = Nothing
+    , _edtTimeZone = Nothing
+    , _edtDateTime = Nothing
+    }
+
+-- | The date, in the format \"yyyy-mm-dd\", if this is an all-day event.
+edtDate :: Lens' EventDateTime (Maybe Day)
+edtDate
+  = lens _edtDate (\ s a -> s{_edtDate = a}) .
+      mapping _Date
+
+-- | The time zone in which the time is specified. (Formatted as an IANA Time
+-- Zone Database name, e.g. \"Europe\/Zurich\".) For recurring events this
+-- field is required and specifies the time zone in which the recurrence is
+-- expanded. For single events this field is optional and indicates a
+-- custom time zone for the event start\/end.
+edtTimeZone :: Lens' EventDateTime (Maybe Text)
+edtTimeZone
+  = lens _edtTimeZone (\ s a -> s{_edtTimeZone = a})
+
+-- | The time, as a combined date-time value (formatted according to
+-- RFC3339). A time zone offset is required unless a time zone is
+-- explicitly specified in timeZone.
+edtDateTime :: Lens' EventDateTime (Maybe UTCTime)
+edtDateTime
+  = lens _edtDateTime (\ s a -> s{_edtDateTime = a}) .
+      mapping _DateTime
+
+instance FromJSON EventDateTime where
+        parseJSON
+          = withObject "EventDateTime"
+              (\ o ->
+                 EventDateTime <$>
+                   (o .:? "date") <*> (o .:? "timeZone") <*>
+                     (o .:? "dateTime"))
+
+instance ToJSON EventDateTime where
+        toJSON EventDateTime{..}
+          = object
+              (catMaybes
+                 [("date" .=) <$> _edtDate,
+                  ("timeZone" .=) <$> _edtTimeZone,
+                  ("dateTime" .=) <$> _edtDateTime])
+
+-- | The organizer of the event. If the organizer is also an attendee, this
+-- is indicated with a separate entry in attendees with the organizer field
+-- set to True. To change the organizer, use the move operation. Read-only,
+-- except when importing an event.
+--
+-- /See:/ 'eventOrganizer' smart constructor.
+data EventOrganizer = EventOrganizer
+    { _eoEmail       :: !(Maybe Text)
+    , _eoSelf        :: !Bool
+    , _eoDisplayName :: !(Maybe Text)
+    , _eoId          :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EventOrganizer' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'eoEmail'
+--
+-- * 'eoSelf'
+--
+-- * 'eoDisplayName'
+--
+-- * 'eoId'
+eventOrganizer
+    :: EventOrganizer
+eventOrganizer =
+    EventOrganizer
+    { _eoEmail = Nothing
+    , _eoSelf = False
+    , _eoDisplayName = Nothing
+    , _eoId = Nothing
+    }
+
+-- | The organizer\'s email address, if available. It must be a valid email
+-- address as per RFC5322.
+eoEmail :: Lens' EventOrganizer (Maybe Text)
+eoEmail = lens _eoEmail (\ s a -> s{_eoEmail = a})
+
+-- | Whether the organizer corresponds to the calendar on which this copy of
+-- the event appears. Read-only. The default is False.
+eoSelf :: Lens' EventOrganizer Bool
+eoSelf = lens _eoSelf (\ s a -> s{_eoSelf = a})
+
+-- | The organizer\'s name, if available.
+eoDisplayName :: Lens' EventOrganizer (Maybe Text)
+eoDisplayName
+  = lens _eoDisplayName
+      (\ s a -> s{_eoDisplayName = a})
+
+-- | The organizer\'s Profile ID, if available. It corresponds to theid field
+-- in the People collection of the Google+ API
+eoId :: Lens' EventOrganizer (Maybe Text)
+eoId = lens _eoId (\ s a -> s{_eoId = a})
+
+instance FromJSON EventOrganizer where
+        parseJSON
+          = withObject "EventOrganizer"
+              (\ o ->
+                 EventOrganizer <$>
+                   (o .:? "email") <*> (o .:? "self" .!= False) <*>
+                     (o .:? "displayName")
+                     <*> (o .:? "id"))
+
+instance ToJSON EventOrganizer where
+        toJSON EventOrganizer{..}
+          = object
+              (catMaybes
+                 [("email" .=) <$> _eoEmail, Just ("self" .= _eoSelf),
+                  ("displayName" .=) <$> _eoDisplayName,
+                  ("id" .=) <$> _eoId])
+
+--
+-- /See:/ 'calendarList' smart constructor.
+data CalendarList = CalendarList
+    { _clEtag          :: !(Maybe Text)
+    , _clNextPageToken :: !(Maybe Text)
+    , _clKind          :: !Text
+    , _clItems         :: !(Maybe [CalendarListEntry])
+    , _clNextSyncToken :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CalendarList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'clEtag'
+--
+-- * 'clNextPageToken'
+--
+-- * 'clKind'
+--
+-- * 'clItems'
+--
+-- * 'clNextSyncToken'
+calendarList
+    :: CalendarList
+calendarList =
+    CalendarList
+    { _clEtag = Nothing
+    , _clNextPageToken = Nothing
+    , _clKind = "calendar#calendarList"
+    , _clItems = Nothing
+    , _clNextSyncToken = Nothing
+    }
+
+-- | ETag of the collection.
+clEtag :: Lens' CalendarList (Maybe Text)
+clEtag = lens _clEtag (\ s a -> s{_clEtag = a})
+
+-- | Token used to access the next page of this result. Omitted if no further
+-- results are available, in which case nextSyncToken is provided.
+clNextPageToken :: Lens' CalendarList (Maybe Text)
+clNextPageToken
+  = lens _clNextPageToken
+      (\ s a -> s{_clNextPageToken = a})
+
+-- | Type of the collection (\"calendar#calendarList\").
+clKind :: Lens' CalendarList Text
+clKind = lens _clKind (\ s a -> s{_clKind = a})
+
+-- | Calendars that are present on the user\'s calendar list.
+clItems :: Lens' CalendarList [CalendarListEntry]
+clItems
+  = lens _clItems (\ s a -> s{_clItems = a}) . _Default
+      . _Coerce
+
+-- | Token used at a later point in time to retrieve only the entries that
+-- have changed since this result was returned. Omitted if further results
+-- are available, in which case nextPageToken is provided.
+clNextSyncToken :: Lens' CalendarList (Maybe Text)
+clNextSyncToken
+  = lens _clNextSyncToken
+      (\ s a -> s{_clNextSyncToken = a})
+
+instance FromJSON CalendarList where
+        parseJSON
+          = withObject "CalendarList"
+              (\ o ->
+                 CalendarList <$>
+                   (o .:? "etag") <*> (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "calendar#calendarList")
+                     <*> (o .:? "items" .!= mempty)
+                     <*> (o .:? "nextSyncToken"))
+
+instance ToJSON CalendarList where
+        toJSON CalendarList{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _clEtag,
+                  ("nextPageToken" .=) <$> _clNextPageToken,
+                  Just ("kind" .= _clKind), ("items" .=) <$> _clItems,
+                  ("nextSyncToken" .=) <$> _clNextSyncToken])
+
+-- | A gadget that extends this event.
+--
+-- /See:/ 'eventGadget' smart constructor.
+data EventGadget = EventGadget
+    { _egHeight      :: !(Maybe (Textual Int32))
+    , _egDisplay     :: !(Maybe Text)
+    , _egPreferences :: !(Maybe EventGadgetPreferences)
+    , _egLink        :: !(Maybe Text)
+    , _egIconLink    :: !(Maybe Text)
+    , _egWidth       :: !(Maybe (Textual Int32))
+    , _egTitle       :: !(Maybe Text)
+    , _egType        :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EventGadget' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'egHeight'
+--
+-- * 'egDisplay'
+--
+-- * 'egPreferences'
+--
+-- * 'egLink'
+--
+-- * 'egIconLink'
+--
+-- * 'egWidth'
+--
+-- * 'egTitle'
+--
+-- * 'egType'
+eventGadget
+    :: EventGadget
+eventGadget =
+    EventGadget
+    { _egHeight = Nothing
+    , _egDisplay = Nothing
+    , _egPreferences = Nothing
+    , _egLink = Nothing
+    , _egIconLink = Nothing
+    , _egWidth = Nothing
+    , _egTitle = Nothing
+    , _egType = Nothing
+    }
+
+-- | The gadget\'s height in pixels. The height must be an integer greater
+-- than 0. Optional.
+egHeight :: Lens' EventGadget (Maybe Int32)
+egHeight
+  = lens _egHeight (\ s a -> s{_egHeight = a}) .
+      mapping _Coerce
+
+-- | The gadget\'s display mode. Optional. Possible values are: - \"icon\" -
+-- The gadget displays next to the event\'s title in the calendar view. -
+-- \"chip\" - The gadget displays when the event is clicked.
+egDisplay :: Lens' EventGadget (Maybe Text)
+egDisplay
+  = lens _egDisplay (\ s a -> s{_egDisplay = a})
+
+-- | Preferences.
+egPreferences :: Lens' EventGadget (Maybe EventGadgetPreferences)
+egPreferences
+  = lens _egPreferences
+      (\ s a -> s{_egPreferences = a})
+
+-- | The gadget\'s URL. The URL scheme must be HTTPS.
+egLink :: Lens' EventGadget (Maybe Text)
+egLink = lens _egLink (\ s a -> s{_egLink = a})
+
+-- | The gadget\'s icon URL. The URL scheme must be HTTPS.
+egIconLink :: Lens' EventGadget (Maybe Text)
+egIconLink
+  = lens _egIconLink (\ s a -> s{_egIconLink = a})
+
+-- | The gadget\'s width in pixels. The width must be an integer greater than
+-- 0. Optional.
+egWidth :: Lens' EventGadget (Maybe Int32)
+egWidth
+  = lens _egWidth (\ s a -> s{_egWidth = a}) .
+      mapping _Coerce
+
+-- | The gadget\'s title.
+egTitle :: Lens' EventGadget (Maybe Text)
+egTitle = lens _egTitle (\ s a -> s{_egTitle = a})
+
+-- | The gadget\'s type.
+egType :: Lens' EventGadget (Maybe Text)
+egType = lens _egType (\ s a -> s{_egType = a})
+
+instance FromJSON EventGadget where
+        parseJSON
+          = withObject "EventGadget"
+              (\ o ->
+                 EventGadget <$>
+                   (o .:? "height") <*> (o .:? "display") <*>
+                     (o .:? "preferences")
+                     <*> (o .:? "link")
+                     <*> (o .:? "iconLink")
+                     <*> (o .:? "width")
+                     <*> (o .:? "title")
+                     <*> (o .:? "type"))
+
+instance ToJSON EventGadget where
+        toJSON EventGadget{..}
+          = object
+              (catMaybes
+                 [("height" .=) <$> _egHeight,
+                  ("display" .=) <$> _egDisplay,
+                  ("preferences" .=) <$> _egPreferences,
+                  ("link" .=) <$> _egLink,
+                  ("iconLink" .=) <$> _egIconLink,
+                  ("width" .=) <$> _egWidth, ("title" .=) <$> _egTitle,
+                  ("type" .=) <$> _egType])
+
+-- | Preferences.
+--
+-- /See:/ 'eventGadgetPreferences' smart constructor.
+newtype EventGadgetPreferences = EventGadgetPreferences
+    { _egpAddtional :: HashMap Text Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EventGadgetPreferences' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'egpAddtional'
+eventGadgetPreferences
+    :: HashMap Text Text -- ^ 'egpAddtional'
+    -> EventGadgetPreferences
+eventGadgetPreferences pEgpAddtional_ =
+    EventGadgetPreferences
+    { _egpAddtional = _Coerce # pEgpAddtional_
+    }
+
+-- | The preference name and corresponding value.
+egpAddtional :: Lens' EventGadgetPreferences (HashMap Text Text)
+egpAddtional
+  = lens _egpAddtional (\ s a -> s{_egpAddtional = a})
+      . _Coerce
+
+instance FromJSON EventGadgetPreferences where
+        parseJSON
+          = withObject "EventGadgetPreferences"
+              (\ o ->
+                 EventGadgetPreferences <$> (parseJSONObject o))
+
+instance ToJSON EventGadgetPreferences where
+        toJSON = toJSON . _egpAddtional
+
+--
+-- /See:/ 'freeBusyRequest' smart constructor.
+data FreeBusyRequest = FreeBusyRequest
+    { _fCalendarExpansionMax :: !(Maybe (Textual Int32))
+    , _fTimeMin              :: !(Maybe DateTime')
+    , _fItems                :: !(Maybe [FreeBusyRequestItem])
+    , _fGroupExpansionMax    :: !(Maybe (Textual Int32))
+    , _fTimeZone             :: !Text
+    , _fTimeMax              :: !(Maybe DateTime')
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FreeBusyRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fCalendarExpansionMax'
+--
+-- * 'fTimeMin'
+--
+-- * 'fItems'
+--
+-- * 'fGroupExpansionMax'
+--
+-- * 'fTimeZone'
+--
+-- * 'fTimeMax'
+freeBusyRequest
+    :: FreeBusyRequest
+freeBusyRequest =
+    FreeBusyRequest
+    { _fCalendarExpansionMax = Nothing
+    , _fTimeMin = Nothing
+    , _fItems = Nothing
+    , _fGroupExpansionMax = Nothing
+    , _fTimeZone = "UTC"
+    , _fTimeMax = Nothing
+    }
+
+-- | Maximal number of calendars for which FreeBusy information is to be
+-- provided. Optional.
+fCalendarExpansionMax :: Lens' FreeBusyRequest (Maybe Int32)
+fCalendarExpansionMax
+  = lens _fCalendarExpansionMax
+      (\ s a -> s{_fCalendarExpansionMax = a})
+      . mapping _Coerce
+
+-- | The start of the interval for the query.
+fTimeMin :: Lens' FreeBusyRequest (Maybe UTCTime)
+fTimeMin
+  = lens _fTimeMin (\ s a -> s{_fTimeMin = a}) .
+      mapping _DateTime
+
+-- | List of calendars and\/or groups to query.
+fItems :: Lens' FreeBusyRequest [FreeBusyRequestItem]
+fItems
+  = lens _fItems (\ s a -> s{_fItems = a}) . _Default .
+      _Coerce
+
+-- | Maximal number of calendar identifiers to be provided for a single
+-- group. Optional. An error will be returned for a group with more members
+-- than this value.
+fGroupExpansionMax :: Lens' FreeBusyRequest (Maybe Int32)
+fGroupExpansionMax
+  = lens _fGroupExpansionMax
+      (\ s a -> s{_fGroupExpansionMax = a})
+      . mapping _Coerce
+
+-- | Time zone used in the response. Optional. The default is UTC.
+fTimeZone :: Lens' FreeBusyRequest Text
+fTimeZone
+  = lens _fTimeZone (\ s a -> s{_fTimeZone = a})
+
+-- | The end of the interval for the query.
+fTimeMax :: Lens' FreeBusyRequest (Maybe UTCTime)
+fTimeMax
+  = lens _fTimeMax (\ s a -> s{_fTimeMax = a}) .
+      mapping _DateTime
+
+instance FromJSON FreeBusyRequest where
+        parseJSON
+          = withObject "FreeBusyRequest"
+              (\ o ->
+                 FreeBusyRequest <$>
+                   (o .:? "calendarExpansionMax") <*> (o .:? "timeMin")
+                     <*> (o .:? "items" .!= mempty)
+                     <*> (o .:? "groupExpansionMax")
+                     <*> (o .:? "timeZone" .!= "UTC")
+                     <*> (o .:? "timeMax"))
+
+instance ToJSON FreeBusyRequest where
+        toJSON FreeBusyRequest{..}
+          = object
+              (catMaybes
+                 [("calendarExpansionMax" .=) <$>
+                    _fCalendarExpansionMax,
+                  ("timeMin" .=) <$> _fTimeMin,
+                  ("items" .=) <$> _fItems,
+                  ("groupExpansionMax" .=) <$> _fGroupExpansionMax,
+                  Just ("timeZone" .= _fTimeZone),
+                  ("timeMax" .=) <$> _fTimeMax])
+
+--
+-- /See:/ 'aclRule' smart constructor.
+data ACLRule = ACLRule
+    { _arEtag  :: !(Maybe Text)
+    , _arKind  :: !Text
+    , _arRole  :: !(Maybe Text)
+    , _arScope :: !(Maybe ACLRuleScope)
+    , _arId    :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ACLRule' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'arEtag'
+--
+-- * 'arKind'
+--
+-- * 'arRole'
+--
+-- * 'arScope'
+--
+-- * 'arId'
+aclRule
+    :: ACLRule
+aclRule =
+    ACLRule
+    { _arEtag = Nothing
+    , _arKind = "calendar#aclRule"
+    , _arRole = Nothing
+    , _arScope = Nothing
+    , _arId = Nothing
+    }
+
+-- | ETag of the resource.
+arEtag :: Lens' ACLRule (Maybe Text)
+arEtag = lens _arEtag (\ s a -> s{_arEtag = a})
+
+-- | Type of the resource (\"calendar#aclRule\").
+arKind :: Lens' ACLRule Text
+arKind = lens _arKind (\ s a -> s{_arKind = a})
+
+-- | The role assigned to the scope. Possible values are: - \"none\" -
+-- Provides no access. - \"freeBusyReader\" - Provides read access to
+-- free\/busy information. - \"reader\" - Provides read access to the
+-- calendar. Private events will appear to users with reader access, but
+-- event details will be hidden. - \"writer\" - Provides read and write
+-- access to the calendar. Private events will appear to users with writer
+-- access, and event details will be visible. - \"owner\" - Provides
+-- ownership of the calendar. This role has all of the permissions of the
+-- writer role with the additional ability to see and manipulate ACLs.
+arRole :: Lens' ACLRule (Maybe Text)
+arRole = lens _arRole (\ s a -> s{_arRole = a})
+
+-- | The scope of the rule.
+arScope :: Lens' ACLRule (Maybe ACLRuleScope)
+arScope = lens _arScope (\ s a -> s{_arScope = a})
+
+-- | Identifier of the ACL rule.
+arId :: Lens' ACLRule (Maybe Text)
+arId = lens _arId (\ s a -> s{_arId = a})
+
+instance FromJSON ACLRule where
+        parseJSON
+          = withObject "ACLRule"
+              (\ o ->
+                 ACLRule <$>
+                   (o .:? "etag") <*>
+                     (o .:? "kind" .!= "calendar#aclRule")
+                     <*> (o .:? "role")
+                     <*> (o .:? "scope")
+                     <*> (o .:? "id"))
+
+instance ToJSON ACLRule where
+        toJSON ACLRule{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _arEtag, Just ("kind" .= _arKind),
+                  ("role" .=) <$> _arRole, ("scope" .=) <$> _arScope,
+                  ("id" .=) <$> _arId])
+
+-- | Properties that are shared between copies of the event on other
+-- attendees\' calendars.
+--
+-- /See:/ 'eventExtendedPropertiesShared' smart constructor.
+newtype EventExtendedPropertiesShared = EventExtendedPropertiesShared
+    { _eepsAddtional :: HashMap Text Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EventExtendedPropertiesShared' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'eepsAddtional'
+eventExtendedPropertiesShared
+    :: HashMap Text Text -- ^ 'eepsAddtional'
+    -> EventExtendedPropertiesShared
+eventExtendedPropertiesShared pEepsAddtional_ =
+    EventExtendedPropertiesShared
+    { _eepsAddtional = _Coerce # pEepsAddtional_
+    }
+
+-- | The name of the shared property and the corresponding value.
+eepsAddtional :: Lens' EventExtendedPropertiesShared (HashMap Text Text)
+eepsAddtional
+  = lens _eepsAddtional
+      (\ s a -> s{_eepsAddtional = a})
+      . _Coerce
+
+instance FromJSON EventExtendedPropertiesShared where
+        parseJSON
+          = withObject "EventExtendedPropertiesShared"
+              (\ o ->
+                 EventExtendedPropertiesShared <$>
+                   (parseJSONObject o))
+
+instance ToJSON EventExtendedPropertiesShared where
+        toJSON = toJSON . _eepsAddtional
+
+-- | List of free\/busy information for calendars.
+--
+-- /See:/ 'freeBusyResponseCalendars' smart constructor.
+newtype FreeBusyResponseCalendars = FreeBusyResponseCalendars
+    { _fbrcAddtional :: HashMap Text FreeBusyCalendar
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FreeBusyResponseCalendars' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fbrcAddtional'
+freeBusyResponseCalendars
+    :: HashMap Text FreeBusyCalendar -- ^ 'fbrcAddtional'
+    -> FreeBusyResponseCalendars
+freeBusyResponseCalendars pFbrcAddtional_ =
+    FreeBusyResponseCalendars
+    { _fbrcAddtional = _Coerce # pFbrcAddtional_
+    }
+
+-- | Free\/busy expansions for a single calendar.
+fbrcAddtional :: Lens' FreeBusyResponseCalendars (HashMap Text FreeBusyCalendar)
+fbrcAddtional
+  = lens _fbrcAddtional
+      (\ s a -> s{_fbrcAddtional = a})
+      . _Coerce
+
+instance FromJSON FreeBusyResponseCalendars where
+        parseJSON
+          = withObject "FreeBusyResponseCalendars"
+              (\ o ->
+                 FreeBusyResponseCalendars <$> (parseJSONObject o))
+
+instance ToJSON FreeBusyResponseCalendars where
+        toJSON = toJSON . _fbrcAddtional
+
+--
+-- /See:/ 'acl' smart constructor.
+data ACL = ACL
+    { _aEtag          :: !(Maybe Text)
+    , _aNextPageToken :: !(Maybe Text)
+    , _aKind          :: !Text
+    , _aItems         :: !(Maybe [ACLRule])
+    , _aNextSyncToken :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ACL' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aEtag'
+--
+-- * 'aNextPageToken'
+--
+-- * 'aKind'
+--
+-- * 'aItems'
+--
+-- * 'aNextSyncToken'
+acl
+    :: ACL
+acl =
+    ACL
+    { _aEtag = Nothing
+    , _aNextPageToken = Nothing
+    , _aKind = "calendar#acl"
+    , _aItems = Nothing
+    , _aNextSyncToken = Nothing
+    }
+
+-- | ETag of the collection.
+aEtag :: Lens' ACL (Maybe Text)
+aEtag = lens _aEtag (\ s a -> s{_aEtag = a})
+
+-- | Token used to access the next page of this result. Omitted if no further
+-- results are available, in which case nextSyncToken is provided.
+aNextPageToken :: Lens' ACL (Maybe Text)
+aNextPageToken
+  = lens _aNextPageToken
+      (\ s a -> s{_aNextPageToken = a})
+
+-- | Type of the collection (\"calendar#acl\").
+aKind :: Lens' ACL Text
+aKind = lens _aKind (\ s a -> s{_aKind = a})
+
+-- | List of rules on the access control list.
+aItems :: Lens' ACL [ACLRule]
+aItems
+  = lens _aItems (\ s a -> s{_aItems = a}) . _Default .
+      _Coerce
+
+-- | Token used at a later point in time to retrieve only the entries that
+-- have changed since this result was returned. Omitted if further results
+-- are available, in which case nextPageToken is provided.
+aNextSyncToken :: Lens' ACL (Maybe Text)
+aNextSyncToken
+  = lens _aNextSyncToken
+      (\ s a -> s{_aNextSyncToken = a})
+
+instance FromJSON ACL where
+        parseJSON
+          = withObject "ACL"
+              (\ o ->
+                 ACL <$>
+                   (o .:? "etag") <*> (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "calendar#acl")
+                     <*> (o .:? "items" .!= mempty)
+                     <*> (o .:? "nextSyncToken"))
+
+instance ToJSON ACL where
+        toJSON ACL{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _aEtag,
+                  ("nextPageToken" .=) <$> _aNextPageToken,
+                  Just ("kind" .= _aKind), ("items" .=) <$> _aItems,
+                  ("nextSyncToken" .=) <$> _aNextSyncToken])
+
+--
+-- /See:/ 'colors' smart constructor.
+data Colors = Colors
+    { _colEvent    :: !(Maybe ColorsEvent)
+    , _colKind     :: !Text
+    , _colCalendar :: !(Maybe ColorsCalendar)
+    , _colUpdated  :: !(Maybe DateTime')
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Colors' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'colEvent'
+--
+-- * 'colKind'
+--
+-- * 'colCalendar'
+--
+-- * 'colUpdated'
+colors
+    :: Colors
+colors =
+    Colors
+    { _colEvent = Nothing
+    , _colKind = "calendar#colors"
+    , _colCalendar = Nothing
+    , _colUpdated = Nothing
+    }
+
+-- | A global palette of event colors, mapping from the color ID to its
+-- definition. An event resource may refer to one of these color IDs in its
+-- color field. Read-only.
+colEvent :: Lens' Colors (Maybe ColorsEvent)
+colEvent = lens _colEvent (\ s a -> s{_colEvent = a})
+
+-- | Type of the resource (\"calendar#colors\").
+colKind :: Lens' Colors Text
+colKind = lens _colKind (\ s a -> s{_colKind = a})
+
+-- | A global palette of calendar colors, mapping from the color ID to its
+-- definition. A calendarListEntry resource refers to one of these color
+-- IDs in its color field. Read-only.
+colCalendar :: Lens' Colors (Maybe ColorsCalendar)
+colCalendar
+  = lens _colCalendar (\ s a -> s{_colCalendar = a})
+
+-- | Last modification time of the color palette (as a RFC3339 timestamp).
+-- Read-only.
+colUpdated :: Lens' Colors (Maybe UTCTime)
+colUpdated
+  = lens _colUpdated (\ s a -> s{_colUpdated = a}) .
+      mapping _DateTime
+
+instance FromJSON Colors where
+        parseJSON
+          = withObject "Colors"
+              (\ o ->
+                 Colors <$>
+                   (o .:? "event") <*>
+                     (o .:? "kind" .!= "calendar#colors")
+                     <*> (o .:? "calendar")
+                     <*> (o .:? "updated"))
+
+instance ToJSON Colors where
+        toJSON Colors{..}
+          = object
+              (catMaybes
+                 [("event" .=) <$> _colEvent,
+                  Just ("kind" .= _colKind),
+                  ("calendar" .=) <$> _colCalendar,
+                  ("updated" .=) <$> _colUpdated])
+
+--
+-- /See:/ 'freeBusyGroup' smart constructor.
+data FreeBusyGroup = FreeBusyGroup
+    { _fbgCalendars :: !(Maybe [Text])
+    , _fbgErrors    :: !(Maybe [Error'])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FreeBusyGroup' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fbgCalendars'
+--
+-- * 'fbgErrors'
+freeBusyGroup
+    :: FreeBusyGroup
+freeBusyGroup =
+    FreeBusyGroup
+    { _fbgCalendars = Nothing
+    , _fbgErrors = Nothing
+    }
+
+-- | List of calendars\' identifiers within a group.
+fbgCalendars :: Lens' FreeBusyGroup [Text]
+fbgCalendars
+  = lens _fbgCalendars (\ s a -> s{_fbgCalendars = a})
+      . _Default
+      . _Coerce
+
+-- | Optional error(s) (if computation for the group failed).
+fbgErrors :: Lens' FreeBusyGroup [Error']
+fbgErrors
+  = lens _fbgErrors (\ s a -> s{_fbgErrors = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON FreeBusyGroup where
+        parseJSON
+          = withObject "FreeBusyGroup"
+              (\ o ->
+                 FreeBusyGroup <$>
+                   (o .:? "calendars" .!= mempty) <*>
+                     (o .:? "errors" .!= mempty))
+
+instance ToJSON FreeBusyGroup where
+        toJSON FreeBusyGroup{..}
+          = object
+              (catMaybes
+                 [("calendars" .=) <$> _fbgCalendars,
+                  ("errors" .=) <$> _fbgErrors])
+
+-- | Source from which the event was created. For example, a web page, an
+-- email message or any document identifiable by an URL with HTTP or HTTPS
+-- scheme. Can only be seen or modified by the creator of the event.
+--
+-- /See:/ 'eventSource' smart constructor.
+data EventSource = EventSource
+    { _esURL   :: !(Maybe Text)
+    , _esTitle :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EventSource' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'esURL'
+--
+-- * 'esTitle'
+eventSource
+    :: EventSource
+eventSource =
+    EventSource
+    { _esURL = Nothing
+    , _esTitle = Nothing
+    }
+
+-- | URL of the source pointing to a resource. The URL scheme must be HTTP or
+-- HTTPS.
+esURL :: Lens' EventSource (Maybe Text)
+esURL = lens _esURL (\ s a -> s{_esURL = a})
+
+-- | Title of the source; for example a title of a web page or an email
+-- subject.
+esTitle :: Lens' EventSource (Maybe Text)
+esTitle = lens _esTitle (\ s a -> s{_esTitle = a})
+
+instance FromJSON EventSource where
+        parseJSON
+          = withObject "EventSource"
+              (\ o ->
+                 EventSource <$> (o .:? "url") <*> (o .:? "title"))
+
+instance ToJSON EventSource where
+        toJSON EventSource{..}
+          = object
+              (catMaybes
+                 [("url" .=) <$> _esURL, ("title" .=) <$> _esTitle])
diff --git a/gen/Network/Google/AppsCalendar/Types/Sum.hs b/gen/Network/Google/AppsCalendar/Types/Sum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/AppsCalendar/Types/Sum.hs
@@ -0,0 +1,161 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE LambdaCase         #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Network.Google.AppsCalendar.Types.Sum
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.Google.AppsCalendar.Types.Sum where
+
+import           Network.Google.Prelude
+
+-- | The order of the events returned in the result. Optional. The default is
+-- an unspecified, stable order.
+data EventsListOrderBy
+    = StartTime
+      -- ^ @startTime@
+      -- Order by the start date\/time (ascending). This is only available when
+      -- querying single events (i.e. the parameter singleEvents is True)
+    | Updated
+      -- ^ @updated@
+      -- Order by last modification time (ascending).
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable EventsListOrderBy
+
+instance FromText EventsListOrderBy where
+    fromText = \case
+        "startTime" -> Just StartTime
+        "updated" -> Just Updated
+        _ -> Nothing
+
+instance ToText EventsListOrderBy where
+    toText = \case
+        StartTime -> "startTime"
+        Updated -> "updated"
+
+instance FromJSON EventsListOrderBy where
+    parseJSON = parseJSONText "EventsListOrderBy"
+
+instance ToJSON EventsListOrderBy where
+    toJSON = toJSONText
+
+-- | The minimum access role for the user in the returned entries. Optional.
+-- The default is no restriction.
+data CalendarListListMinAccessRole
+    = FreeBusyReader
+      -- ^ @freeBusyReader@
+      -- The user can read free\/busy information.
+    | Owner
+      -- ^ @owner@
+      -- The user can read and modify events and access control lists.
+    | Reader
+      -- ^ @reader@
+      -- The user can read events that are not private.
+    | Writer
+      -- ^ @writer@
+      -- The user can read and modify events.
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable CalendarListListMinAccessRole
+
+instance FromText CalendarListListMinAccessRole where
+    fromText = \case
+        "freeBusyReader" -> Just FreeBusyReader
+        "owner" -> Just Owner
+        "reader" -> Just Reader
+        "writer" -> Just Writer
+        _ -> Nothing
+
+instance ToText CalendarListListMinAccessRole where
+    toText = \case
+        FreeBusyReader -> "freeBusyReader"
+        Owner -> "owner"
+        Reader -> "reader"
+        Writer -> "writer"
+
+instance FromJSON CalendarListListMinAccessRole where
+    parseJSON = parseJSONText "CalendarListListMinAccessRole"
+
+instance ToJSON CalendarListListMinAccessRole where
+    toJSON = toJSONText
+
+-- | The order of the events returned in the result. Optional. The default is
+-- an unspecified, stable order.
+data EventsWatchOrderBy
+    = EWOBStartTime
+      -- ^ @startTime@
+      -- Order by the start date\/time (ascending). This is only available when
+      -- querying single events (i.e. the parameter singleEvents is True)
+    | EWOBUpdated
+      -- ^ @updated@
+      -- Order by last modification time (ascending).
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable EventsWatchOrderBy
+
+instance FromText EventsWatchOrderBy where
+    fromText = \case
+        "startTime" -> Just EWOBStartTime
+        "updated" -> Just EWOBUpdated
+        _ -> Nothing
+
+instance ToText EventsWatchOrderBy where
+    toText = \case
+        EWOBStartTime -> "startTime"
+        EWOBUpdated -> "updated"
+
+instance FromJSON EventsWatchOrderBy where
+    parseJSON = parseJSONText "EventsWatchOrderBy"
+
+instance ToJSON EventsWatchOrderBy where
+    toJSON = toJSONText
+
+-- | The minimum access role for the user in the returned entries. Optional.
+-- The default is no restriction.
+data CalendarListWatchMinAccessRole
+    = CLWMARFreeBusyReader
+      -- ^ @freeBusyReader@
+      -- The user can read free\/busy information.
+    | CLWMAROwner
+      -- ^ @owner@
+      -- The user can read and modify events and access control lists.
+    | CLWMARReader
+      -- ^ @reader@
+      -- The user can read events that are not private.
+    | CLWMARWriter
+      -- ^ @writer@
+      -- The user can read and modify events.
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable CalendarListWatchMinAccessRole
+
+instance FromText CalendarListWatchMinAccessRole where
+    fromText = \case
+        "freeBusyReader" -> Just CLWMARFreeBusyReader
+        "owner" -> Just CLWMAROwner
+        "reader" -> Just CLWMARReader
+        "writer" -> Just CLWMARWriter
+        _ -> Nothing
+
+instance ToText CalendarListWatchMinAccessRole where
+    toText = \case
+        CLWMARFreeBusyReader -> "freeBusyReader"
+        CLWMAROwner -> "owner"
+        CLWMARReader -> "reader"
+        CLWMARWriter -> "writer"
+
+instance FromJSON CalendarListWatchMinAccessRole where
+    parseJSON = parseJSONText "CalendarListWatchMinAccessRole"
+
+instance ToJSON CalendarListWatchMinAccessRole where
+    toJSON = toJSONText
diff --git a/gen/Network/Google/Resource/Calendar/ACL/Delete.hs b/gen/Network/Google/Resource/Calendar/ACL/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Calendar/ACL/Delete.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Calendar.ACL.Delete
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes an access control rule.
+--
+-- /See:/ <https://developers.google.com/google-apps/calendar/firstapp Calendar API Reference> for @calendar.acl.delete@.
+module Network.Google.Resource.Calendar.ACL.Delete
+    (
+    -- * REST Resource
+      ACLDeleteResource
+
+    -- * Creating a Request
+    , aclDelete
+    , ACLDelete
+
+    -- * Request Lenses
+    , adCalendarId
+    , adRuleId
+    ) where
+
+import           Network.Google.AppsCalendar.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @calendar.acl.delete@ method which the
+-- 'ACLDelete' request conforms to.
+type ACLDeleteResource =
+     "calendar" :>
+       "v3" :>
+         "calendars" :>
+           Capture "calendarId" Text :>
+             "acl" :>
+               Capture "ruleId" Text :>
+                 QueryParam "alt" AltJSON :> Delete '[JSON] ()
+
+-- | Deletes an access control rule.
+--
+-- /See:/ 'aclDelete' smart constructor.
+data ACLDelete = ACLDelete
+    { _adCalendarId :: !Text
+    , _adRuleId     :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ACLDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'adCalendarId'
+--
+-- * 'adRuleId'
+aclDelete
+    :: Text -- ^ 'adCalendarId'
+    -> Text -- ^ 'adRuleId'
+    -> ACLDelete
+aclDelete pAdCalendarId_ pAdRuleId_ =
+    ACLDelete
+    { _adCalendarId = pAdCalendarId_
+    , _adRuleId = pAdRuleId_
+    }
+
+-- | Calendar identifier. To retrieve calendar IDs call the calendarList.list
+-- method. If you want to access the primary calendar of the currently
+-- logged in user, use the \"primary\" keyword.
+adCalendarId :: Lens' ACLDelete Text
+adCalendarId
+  = lens _adCalendarId (\ s a -> s{_adCalendarId = a})
+
+-- | ACL rule identifier.
+adRuleId :: Lens' ACLDelete Text
+adRuleId = lens _adRuleId (\ s a -> s{_adRuleId = a})
+
+instance GoogleRequest ACLDelete where
+        type Rs ACLDelete = ()
+        requestClient ACLDelete{..}
+          = go _adCalendarId _adRuleId (Just AltJSON)
+              appsCalendarService
+          where go
+                  = buildClient (Proxy :: Proxy ACLDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Calendar/ACL/Get.hs b/gen/Network/Google/Resource/Calendar/ACL/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Calendar/ACL/Get.hs
@@ -0,0 +1,96 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Calendar.ACL.Get
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns an access control rule.
+--
+-- /See:/ <https://developers.google.com/google-apps/calendar/firstapp Calendar API Reference> for @calendar.acl.get@.
+module Network.Google.Resource.Calendar.ACL.Get
+    (
+    -- * REST Resource
+      ACLGetResource
+
+    -- * Creating a Request
+    , aclGet
+    , ACLGet
+
+    -- * Request Lenses
+    , agCalendarId
+    , agRuleId
+    ) where
+
+import           Network.Google.AppsCalendar.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @calendar.acl.get@ method which the
+-- 'ACLGet' request conforms to.
+type ACLGetResource =
+     "calendar" :>
+       "v3" :>
+         "calendars" :>
+           Capture "calendarId" Text :>
+             "acl" :>
+               Capture "ruleId" Text :>
+                 QueryParam "alt" AltJSON :> Get '[JSON] ACLRule
+
+-- | Returns an access control rule.
+--
+-- /See:/ 'aclGet' smart constructor.
+data ACLGet = ACLGet
+    { _agCalendarId :: !Text
+    , _agRuleId     :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ACLGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'agCalendarId'
+--
+-- * 'agRuleId'
+aclGet
+    :: Text -- ^ 'agCalendarId'
+    -> Text -- ^ 'agRuleId'
+    -> ACLGet
+aclGet pAgCalendarId_ pAgRuleId_ =
+    ACLGet
+    { _agCalendarId = pAgCalendarId_
+    , _agRuleId = pAgRuleId_
+    }
+
+-- | Calendar identifier. To retrieve calendar IDs call the calendarList.list
+-- method. If you want to access the primary calendar of the currently
+-- logged in user, use the \"primary\" keyword.
+agCalendarId :: Lens' ACLGet Text
+agCalendarId
+  = lens _agCalendarId (\ s a -> s{_agCalendarId = a})
+
+-- | ACL rule identifier.
+agRuleId :: Lens' ACLGet Text
+agRuleId = lens _agRuleId (\ s a -> s{_agRuleId = a})
+
+instance GoogleRequest ACLGet where
+        type Rs ACLGet = ACLRule
+        requestClient ACLGet{..}
+          = go _agCalendarId _agRuleId (Just AltJSON)
+              appsCalendarService
+          where go
+                  = buildClient (Proxy :: Proxy ACLGetResource) mempty
diff --git a/gen/Network/Google/Resource/Calendar/ACL/Insert.hs b/gen/Network/Google/Resource/Calendar/ACL/Insert.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Calendar/ACL/Insert.hs
@@ -0,0 +1,98 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Calendar.ACL.Insert
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates an access control rule.
+--
+-- /See:/ <https://developers.google.com/google-apps/calendar/firstapp Calendar API Reference> for @calendar.acl.insert@.
+module Network.Google.Resource.Calendar.ACL.Insert
+    (
+    -- * REST Resource
+      ACLInsertResource
+
+    -- * Creating a Request
+    , aclInsert
+    , ACLInsert
+
+    -- * Request Lenses
+    , aiCalendarId
+    , aiPayload
+    ) where
+
+import           Network.Google.AppsCalendar.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @calendar.acl.insert@ method which the
+-- 'ACLInsert' request conforms to.
+type ACLInsertResource =
+     "calendar" :>
+       "v3" :>
+         "calendars" :>
+           Capture "calendarId" Text :>
+             "acl" :>
+               QueryParam "alt" AltJSON :>
+                 ReqBody '[JSON] ACLRule :> Post '[JSON] ACLRule
+
+-- | Creates an access control rule.
+--
+-- /See:/ 'aclInsert' smart constructor.
+data ACLInsert = ACLInsert
+    { _aiCalendarId :: !Text
+    , _aiPayload    :: !ACLRule
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ACLInsert' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aiCalendarId'
+--
+-- * 'aiPayload'
+aclInsert
+    :: Text -- ^ 'aiCalendarId'
+    -> ACLRule -- ^ 'aiPayload'
+    -> ACLInsert
+aclInsert pAiCalendarId_ pAiPayload_ =
+    ACLInsert
+    { _aiCalendarId = pAiCalendarId_
+    , _aiPayload = pAiPayload_
+    }
+
+-- | Calendar identifier. To retrieve calendar IDs call the calendarList.list
+-- method. If you want to access the primary calendar of the currently
+-- logged in user, use the \"primary\" keyword.
+aiCalendarId :: Lens' ACLInsert Text
+aiCalendarId
+  = lens _aiCalendarId (\ s a -> s{_aiCalendarId = a})
+
+-- | Multipart request metadata.
+aiPayload :: Lens' ACLInsert ACLRule
+aiPayload
+  = lens _aiPayload (\ s a -> s{_aiPayload = a})
+
+instance GoogleRequest ACLInsert where
+        type Rs ACLInsert = ACLRule
+        requestClient ACLInsert{..}
+          = go _aiCalendarId (Just AltJSON) _aiPayload
+              appsCalendarService
+          where go
+                  = buildClient (Proxy :: Proxy ACLInsertResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Calendar/ACL/List.hs b/gen/Network/Google/Resource/Calendar/ACL/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Calendar/ACL/List.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.Calendar.ACL.List
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns the rules in the access control list for the calendar.
+--
+-- /See:/ <https://developers.google.com/google-apps/calendar/firstapp Calendar API Reference> for @calendar.acl.list@.
+module Network.Google.Resource.Calendar.ACL.List
+    (
+    -- * REST Resource
+      ACLListResource
+
+    -- * Creating a Request
+    , aclList
+    , ACLList
+
+    -- * Request Lenses
+    , alSyncToken
+    , alCalendarId
+    , alShowDeleted
+    , alPageToken
+    , alMaxResults
+    ) where
+
+import           Network.Google.AppsCalendar.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @calendar.acl.list@ method which the
+-- 'ACLList' request conforms to.
+type ACLListResource =
+     "calendar" :>
+       "v3" :>
+         "calendars" :>
+           Capture "calendarId" Text :>
+             "acl" :>
+               QueryParam "syncToken" Text :>
+                 QueryParam "showDeleted" Bool :>
+                   QueryParam "pageToken" Text :>
+                     QueryParam "maxResults" (Textual Int32) :>
+                       QueryParam "alt" AltJSON :> Get '[JSON] ACL
+
+-- | Returns the rules in the access control list for the calendar.
+--
+-- /See:/ 'aclList' smart constructor.
+data ACLList = ACLList
+    { _alSyncToken   :: !(Maybe Text)
+    , _alCalendarId  :: !Text
+    , _alShowDeleted :: !(Maybe Bool)
+    , _alPageToken   :: !(Maybe Text)
+    , _alMaxResults  :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ACLList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'alSyncToken'
+--
+-- * 'alCalendarId'
+--
+-- * 'alShowDeleted'
+--
+-- * 'alPageToken'
+--
+-- * 'alMaxResults'
+aclList
+    :: Text -- ^ 'alCalendarId'
+    -> ACLList
+aclList pAlCalendarId_ =
+    ACLList
+    { _alSyncToken = Nothing
+    , _alCalendarId = pAlCalendarId_
+    , _alShowDeleted = Nothing
+    , _alPageToken = Nothing
+    , _alMaxResults = Nothing
+    }
+
+-- | Token obtained from the nextSyncToken field returned on the last page of
+-- results from the previous list request. It makes the result of this list
+-- request contain only entries that have changed since then. All entries
+-- deleted since the previous list request will always be in the result set
+-- and it is not allowed to set showDeleted to False. If the syncToken
+-- expires, the server will respond with a 410 GONE response code and the
+-- client should clear its storage and perform a full synchronization
+-- without any syncToken. Learn more about incremental synchronization.
+-- Optional. The default is to return all entries.
+alSyncToken :: Lens' ACLList (Maybe Text)
+alSyncToken
+  = lens _alSyncToken (\ s a -> s{_alSyncToken = a})
+
+-- | Calendar identifier. To retrieve calendar IDs call the calendarList.list
+-- method. If you want to access the primary calendar of the currently
+-- logged in user, use the \"primary\" keyword.
+alCalendarId :: Lens' ACLList Text
+alCalendarId
+  = lens _alCalendarId (\ s a -> s{_alCalendarId = a})
+
+-- | Whether to include deleted ACLs in the result. Deleted ACLs are
+-- represented by role equal to \"none\". Deleted ACLs will always be
+-- included if syncToken is provided. Optional. The default is False.
+alShowDeleted :: Lens' ACLList (Maybe Bool)
+alShowDeleted
+  = lens _alShowDeleted
+      (\ s a -> s{_alShowDeleted = a})
+
+-- | Token specifying which result page to return. Optional.
+alPageToken :: Lens' ACLList (Maybe Text)
+alPageToken
+  = lens _alPageToken (\ s a -> s{_alPageToken = a})
+
+-- | Maximum number of entries returned on one result page. By default the
+-- value is 100 entries. The page size can never be larger than 250
+-- entries. Optional.
+alMaxResults :: Lens' ACLList (Maybe Int32)
+alMaxResults
+  = lens _alMaxResults (\ s a -> s{_alMaxResults = a})
+      . mapping _Coerce
+
+instance GoogleRequest ACLList where
+        type Rs ACLList = ACL
+        requestClient ACLList{..}
+          = go _alCalendarId _alSyncToken _alShowDeleted
+              _alPageToken
+              _alMaxResults
+              (Just AltJSON)
+              appsCalendarService
+          where go
+                  = buildClient (Proxy :: Proxy ACLListResource) mempty
diff --git a/gen/Network/Google/Resource/Calendar/ACL/Patch.hs b/gen/Network/Google/Resource/Calendar/ACL/Patch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Calendar/ACL/Patch.hs
@@ -0,0 +1,110 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Calendar.ACL.Patch
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates an access control rule. This method supports patch semantics.
+--
+-- /See:/ <https://developers.google.com/google-apps/calendar/firstapp Calendar API Reference> for @calendar.acl.patch@.
+module Network.Google.Resource.Calendar.ACL.Patch
+    (
+    -- * REST Resource
+      ACLPatchResource
+
+    -- * Creating a Request
+    , aclPatch
+    , ACLPatch
+
+    -- * Request Lenses
+    , apCalendarId
+    , apRuleId
+    , apPayload
+    ) where
+
+import           Network.Google.AppsCalendar.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @calendar.acl.patch@ method which the
+-- 'ACLPatch' request conforms to.
+type ACLPatchResource =
+     "calendar" :>
+       "v3" :>
+         "calendars" :>
+           Capture "calendarId" Text :>
+             "acl" :>
+               Capture "ruleId" Text :>
+                 QueryParam "alt" AltJSON :>
+                   ReqBody '[JSON] ACLRule :> Patch '[JSON] ACLRule
+
+-- | Updates an access control rule. This method supports patch semantics.
+--
+-- /See:/ 'aclPatch' smart constructor.
+data ACLPatch = ACLPatch
+    { _apCalendarId :: !Text
+    , _apRuleId     :: !Text
+    , _apPayload    :: !ACLRule
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ACLPatch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'apCalendarId'
+--
+-- * 'apRuleId'
+--
+-- * 'apPayload'
+aclPatch
+    :: Text -- ^ 'apCalendarId'
+    -> Text -- ^ 'apRuleId'
+    -> ACLRule -- ^ 'apPayload'
+    -> ACLPatch
+aclPatch pApCalendarId_ pApRuleId_ pApPayload_ =
+    ACLPatch
+    { _apCalendarId = pApCalendarId_
+    , _apRuleId = pApRuleId_
+    , _apPayload = pApPayload_
+    }
+
+-- | Calendar identifier. To retrieve calendar IDs call the calendarList.list
+-- method. If you want to access the primary calendar of the currently
+-- logged in user, use the \"primary\" keyword.
+apCalendarId :: Lens' ACLPatch Text
+apCalendarId
+  = lens _apCalendarId (\ s a -> s{_apCalendarId = a})
+
+-- | ACL rule identifier.
+apRuleId :: Lens' ACLPatch Text
+apRuleId = lens _apRuleId (\ s a -> s{_apRuleId = a})
+
+-- | Multipart request metadata.
+apPayload :: Lens' ACLPatch ACLRule
+apPayload
+  = lens _apPayload (\ s a -> s{_apPayload = a})
+
+instance GoogleRequest ACLPatch where
+        type Rs ACLPatch = ACLRule
+        requestClient ACLPatch{..}
+          = go _apCalendarId _apRuleId (Just AltJSON)
+              _apPayload
+              appsCalendarService
+          where go
+                  = buildClient (Proxy :: Proxy ACLPatchResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Calendar/ACL/Update.hs b/gen/Network/Google/Resource/Calendar/ACL/Update.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Calendar/ACL/Update.hs
@@ -0,0 +1,110 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Calendar.ACL.Update
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates an access control rule.
+--
+-- /See:/ <https://developers.google.com/google-apps/calendar/firstapp Calendar API Reference> for @calendar.acl.update@.
+module Network.Google.Resource.Calendar.ACL.Update
+    (
+    -- * REST Resource
+      ACLUpdateResource
+
+    -- * Creating a Request
+    , aclUpdate
+    , ACLUpdate
+
+    -- * Request Lenses
+    , auCalendarId
+    , auRuleId
+    , auPayload
+    ) where
+
+import           Network.Google.AppsCalendar.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @calendar.acl.update@ method which the
+-- 'ACLUpdate' request conforms to.
+type ACLUpdateResource =
+     "calendar" :>
+       "v3" :>
+         "calendars" :>
+           Capture "calendarId" Text :>
+             "acl" :>
+               Capture "ruleId" Text :>
+                 QueryParam "alt" AltJSON :>
+                   ReqBody '[JSON] ACLRule :> Put '[JSON] ACLRule
+
+-- | Updates an access control rule.
+--
+-- /See:/ 'aclUpdate' smart constructor.
+data ACLUpdate = ACLUpdate
+    { _auCalendarId :: !Text
+    , _auRuleId     :: !Text
+    , _auPayload    :: !ACLRule
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ACLUpdate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'auCalendarId'
+--
+-- * 'auRuleId'
+--
+-- * 'auPayload'
+aclUpdate
+    :: Text -- ^ 'auCalendarId'
+    -> Text -- ^ 'auRuleId'
+    -> ACLRule -- ^ 'auPayload'
+    -> ACLUpdate
+aclUpdate pAuCalendarId_ pAuRuleId_ pAuPayload_ =
+    ACLUpdate
+    { _auCalendarId = pAuCalendarId_
+    , _auRuleId = pAuRuleId_
+    , _auPayload = pAuPayload_
+    }
+
+-- | Calendar identifier. To retrieve calendar IDs call the calendarList.list
+-- method. If you want to access the primary calendar of the currently
+-- logged in user, use the \"primary\" keyword.
+auCalendarId :: Lens' ACLUpdate Text
+auCalendarId
+  = lens _auCalendarId (\ s a -> s{_auCalendarId = a})
+
+-- | ACL rule identifier.
+auRuleId :: Lens' ACLUpdate Text
+auRuleId = lens _auRuleId (\ s a -> s{_auRuleId = a})
+
+-- | Multipart request metadata.
+auPayload :: Lens' ACLUpdate ACLRule
+auPayload
+  = lens _auPayload (\ s a -> s{_auPayload = a})
+
+instance GoogleRequest ACLUpdate where
+        type Rs ACLUpdate = ACLRule
+        requestClient ACLUpdate{..}
+          = go _auCalendarId _auRuleId (Just AltJSON)
+              _auPayload
+              appsCalendarService
+          where go
+                  = buildClient (Proxy :: Proxy ACLUpdateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Calendar/ACL/Watch.hs b/gen/Network/Google/Resource/Calendar/ACL/Watch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Calendar/ACL/Watch.hs
@@ -0,0 +1,161 @@
+{-# 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.Calendar.ACL.Watch
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Watch for changes to ACL resources.
+--
+-- /See:/ <https://developers.google.com/google-apps/calendar/firstapp Calendar API Reference> for @calendar.acl.watch@.
+module Network.Google.Resource.Calendar.ACL.Watch
+    (
+    -- * REST Resource
+      ACLWatchResource
+
+    -- * Creating a Request
+    , aclWatch
+    , ACLWatch
+
+    -- * Request Lenses
+    , awSyncToken
+    , awCalendarId
+    , awShowDeleted
+    , awPayload
+    , awPageToken
+    , awMaxResults
+    ) where
+
+import           Network.Google.AppsCalendar.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @calendar.acl.watch@ method which the
+-- 'ACLWatch' request conforms to.
+type ACLWatchResource =
+     "calendar" :>
+       "v3" :>
+         "calendars" :>
+           Capture "calendarId" Text :>
+             "acl" :>
+               "watch" :>
+                 QueryParam "syncToken" Text :>
+                   QueryParam "showDeleted" Bool :>
+                     QueryParam "pageToken" Text :>
+                       QueryParam "maxResults" (Textual Int32) :>
+                         QueryParam "alt" AltJSON :>
+                           ReqBody '[JSON] Channel :> Post '[JSON] Channel
+
+-- | Watch for changes to ACL resources.
+--
+-- /See:/ 'aclWatch' smart constructor.
+data ACLWatch = ACLWatch
+    { _awSyncToken   :: !(Maybe Text)
+    , _awCalendarId  :: !Text
+    , _awShowDeleted :: !(Maybe Bool)
+    , _awPayload     :: !Channel
+    , _awPageToken   :: !(Maybe Text)
+    , _awMaxResults  :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ACLWatch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'awSyncToken'
+--
+-- * 'awCalendarId'
+--
+-- * 'awShowDeleted'
+--
+-- * 'awPayload'
+--
+-- * 'awPageToken'
+--
+-- * 'awMaxResults'
+aclWatch
+    :: Text -- ^ 'awCalendarId'
+    -> Channel -- ^ 'awPayload'
+    -> ACLWatch
+aclWatch pAwCalendarId_ pAwPayload_ =
+    ACLWatch
+    { _awSyncToken = Nothing
+    , _awCalendarId = pAwCalendarId_
+    , _awShowDeleted = Nothing
+    , _awPayload = pAwPayload_
+    , _awPageToken = Nothing
+    , _awMaxResults = Nothing
+    }
+
+-- | Token obtained from the nextSyncToken field returned on the last page of
+-- results from the previous list request. It makes the result of this list
+-- request contain only entries that have changed since then. All entries
+-- deleted since the previous list request will always be in the result set
+-- and it is not allowed to set showDeleted to False. If the syncToken
+-- expires, the server will respond with a 410 GONE response code and the
+-- client should clear its storage and perform a full synchronization
+-- without any syncToken. Learn more about incremental synchronization.
+-- Optional. The default is to return all entries.
+awSyncToken :: Lens' ACLWatch (Maybe Text)
+awSyncToken
+  = lens _awSyncToken (\ s a -> s{_awSyncToken = a})
+
+-- | Calendar identifier. To retrieve calendar IDs call the calendarList.list
+-- method. If you want to access the primary calendar of the currently
+-- logged in user, use the \"primary\" keyword.
+awCalendarId :: Lens' ACLWatch Text
+awCalendarId
+  = lens _awCalendarId (\ s a -> s{_awCalendarId = a})
+
+-- | Whether to include deleted ACLs in the result. Deleted ACLs are
+-- represented by role equal to \"none\". Deleted ACLs will always be
+-- included if syncToken is provided. Optional. The default is False.
+awShowDeleted :: Lens' ACLWatch (Maybe Bool)
+awShowDeleted
+  = lens _awShowDeleted
+      (\ s a -> s{_awShowDeleted = a})
+
+-- | Multipart request metadata.
+awPayload :: Lens' ACLWatch Channel
+awPayload
+  = lens _awPayload (\ s a -> s{_awPayload = a})
+
+-- | Token specifying which result page to return. Optional.
+awPageToken :: Lens' ACLWatch (Maybe Text)
+awPageToken
+  = lens _awPageToken (\ s a -> s{_awPageToken = a})
+
+-- | Maximum number of entries returned on one result page. By default the
+-- value is 100 entries. The page size can never be larger than 250
+-- entries. Optional.
+awMaxResults :: Lens' ACLWatch (Maybe Int32)
+awMaxResults
+  = lens _awMaxResults (\ s a -> s{_awMaxResults = a})
+      . mapping _Coerce
+
+instance GoogleRequest ACLWatch where
+        type Rs ACLWatch = Channel
+        requestClient ACLWatch{..}
+          = go _awCalendarId _awSyncToken _awShowDeleted
+              _awPageToken
+              _awMaxResults
+              (Just AltJSON)
+              _awPayload
+              appsCalendarService
+          where go
+                  = buildClient (Proxy :: Proxy ACLWatchResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Calendar/CalendarList/Delete.hs b/gen/Network/Google/Resource/Calendar/CalendarList/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Calendar/CalendarList/Delete.hs
@@ -0,0 +1,89 @@
+{-# 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.Calendar.CalendarList.Delete
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes an entry on the user\'s calendar list.
+--
+-- /See:/ <https://developers.google.com/google-apps/calendar/firstapp Calendar API Reference> for @calendar.calendarList.delete@.
+module Network.Google.Resource.Calendar.CalendarList.Delete
+    (
+    -- * REST Resource
+      CalendarListDeleteResource
+
+    -- * Creating a Request
+    , calendarListDelete
+    , CalendarListDelete
+
+    -- * Request Lenses
+    , cldCalendarId
+    ) where
+
+import           Network.Google.AppsCalendar.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @calendar.calendarList.delete@ method which the
+-- 'CalendarListDelete' request conforms to.
+type CalendarListDeleteResource =
+     "calendar" :>
+       "v3" :>
+         "users" :>
+           "me" :>
+             "calendarList" :>
+               Capture "calendarId" Text :>
+                 QueryParam "alt" AltJSON :> Delete '[JSON] ()
+
+-- | Deletes an entry on the user\'s calendar list.
+--
+-- /See:/ 'calendarListDelete' smart constructor.
+newtype CalendarListDelete = CalendarListDelete
+    { _cldCalendarId :: Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CalendarListDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cldCalendarId'
+calendarListDelete
+    :: Text -- ^ 'cldCalendarId'
+    -> CalendarListDelete
+calendarListDelete pCldCalendarId_ =
+    CalendarListDelete
+    { _cldCalendarId = pCldCalendarId_
+    }
+
+-- | Calendar identifier. To retrieve calendar IDs call the calendarList.list
+-- method. If you want to access the primary calendar of the currently
+-- logged in user, use the \"primary\" keyword.
+cldCalendarId :: Lens' CalendarListDelete Text
+cldCalendarId
+  = lens _cldCalendarId
+      (\ s a -> s{_cldCalendarId = a})
+
+instance GoogleRequest CalendarListDelete where
+        type Rs CalendarListDelete = ()
+        requestClient CalendarListDelete{..}
+          = go _cldCalendarId (Just AltJSON)
+              appsCalendarService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CalendarListDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Calendar/CalendarList/Get.hs b/gen/Network/Google/Resource/Calendar/CalendarList/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Calendar/CalendarList/Get.hs
@@ -0,0 +1,90 @@
+{-# 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.Calendar.CalendarList.Get
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns an entry on the user\'s calendar list.
+--
+-- /See:/ <https://developers.google.com/google-apps/calendar/firstapp Calendar API Reference> for @calendar.calendarList.get@.
+module Network.Google.Resource.Calendar.CalendarList.Get
+    (
+    -- * REST Resource
+      CalendarListGetResource
+
+    -- * Creating a Request
+    , calendarListGet
+    , CalendarListGet
+
+    -- * Request Lenses
+    , clgCalendarId
+    ) where
+
+import           Network.Google.AppsCalendar.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @calendar.calendarList.get@ method which the
+-- 'CalendarListGet' request conforms to.
+type CalendarListGetResource =
+     "calendar" :>
+       "v3" :>
+         "users" :>
+           "me" :>
+             "calendarList" :>
+               Capture "calendarId" Text :>
+                 QueryParam "alt" AltJSON :>
+                   Get '[JSON] CalendarListEntry
+
+-- | Returns an entry on the user\'s calendar list.
+--
+-- /See:/ 'calendarListGet' smart constructor.
+newtype CalendarListGet = CalendarListGet
+    { _clgCalendarId :: Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CalendarListGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'clgCalendarId'
+calendarListGet
+    :: Text -- ^ 'clgCalendarId'
+    -> CalendarListGet
+calendarListGet pClgCalendarId_ =
+    CalendarListGet
+    { _clgCalendarId = pClgCalendarId_
+    }
+
+-- | Calendar identifier. To retrieve calendar IDs call the calendarList.list
+-- method. If you want to access the primary calendar of the currently
+-- logged in user, use the \"primary\" keyword.
+clgCalendarId :: Lens' CalendarListGet Text
+clgCalendarId
+  = lens _clgCalendarId
+      (\ s a -> s{_clgCalendarId = a})
+
+instance GoogleRequest CalendarListGet where
+        type Rs CalendarListGet = CalendarListEntry
+        requestClient CalendarListGet{..}
+          = go _clgCalendarId (Just AltJSON)
+              appsCalendarService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CalendarListGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Calendar/CalendarList/Insert.hs b/gen/Network/Google/Resource/Calendar/CalendarList/Insert.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Calendar/CalendarList/Insert.hs
@@ -0,0 +1,102 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Calendar.CalendarList.Insert
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Adds an entry to the user\'s calendar list.
+--
+-- /See:/ <https://developers.google.com/google-apps/calendar/firstapp Calendar API Reference> for @calendar.calendarList.insert@.
+module Network.Google.Resource.Calendar.CalendarList.Insert
+    (
+    -- * REST Resource
+      CalendarListInsertResource
+
+    -- * Creating a Request
+    , calendarListInsert
+    , CalendarListInsert
+
+    -- * Request Lenses
+    , cliPayload
+    , cliColorRgbFormat
+    ) where
+
+import           Network.Google.AppsCalendar.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @calendar.calendarList.insert@ method which the
+-- 'CalendarListInsert' request conforms to.
+type CalendarListInsertResource =
+     "calendar" :>
+       "v3" :>
+         "users" :>
+           "me" :>
+             "calendarList" :>
+               QueryParam "colorRgbFormat" Bool :>
+                 QueryParam "alt" AltJSON :>
+                   ReqBody '[JSON] CalendarListEntry :>
+                     Post '[JSON] CalendarListEntry
+
+-- | Adds an entry to the user\'s calendar list.
+--
+-- /See:/ 'calendarListInsert' smart constructor.
+data CalendarListInsert = CalendarListInsert
+    { _cliPayload        :: !CalendarListEntry
+    , _cliColorRgbFormat :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CalendarListInsert' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cliPayload'
+--
+-- * 'cliColorRgbFormat'
+calendarListInsert
+    :: CalendarListEntry -- ^ 'cliPayload'
+    -> CalendarListInsert
+calendarListInsert pCliPayload_ =
+    CalendarListInsert
+    { _cliPayload = pCliPayload_
+    , _cliColorRgbFormat = Nothing
+    }
+
+-- | Multipart request metadata.
+cliPayload :: Lens' CalendarListInsert CalendarListEntry
+cliPayload
+  = lens _cliPayload (\ s a -> s{_cliPayload = a})
+
+-- | Whether to use the foregroundColor and backgroundColor fields to write
+-- the calendar colors (RGB). If this feature is used, the index-based
+-- colorId field will be set to the best matching option automatically.
+-- Optional. The default is False.
+cliColorRgbFormat :: Lens' CalendarListInsert (Maybe Bool)
+cliColorRgbFormat
+  = lens _cliColorRgbFormat
+      (\ s a -> s{_cliColorRgbFormat = a})
+
+instance GoogleRequest CalendarListInsert where
+        type Rs CalendarListInsert = CalendarListEntry
+        requestClient CalendarListInsert{..}
+          = go _cliColorRgbFormat (Just AltJSON) _cliPayload
+              appsCalendarService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CalendarListInsertResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Calendar/CalendarList/List.hs b/gen/Network/Google/Resource/Calendar/CalendarList/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Calendar/CalendarList/List.hs
@@ -0,0 +1,167 @@
+{-# 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.Calendar.CalendarList.List
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns entries on the user\'s calendar list.
+--
+-- /See:/ <https://developers.google.com/google-apps/calendar/firstapp Calendar API Reference> for @calendar.calendarList.list@.
+module Network.Google.Resource.Calendar.CalendarList.List
+    (
+    -- * REST Resource
+      CalendarListListResource
+
+    -- * Creating a Request
+    , calendarListList
+    , CalendarListList
+
+    -- * Request Lenses
+    , cllSyncToken
+    , cllMinAccessRole
+    , cllShowDeleted
+    , cllShowHidden
+    , cllPageToken
+    , cllMaxResults
+    ) where
+
+import           Network.Google.AppsCalendar.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @calendar.calendarList.list@ method which the
+-- 'CalendarListList' request conforms to.
+type CalendarListListResource =
+     "calendar" :>
+       "v3" :>
+         "users" :>
+           "me" :>
+             "calendarList" :>
+               QueryParam "syncToken" Text :>
+                 QueryParam "minAccessRole"
+                   CalendarListListMinAccessRole
+                   :>
+                   QueryParam "showDeleted" Bool :>
+                     QueryParam "showHidden" Bool :>
+                       QueryParam "pageToken" Text :>
+                         QueryParam "maxResults" (Textual Int32) :>
+                           QueryParam "alt" AltJSON :> Get '[JSON] CalendarList
+
+-- | Returns entries on the user\'s calendar list.
+--
+-- /See:/ 'calendarListList' smart constructor.
+data CalendarListList = CalendarListList
+    { _cllSyncToken     :: !(Maybe Text)
+    , _cllMinAccessRole :: !(Maybe CalendarListListMinAccessRole)
+    , _cllShowDeleted   :: !(Maybe Bool)
+    , _cllShowHidden    :: !(Maybe Bool)
+    , _cllPageToken     :: !(Maybe Text)
+    , _cllMaxResults    :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CalendarListList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cllSyncToken'
+--
+-- * 'cllMinAccessRole'
+--
+-- * 'cllShowDeleted'
+--
+-- * 'cllShowHidden'
+--
+-- * 'cllPageToken'
+--
+-- * 'cllMaxResults'
+calendarListList
+    :: CalendarListList
+calendarListList =
+    CalendarListList
+    { _cllSyncToken = Nothing
+    , _cllMinAccessRole = Nothing
+    , _cllShowDeleted = Nothing
+    , _cllShowHidden = Nothing
+    , _cllPageToken = Nothing
+    , _cllMaxResults = Nothing
+    }
+
+-- | Token obtained from the nextSyncToken field returned on the last page of
+-- results from the previous list request. It makes the result of this list
+-- request contain only entries that have changed since then. If only
+-- read-only fields such as calendar properties or ACLs have changed, the
+-- entry won\'t be returned. All entries deleted and hidden since the
+-- previous list request will always be in the result set and it is not
+-- allowed to set showDeleted neither showHidden to False. To ensure client
+-- state consistency minAccessRole query parameter cannot be specified
+-- together with nextSyncToken. If the syncToken expires, the server will
+-- respond with a 410 GONE response code and the client should clear its
+-- storage and perform a full synchronization without any syncToken. Learn
+-- more about incremental synchronization. Optional. The default is to
+-- return all entries.
+cllSyncToken :: Lens' CalendarListList (Maybe Text)
+cllSyncToken
+  = lens _cllSyncToken (\ s a -> s{_cllSyncToken = a})
+
+-- | The minimum access role for the user in the returned entries. Optional.
+-- The default is no restriction.
+cllMinAccessRole :: Lens' CalendarListList (Maybe CalendarListListMinAccessRole)
+cllMinAccessRole
+  = lens _cllMinAccessRole
+      (\ s a -> s{_cllMinAccessRole = a})
+
+-- | Whether to include deleted calendar list entries in the result.
+-- Optional. The default is False.
+cllShowDeleted :: Lens' CalendarListList (Maybe Bool)
+cllShowDeleted
+  = lens _cllShowDeleted
+      (\ s a -> s{_cllShowDeleted = a})
+
+-- | Whether to show hidden entries. Optional. The default is False.
+cllShowHidden :: Lens' CalendarListList (Maybe Bool)
+cllShowHidden
+  = lens _cllShowHidden
+      (\ s a -> s{_cllShowHidden = a})
+
+-- | Token specifying which result page to return. Optional.
+cllPageToken :: Lens' CalendarListList (Maybe Text)
+cllPageToken
+  = lens _cllPageToken (\ s a -> s{_cllPageToken = a})
+
+-- | Maximum number of entries returned on one result page. By default the
+-- value is 100 entries. The page size can never be larger than 250
+-- entries. Optional.
+cllMaxResults :: Lens' CalendarListList (Maybe Int32)
+cllMaxResults
+  = lens _cllMaxResults
+      (\ s a -> s{_cllMaxResults = a})
+      . mapping _Coerce
+
+instance GoogleRequest CalendarListList where
+        type Rs CalendarListList = CalendarList
+        requestClient CalendarListList{..}
+          = go _cllSyncToken _cllMinAccessRole _cllShowDeleted
+              _cllShowHidden
+              _cllPageToken
+              _cllMaxResults
+              (Just AltJSON)
+              appsCalendarService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CalendarListListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Calendar/CalendarList/Patch.hs b/gen/Network/Google/Resource/Calendar/CalendarList/Patch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Calendar/CalendarList/Patch.hs
@@ -0,0 +1,120 @@
+{-# 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.Calendar.CalendarList.Patch
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates an entry on the user\'s calendar list. This method supports
+-- patch semantics.
+--
+-- /See:/ <https://developers.google.com/google-apps/calendar/firstapp Calendar API Reference> for @calendar.calendarList.patch@.
+module Network.Google.Resource.Calendar.CalendarList.Patch
+    (
+    -- * REST Resource
+      CalendarListPatchResource
+
+    -- * Creating a Request
+    , calendarListPatch
+    , CalendarListPatch
+
+    -- * Request Lenses
+    , clpCalendarId
+    , clpPayload
+    , clpColorRgbFormat
+    ) where
+
+import           Network.Google.AppsCalendar.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @calendar.calendarList.patch@ method which the
+-- 'CalendarListPatch' request conforms to.
+type CalendarListPatchResource =
+     "calendar" :>
+       "v3" :>
+         "users" :>
+           "me" :>
+             "calendarList" :>
+               Capture "calendarId" Text :>
+                 QueryParam "colorRgbFormat" Bool :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON] CalendarListEntry :>
+                       Patch '[JSON] CalendarListEntry
+
+-- | Updates an entry on the user\'s calendar list. This method supports
+-- patch semantics.
+--
+-- /See:/ 'calendarListPatch' smart constructor.
+data CalendarListPatch = CalendarListPatch
+    { _clpCalendarId     :: !Text
+    , _clpPayload        :: !CalendarListEntry
+    , _clpColorRgbFormat :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CalendarListPatch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'clpCalendarId'
+--
+-- * 'clpPayload'
+--
+-- * 'clpColorRgbFormat'
+calendarListPatch
+    :: Text -- ^ 'clpCalendarId'
+    -> CalendarListEntry -- ^ 'clpPayload'
+    -> CalendarListPatch
+calendarListPatch pClpCalendarId_ pClpPayload_ =
+    CalendarListPatch
+    { _clpCalendarId = pClpCalendarId_
+    , _clpPayload = pClpPayload_
+    , _clpColorRgbFormat = Nothing
+    }
+
+-- | Calendar identifier. To retrieve calendar IDs call the calendarList.list
+-- method. If you want to access the primary calendar of the currently
+-- logged in user, use the \"primary\" keyword.
+clpCalendarId :: Lens' CalendarListPatch Text
+clpCalendarId
+  = lens _clpCalendarId
+      (\ s a -> s{_clpCalendarId = a})
+
+-- | Multipart request metadata.
+clpPayload :: Lens' CalendarListPatch CalendarListEntry
+clpPayload
+  = lens _clpPayload (\ s a -> s{_clpPayload = a})
+
+-- | Whether to use the foregroundColor and backgroundColor fields to write
+-- the calendar colors (RGB). If this feature is used, the index-based
+-- colorId field will be set to the best matching option automatically.
+-- Optional. The default is False.
+clpColorRgbFormat :: Lens' CalendarListPatch (Maybe Bool)
+clpColorRgbFormat
+  = lens _clpColorRgbFormat
+      (\ s a -> s{_clpColorRgbFormat = a})
+
+instance GoogleRequest CalendarListPatch where
+        type Rs CalendarListPatch = CalendarListEntry
+        requestClient CalendarListPatch{..}
+          = go _clpCalendarId _clpColorRgbFormat (Just AltJSON)
+              _clpPayload
+              appsCalendarService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CalendarListPatchResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Calendar/CalendarList/Update.hs b/gen/Network/Google/Resource/Calendar/CalendarList/Update.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Calendar/CalendarList/Update.hs
@@ -0,0 +1,118 @@
+{-# 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.Calendar.CalendarList.Update
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates an entry on the user\'s calendar list.
+--
+-- /See:/ <https://developers.google.com/google-apps/calendar/firstapp Calendar API Reference> for @calendar.calendarList.update@.
+module Network.Google.Resource.Calendar.CalendarList.Update
+    (
+    -- * REST Resource
+      CalendarListUpdateResource
+
+    -- * Creating a Request
+    , calendarListUpdate
+    , CalendarListUpdate
+
+    -- * Request Lenses
+    , cluCalendarId
+    , cluPayload
+    , cluColorRgbFormat
+    ) where
+
+import           Network.Google.AppsCalendar.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @calendar.calendarList.update@ method which the
+-- 'CalendarListUpdate' request conforms to.
+type CalendarListUpdateResource =
+     "calendar" :>
+       "v3" :>
+         "users" :>
+           "me" :>
+             "calendarList" :>
+               Capture "calendarId" Text :>
+                 QueryParam "colorRgbFormat" Bool :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON] CalendarListEntry :>
+                       Put '[JSON] CalendarListEntry
+
+-- | Updates an entry on the user\'s calendar list.
+--
+-- /See:/ 'calendarListUpdate' smart constructor.
+data CalendarListUpdate = CalendarListUpdate
+    { _cluCalendarId     :: !Text
+    , _cluPayload        :: !CalendarListEntry
+    , _cluColorRgbFormat :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CalendarListUpdate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cluCalendarId'
+--
+-- * 'cluPayload'
+--
+-- * 'cluColorRgbFormat'
+calendarListUpdate
+    :: Text -- ^ 'cluCalendarId'
+    -> CalendarListEntry -- ^ 'cluPayload'
+    -> CalendarListUpdate
+calendarListUpdate pCluCalendarId_ pCluPayload_ =
+    CalendarListUpdate
+    { _cluCalendarId = pCluCalendarId_
+    , _cluPayload = pCluPayload_
+    , _cluColorRgbFormat = Nothing
+    }
+
+-- | Calendar identifier. To retrieve calendar IDs call the calendarList.list
+-- method. If you want to access the primary calendar of the currently
+-- logged in user, use the \"primary\" keyword.
+cluCalendarId :: Lens' CalendarListUpdate Text
+cluCalendarId
+  = lens _cluCalendarId
+      (\ s a -> s{_cluCalendarId = a})
+
+-- | Multipart request metadata.
+cluPayload :: Lens' CalendarListUpdate CalendarListEntry
+cluPayload
+  = lens _cluPayload (\ s a -> s{_cluPayload = a})
+
+-- | Whether to use the foregroundColor and backgroundColor fields to write
+-- the calendar colors (RGB). If this feature is used, the index-based
+-- colorId field will be set to the best matching option automatically.
+-- Optional. The default is False.
+cluColorRgbFormat :: Lens' CalendarListUpdate (Maybe Bool)
+cluColorRgbFormat
+  = lens _cluColorRgbFormat
+      (\ s a -> s{_cluColorRgbFormat = a})
+
+instance GoogleRequest CalendarListUpdate where
+        type Rs CalendarListUpdate = CalendarListEntry
+        requestClient CalendarListUpdate{..}
+          = go _cluCalendarId _cluColorRgbFormat (Just AltJSON)
+              _cluPayload
+              appsCalendarService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CalendarListUpdateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Calendar/CalendarList/Watch.hs b/gen/Network/Google/Resource/Calendar/CalendarList/Watch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Calendar/CalendarList/Watch.hs
@@ -0,0 +1,181 @@
+{-# 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.Calendar.CalendarList.Watch
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Watch for changes to CalendarList resources.
+--
+-- /See:/ <https://developers.google.com/google-apps/calendar/firstapp Calendar API Reference> for @calendar.calendarList.watch@.
+module Network.Google.Resource.Calendar.CalendarList.Watch
+    (
+    -- * REST Resource
+      CalendarListWatchResource
+
+    -- * Creating a Request
+    , calendarListWatch
+    , CalendarListWatch
+
+    -- * Request Lenses
+    , clwSyncToken
+    , clwMinAccessRole
+    , clwShowDeleted
+    , clwPayload
+    , clwShowHidden
+    , clwPageToken
+    , clwMaxResults
+    ) where
+
+import           Network.Google.AppsCalendar.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @calendar.calendarList.watch@ method which the
+-- 'CalendarListWatch' request conforms to.
+type CalendarListWatchResource =
+     "calendar" :>
+       "v3" :>
+         "users" :>
+           "me" :>
+             "calendarList" :>
+               "watch" :>
+                 QueryParam "syncToken" Text :>
+                   QueryParam "minAccessRole"
+                     CalendarListWatchMinAccessRole
+                     :>
+                     QueryParam "showDeleted" Bool :>
+                       QueryParam "showHidden" Bool :>
+                         QueryParam "pageToken" Text :>
+                           QueryParam "maxResults" (Textual Int32) :>
+                             QueryParam "alt" AltJSON :>
+                               ReqBody '[JSON] Channel :> Post '[JSON] Channel
+
+-- | Watch for changes to CalendarList resources.
+--
+-- /See:/ 'calendarListWatch' smart constructor.
+data CalendarListWatch = CalendarListWatch
+    { _clwSyncToken     :: !(Maybe Text)
+    , _clwMinAccessRole :: !(Maybe CalendarListWatchMinAccessRole)
+    , _clwShowDeleted   :: !(Maybe Bool)
+    , _clwPayload       :: !Channel
+    , _clwShowHidden    :: !(Maybe Bool)
+    , _clwPageToken     :: !(Maybe Text)
+    , _clwMaxResults    :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CalendarListWatch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'clwSyncToken'
+--
+-- * 'clwMinAccessRole'
+--
+-- * 'clwShowDeleted'
+--
+-- * 'clwPayload'
+--
+-- * 'clwShowHidden'
+--
+-- * 'clwPageToken'
+--
+-- * 'clwMaxResults'
+calendarListWatch
+    :: Channel -- ^ 'clwPayload'
+    -> CalendarListWatch
+calendarListWatch pClwPayload_ =
+    CalendarListWatch
+    { _clwSyncToken = Nothing
+    , _clwMinAccessRole = Nothing
+    , _clwShowDeleted = Nothing
+    , _clwPayload = pClwPayload_
+    , _clwShowHidden = Nothing
+    , _clwPageToken = Nothing
+    , _clwMaxResults = Nothing
+    }
+
+-- | Token obtained from the nextSyncToken field returned on the last page of
+-- results from the previous list request. It makes the result of this list
+-- request contain only entries that have changed since then. If only
+-- read-only fields such as calendar properties or ACLs have changed, the
+-- entry won\'t be returned. All entries deleted and hidden since the
+-- previous list request will always be in the result set and it is not
+-- allowed to set showDeleted neither showHidden to False. To ensure client
+-- state consistency minAccessRole query parameter cannot be specified
+-- together with nextSyncToken. If the syncToken expires, the server will
+-- respond with a 410 GONE response code and the client should clear its
+-- storage and perform a full synchronization without any syncToken. Learn
+-- more about incremental synchronization. Optional. The default is to
+-- return all entries.
+clwSyncToken :: Lens' CalendarListWatch (Maybe Text)
+clwSyncToken
+  = lens _clwSyncToken (\ s a -> s{_clwSyncToken = a})
+
+-- | The minimum access role for the user in the returned entries. Optional.
+-- The default is no restriction.
+clwMinAccessRole :: Lens' CalendarListWatch (Maybe CalendarListWatchMinAccessRole)
+clwMinAccessRole
+  = lens _clwMinAccessRole
+      (\ s a -> s{_clwMinAccessRole = a})
+
+-- | Whether to include deleted calendar list entries in the result.
+-- Optional. The default is False.
+clwShowDeleted :: Lens' CalendarListWatch (Maybe Bool)
+clwShowDeleted
+  = lens _clwShowDeleted
+      (\ s a -> s{_clwShowDeleted = a})
+
+-- | Multipart request metadata.
+clwPayload :: Lens' CalendarListWatch Channel
+clwPayload
+  = lens _clwPayload (\ s a -> s{_clwPayload = a})
+
+-- | Whether to show hidden entries. Optional. The default is False.
+clwShowHidden :: Lens' CalendarListWatch (Maybe Bool)
+clwShowHidden
+  = lens _clwShowHidden
+      (\ s a -> s{_clwShowHidden = a})
+
+-- | Token specifying which result page to return. Optional.
+clwPageToken :: Lens' CalendarListWatch (Maybe Text)
+clwPageToken
+  = lens _clwPageToken (\ s a -> s{_clwPageToken = a})
+
+-- | Maximum number of entries returned on one result page. By default the
+-- value is 100 entries. The page size can never be larger than 250
+-- entries. Optional.
+clwMaxResults :: Lens' CalendarListWatch (Maybe Int32)
+clwMaxResults
+  = lens _clwMaxResults
+      (\ s a -> s{_clwMaxResults = a})
+      . mapping _Coerce
+
+instance GoogleRequest CalendarListWatch where
+        type Rs CalendarListWatch = Channel
+        requestClient CalendarListWatch{..}
+          = go _clwSyncToken _clwMinAccessRole _clwShowDeleted
+              _clwShowHidden
+              _clwPageToken
+              _clwMaxResults
+              (Just AltJSON)
+              _clwPayload
+              appsCalendarService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CalendarListWatchResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Calendar/Calendars/Clear.hs b/gen/Network/Google/Resource/Calendar/Calendars/Clear.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Calendar/Calendars/Clear.hs
@@ -0,0 +1,87 @@
+{-# 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.Calendar.Calendars.Clear
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Clears a primary calendar. This operation deletes all events associated
+-- with the primary calendar of an account.
+--
+-- /See:/ <https://developers.google.com/google-apps/calendar/firstapp Calendar API Reference> for @calendar.calendars.clear@.
+module Network.Google.Resource.Calendar.Calendars.Clear
+    (
+    -- * REST Resource
+      CalendarsClearResource
+
+    -- * Creating a Request
+    , calendarsClear
+    , CalendarsClear
+
+    -- * Request Lenses
+    , ccCalendarId
+    ) where
+
+import           Network.Google.AppsCalendar.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @calendar.calendars.clear@ method which the
+-- 'CalendarsClear' request conforms to.
+type CalendarsClearResource =
+     "calendar" :>
+       "v3" :>
+         "calendars" :>
+           Capture "calendarId" Text :>
+             "clear" :>
+               QueryParam "alt" AltJSON :> Post '[JSON] ()
+
+-- | Clears a primary calendar. This operation deletes all events associated
+-- with the primary calendar of an account.
+--
+-- /See:/ 'calendarsClear' smart constructor.
+newtype CalendarsClear = CalendarsClear
+    { _ccCalendarId :: Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CalendarsClear' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ccCalendarId'
+calendarsClear
+    :: Text -- ^ 'ccCalendarId'
+    -> CalendarsClear
+calendarsClear pCcCalendarId_ =
+    CalendarsClear
+    { _ccCalendarId = pCcCalendarId_
+    }
+
+-- | Calendar identifier. To retrieve calendar IDs call the calendarList.list
+-- method. If you want to access the primary calendar of the currently
+-- logged in user, use the \"primary\" keyword.
+ccCalendarId :: Lens' CalendarsClear Text
+ccCalendarId
+  = lens _ccCalendarId (\ s a -> s{_ccCalendarId = a})
+
+instance GoogleRequest CalendarsClear where
+        type Rs CalendarsClear = ()
+        requestClient CalendarsClear{..}
+          = go _ccCalendarId (Just AltJSON) appsCalendarService
+          where go
+                  = buildClient (Proxy :: Proxy CalendarsClearResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Calendar/Calendars/Delete.hs b/gen/Network/Google/Resource/Calendar/Calendars/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Calendar/Calendars/Delete.hs
@@ -0,0 +1,87 @@
+{-# 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.Calendar.Calendars.Delete
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a secondary calendar. Use calendars.clear for clearing all
+-- events on primary calendars.
+--
+-- /See:/ <https://developers.google.com/google-apps/calendar/firstapp Calendar API Reference> for @calendar.calendars.delete@.
+module Network.Google.Resource.Calendar.Calendars.Delete
+    (
+    -- * REST Resource
+      CalendarsDeleteResource
+
+    -- * Creating a Request
+    , calendarsDelete
+    , CalendarsDelete
+
+    -- * Request Lenses
+    , cdCalendarId
+    ) where
+
+import           Network.Google.AppsCalendar.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @calendar.calendars.delete@ method which the
+-- 'CalendarsDelete' request conforms to.
+type CalendarsDeleteResource =
+     "calendar" :>
+       "v3" :>
+         "calendars" :>
+           Capture "calendarId" Text :>
+             QueryParam "alt" AltJSON :> Delete '[JSON] ()
+
+-- | Deletes a secondary calendar. Use calendars.clear for clearing all
+-- events on primary calendars.
+--
+-- /See:/ 'calendarsDelete' smart constructor.
+newtype CalendarsDelete = CalendarsDelete
+    { _cdCalendarId :: Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CalendarsDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cdCalendarId'
+calendarsDelete
+    :: Text -- ^ 'cdCalendarId'
+    -> CalendarsDelete
+calendarsDelete pCdCalendarId_ =
+    CalendarsDelete
+    { _cdCalendarId = pCdCalendarId_
+    }
+
+-- | Calendar identifier. To retrieve calendar IDs call the calendarList.list
+-- method. If you want to access the primary calendar of the currently
+-- logged in user, use the \"primary\" keyword.
+cdCalendarId :: Lens' CalendarsDelete Text
+cdCalendarId
+  = lens _cdCalendarId (\ s a -> s{_cdCalendarId = a})
+
+instance GoogleRequest CalendarsDelete where
+        type Rs CalendarsDelete = ()
+        requestClient CalendarsDelete{..}
+          = go _cdCalendarId (Just AltJSON) appsCalendarService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CalendarsDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Calendar/Calendars/Get.hs b/gen/Network/Google/Resource/Calendar/Calendars/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Calendar/Calendars/Get.hs
@@ -0,0 +1,84 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Calendar.Calendars.Get
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns metadata for a calendar.
+--
+-- /See:/ <https://developers.google.com/google-apps/calendar/firstapp Calendar API Reference> for @calendar.calendars.get@.
+module Network.Google.Resource.Calendar.Calendars.Get
+    (
+    -- * REST Resource
+      CalendarsGetResource
+
+    -- * Creating a Request
+    , calendarsGet
+    , CalendarsGet
+
+    -- * Request Lenses
+    , cgCalendarId
+    ) where
+
+import           Network.Google.AppsCalendar.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @calendar.calendars.get@ method which the
+-- 'CalendarsGet' request conforms to.
+type CalendarsGetResource =
+     "calendar" :>
+       "v3" :>
+         "calendars" :>
+           Capture "calendarId" Text :>
+             QueryParam "alt" AltJSON :> Get '[JSON] Calendar
+
+-- | Returns metadata for a calendar.
+--
+-- /See:/ 'calendarsGet' smart constructor.
+newtype CalendarsGet = CalendarsGet
+    { _cgCalendarId :: Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CalendarsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cgCalendarId'
+calendarsGet
+    :: Text -- ^ 'cgCalendarId'
+    -> CalendarsGet
+calendarsGet pCgCalendarId_ =
+    CalendarsGet
+    { _cgCalendarId = pCgCalendarId_
+    }
+
+-- | Calendar identifier. To retrieve calendar IDs call the calendarList.list
+-- method. If you want to access the primary calendar of the currently
+-- logged in user, use the \"primary\" keyword.
+cgCalendarId :: Lens' CalendarsGet Text
+cgCalendarId
+  = lens _cgCalendarId (\ s a -> s{_cgCalendarId = a})
+
+instance GoogleRequest CalendarsGet where
+        type Rs CalendarsGet = Calendar
+        requestClient CalendarsGet{..}
+          = go _cgCalendarId (Just AltJSON) appsCalendarService
+          where go
+                  = buildClient (Proxy :: Proxy CalendarsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Calendar/Calendars/Insert.hs b/gen/Network/Google/Resource/Calendar/Calendars/Insert.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Calendar/Calendars/Insert.hs
@@ -0,0 +1,83 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Calendar.Calendars.Insert
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a secondary calendar.
+--
+-- /See:/ <https://developers.google.com/google-apps/calendar/firstapp Calendar API Reference> for @calendar.calendars.insert@.
+module Network.Google.Resource.Calendar.Calendars.Insert
+    (
+    -- * REST Resource
+      CalendarsInsertResource
+
+    -- * Creating a Request
+    , calendarsInsert
+    , CalendarsInsert
+
+    -- * Request Lenses
+    , ciPayload
+    ) where
+
+import           Network.Google.AppsCalendar.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @calendar.calendars.insert@ method which the
+-- 'CalendarsInsert' request conforms to.
+type CalendarsInsertResource =
+     "calendar" :>
+       "v3" :>
+         "calendars" :>
+           QueryParam "alt" AltJSON :>
+             ReqBody '[JSON] Calendar :> Post '[JSON] Calendar
+
+-- | Creates a secondary calendar.
+--
+-- /See:/ 'calendarsInsert' smart constructor.
+newtype CalendarsInsert = CalendarsInsert
+    { _ciPayload :: Calendar
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CalendarsInsert' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ciPayload'
+calendarsInsert
+    :: Calendar -- ^ 'ciPayload'
+    -> CalendarsInsert
+calendarsInsert pCiPayload_ =
+    CalendarsInsert
+    { _ciPayload = pCiPayload_
+    }
+
+-- | Multipart request metadata.
+ciPayload :: Lens' CalendarsInsert Calendar
+ciPayload
+  = lens _ciPayload (\ s a -> s{_ciPayload = a})
+
+instance GoogleRequest CalendarsInsert where
+        type Rs CalendarsInsert = Calendar
+        requestClient CalendarsInsert{..}
+          = go (Just AltJSON) _ciPayload appsCalendarService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CalendarsInsertResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Calendar/Calendars/Patch.hs b/gen/Network/Google/Resource/Calendar/Calendars/Patch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Calendar/Calendars/Patch.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Calendar.Calendars.Patch
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates metadata for a calendar. This method supports patch semantics.
+--
+-- /See:/ <https://developers.google.com/google-apps/calendar/firstapp Calendar API Reference> for @calendar.calendars.patch@.
+module Network.Google.Resource.Calendar.Calendars.Patch
+    (
+    -- * REST Resource
+      CalendarsPatchResource
+
+    -- * Creating a Request
+    , calendarsPatch
+    , CalendarsPatch
+
+    -- * Request Lenses
+    , cpCalendarId
+    , cpPayload
+    ) where
+
+import           Network.Google.AppsCalendar.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @calendar.calendars.patch@ method which the
+-- 'CalendarsPatch' request conforms to.
+type CalendarsPatchResource =
+     "calendar" :>
+       "v3" :>
+         "calendars" :>
+           Capture "calendarId" Text :>
+             QueryParam "alt" AltJSON :>
+               ReqBody '[JSON] Calendar :> Patch '[JSON] Calendar
+
+-- | Updates metadata for a calendar. This method supports patch semantics.
+--
+-- /See:/ 'calendarsPatch' smart constructor.
+data CalendarsPatch = CalendarsPatch
+    { _cpCalendarId :: !Text
+    , _cpPayload    :: !Calendar
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CalendarsPatch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cpCalendarId'
+--
+-- * 'cpPayload'
+calendarsPatch
+    :: Text -- ^ 'cpCalendarId'
+    -> Calendar -- ^ 'cpPayload'
+    -> CalendarsPatch
+calendarsPatch pCpCalendarId_ pCpPayload_ =
+    CalendarsPatch
+    { _cpCalendarId = pCpCalendarId_
+    , _cpPayload = pCpPayload_
+    }
+
+-- | Calendar identifier. To retrieve calendar IDs call the calendarList.list
+-- method. If you want to access the primary calendar of the currently
+-- logged in user, use the \"primary\" keyword.
+cpCalendarId :: Lens' CalendarsPatch Text
+cpCalendarId
+  = lens _cpCalendarId (\ s a -> s{_cpCalendarId = a})
+
+-- | Multipart request metadata.
+cpPayload :: Lens' CalendarsPatch Calendar
+cpPayload
+  = lens _cpPayload (\ s a -> s{_cpPayload = a})
+
+instance GoogleRequest CalendarsPatch where
+        type Rs CalendarsPatch = Calendar
+        requestClient CalendarsPatch{..}
+          = go _cpCalendarId (Just AltJSON) _cpPayload
+              appsCalendarService
+          where go
+                  = buildClient (Proxy :: Proxy CalendarsPatchResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Calendar/Calendars/Update.hs b/gen/Network/Google/Resource/Calendar/Calendars/Update.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Calendar/Calendars/Update.hs
@@ -0,0 +1,98 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Calendar.Calendars.Update
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates metadata for a calendar.
+--
+-- /See:/ <https://developers.google.com/google-apps/calendar/firstapp Calendar API Reference> for @calendar.calendars.update@.
+module Network.Google.Resource.Calendar.Calendars.Update
+    (
+    -- * REST Resource
+      CalendarsUpdateResource
+
+    -- * Creating a Request
+    , calendarsUpdate
+    , CalendarsUpdate
+
+    -- * Request Lenses
+    , cuCalendarId
+    , cuPayload
+    ) where
+
+import           Network.Google.AppsCalendar.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @calendar.calendars.update@ method which the
+-- 'CalendarsUpdate' request conforms to.
+type CalendarsUpdateResource =
+     "calendar" :>
+       "v3" :>
+         "calendars" :>
+           Capture "calendarId" Text :>
+             QueryParam "alt" AltJSON :>
+               ReqBody '[JSON] Calendar :> Put '[JSON] Calendar
+
+-- | Updates metadata for a calendar.
+--
+-- /See:/ 'calendarsUpdate' smart constructor.
+data CalendarsUpdate = CalendarsUpdate
+    { _cuCalendarId :: !Text
+    , _cuPayload    :: !Calendar
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CalendarsUpdate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cuCalendarId'
+--
+-- * 'cuPayload'
+calendarsUpdate
+    :: Text -- ^ 'cuCalendarId'
+    -> Calendar -- ^ 'cuPayload'
+    -> CalendarsUpdate
+calendarsUpdate pCuCalendarId_ pCuPayload_ =
+    CalendarsUpdate
+    { _cuCalendarId = pCuCalendarId_
+    , _cuPayload = pCuPayload_
+    }
+
+-- | Calendar identifier. To retrieve calendar IDs call the calendarList.list
+-- method. If you want to access the primary calendar of the currently
+-- logged in user, use the \"primary\" keyword.
+cuCalendarId :: Lens' CalendarsUpdate Text
+cuCalendarId
+  = lens _cuCalendarId (\ s a -> s{_cuCalendarId = a})
+
+-- | Multipart request metadata.
+cuPayload :: Lens' CalendarsUpdate Calendar
+cuPayload
+  = lens _cuPayload (\ s a -> s{_cuPayload = a})
+
+instance GoogleRequest CalendarsUpdate where
+        type Rs CalendarsUpdate = Calendar
+        requestClient CalendarsUpdate{..}
+          = go _cuCalendarId (Just AltJSON) _cuPayload
+              appsCalendarService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CalendarsUpdateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Calendar/Channels/Stop.hs b/gen/Network/Google/Resource/Calendar/Channels/Stop.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Calendar/Channels/Stop.hs
@@ -0,0 +1,83 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Calendar.Channels.Stop
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Stop watching resources through this channel
+--
+-- /See:/ <https://developers.google.com/google-apps/calendar/firstapp Calendar API Reference> for @calendar.channels.stop@.
+module Network.Google.Resource.Calendar.Channels.Stop
+    (
+    -- * REST Resource
+      ChannelsStopResource
+
+    -- * Creating a Request
+    , channelsStop
+    , ChannelsStop
+
+    -- * Request Lenses
+    , csPayload
+    ) where
+
+import           Network.Google.AppsCalendar.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @calendar.channels.stop@ method which the
+-- 'ChannelsStop' request conforms to.
+type ChannelsStopResource =
+     "calendar" :>
+       "v3" :>
+         "channels" :>
+           "stop" :>
+             QueryParam "alt" AltJSON :>
+               ReqBody '[JSON] Channel :> Post '[JSON] ()
+
+-- | Stop watching resources through this channel
+--
+-- /See:/ 'channelsStop' smart constructor.
+newtype ChannelsStop = ChannelsStop
+    { _csPayload :: Channel
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ChannelsStop' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'csPayload'
+channelsStop
+    :: Channel -- ^ 'csPayload'
+    -> ChannelsStop
+channelsStop pCsPayload_ =
+    ChannelsStop
+    { _csPayload = pCsPayload_
+    }
+
+-- | Multipart request metadata.
+csPayload :: Lens' ChannelsStop Channel
+csPayload
+  = lens _csPayload (\ s a -> s{_csPayload = a})
+
+instance GoogleRequest ChannelsStop where
+        type Rs ChannelsStop = ()
+        requestClient ChannelsStop{..}
+          = go (Just AltJSON) _csPayload appsCalendarService
+          where go
+                  = buildClient (Proxy :: Proxy ChannelsStopResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Calendar/Colors/Get.hs b/gen/Network/Google/Resource/Calendar/Colors/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Calendar/Colors/Get.hs
@@ -0,0 +1,67 @@
+{-# 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.Calendar.Colors.Get
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns the color definitions for calendars and events.
+--
+-- /See:/ <https://developers.google.com/google-apps/calendar/firstapp Calendar API Reference> for @calendar.colors.get@.
+module Network.Google.Resource.Calendar.Colors.Get
+    (
+    -- * REST Resource
+      ColorsGetResource
+
+    -- * Creating a Request
+    , colorsGet
+    , ColorsGet
+
+    ) where
+
+import           Network.Google.AppsCalendar.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @calendar.colors.get@ method which the
+-- 'ColorsGet' request conforms to.
+type ColorsGetResource =
+     "calendar" :>
+       "v3" :>
+         "colors" :>
+           QueryParam "alt" AltJSON :> Get '[JSON] Colors
+
+-- | Returns the color definitions for calendars and events.
+--
+-- /See:/ 'colorsGet' smart constructor.
+data ColorsGet =
+    ColorsGet
+    deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ColorsGet' with the minimum fields required to make a request.
+--
+colorsGet
+    :: ColorsGet
+colorsGet = ColorsGet
+
+instance GoogleRequest ColorsGet where
+        type Rs ColorsGet = Colors
+        requestClient ColorsGet{}
+          = go (Just AltJSON) appsCalendarService
+          where go
+                  = buildClient (Proxy :: Proxy ColorsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Calendar/Events/Delete.hs b/gen/Network/Google/Resource/Calendar/Events/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Calendar/Events/Delete.hs
@@ -0,0 +1,112 @@
+{-# 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.Calendar.Events.Delete
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes an event.
+--
+-- /See:/ <https://developers.google.com/google-apps/calendar/firstapp Calendar API Reference> for @calendar.events.delete@.
+module Network.Google.Resource.Calendar.Events.Delete
+    (
+    -- * REST Resource
+      EventsDeleteResource
+
+    -- * Creating a Request
+    , eventsDelete
+    , EventsDelete
+
+    -- * Request Lenses
+    , edCalendarId
+    , edSendNotifications
+    , edEventId
+    ) where
+
+import           Network.Google.AppsCalendar.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @calendar.events.delete@ method which the
+-- 'EventsDelete' request conforms to.
+type EventsDeleteResource =
+     "calendar" :>
+       "v3" :>
+         "calendars" :>
+           Capture "calendarId" Text :>
+             "events" :>
+               Capture "eventId" Text :>
+                 QueryParam "sendNotifications" Bool :>
+                   QueryParam "alt" AltJSON :> Delete '[JSON] ()
+
+-- | Deletes an event.
+--
+-- /See:/ 'eventsDelete' smart constructor.
+data EventsDelete = EventsDelete
+    { _edCalendarId        :: !Text
+    , _edSendNotifications :: !(Maybe Bool)
+    , _edEventId           :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EventsDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'edCalendarId'
+--
+-- * 'edSendNotifications'
+--
+-- * 'edEventId'
+eventsDelete
+    :: Text -- ^ 'edCalendarId'
+    -> Text -- ^ 'edEventId'
+    -> EventsDelete
+eventsDelete pEdCalendarId_ pEdEventId_ =
+    EventsDelete
+    { _edCalendarId = pEdCalendarId_
+    , _edSendNotifications = Nothing
+    , _edEventId = pEdEventId_
+    }
+
+-- | Calendar identifier. To retrieve calendar IDs call the calendarList.list
+-- method. If you want to access the primary calendar of the currently
+-- logged in user, use the \"primary\" keyword.
+edCalendarId :: Lens' EventsDelete Text
+edCalendarId
+  = lens _edCalendarId (\ s a -> s{_edCalendarId = a})
+
+-- | Whether to send notifications about the deletion of the event. Optional.
+-- The default is False.
+edSendNotifications :: Lens' EventsDelete (Maybe Bool)
+edSendNotifications
+  = lens _edSendNotifications
+      (\ s a -> s{_edSendNotifications = a})
+
+-- | Event identifier.
+edEventId :: Lens' EventsDelete Text
+edEventId
+  = lens _edEventId (\ s a -> s{_edEventId = a})
+
+instance GoogleRequest EventsDelete where
+        type Rs EventsDelete = ()
+        requestClient EventsDelete{..}
+          = go _edCalendarId _edEventId _edSendNotifications
+              (Just AltJSON)
+              appsCalendarService
+          where go
+                  = buildClient (Proxy :: Proxy EventsDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Calendar/Events/Get.hs b/gen/Network/Google/Resource/Calendar/Events/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Calendar/Events/Get.hs
@@ -0,0 +1,145 @@
+{-# 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.Calendar.Events.Get
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns an event.
+--
+-- /See:/ <https://developers.google.com/google-apps/calendar/firstapp Calendar API Reference> for @calendar.events.get@.
+module Network.Google.Resource.Calendar.Events.Get
+    (
+    -- * REST Resource
+      EventsGetResource
+
+    -- * Creating a Request
+    , eventsGet
+    , EventsGet
+
+    -- * Request Lenses
+    , egCalendarId
+    , egMaxAttendees
+    , egTimeZone
+    , egAlwaysIncludeEmail
+    , egEventId
+    ) where
+
+import           Network.Google.AppsCalendar.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @calendar.events.get@ method which the
+-- 'EventsGet' request conforms to.
+type EventsGetResource =
+     "calendar" :>
+       "v3" :>
+         "calendars" :>
+           Capture "calendarId" Text :>
+             "events" :>
+               Capture "eventId" Text :>
+                 QueryParam "maxAttendees" (Textual Int32) :>
+                   QueryParam "timeZone" Text :>
+                     QueryParam "alwaysIncludeEmail" Bool :>
+                       QueryParam "alt" AltJSON :> Get '[JSON] Event
+
+-- | Returns an event.
+--
+-- /See:/ 'eventsGet' smart constructor.
+data EventsGet = EventsGet
+    { _egCalendarId         :: !Text
+    , _egMaxAttendees       :: !(Maybe (Textual Int32))
+    , _egTimeZone           :: !(Maybe Text)
+    , _egAlwaysIncludeEmail :: !(Maybe Bool)
+    , _egEventId            :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EventsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'egCalendarId'
+--
+-- * 'egMaxAttendees'
+--
+-- * 'egTimeZone'
+--
+-- * 'egAlwaysIncludeEmail'
+--
+-- * 'egEventId'
+eventsGet
+    :: Text -- ^ 'egCalendarId'
+    -> Text -- ^ 'egEventId'
+    -> EventsGet
+eventsGet pEgCalendarId_ pEgEventId_ =
+    EventsGet
+    { _egCalendarId = pEgCalendarId_
+    , _egMaxAttendees = Nothing
+    , _egTimeZone = Nothing
+    , _egAlwaysIncludeEmail = Nothing
+    , _egEventId = pEgEventId_
+    }
+
+-- | Calendar identifier. To retrieve calendar IDs call the calendarList.list
+-- method. If you want to access the primary calendar of the currently
+-- logged in user, use the \"primary\" keyword.
+egCalendarId :: Lens' EventsGet Text
+egCalendarId
+  = lens _egCalendarId (\ s a -> s{_egCalendarId = a})
+
+-- | The maximum number of attendees to include in the response. If there are
+-- more than the specified number of attendees, only the participant is
+-- returned. Optional.
+egMaxAttendees :: Lens' EventsGet (Maybe Int32)
+egMaxAttendees
+  = lens _egMaxAttendees
+      (\ s a -> s{_egMaxAttendees = a})
+      . mapping _Coerce
+
+-- | Time zone used in the response. Optional. The default is the time zone
+-- of the calendar.
+egTimeZone :: Lens' EventsGet (Maybe Text)
+egTimeZone
+  = lens _egTimeZone (\ s a -> s{_egTimeZone = a})
+
+-- | Whether to always include a value in the email field for the organizer,
+-- creator and attendees, even if no real email is available (i.e. a
+-- generated, non-working value will be provided). The use of this option
+-- is discouraged and should only be used by clients which cannot handle
+-- the absence of an email address value in the mentioned places. Optional.
+-- The default is False.
+egAlwaysIncludeEmail :: Lens' EventsGet (Maybe Bool)
+egAlwaysIncludeEmail
+  = lens _egAlwaysIncludeEmail
+      (\ s a -> s{_egAlwaysIncludeEmail = a})
+
+-- | Event identifier.
+egEventId :: Lens' EventsGet Text
+egEventId
+  = lens _egEventId (\ s a -> s{_egEventId = a})
+
+instance GoogleRequest EventsGet where
+        type Rs EventsGet = Event
+        requestClient EventsGet{..}
+          = go _egCalendarId _egEventId _egMaxAttendees
+              _egTimeZone
+              _egAlwaysIncludeEmail
+              (Just AltJSON)
+              appsCalendarService
+          where go
+                  = buildClient (Proxy :: Proxy EventsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Calendar/Events/Import.hs b/gen/Network/Google/Resource/Calendar/Events/Import.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Calendar/Events/Import.hs
@@ -0,0 +1,116 @@
+{-# 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.Calendar.Events.Import
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Imports an event. This operation is used to add a private copy of an
+-- existing event to a calendar.
+--
+-- /See:/ <https://developers.google.com/google-apps/calendar/firstapp Calendar API Reference> for @calendar.events.import@.
+module Network.Google.Resource.Calendar.Events.Import
+    (
+    -- * REST Resource
+      EventsImportResource
+
+    -- * Creating a Request
+    , eventsImport
+    , EventsImport
+
+    -- * Request Lenses
+    , eiCalendarId
+    , eiPayload
+    , eiSupportsAttachments
+    ) where
+
+import           Network.Google.AppsCalendar.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @calendar.events.import@ method which the
+-- 'EventsImport' request conforms to.
+type EventsImportResource =
+     "calendar" :>
+       "v3" :>
+         "calendars" :>
+           Capture "calendarId" Text :>
+             "events" :>
+               "import" :>
+                 QueryParam "supportsAttachments" Bool :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON] Event :> Post '[JSON] Event
+
+-- | Imports an event. This operation is used to add a private copy of an
+-- existing event to a calendar.
+--
+-- /See:/ 'eventsImport' smart constructor.
+data EventsImport = EventsImport
+    { _eiCalendarId          :: !Text
+    , _eiPayload             :: !Event
+    , _eiSupportsAttachments :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EventsImport' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'eiCalendarId'
+--
+-- * 'eiPayload'
+--
+-- * 'eiSupportsAttachments'
+eventsImport
+    :: Text -- ^ 'eiCalendarId'
+    -> Event -- ^ 'eiPayload'
+    -> EventsImport
+eventsImport pEiCalendarId_ pEiPayload_ =
+    EventsImport
+    { _eiCalendarId = pEiCalendarId_
+    , _eiPayload = pEiPayload_
+    , _eiSupportsAttachments = Nothing
+    }
+
+-- | Calendar identifier. To retrieve calendar IDs call the calendarList.list
+-- method. If you want to access the primary calendar of the currently
+-- logged in user, use the \"primary\" keyword.
+eiCalendarId :: Lens' EventsImport Text
+eiCalendarId
+  = lens _eiCalendarId (\ s a -> s{_eiCalendarId = a})
+
+-- | Multipart request metadata.
+eiPayload :: Lens' EventsImport Event
+eiPayload
+  = lens _eiPayload (\ s a -> s{_eiPayload = a})
+
+-- | Whether API client performing operation supports event attachments.
+-- Optional. The default is False.
+eiSupportsAttachments :: Lens' EventsImport (Maybe Bool)
+eiSupportsAttachments
+  = lens _eiSupportsAttachments
+      (\ s a -> s{_eiSupportsAttachments = a})
+
+instance GoogleRequest EventsImport where
+        type Rs EventsImport = Event
+        requestClient EventsImport{..}
+          = go _eiCalendarId _eiSupportsAttachments
+              (Just AltJSON)
+              _eiPayload
+              appsCalendarService
+          where go
+                  = buildClient (Proxy :: Proxy EventsImportResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Calendar/Events/Insert.hs b/gen/Network/Google/Resource/Calendar/Events/Insert.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Calendar/Events/Insert.hs
@@ -0,0 +1,144 @@
+{-# 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.Calendar.Events.Insert
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates an event.
+--
+-- /See:/ <https://developers.google.com/google-apps/calendar/firstapp Calendar API Reference> for @calendar.events.insert@.
+module Network.Google.Resource.Calendar.Events.Insert
+    (
+    -- * REST Resource
+      EventsInsertResource
+
+    -- * Creating a Request
+    , eventsInsert
+    , EventsInsert
+
+    -- * Request Lenses
+    , eveCalendarId
+    , evePayload
+    , eveMaxAttendees
+    , eveSendNotifications
+    , eveSupportsAttachments
+    ) where
+
+import           Network.Google.AppsCalendar.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @calendar.events.insert@ method which the
+-- 'EventsInsert' request conforms to.
+type EventsInsertResource =
+     "calendar" :>
+       "v3" :>
+         "calendars" :>
+           Capture "calendarId" Text :>
+             "events" :>
+               QueryParam "maxAttendees" (Textual Int32) :>
+                 QueryParam "sendNotifications" Bool :>
+                   QueryParam "supportsAttachments" Bool :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON] Event :> Post '[JSON] Event
+
+-- | Creates an event.
+--
+-- /See:/ 'eventsInsert' smart constructor.
+data EventsInsert = EventsInsert
+    { _eveCalendarId          :: !Text
+    , _evePayload             :: !Event
+    , _eveMaxAttendees        :: !(Maybe (Textual Int32))
+    , _eveSendNotifications   :: !(Maybe Bool)
+    , _eveSupportsAttachments :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EventsInsert' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'eveCalendarId'
+--
+-- * 'evePayload'
+--
+-- * 'eveMaxAttendees'
+--
+-- * 'eveSendNotifications'
+--
+-- * 'eveSupportsAttachments'
+eventsInsert
+    :: Text -- ^ 'eveCalendarId'
+    -> Event -- ^ 'evePayload'
+    -> EventsInsert
+eventsInsert pEveCalendarId_ pEvePayload_ =
+    EventsInsert
+    { _eveCalendarId = pEveCalendarId_
+    , _evePayload = pEvePayload_
+    , _eveMaxAttendees = Nothing
+    , _eveSendNotifications = Nothing
+    , _eveSupportsAttachments = Nothing
+    }
+
+-- | Calendar identifier. To retrieve calendar IDs call the calendarList.list
+-- method. If you want to access the primary calendar of the currently
+-- logged in user, use the \"primary\" keyword.
+eveCalendarId :: Lens' EventsInsert Text
+eveCalendarId
+  = lens _eveCalendarId
+      (\ s a -> s{_eveCalendarId = a})
+
+-- | Multipart request metadata.
+evePayload :: Lens' EventsInsert Event
+evePayload
+  = lens _evePayload (\ s a -> s{_evePayload = a})
+
+-- | The maximum number of attendees to include in the response. If there are
+-- more than the specified number of attendees, only the participant is
+-- returned. Optional.
+eveMaxAttendees :: Lens' EventsInsert (Maybe Int32)
+eveMaxAttendees
+  = lens _eveMaxAttendees
+      (\ s a -> s{_eveMaxAttendees = a})
+      . mapping _Coerce
+
+-- | Whether to send notifications about the creation of the new event.
+-- Optional. The default is False.
+eveSendNotifications :: Lens' EventsInsert (Maybe Bool)
+eveSendNotifications
+  = lens _eveSendNotifications
+      (\ s a -> s{_eveSendNotifications = a})
+
+-- | Whether API client performing operation supports event attachments.
+-- Optional. The default is False.
+eveSupportsAttachments :: Lens' EventsInsert (Maybe Bool)
+eveSupportsAttachments
+  = lens _eveSupportsAttachments
+      (\ s a -> s{_eveSupportsAttachments = a})
+
+instance GoogleRequest EventsInsert where
+        type Rs EventsInsert = Event
+        requestClient EventsInsert{..}
+          = go _eveCalendarId _eveMaxAttendees
+              _eveSendNotifications
+              _eveSupportsAttachments
+              (Just AltJSON)
+              _evePayload
+              appsCalendarService
+          where go
+                  = buildClient (Proxy :: Proxy EventsInsertResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Calendar/Events/Instances.hs b/gen/Network/Google/Resource/Calendar/Events/Instances.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Calendar/Events/Instances.hs
@@ -0,0 +1,230 @@
+{-# 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.Calendar.Events.Instances
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns instances of the specified recurring event.
+--
+-- /See:/ <https://developers.google.com/google-apps/calendar/firstapp Calendar API Reference> for @calendar.events.instances@.
+module Network.Google.Resource.Calendar.Events.Instances
+    (
+    -- * REST Resource
+      EventsInstancesResource
+
+    -- * Creating a Request
+    , eventsInstances
+    , EventsInstances
+
+    -- * Request Lenses
+    , eCalendarId
+    , eTimeMin
+    , eShowDeleted
+    , eOriginalStart
+    , eMaxAttendees
+    , ePageToken
+    , eTimeZone
+    , eMaxResults
+    , eAlwaysIncludeEmail
+    , eTimeMax
+    , eEventId
+    ) where
+
+import           Network.Google.AppsCalendar.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @calendar.events.instances@ method which the
+-- 'EventsInstances' request conforms to.
+type EventsInstancesResource =
+     "calendar" :>
+       "v3" :>
+         "calendars" :>
+           Capture "calendarId" Text :>
+             "events" :>
+               Capture "eventId" Text :>
+                 "instances" :>
+                   QueryParam "timeMin" DateTime' :>
+                     QueryParam "showDeleted" Bool :>
+                       QueryParam "originalStart" Text :>
+                         QueryParam "maxAttendees" (Textual Int32) :>
+                           QueryParam "pageToken" Text :>
+                             QueryParam "timeZone" Text :>
+                               QueryParam "maxResults" (Textual Int32) :>
+                                 QueryParam "alwaysIncludeEmail" Bool :>
+                                   QueryParam "timeMax" DateTime' :>
+                                     QueryParam "alt" AltJSON :>
+                                       Get '[JSON] Events
+
+-- | Returns instances of the specified recurring event.
+--
+-- /See:/ 'eventsInstances' smart constructor.
+data EventsInstances = EventsInstances
+    { _eCalendarId         :: !Text
+    , _eTimeMin            :: !(Maybe DateTime')
+    , _eShowDeleted        :: !(Maybe Bool)
+    , _eOriginalStart      :: !(Maybe Text)
+    , _eMaxAttendees       :: !(Maybe (Textual Int32))
+    , _ePageToken          :: !(Maybe Text)
+    , _eTimeZone           :: !(Maybe Text)
+    , _eMaxResults         :: !(Maybe (Textual Int32))
+    , _eAlwaysIncludeEmail :: !(Maybe Bool)
+    , _eTimeMax            :: !(Maybe DateTime')
+    , _eEventId            :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EventsInstances' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'eCalendarId'
+--
+-- * 'eTimeMin'
+--
+-- * 'eShowDeleted'
+--
+-- * 'eOriginalStart'
+--
+-- * 'eMaxAttendees'
+--
+-- * 'ePageToken'
+--
+-- * 'eTimeZone'
+--
+-- * 'eMaxResults'
+--
+-- * 'eAlwaysIncludeEmail'
+--
+-- * 'eTimeMax'
+--
+-- * 'eEventId'
+eventsInstances
+    :: Text -- ^ 'eCalendarId'
+    -> Text -- ^ 'eEventId'
+    -> EventsInstances
+eventsInstances pECalendarId_ pEEventId_ =
+    EventsInstances
+    { _eCalendarId = pECalendarId_
+    , _eTimeMin = Nothing
+    , _eShowDeleted = Nothing
+    , _eOriginalStart = Nothing
+    , _eMaxAttendees = Nothing
+    , _ePageToken = Nothing
+    , _eTimeZone = Nothing
+    , _eMaxResults = Nothing
+    , _eAlwaysIncludeEmail = Nothing
+    , _eTimeMax = Nothing
+    , _eEventId = pEEventId_
+    }
+
+-- | Calendar identifier. To retrieve calendar IDs call the calendarList.list
+-- method. If you want to access the primary calendar of the currently
+-- logged in user, use the \"primary\" keyword.
+eCalendarId :: Lens' EventsInstances Text
+eCalendarId
+  = lens _eCalendarId (\ s a -> s{_eCalendarId = a})
+
+-- | Lower bound (inclusive) for an event\'s end time to filter by. Optional.
+-- The default is not to filter by end time. Must be an RFC3339 timestamp
+-- with mandatory time zone offset.
+eTimeMin :: Lens' EventsInstances (Maybe UTCTime)
+eTimeMin
+  = lens _eTimeMin (\ s a -> s{_eTimeMin = a}) .
+      mapping _DateTime
+
+-- | Whether to include deleted events (with status equals \"cancelled\") in
+-- the result. Cancelled instances of recurring events will still be
+-- included if singleEvents is False. Optional. The default is False.
+eShowDeleted :: Lens' EventsInstances (Maybe Bool)
+eShowDeleted
+  = lens _eShowDeleted (\ s a -> s{_eShowDeleted = a})
+
+-- | The original start time of the instance in the result. Optional.
+eOriginalStart :: Lens' EventsInstances (Maybe Text)
+eOriginalStart
+  = lens _eOriginalStart
+      (\ s a -> s{_eOriginalStart = a})
+
+-- | The maximum number of attendees to include in the response. If there are
+-- more than the specified number of attendees, only the participant is
+-- returned. Optional.
+eMaxAttendees :: Lens' EventsInstances (Maybe Int32)
+eMaxAttendees
+  = lens _eMaxAttendees
+      (\ s a -> s{_eMaxAttendees = a})
+      . mapping _Coerce
+
+-- | Token specifying which result page to return. Optional.
+ePageToken :: Lens' EventsInstances (Maybe Text)
+ePageToken
+  = lens _ePageToken (\ s a -> s{_ePageToken = a})
+
+-- | Time zone used in the response. Optional. The default is the time zone
+-- of the calendar.
+eTimeZone :: Lens' EventsInstances (Maybe Text)
+eTimeZone
+  = lens _eTimeZone (\ s a -> s{_eTimeZone = a})
+
+-- | Maximum number of events returned on one result page. By default the
+-- value is 250 events. The page size can never be larger than 2500 events.
+-- Optional.
+eMaxResults :: Lens' EventsInstances (Maybe Int32)
+eMaxResults
+  = lens _eMaxResults (\ s a -> s{_eMaxResults = a}) .
+      mapping _Coerce
+
+-- | Whether to always include a value in the email field for the organizer,
+-- creator and attendees, even if no real email is available (i.e. a
+-- generated, non-working value will be provided). The use of this option
+-- is discouraged and should only be used by clients which cannot handle
+-- the absence of an email address value in the mentioned places. Optional.
+-- The default is False.
+eAlwaysIncludeEmail :: Lens' EventsInstances (Maybe Bool)
+eAlwaysIncludeEmail
+  = lens _eAlwaysIncludeEmail
+      (\ s a -> s{_eAlwaysIncludeEmail = a})
+
+-- | Upper bound (exclusive) for an event\'s start time to filter by.
+-- Optional. The default is not to filter by start time. Must be an RFC3339
+-- timestamp with mandatory time zone offset.
+eTimeMax :: Lens' EventsInstances (Maybe UTCTime)
+eTimeMax
+  = lens _eTimeMax (\ s a -> s{_eTimeMax = a}) .
+      mapping _DateTime
+
+-- | Recurring event identifier.
+eEventId :: Lens' EventsInstances Text
+eEventId = lens _eEventId (\ s a -> s{_eEventId = a})
+
+instance GoogleRequest EventsInstances where
+        type Rs EventsInstances = Events
+        requestClient EventsInstances{..}
+          = go _eCalendarId _eEventId _eTimeMin _eShowDeleted
+              _eOriginalStart
+              _eMaxAttendees
+              _ePageToken
+              _eTimeZone
+              _eMaxResults
+              _eAlwaysIncludeEmail
+              _eTimeMax
+              (Just AltJSON)
+              appsCalendarService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy EventsInstancesResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Calendar/Events/List.hs b/gen/Network/Google/Resource/Calendar/Events/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Calendar/Events/List.hs
@@ -0,0 +1,356 @@
+{-# 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.Calendar.Events.List
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns events on the specified calendar.
+--
+-- /See:/ <https://developers.google.com/google-apps/calendar/firstapp Calendar API Reference> for @calendar.events.list@.
+module Network.Google.Resource.Calendar.Events.List
+    (
+    -- * REST Resource
+      EventsListResource
+
+    -- * Creating a Request
+    , eventsList
+    , EventsList
+
+    -- * Request Lenses
+    , elSyncToken
+    , elCalendarId
+    , elTimeMin
+    , elOrderBy
+    , elSingleEvents
+    , elPrivateExtendedProperty
+    , elShowDeleted
+    , elQ
+    , elSharedExtendedProperty
+    , elMaxAttendees
+    , elICalUId
+    , elUpdatedMin
+    , elPageToken
+    , elTimeZone
+    , elShowHiddenInvitations
+    , elMaxResults
+    , elAlwaysIncludeEmail
+    , elTimeMax
+    ) where
+
+import           Network.Google.AppsCalendar.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @calendar.events.list@ method which the
+-- 'EventsList' request conforms to.
+type EventsListResource =
+     "calendar" :>
+       "v3" :>
+         "calendars" :>
+           Capture "calendarId" Text :>
+             "events" :>
+               QueryParam "syncToken" Text :>
+                 QueryParam "timeMin" DateTime' :>
+                   QueryParam "orderBy" EventsListOrderBy :>
+                     QueryParam "singleEvents" Bool :>
+                       QueryParams "privateExtendedProperty" Text :>
+                         QueryParam "showDeleted" Bool :>
+                           QueryParam "q" Text :>
+                             QueryParams "sharedExtendedProperty" Text :>
+                               QueryParam "maxAttendees" (Textual Int32) :>
+                                 QueryParam "iCalUID" Text :>
+                                   QueryParam "updatedMin" DateTime' :>
+                                     QueryParam "pageToken" Text :>
+                                       QueryParam "timeZone" Text :>
+                                         QueryParam "showHiddenInvitations" Bool
+                                           :>
+                                           QueryParam "maxResults"
+                                             (Textual Int32)
+                                             :>
+                                             QueryParam "alwaysIncludeEmail"
+                                               Bool
+                                               :>
+                                               QueryParam "timeMax" DateTime' :>
+                                                 QueryParam "alt" AltJSON :>
+                                                   Get '[JSON] Events
+
+-- | Returns events on the specified calendar.
+--
+-- /See:/ 'eventsList' smart constructor.
+data EventsList = EventsList
+    { _elSyncToken               :: !(Maybe Text)
+    , _elCalendarId              :: !Text
+    , _elTimeMin                 :: !(Maybe DateTime')
+    , _elOrderBy                 :: !(Maybe EventsListOrderBy)
+    , _elSingleEvents            :: !(Maybe Bool)
+    , _elPrivateExtendedProperty :: !(Maybe [Text])
+    , _elShowDeleted             :: !(Maybe Bool)
+    , _elQ                       :: !(Maybe Text)
+    , _elSharedExtendedProperty  :: !(Maybe [Text])
+    , _elMaxAttendees            :: !(Maybe (Textual Int32))
+    , _elICalUId                 :: !(Maybe Text)
+    , _elUpdatedMin              :: !(Maybe DateTime')
+    , _elPageToken               :: !(Maybe Text)
+    , _elTimeZone                :: !(Maybe Text)
+    , _elShowHiddenInvitations   :: !(Maybe Bool)
+    , _elMaxResults              :: !(Maybe (Textual Int32))
+    , _elAlwaysIncludeEmail      :: !(Maybe Bool)
+    , _elTimeMax                 :: !(Maybe DateTime')
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EventsList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'elSyncToken'
+--
+-- * 'elCalendarId'
+--
+-- * 'elTimeMin'
+--
+-- * 'elOrderBy'
+--
+-- * 'elSingleEvents'
+--
+-- * 'elPrivateExtendedProperty'
+--
+-- * 'elShowDeleted'
+--
+-- * 'elQ'
+--
+-- * 'elSharedExtendedProperty'
+--
+-- * 'elMaxAttendees'
+--
+-- * 'elICalUId'
+--
+-- * 'elUpdatedMin'
+--
+-- * 'elPageToken'
+--
+-- * 'elTimeZone'
+--
+-- * 'elShowHiddenInvitations'
+--
+-- * 'elMaxResults'
+--
+-- * 'elAlwaysIncludeEmail'
+--
+-- * 'elTimeMax'
+eventsList
+    :: Text -- ^ 'elCalendarId'
+    -> EventsList
+eventsList pElCalendarId_ =
+    EventsList
+    { _elSyncToken = Nothing
+    , _elCalendarId = pElCalendarId_
+    , _elTimeMin = Nothing
+    , _elOrderBy = Nothing
+    , _elSingleEvents = Nothing
+    , _elPrivateExtendedProperty = Nothing
+    , _elShowDeleted = Nothing
+    , _elQ = Nothing
+    , _elSharedExtendedProperty = Nothing
+    , _elMaxAttendees = Nothing
+    , _elICalUId = Nothing
+    , _elUpdatedMin = Nothing
+    , _elPageToken = Nothing
+    , _elTimeZone = Nothing
+    , _elShowHiddenInvitations = Nothing
+    , _elMaxResults = Nothing
+    , _elAlwaysIncludeEmail = Nothing
+    , _elTimeMax = Nothing
+    }
+
+-- | Token obtained from the nextSyncToken field returned on the last page of
+-- results from the previous list request. It makes the result of this list
+-- request contain only entries that have changed since then. All events
+-- deleted since the previous list request will always be in the result set
+-- and it is not allowed to set showDeleted to False. There are several
+-- query parameters that cannot be specified together with nextSyncToken to
+-- ensure consistency of the client state. These are: - iCalUID - orderBy -
+-- privateExtendedProperty - q - sharedExtendedProperty - timeMin - timeMax
+-- - updatedMin If the syncToken expires, the server will respond with a
+-- 410 GONE response code and the client should clear its storage and
+-- perform a full synchronization without any syncToken. Learn more about
+-- incremental synchronization. Optional. The default is to return all
+-- entries.
+elSyncToken :: Lens' EventsList (Maybe Text)
+elSyncToken
+  = lens _elSyncToken (\ s a -> s{_elSyncToken = a})
+
+-- | Calendar identifier. To retrieve calendar IDs call the calendarList.list
+-- method. If you want to access the primary calendar of the currently
+-- logged in user, use the \"primary\" keyword.
+elCalendarId :: Lens' EventsList Text
+elCalendarId
+  = lens _elCalendarId (\ s a -> s{_elCalendarId = a})
+
+-- | Lower bound (inclusive) for an event\'s end time to filter by. Optional.
+-- The default is not to filter by end time. Must be an RFC3339 timestamp
+-- with mandatory time zone offset, e.g., 2011-06-03T10:00:00-07:00,
+-- 2011-06-03T10:00:00Z. Milliseconds may be provided but will be ignored.
+elTimeMin :: Lens' EventsList (Maybe UTCTime)
+elTimeMin
+  = lens _elTimeMin (\ s a -> s{_elTimeMin = a}) .
+      mapping _DateTime
+
+-- | The order of the events returned in the result. Optional. The default is
+-- an unspecified, stable order.
+elOrderBy :: Lens' EventsList (Maybe EventsListOrderBy)
+elOrderBy
+  = lens _elOrderBy (\ s a -> s{_elOrderBy = a})
+
+-- | Whether to expand recurring events into instances and only return single
+-- one-off events and instances of recurring events, but not the underlying
+-- recurring events themselves. Optional. The default is False.
+elSingleEvents :: Lens' EventsList (Maybe Bool)
+elSingleEvents
+  = lens _elSingleEvents
+      (\ s a -> s{_elSingleEvents = a})
+
+-- | Extended properties constraint specified as propertyName=value. Matches
+-- only private properties. This parameter might be repeated multiple times
+-- to return events that match all given constraints.
+elPrivateExtendedProperty :: Lens' EventsList [Text]
+elPrivateExtendedProperty
+  = lens _elPrivateExtendedProperty
+      (\ s a -> s{_elPrivateExtendedProperty = a})
+      . _Default
+      . _Coerce
+
+-- | Whether to include deleted events (with status equals \"cancelled\") in
+-- the result. Cancelled instances of recurring events (but not the
+-- underlying recurring event) will still be included if showDeleted and
+-- singleEvents are both False. If showDeleted and singleEvents are both
+-- True, only single instances of deleted events (but not the underlying
+-- recurring events) are returned. Optional. The default is False.
+elShowDeleted :: Lens' EventsList (Maybe Bool)
+elShowDeleted
+  = lens _elShowDeleted
+      (\ s a -> s{_elShowDeleted = a})
+
+-- | Free text search terms to find events that match these terms in any
+-- field, except for extended properties. Optional.
+elQ :: Lens' EventsList (Maybe Text)
+elQ = lens _elQ (\ s a -> s{_elQ = a})
+
+-- | Extended properties constraint specified as propertyName=value. Matches
+-- only shared properties. This parameter might be repeated multiple times
+-- to return events that match all given constraints.
+elSharedExtendedProperty :: Lens' EventsList [Text]
+elSharedExtendedProperty
+  = lens _elSharedExtendedProperty
+      (\ s a -> s{_elSharedExtendedProperty = a})
+      . _Default
+      . _Coerce
+
+-- | The maximum number of attendees to include in the response. If there are
+-- more than the specified number of attendees, only the participant is
+-- returned. Optional.
+elMaxAttendees :: Lens' EventsList (Maybe Int32)
+elMaxAttendees
+  = lens _elMaxAttendees
+      (\ s a -> s{_elMaxAttendees = a})
+      . mapping _Coerce
+
+-- | Specifies event ID in the iCalendar format to be included in the
+-- response. Optional.
+elICalUId :: Lens' EventsList (Maybe Text)
+elICalUId
+  = lens _elICalUId (\ s a -> s{_elICalUId = a})
+
+-- | Lower bound for an event\'s last modification time (as a RFC3339
+-- timestamp) to filter by. When specified, entries deleted since this time
+-- will always be included regardless of showDeleted. Optional. The default
+-- is not to filter by last modification time.
+elUpdatedMin :: Lens' EventsList (Maybe UTCTime)
+elUpdatedMin
+  = lens _elUpdatedMin (\ s a -> s{_elUpdatedMin = a})
+      . mapping _DateTime
+
+-- | Token specifying which result page to return. Optional.
+elPageToken :: Lens' EventsList (Maybe Text)
+elPageToken
+  = lens _elPageToken (\ s a -> s{_elPageToken = a})
+
+-- | Time zone used in the response. Optional. The default is the time zone
+-- of the calendar.
+elTimeZone :: Lens' EventsList (Maybe Text)
+elTimeZone
+  = lens _elTimeZone (\ s a -> s{_elTimeZone = a})
+
+-- | Whether to include hidden invitations in the result. Optional. The
+-- default is False.
+elShowHiddenInvitations :: Lens' EventsList (Maybe Bool)
+elShowHiddenInvitations
+  = lens _elShowHiddenInvitations
+      (\ s a -> s{_elShowHiddenInvitations = a})
+
+-- | Maximum number of events returned on one result page. By default the
+-- value is 250 events. The page size can never be larger than 2500 events.
+-- Optional.
+elMaxResults :: Lens' EventsList (Maybe Int32)
+elMaxResults
+  = lens _elMaxResults (\ s a -> s{_elMaxResults = a})
+      . mapping _Coerce
+
+-- | Whether to always include a value in the email field for the organizer,
+-- creator and attendees, even if no real email is available (i.e. a
+-- generated, non-working value will be provided). The use of this option
+-- is discouraged and should only be used by clients which cannot handle
+-- the absence of an email address value in the mentioned places. Optional.
+-- The default is False.
+elAlwaysIncludeEmail :: Lens' EventsList (Maybe Bool)
+elAlwaysIncludeEmail
+  = lens _elAlwaysIncludeEmail
+      (\ s a -> s{_elAlwaysIncludeEmail = a})
+
+-- | Upper bound (exclusive) for an event\'s start time to filter by.
+-- Optional. The default is not to filter by start time. Must be an RFC3339
+-- timestamp with mandatory time zone offset, e.g.,
+-- 2011-06-03T10:00:00-07:00, 2011-06-03T10:00:00Z. Milliseconds may be
+-- provided but will be ignored.
+elTimeMax :: Lens' EventsList (Maybe UTCTime)
+elTimeMax
+  = lens _elTimeMax (\ s a -> s{_elTimeMax = a}) .
+      mapping _DateTime
+
+instance GoogleRequest EventsList where
+        type Rs EventsList = Events
+        requestClient EventsList{..}
+          = go _elCalendarId _elSyncToken _elTimeMin _elOrderBy
+              _elSingleEvents
+              (_elPrivateExtendedProperty ^. _Default)
+              _elShowDeleted
+              _elQ
+              (_elSharedExtendedProperty ^. _Default)
+              _elMaxAttendees
+              _elICalUId
+              _elUpdatedMin
+              _elPageToken
+              _elTimeZone
+              _elShowHiddenInvitations
+              _elMaxResults
+              _elAlwaysIncludeEmail
+              _elTimeMax
+              (Just AltJSON)
+              appsCalendarService
+          where go
+                  = buildClient (Proxy :: Proxy EventsListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Calendar/Events/Move.hs b/gen/Network/Google/Resource/Calendar/Events/Move.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Calendar/Events/Move.hs
@@ -0,0 +1,127 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Calendar.Events.Move
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Moves an event to another calendar, i.e. changes an event\'s organizer.
+--
+-- /See:/ <https://developers.google.com/google-apps/calendar/firstapp Calendar API Reference> for @calendar.events.move@.
+module Network.Google.Resource.Calendar.Events.Move
+    (
+    -- * REST Resource
+      EventsMoveResource
+
+    -- * Creating a Request
+    , eventsMove
+    , EventsMove
+
+    -- * Request Lenses
+    , emDestination
+    , emCalendarId
+    , emSendNotifications
+    , emEventId
+    ) where
+
+import           Network.Google.AppsCalendar.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @calendar.events.move@ method which the
+-- 'EventsMove' request conforms to.
+type EventsMoveResource =
+     "calendar" :>
+       "v3" :>
+         "calendars" :>
+           Capture "calendarId" Text :>
+             "events" :>
+               Capture "eventId" Text :>
+                 "move" :>
+                   QueryParam "destination" Text :>
+                     QueryParam "sendNotifications" Bool :>
+                       QueryParam "alt" AltJSON :> Post '[JSON] Event
+
+-- | Moves an event to another calendar, i.e. changes an event\'s organizer.
+--
+-- /See:/ 'eventsMove' smart constructor.
+data EventsMove = EventsMove
+    { _emDestination       :: !Text
+    , _emCalendarId        :: !Text
+    , _emSendNotifications :: !(Maybe Bool)
+    , _emEventId           :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EventsMove' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'emDestination'
+--
+-- * 'emCalendarId'
+--
+-- * 'emSendNotifications'
+--
+-- * 'emEventId'
+eventsMove
+    :: Text -- ^ 'emDestination'
+    -> Text -- ^ 'emCalendarId'
+    -> Text -- ^ 'emEventId'
+    -> EventsMove
+eventsMove pEmDestination_ pEmCalendarId_ pEmEventId_ =
+    EventsMove
+    { _emDestination = pEmDestination_
+    , _emCalendarId = pEmCalendarId_
+    , _emSendNotifications = Nothing
+    , _emEventId = pEmEventId_
+    }
+
+-- | Calendar identifier of the target calendar where the event is to be
+-- moved to.
+emDestination :: Lens' EventsMove Text
+emDestination
+  = lens _emDestination
+      (\ s a -> s{_emDestination = a})
+
+-- | Calendar identifier of the source calendar where the event currently is
+-- on.
+emCalendarId :: Lens' EventsMove Text
+emCalendarId
+  = lens _emCalendarId (\ s a -> s{_emCalendarId = a})
+
+-- | Whether to send notifications about the change of the event\'s
+-- organizer. Optional. The default is False.
+emSendNotifications :: Lens' EventsMove (Maybe Bool)
+emSendNotifications
+  = lens _emSendNotifications
+      (\ s a -> s{_emSendNotifications = a})
+
+-- | Event identifier.
+emEventId :: Lens' EventsMove Text
+emEventId
+  = lens _emEventId (\ s a -> s{_emEventId = a})
+
+instance GoogleRequest EventsMove where
+        type Rs EventsMove = Event
+        requestClient EventsMove{..}
+          = go _emCalendarId _emEventId (Just _emDestination)
+              _emSendNotifications
+              (Just AltJSON)
+              appsCalendarService
+          where go
+                  = buildClient (Proxy :: Proxy EventsMoveResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Calendar/Events/Patch.hs b/gen/Network/Google/Resource/Calendar/Events/Patch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Calendar/Events/Patch.hs
@@ -0,0 +1,173 @@
+{-# 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.Calendar.Events.Patch
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates an event. This method supports patch semantics.
+--
+-- /See:/ <https://developers.google.com/google-apps/calendar/firstapp Calendar API Reference> for @calendar.events.patch@.
+module Network.Google.Resource.Calendar.Events.Patch
+    (
+    -- * REST Resource
+      EventsPatchResource
+
+    -- * Creating a Request
+    , eventsPatch
+    , EventsPatch
+
+    -- * Request Lenses
+    , epCalendarId
+    , epPayload
+    , epMaxAttendees
+    , epSendNotifications
+    , epSupportsAttachments
+    , epAlwaysIncludeEmail
+    , epEventId
+    ) where
+
+import           Network.Google.AppsCalendar.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @calendar.events.patch@ method which the
+-- 'EventsPatch' request conforms to.
+type EventsPatchResource =
+     "calendar" :>
+       "v3" :>
+         "calendars" :>
+           Capture "calendarId" Text :>
+             "events" :>
+               Capture "eventId" Text :>
+                 QueryParam "maxAttendees" (Textual Int32) :>
+                   QueryParam "sendNotifications" Bool :>
+                     QueryParam "supportsAttachments" Bool :>
+                       QueryParam "alwaysIncludeEmail" Bool :>
+                         QueryParam "alt" AltJSON :>
+                           ReqBody '[JSON] Event :> Patch '[JSON] Event
+
+-- | Updates an event. This method supports patch semantics.
+--
+-- /See:/ 'eventsPatch' smart constructor.
+data EventsPatch = EventsPatch
+    { _epCalendarId          :: !Text
+    , _epPayload             :: !Event
+    , _epMaxAttendees        :: !(Maybe (Textual Int32))
+    , _epSendNotifications   :: !(Maybe Bool)
+    , _epSupportsAttachments :: !(Maybe Bool)
+    , _epAlwaysIncludeEmail  :: !(Maybe Bool)
+    , _epEventId             :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EventsPatch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'epCalendarId'
+--
+-- * 'epPayload'
+--
+-- * 'epMaxAttendees'
+--
+-- * 'epSendNotifications'
+--
+-- * 'epSupportsAttachments'
+--
+-- * 'epAlwaysIncludeEmail'
+--
+-- * 'epEventId'
+eventsPatch
+    :: Text -- ^ 'epCalendarId'
+    -> Event -- ^ 'epPayload'
+    -> Text -- ^ 'epEventId'
+    -> EventsPatch
+eventsPatch pEpCalendarId_ pEpPayload_ pEpEventId_ =
+    EventsPatch
+    { _epCalendarId = pEpCalendarId_
+    , _epPayload = pEpPayload_
+    , _epMaxAttendees = Nothing
+    , _epSendNotifications = Nothing
+    , _epSupportsAttachments = Nothing
+    , _epAlwaysIncludeEmail = Nothing
+    , _epEventId = pEpEventId_
+    }
+
+-- | Calendar identifier. To retrieve calendar IDs call the calendarList.list
+-- method. If you want to access the primary calendar of the currently
+-- logged in user, use the \"primary\" keyword.
+epCalendarId :: Lens' EventsPatch Text
+epCalendarId
+  = lens _epCalendarId (\ s a -> s{_epCalendarId = a})
+
+-- | Multipart request metadata.
+epPayload :: Lens' EventsPatch Event
+epPayload
+  = lens _epPayload (\ s a -> s{_epPayload = a})
+
+-- | The maximum number of attendees to include in the response. If there are
+-- more than the specified number of attendees, only the participant is
+-- returned. Optional.
+epMaxAttendees :: Lens' EventsPatch (Maybe Int32)
+epMaxAttendees
+  = lens _epMaxAttendees
+      (\ s a -> s{_epMaxAttendees = a})
+      . mapping _Coerce
+
+-- | Whether to send notifications about the event update (e.g. attendee\'s
+-- responses, title changes, etc.). Optional. The default is False.
+epSendNotifications :: Lens' EventsPatch (Maybe Bool)
+epSendNotifications
+  = lens _epSendNotifications
+      (\ s a -> s{_epSendNotifications = a})
+
+-- | Whether API client performing operation supports event attachments.
+-- Optional. The default is False.
+epSupportsAttachments :: Lens' EventsPatch (Maybe Bool)
+epSupportsAttachments
+  = lens _epSupportsAttachments
+      (\ s a -> s{_epSupportsAttachments = a})
+
+-- | Whether to always include a value in the email field for the organizer,
+-- creator and attendees, even if no real email is available (i.e. a
+-- generated, non-working value will be provided). The use of this option
+-- is discouraged and should only be used by clients which cannot handle
+-- the absence of an email address value in the mentioned places. Optional.
+-- The default is False.
+epAlwaysIncludeEmail :: Lens' EventsPatch (Maybe Bool)
+epAlwaysIncludeEmail
+  = lens _epAlwaysIncludeEmail
+      (\ s a -> s{_epAlwaysIncludeEmail = a})
+
+-- | Event identifier.
+epEventId :: Lens' EventsPatch Text
+epEventId
+  = lens _epEventId (\ s a -> s{_epEventId = a})
+
+instance GoogleRequest EventsPatch where
+        type Rs EventsPatch = Event
+        requestClient EventsPatch{..}
+          = go _epCalendarId _epEventId _epMaxAttendees
+              _epSendNotifications
+              _epSupportsAttachments
+              _epAlwaysIncludeEmail
+              (Just AltJSON)
+              _epPayload
+              appsCalendarService
+          where go
+                  = buildClient (Proxy :: Proxy EventsPatchResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Calendar/Events/QuickAdd.hs b/gen/Network/Google/Resource/Calendar/Events/QuickAdd.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Calendar/Events/QuickAdd.hs
@@ -0,0 +1,114 @@
+{-# 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.Calendar.Events.QuickAdd
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates an event based on a simple text string.
+--
+-- /See:/ <https://developers.google.com/google-apps/calendar/firstapp Calendar API Reference> for @calendar.events.quickAdd@.
+module Network.Google.Resource.Calendar.Events.QuickAdd
+    (
+    -- * REST Resource
+      EventsQuickAddResource
+
+    -- * Creating a Request
+    , eventsQuickAdd
+    , EventsQuickAdd
+
+    -- * Request Lenses
+    , eqaCalendarId
+    , eqaText
+    , eqaSendNotifications
+    ) where
+
+import           Network.Google.AppsCalendar.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @calendar.events.quickAdd@ method which the
+-- 'EventsQuickAdd' request conforms to.
+type EventsQuickAddResource =
+     "calendar" :>
+       "v3" :>
+         "calendars" :>
+           Capture "calendarId" Text :>
+             "events" :>
+               "quickAdd" :>
+                 QueryParam "text" Text :>
+                   QueryParam "sendNotifications" Bool :>
+                     QueryParam "alt" AltJSON :> Post '[JSON] Event
+
+-- | Creates an event based on a simple text string.
+--
+-- /See:/ 'eventsQuickAdd' smart constructor.
+data EventsQuickAdd = EventsQuickAdd
+    { _eqaCalendarId        :: !Text
+    , _eqaText              :: !Text
+    , _eqaSendNotifications :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EventsQuickAdd' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'eqaCalendarId'
+--
+-- * 'eqaText'
+--
+-- * 'eqaSendNotifications'
+eventsQuickAdd
+    :: Text -- ^ 'eqaCalendarId'
+    -> Text -- ^ 'eqaText'
+    -> EventsQuickAdd
+eventsQuickAdd pEqaCalendarId_ pEqaText_ =
+    EventsQuickAdd
+    { _eqaCalendarId = pEqaCalendarId_
+    , _eqaText = pEqaText_
+    , _eqaSendNotifications = Nothing
+    }
+
+-- | Calendar identifier. To retrieve calendar IDs call the calendarList.list
+-- method. If you want to access the primary calendar of the currently
+-- logged in user, use the \"primary\" keyword.
+eqaCalendarId :: Lens' EventsQuickAdd Text
+eqaCalendarId
+  = lens _eqaCalendarId
+      (\ s a -> s{_eqaCalendarId = a})
+
+-- | The text describing the event to be created.
+eqaText :: Lens' EventsQuickAdd Text
+eqaText = lens _eqaText (\ s a -> s{_eqaText = a})
+
+-- | Whether to send notifications about the creation of the event. Optional.
+-- The default is False.
+eqaSendNotifications :: Lens' EventsQuickAdd (Maybe Bool)
+eqaSendNotifications
+  = lens _eqaSendNotifications
+      (\ s a -> s{_eqaSendNotifications = a})
+
+instance GoogleRequest EventsQuickAdd where
+        type Rs EventsQuickAdd = Event
+        requestClient EventsQuickAdd{..}
+          = go _eqaCalendarId (Just _eqaText)
+              _eqaSendNotifications
+              (Just AltJSON)
+              appsCalendarService
+          where go
+                  = buildClient (Proxy :: Proxy EventsQuickAddResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Calendar/Events/Update.hs b/gen/Network/Google/Resource/Calendar/Events/Update.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Calendar/Events/Update.hs
@@ -0,0 +1,173 @@
+{-# 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.Calendar.Events.Update
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates an event.
+--
+-- /See:/ <https://developers.google.com/google-apps/calendar/firstapp Calendar API Reference> for @calendar.events.update@.
+module Network.Google.Resource.Calendar.Events.Update
+    (
+    -- * REST Resource
+      EventsUpdateResource
+
+    -- * Creating a Request
+    , eventsUpdate
+    , EventsUpdate
+
+    -- * Request Lenses
+    , euCalendarId
+    , euPayload
+    , euMaxAttendees
+    , euSendNotifications
+    , euSupportsAttachments
+    , euAlwaysIncludeEmail
+    , euEventId
+    ) where
+
+import           Network.Google.AppsCalendar.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @calendar.events.update@ method which the
+-- 'EventsUpdate' request conforms to.
+type EventsUpdateResource =
+     "calendar" :>
+       "v3" :>
+         "calendars" :>
+           Capture "calendarId" Text :>
+             "events" :>
+               Capture "eventId" Text :>
+                 QueryParam "maxAttendees" (Textual Int32) :>
+                   QueryParam "sendNotifications" Bool :>
+                     QueryParam "supportsAttachments" Bool :>
+                       QueryParam "alwaysIncludeEmail" Bool :>
+                         QueryParam "alt" AltJSON :>
+                           ReqBody '[JSON] Event :> Put '[JSON] Event
+
+-- | Updates an event.
+--
+-- /See:/ 'eventsUpdate' smart constructor.
+data EventsUpdate = EventsUpdate
+    { _euCalendarId          :: !Text
+    , _euPayload             :: !Event
+    , _euMaxAttendees        :: !(Maybe (Textual Int32))
+    , _euSendNotifications   :: !(Maybe Bool)
+    , _euSupportsAttachments :: !(Maybe Bool)
+    , _euAlwaysIncludeEmail  :: !(Maybe Bool)
+    , _euEventId             :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EventsUpdate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'euCalendarId'
+--
+-- * 'euPayload'
+--
+-- * 'euMaxAttendees'
+--
+-- * 'euSendNotifications'
+--
+-- * 'euSupportsAttachments'
+--
+-- * 'euAlwaysIncludeEmail'
+--
+-- * 'euEventId'
+eventsUpdate
+    :: Text -- ^ 'euCalendarId'
+    -> Event -- ^ 'euPayload'
+    -> Text -- ^ 'euEventId'
+    -> EventsUpdate
+eventsUpdate pEuCalendarId_ pEuPayload_ pEuEventId_ =
+    EventsUpdate
+    { _euCalendarId = pEuCalendarId_
+    , _euPayload = pEuPayload_
+    , _euMaxAttendees = Nothing
+    , _euSendNotifications = Nothing
+    , _euSupportsAttachments = Nothing
+    , _euAlwaysIncludeEmail = Nothing
+    , _euEventId = pEuEventId_
+    }
+
+-- | Calendar identifier. To retrieve calendar IDs call the calendarList.list
+-- method. If you want to access the primary calendar of the currently
+-- logged in user, use the \"primary\" keyword.
+euCalendarId :: Lens' EventsUpdate Text
+euCalendarId
+  = lens _euCalendarId (\ s a -> s{_euCalendarId = a})
+
+-- | Multipart request metadata.
+euPayload :: Lens' EventsUpdate Event
+euPayload
+  = lens _euPayload (\ s a -> s{_euPayload = a})
+
+-- | The maximum number of attendees to include in the response. If there are
+-- more than the specified number of attendees, only the participant is
+-- returned. Optional.
+euMaxAttendees :: Lens' EventsUpdate (Maybe Int32)
+euMaxAttendees
+  = lens _euMaxAttendees
+      (\ s a -> s{_euMaxAttendees = a})
+      . mapping _Coerce
+
+-- | Whether to send notifications about the event update (e.g. attendee\'s
+-- responses, title changes, etc.). Optional. The default is False.
+euSendNotifications :: Lens' EventsUpdate (Maybe Bool)
+euSendNotifications
+  = lens _euSendNotifications
+      (\ s a -> s{_euSendNotifications = a})
+
+-- | Whether API client performing operation supports event attachments.
+-- Optional. The default is False.
+euSupportsAttachments :: Lens' EventsUpdate (Maybe Bool)
+euSupportsAttachments
+  = lens _euSupportsAttachments
+      (\ s a -> s{_euSupportsAttachments = a})
+
+-- | Whether to always include a value in the email field for the organizer,
+-- creator and attendees, even if no real email is available (i.e. a
+-- generated, non-working value will be provided). The use of this option
+-- is discouraged and should only be used by clients which cannot handle
+-- the absence of an email address value in the mentioned places. Optional.
+-- The default is False.
+euAlwaysIncludeEmail :: Lens' EventsUpdate (Maybe Bool)
+euAlwaysIncludeEmail
+  = lens _euAlwaysIncludeEmail
+      (\ s a -> s{_euAlwaysIncludeEmail = a})
+
+-- | Event identifier.
+euEventId :: Lens' EventsUpdate Text
+euEventId
+  = lens _euEventId (\ s a -> s{_euEventId = a})
+
+instance GoogleRequest EventsUpdate where
+        type Rs EventsUpdate = Event
+        requestClient EventsUpdate{..}
+          = go _euCalendarId _euEventId _euMaxAttendees
+              _euSendNotifications
+              _euSupportsAttachments
+              _euAlwaysIncludeEmail
+              (Just AltJSON)
+              _euPayload
+              appsCalendarService
+          where go
+                  = buildClient (Proxy :: Proxy EventsUpdateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Calendar/Events/Watch.hs b/gen/Network/Google/Resource/Calendar/Events/Watch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Calendar/Events/Watch.hs
@@ -0,0 +1,372 @@
+{-# 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.Calendar.Events.Watch
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Watch for changes to Events resources.
+--
+-- /See:/ <https://developers.google.com/google-apps/calendar/firstapp Calendar API Reference> for @calendar.events.watch@.
+module Network.Google.Resource.Calendar.Events.Watch
+    (
+    -- * REST Resource
+      EventsWatchResource
+
+    -- * Creating a Request
+    , eventsWatch
+    , EventsWatch
+
+    -- * Request Lenses
+    , ewSyncToken
+    , ewCalendarId
+    , ewTimeMin
+    , ewOrderBy
+    , ewSingleEvents
+    , ewPrivateExtendedProperty
+    , ewShowDeleted
+    , ewPayload
+    , ewQ
+    , ewSharedExtendedProperty
+    , ewMaxAttendees
+    , ewICalUId
+    , ewUpdatedMin
+    , ewPageToken
+    , ewTimeZone
+    , ewShowHiddenInvitations
+    , ewMaxResults
+    , ewAlwaysIncludeEmail
+    , ewTimeMax
+    ) where
+
+import           Network.Google.AppsCalendar.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @calendar.events.watch@ method which the
+-- 'EventsWatch' request conforms to.
+type EventsWatchResource =
+     "calendar" :>
+       "v3" :>
+         "calendars" :>
+           Capture "calendarId" Text :>
+             "events" :>
+               "watch" :>
+                 QueryParam "syncToken" Text :>
+                   QueryParam "timeMin" DateTime' :>
+                     QueryParam "orderBy" EventsWatchOrderBy :>
+                       QueryParam "singleEvents" Bool :>
+                         QueryParams "privateExtendedProperty" Text :>
+                           QueryParam "showDeleted" Bool :>
+                             QueryParam "q" Text :>
+                               QueryParams "sharedExtendedProperty" Text :>
+                                 QueryParam "maxAttendees" (Textual Int32) :>
+                                   QueryParam "iCalUID" Text :>
+                                     QueryParam "updatedMin" DateTime' :>
+                                       QueryParam "pageToken" Text :>
+                                         QueryParam "timeZone" Text :>
+                                           QueryParam "showHiddenInvitations"
+                                             Bool
+                                             :>
+                                             QueryParam "maxResults"
+                                               (Textual Int32)
+                                               :>
+                                               QueryParam "alwaysIncludeEmail"
+                                                 Bool
+                                                 :>
+                                                 QueryParam "timeMax" DateTime'
+                                                   :>
+                                                   QueryParam "alt" AltJSON :>
+                                                     ReqBody '[JSON] Channel :>
+                                                       Post '[JSON] Channel
+
+-- | Watch for changes to Events resources.
+--
+-- /See:/ 'eventsWatch' smart constructor.
+data EventsWatch = EventsWatch
+    { _ewSyncToken               :: !(Maybe Text)
+    , _ewCalendarId              :: !Text
+    , _ewTimeMin                 :: !(Maybe DateTime')
+    , _ewOrderBy                 :: !(Maybe EventsWatchOrderBy)
+    , _ewSingleEvents            :: !(Maybe Bool)
+    , _ewPrivateExtendedProperty :: !(Maybe [Text])
+    , _ewShowDeleted             :: !(Maybe Bool)
+    , _ewPayload                 :: !Channel
+    , _ewQ                       :: !(Maybe Text)
+    , _ewSharedExtendedProperty  :: !(Maybe [Text])
+    , _ewMaxAttendees            :: !(Maybe (Textual Int32))
+    , _ewICalUId                 :: !(Maybe Text)
+    , _ewUpdatedMin              :: !(Maybe DateTime')
+    , _ewPageToken               :: !(Maybe Text)
+    , _ewTimeZone                :: !(Maybe Text)
+    , _ewShowHiddenInvitations   :: !(Maybe Bool)
+    , _ewMaxResults              :: !(Maybe (Textual Int32))
+    , _ewAlwaysIncludeEmail      :: !(Maybe Bool)
+    , _ewTimeMax                 :: !(Maybe DateTime')
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EventsWatch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ewSyncToken'
+--
+-- * 'ewCalendarId'
+--
+-- * 'ewTimeMin'
+--
+-- * 'ewOrderBy'
+--
+-- * 'ewSingleEvents'
+--
+-- * 'ewPrivateExtendedProperty'
+--
+-- * 'ewShowDeleted'
+--
+-- * 'ewPayload'
+--
+-- * 'ewQ'
+--
+-- * 'ewSharedExtendedProperty'
+--
+-- * 'ewMaxAttendees'
+--
+-- * 'ewICalUId'
+--
+-- * 'ewUpdatedMin'
+--
+-- * 'ewPageToken'
+--
+-- * 'ewTimeZone'
+--
+-- * 'ewShowHiddenInvitations'
+--
+-- * 'ewMaxResults'
+--
+-- * 'ewAlwaysIncludeEmail'
+--
+-- * 'ewTimeMax'
+eventsWatch
+    :: Text -- ^ 'ewCalendarId'
+    -> Channel -- ^ 'ewPayload'
+    -> EventsWatch
+eventsWatch pEwCalendarId_ pEwPayload_ =
+    EventsWatch
+    { _ewSyncToken = Nothing
+    , _ewCalendarId = pEwCalendarId_
+    , _ewTimeMin = Nothing
+    , _ewOrderBy = Nothing
+    , _ewSingleEvents = Nothing
+    , _ewPrivateExtendedProperty = Nothing
+    , _ewShowDeleted = Nothing
+    , _ewPayload = pEwPayload_
+    , _ewQ = Nothing
+    , _ewSharedExtendedProperty = Nothing
+    , _ewMaxAttendees = Nothing
+    , _ewICalUId = Nothing
+    , _ewUpdatedMin = Nothing
+    , _ewPageToken = Nothing
+    , _ewTimeZone = Nothing
+    , _ewShowHiddenInvitations = Nothing
+    , _ewMaxResults = Nothing
+    , _ewAlwaysIncludeEmail = Nothing
+    , _ewTimeMax = Nothing
+    }
+
+-- | Token obtained from the nextSyncToken field returned on the last page of
+-- results from the previous list request. It makes the result of this list
+-- request contain only entries that have changed since then. All events
+-- deleted since the previous list request will always be in the result set
+-- and it is not allowed to set showDeleted to False. There are several
+-- query parameters that cannot be specified together with nextSyncToken to
+-- ensure consistency of the client state. These are: - iCalUID - orderBy -
+-- privateExtendedProperty - q - sharedExtendedProperty - timeMin - timeMax
+-- - updatedMin If the syncToken expires, the server will respond with a
+-- 410 GONE response code and the client should clear its storage and
+-- perform a full synchronization without any syncToken. Learn more about
+-- incremental synchronization. Optional. The default is to return all
+-- entries.
+ewSyncToken :: Lens' EventsWatch (Maybe Text)
+ewSyncToken
+  = lens _ewSyncToken (\ s a -> s{_ewSyncToken = a})
+
+-- | Calendar identifier. To retrieve calendar IDs call the calendarList.list
+-- method. If you want to access the primary calendar of the currently
+-- logged in user, use the \"primary\" keyword.
+ewCalendarId :: Lens' EventsWatch Text
+ewCalendarId
+  = lens _ewCalendarId (\ s a -> s{_ewCalendarId = a})
+
+-- | Lower bound (inclusive) for an event\'s end time to filter by. Optional.
+-- The default is not to filter by end time. Must be an RFC3339 timestamp
+-- with mandatory time zone offset, e.g., 2011-06-03T10:00:00-07:00,
+-- 2011-06-03T10:00:00Z. Milliseconds may be provided but will be ignored.
+ewTimeMin :: Lens' EventsWatch (Maybe UTCTime)
+ewTimeMin
+  = lens _ewTimeMin (\ s a -> s{_ewTimeMin = a}) .
+      mapping _DateTime
+
+-- | The order of the events returned in the result. Optional. The default is
+-- an unspecified, stable order.
+ewOrderBy :: Lens' EventsWatch (Maybe EventsWatchOrderBy)
+ewOrderBy
+  = lens _ewOrderBy (\ s a -> s{_ewOrderBy = a})
+
+-- | Whether to expand recurring events into instances and only return single
+-- one-off events and instances of recurring events, but not the underlying
+-- recurring events themselves. Optional. The default is False.
+ewSingleEvents :: Lens' EventsWatch (Maybe Bool)
+ewSingleEvents
+  = lens _ewSingleEvents
+      (\ s a -> s{_ewSingleEvents = a})
+
+-- | Extended properties constraint specified as propertyName=value. Matches
+-- only private properties. This parameter might be repeated multiple times
+-- to return events that match all given constraints.
+ewPrivateExtendedProperty :: Lens' EventsWatch [Text]
+ewPrivateExtendedProperty
+  = lens _ewPrivateExtendedProperty
+      (\ s a -> s{_ewPrivateExtendedProperty = a})
+      . _Default
+      . _Coerce
+
+-- | Whether to include deleted events (with status equals \"cancelled\") in
+-- the result. Cancelled instances of recurring events (but not the
+-- underlying recurring event) will still be included if showDeleted and
+-- singleEvents are both False. If showDeleted and singleEvents are both
+-- True, only single instances of deleted events (but not the underlying
+-- recurring events) are returned. Optional. The default is False.
+ewShowDeleted :: Lens' EventsWatch (Maybe Bool)
+ewShowDeleted
+  = lens _ewShowDeleted
+      (\ s a -> s{_ewShowDeleted = a})
+
+-- | Multipart request metadata.
+ewPayload :: Lens' EventsWatch Channel
+ewPayload
+  = lens _ewPayload (\ s a -> s{_ewPayload = a})
+
+-- | Free text search terms to find events that match these terms in any
+-- field, except for extended properties. Optional.
+ewQ :: Lens' EventsWatch (Maybe Text)
+ewQ = lens _ewQ (\ s a -> s{_ewQ = a})
+
+-- | Extended properties constraint specified as propertyName=value. Matches
+-- only shared properties. This parameter might be repeated multiple times
+-- to return events that match all given constraints.
+ewSharedExtendedProperty :: Lens' EventsWatch [Text]
+ewSharedExtendedProperty
+  = lens _ewSharedExtendedProperty
+      (\ s a -> s{_ewSharedExtendedProperty = a})
+      . _Default
+      . _Coerce
+
+-- | The maximum number of attendees to include in the response. If there are
+-- more than the specified number of attendees, only the participant is
+-- returned. Optional.
+ewMaxAttendees :: Lens' EventsWatch (Maybe Int32)
+ewMaxAttendees
+  = lens _ewMaxAttendees
+      (\ s a -> s{_ewMaxAttendees = a})
+      . mapping _Coerce
+
+-- | Specifies event ID in the iCalendar format to be included in the
+-- response. Optional.
+ewICalUId :: Lens' EventsWatch (Maybe Text)
+ewICalUId
+  = lens _ewICalUId (\ s a -> s{_ewICalUId = a})
+
+-- | Lower bound for an event\'s last modification time (as a RFC3339
+-- timestamp) to filter by. When specified, entries deleted since this time
+-- will always be included regardless of showDeleted. Optional. The default
+-- is not to filter by last modification time.
+ewUpdatedMin :: Lens' EventsWatch (Maybe UTCTime)
+ewUpdatedMin
+  = lens _ewUpdatedMin (\ s a -> s{_ewUpdatedMin = a})
+      . mapping _DateTime
+
+-- | Token specifying which result page to return. Optional.
+ewPageToken :: Lens' EventsWatch (Maybe Text)
+ewPageToken
+  = lens _ewPageToken (\ s a -> s{_ewPageToken = a})
+
+-- | Time zone used in the response. Optional. The default is the time zone
+-- of the calendar.
+ewTimeZone :: Lens' EventsWatch (Maybe Text)
+ewTimeZone
+  = lens _ewTimeZone (\ s a -> s{_ewTimeZone = a})
+
+-- | Whether to include hidden invitations in the result. Optional. The
+-- default is False.
+ewShowHiddenInvitations :: Lens' EventsWatch (Maybe Bool)
+ewShowHiddenInvitations
+  = lens _ewShowHiddenInvitations
+      (\ s a -> s{_ewShowHiddenInvitations = a})
+
+-- | Maximum number of events returned on one result page. By default the
+-- value is 250 events. The page size can never be larger than 2500 events.
+-- Optional.
+ewMaxResults :: Lens' EventsWatch (Maybe Int32)
+ewMaxResults
+  = lens _ewMaxResults (\ s a -> s{_ewMaxResults = a})
+      . mapping _Coerce
+
+-- | Whether to always include a value in the email field for the organizer,
+-- creator and attendees, even if no real email is available (i.e. a
+-- generated, non-working value will be provided). The use of this option
+-- is discouraged and should only be used by clients which cannot handle
+-- the absence of an email address value in the mentioned places. Optional.
+-- The default is False.
+ewAlwaysIncludeEmail :: Lens' EventsWatch (Maybe Bool)
+ewAlwaysIncludeEmail
+  = lens _ewAlwaysIncludeEmail
+      (\ s a -> s{_ewAlwaysIncludeEmail = a})
+
+-- | Upper bound (exclusive) for an event\'s start time to filter by.
+-- Optional. The default is not to filter by start time. Must be an RFC3339
+-- timestamp with mandatory time zone offset, e.g.,
+-- 2011-06-03T10:00:00-07:00, 2011-06-03T10:00:00Z. Milliseconds may be
+-- provided but will be ignored.
+ewTimeMax :: Lens' EventsWatch (Maybe UTCTime)
+ewTimeMax
+  = lens _ewTimeMax (\ s a -> s{_ewTimeMax = a}) .
+      mapping _DateTime
+
+instance GoogleRequest EventsWatch where
+        type Rs EventsWatch = Channel
+        requestClient EventsWatch{..}
+          = go _ewCalendarId _ewSyncToken _ewTimeMin _ewOrderBy
+              _ewSingleEvents
+              (_ewPrivateExtendedProperty ^. _Default)
+              _ewShowDeleted
+              _ewQ
+              (_ewSharedExtendedProperty ^. _Default)
+              _ewMaxAttendees
+              _ewICalUId
+              _ewUpdatedMin
+              _ewPageToken
+              _ewTimeZone
+              _ewShowHiddenInvitations
+              _ewMaxResults
+              _ewAlwaysIncludeEmail
+              _ewTimeMax
+              (Just AltJSON)
+              _ewPayload
+              appsCalendarService
+          where go
+                  = buildClient (Proxy :: Proxy EventsWatchResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Calendar/FreeBusy/Query.hs b/gen/Network/Google/Resource/Calendar/FreeBusy/Query.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Calendar/FreeBusy/Query.hs
@@ -0,0 +1,83 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Calendar.FreeBusy.Query
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns free\/busy information for a set of calendars.
+--
+-- /See:/ <https://developers.google.com/google-apps/calendar/firstapp Calendar API Reference> for @calendar.freebusy.query@.
+module Network.Google.Resource.Calendar.FreeBusy.Query
+    (
+    -- * REST Resource
+      FreeBusyQueryResource
+
+    -- * Creating a Request
+    , freeBusyQuery
+    , FreeBusyQuery
+
+    -- * Request Lenses
+    , fbqPayload
+    ) where
+
+import           Network.Google.AppsCalendar.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @calendar.freebusy.query@ method which the
+-- 'FreeBusyQuery' request conforms to.
+type FreeBusyQueryResource =
+     "calendar" :>
+       "v3" :>
+         "freeBusy" :>
+           QueryParam "alt" AltJSON :>
+             ReqBody '[JSON] FreeBusyRequest :>
+               Post '[JSON] FreeBusyResponse
+
+-- | Returns free\/busy information for a set of calendars.
+--
+-- /See:/ 'freeBusyQuery' smart constructor.
+newtype FreeBusyQuery = FreeBusyQuery
+    { _fbqPayload :: FreeBusyRequest
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FreeBusyQuery' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fbqPayload'
+freeBusyQuery
+    :: FreeBusyRequest -- ^ 'fbqPayload'
+    -> FreeBusyQuery
+freeBusyQuery pFbqPayload_ =
+    FreeBusyQuery
+    { _fbqPayload = pFbqPayload_
+    }
+
+-- | Multipart request metadata.
+fbqPayload :: Lens' FreeBusyQuery FreeBusyRequest
+fbqPayload
+  = lens _fbqPayload (\ s a -> s{_fbqPayload = a})
+
+instance GoogleRequest FreeBusyQuery where
+        type Rs FreeBusyQuery = FreeBusyResponse
+        requestClient FreeBusyQuery{..}
+          = go (Just AltJSON) _fbqPayload appsCalendarService
+          where go
+                  = buildClient (Proxy :: Proxy FreeBusyQueryResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Calendar/Settings/Get.hs b/gen/Network/Google/Resource/Calendar/Settings/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Calendar/Settings/Get.hs
@@ -0,0 +1,84 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Calendar.Settings.Get
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a single user setting.
+--
+-- /See:/ <https://developers.google.com/google-apps/calendar/firstapp Calendar API Reference> for @calendar.settings.get@.
+module Network.Google.Resource.Calendar.Settings.Get
+    (
+    -- * REST Resource
+      SettingsGetResource
+
+    -- * Creating a Request
+    , settingsGet
+    , SettingsGet
+
+    -- * Request Lenses
+    , sgSetting
+    ) where
+
+import           Network.Google.AppsCalendar.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @calendar.settings.get@ method which the
+-- 'SettingsGet' request conforms to.
+type SettingsGetResource =
+     "calendar" :>
+       "v3" :>
+         "users" :>
+           "me" :>
+             "settings" :>
+               Capture "setting" Text :>
+                 QueryParam "alt" AltJSON :> Get '[JSON] Setting
+
+-- | Returns a single user setting.
+--
+-- /See:/ 'settingsGet' smart constructor.
+newtype SettingsGet = SettingsGet
+    { _sgSetting :: Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SettingsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sgSetting'
+settingsGet
+    :: Text -- ^ 'sgSetting'
+    -> SettingsGet
+settingsGet pSgSetting_ =
+    SettingsGet
+    { _sgSetting = pSgSetting_
+    }
+
+-- | The id of the user setting.
+sgSetting :: Lens' SettingsGet Text
+sgSetting
+  = lens _sgSetting (\ s a -> s{_sgSetting = a})
+
+instance GoogleRequest SettingsGet where
+        type Rs SettingsGet = Setting
+        requestClient SettingsGet{..}
+          = go _sgSetting (Just AltJSON) appsCalendarService
+          where go
+                  = buildClient (Proxy :: Proxy SettingsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Calendar/Settings/List.hs b/gen/Network/Google/Resource/Calendar/Settings/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Calendar/Settings/List.hs
@@ -0,0 +1,116 @@
+{-# 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.Calendar.Settings.List
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns all user settings for the authenticated user.
+--
+-- /See:/ <https://developers.google.com/google-apps/calendar/firstapp Calendar API Reference> for @calendar.settings.list@.
+module Network.Google.Resource.Calendar.Settings.List
+    (
+    -- * REST Resource
+      SettingsListResource
+
+    -- * Creating a Request
+    , settingsList
+    , SettingsList
+
+    -- * Request Lenses
+    , slSyncToken
+    , slPageToken
+    , slMaxResults
+    ) where
+
+import           Network.Google.AppsCalendar.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @calendar.settings.list@ method which the
+-- 'SettingsList' request conforms to.
+type SettingsListResource =
+     "calendar" :>
+       "v3" :>
+         "users" :>
+           "me" :>
+             "settings" :>
+               QueryParam "syncToken" Text :>
+                 QueryParam "pageToken" Text :>
+                   QueryParam "maxResults" (Textual Int32) :>
+                     QueryParam "alt" AltJSON :> Get '[JSON] Settings
+
+-- | Returns all user settings for the authenticated user.
+--
+-- /See:/ 'settingsList' smart constructor.
+data SettingsList = SettingsList
+    { _slSyncToken  :: !(Maybe Text)
+    , _slPageToken  :: !(Maybe Text)
+    , _slMaxResults :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SettingsList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'slSyncToken'
+--
+-- * 'slPageToken'
+--
+-- * 'slMaxResults'
+settingsList
+    :: SettingsList
+settingsList =
+    SettingsList
+    { _slSyncToken = Nothing
+    , _slPageToken = Nothing
+    , _slMaxResults = Nothing
+    }
+
+-- | Token obtained from the nextSyncToken field returned on the last page of
+-- results from the previous list request. It makes the result of this list
+-- request contain only entries that have changed since then. If the
+-- syncToken expires, the server will respond with a 410 GONE response code
+-- and the client should clear its storage and perform a full
+-- synchronization without any syncToken. Learn more about incremental
+-- synchronization. Optional. The default is to return all entries.
+slSyncToken :: Lens' SettingsList (Maybe Text)
+slSyncToken
+  = lens _slSyncToken (\ s a -> s{_slSyncToken = a})
+
+-- | Token specifying which result page to return. Optional.
+slPageToken :: Lens' SettingsList (Maybe Text)
+slPageToken
+  = lens _slPageToken (\ s a -> s{_slPageToken = a})
+
+-- | Maximum number of entries returned on one result page. By default the
+-- value is 100 entries. The page size can never be larger than 250
+-- entries. Optional.
+slMaxResults :: Lens' SettingsList (Maybe Int32)
+slMaxResults
+  = lens _slMaxResults (\ s a -> s{_slMaxResults = a})
+      . mapping _Coerce
+
+instance GoogleRequest SettingsList where
+        type Rs SettingsList = Settings
+        requestClient SettingsList{..}
+          = go _slSyncToken _slPageToken _slMaxResults
+              (Just AltJSON)
+              appsCalendarService
+          where go
+                  = buildClient (Proxy :: Proxy SettingsListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Calendar/Settings/Watch.hs b/gen/Network/Google/Resource/Calendar/Settings/Watch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Calendar/Settings/Watch.hs
@@ -0,0 +1,130 @@
+{-# 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.Calendar.Settings.Watch
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Watch for changes to Settings resources.
+--
+-- /See:/ <https://developers.google.com/google-apps/calendar/firstapp Calendar API Reference> for @calendar.settings.watch@.
+module Network.Google.Resource.Calendar.Settings.Watch
+    (
+    -- * REST Resource
+      SettingsWatchResource
+
+    -- * Creating a Request
+    , settingsWatch
+    , SettingsWatch
+
+    -- * Request Lenses
+    , swSyncToken
+    , swPayload
+    , swPageToken
+    , swMaxResults
+    ) where
+
+import           Network.Google.AppsCalendar.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @calendar.settings.watch@ method which the
+-- 'SettingsWatch' request conforms to.
+type SettingsWatchResource =
+     "calendar" :>
+       "v3" :>
+         "users" :>
+           "me" :>
+             "settings" :>
+               "watch" :>
+                 QueryParam "syncToken" Text :>
+                   QueryParam "pageToken" Text :>
+                     QueryParam "maxResults" (Textual Int32) :>
+                       QueryParam "alt" AltJSON :>
+                         ReqBody '[JSON] Channel :> Post '[JSON] Channel
+
+-- | Watch for changes to Settings resources.
+--
+-- /See:/ 'settingsWatch' smart constructor.
+data SettingsWatch = SettingsWatch
+    { _swSyncToken  :: !(Maybe Text)
+    , _swPayload    :: !Channel
+    , _swPageToken  :: !(Maybe Text)
+    , _swMaxResults :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SettingsWatch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'swSyncToken'
+--
+-- * 'swPayload'
+--
+-- * 'swPageToken'
+--
+-- * 'swMaxResults'
+settingsWatch
+    :: Channel -- ^ 'swPayload'
+    -> SettingsWatch
+settingsWatch pSwPayload_ =
+    SettingsWatch
+    { _swSyncToken = Nothing
+    , _swPayload = pSwPayload_
+    , _swPageToken = Nothing
+    , _swMaxResults = Nothing
+    }
+
+-- | Token obtained from the nextSyncToken field returned on the last page of
+-- results from the previous list request. It makes the result of this list
+-- request contain only entries that have changed since then. If the
+-- syncToken expires, the server will respond with a 410 GONE response code
+-- and the client should clear its storage and perform a full
+-- synchronization without any syncToken. Learn more about incremental
+-- synchronization. Optional. The default is to return all entries.
+swSyncToken :: Lens' SettingsWatch (Maybe Text)
+swSyncToken
+  = lens _swSyncToken (\ s a -> s{_swSyncToken = a})
+
+-- | Multipart request metadata.
+swPayload :: Lens' SettingsWatch Channel
+swPayload
+  = lens _swPayload (\ s a -> s{_swPayload = a})
+
+-- | Token specifying which result page to return. Optional.
+swPageToken :: Lens' SettingsWatch (Maybe Text)
+swPageToken
+  = lens _swPageToken (\ s a -> s{_swPageToken = a})
+
+-- | Maximum number of entries returned on one result page. By default the
+-- value is 100 entries. The page size can never be larger than 250
+-- entries. Optional.
+swMaxResults :: Lens' SettingsWatch (Maybe Int32)
+swMaxResults
+  = lens _swMaxResults (\ s a -> s{_swMaxResults = a})
+      . mapping _Coerce
+
+instance GoogleRequest SettingsWatch where
+        type Rs SettingsWatch = Channel
+        requestClient SettingsWatch{..}
+          = go _swSyncToken _swPageToken _swMaxResults
+              (Just AltJSON)
+              _swPayload
+              appsCalendarService
+          where go
+                  = buildClient (Proxy :: Proxy SettingsWatchResource)
+                      mempty
diff --git a/gogol-apps-calendar.cabal b/gogol-apps-calendar.cabal
new file mode 100644
--- /dev/null
+++ b/gogol-apps-calendar.cabal
@@ -0,0 +1,82 @@
+name:                  gogol-apps-calendar
+version:               0.0.1
+synopsis:              Google Calendar SDK.
+homepage:              https://github.com/brendanhay/gogol
+bug-reports:           https://github.com/brendanhay/gogol/issues
+license:               OtherLicense
+license-file:          LICENSE
+author:                Brendan Hay
+maintainer:            Brendan Hay <brendan.g.hay@gmail.com>
+copyright:             Copyright (c) 2015 Brendan Hay
+category:              Network, Google, Cloud
+build-type:            Simple
+cabal-version:         >= 1.10
+extra-source-files:    README.md
+
+description:
+    Lets you manipulate events and other calendar data.
+    .
+    /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 @v3@
+    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.AppsCalendar
+        , Network.Google.AppsCalendar.Types
+        , Network.Google.Resource.Calendar.ACL.Delete
+        , Network.Google.Resource.Calendar.ACL.Get
+        , Network.Google.Resource.Calendar.ACL.Insert
+        , Network.Google.Resource.Calendar.ACL.List
+        , Network.Google.Resource.Calendar.ACL.Patch
+        , Network.Google.Resource.Calendar.ACL.Update
+        , Network.Google.Resource.Calendar.ACL.Watch
+        , Network.Google.Resource.Calendar.CalendarList.Delete
+        , Network.Google.Resource.Calendar.CalendarList.Get
+        , Network.Google.Resource.Calendar.CalendarList.Insert
+        , Network.Google.Resource.Calendar.CalendarList.List
+        , Network.Google.Resource.Calendar.CalendarList.Patch
+        , Network.Google.Resource.Calendar.CalendarList.Update
+        , Network.Google.Resource.Calendar.CalendarList.Watch
+        , Network.Google.Resource.Calendar.Calendars.Clear
+        , Network.Google.Resource.Calendar.Calendars.Delete
+        , Network.Google.Resource.Calendar.Calendars.Get
+        , Network.Google.Resource.Calendar.Calendars.Insert
+        , Network.Google.Resource.Calendar.Calendars.Patch
+        , Network.Google.Resource.Calendar.Calendars.Update
+        , Network.Google.Resource.Calendar.Channels.Stop
+        , Network.Google.Resource.Calendar.Colors.Get
+        , Network.Google.Resource.Calendar.Events.Delete
+        , Network.Google.Resource.Calendar.Events.Get
+        , Network.Google.Resource.Calendar.Events.Import
+        , Network.Google.Resource.Calendar.Events.Insert
+        , Network.Google.Resource.Calendar.Events.Instances
+        , Network.Google.Resource.Calendar.Events.List
+        , Network.Google.Resource.Calendar.Events.Move
+        , Network.Google.Resource.Calendar.Events.Patch
+        , Network.Google.Resource.Calendar.Events.QuickAdd
+        , Network.Google.Resource.Calendar.Events.Update
+        , Network.Google.Resource.Calendar.Events.Watch
+        , Network.Google.Resource.Calendar.FreeBusy.Query
+        , Network.Google.Resource.Calendar.Settings.Get
+        , Network.Google.Resource.Calendar.Settings.List
+        , Network.Google.Resource.Calendar.Settings.Watch
+
+    other-modules:
+          Network.Google.AppsCalendar.Types.Product
+        , Network.Google.AppsCalendar.Types.Sum
+
+    build-depends:
+          gogol-core == 0.0.1.*
+        , base       >= 4.7 && < 5
