diff --git a/gen/Network/Google/Directory.hs b/gen/Network/Google/Directory.hs
--- a/gen/Network/Google/Directory.hs
+++ b/gen/Network/Google/Directory.hs
@@ -13,9 +13,8 @@
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- The Admin SDK Directory API lets you view and manage enterprise
--- resources such as users and groups, administrative notifications,
--- security features, and more.
+-- Manages enterprise resources such as users and groups, administrative
+-- notifications, security features, and more.
 --
 -- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference>
 module Network.Google.Directory
@@ -78,6 +77,9 @@
     -- ** directory.chromeosdevices.list
     , module Network.Google.Resource.Directory.ChromeosDevices.List
 
+    -- ** directory.chromeosdevices.moveDevicesToOu
+    , module Network.Google.Resource.Directory.ChromeosDevices.MoveDevicesToOu
+
     -- ** directory.chromeosdevices.patch
     , module Network.Google.Resource.Directory.ChromeosDevices.Patch
 
@@ -150,6 +152,9 @@
     -- ** directory.members.get
     , module Network.Google.Resource.Directory.Members.Get
 
+    -- ** directory.members.hasMember
+    , module Network.Google.Resource.Directory.Members.HasMember
+
     -- ** directory.members.insert
     , module Network.Google.Resource.Directory.Members.Insert
 
@@ -210,6 +215,30 @@
     -- ** directory.privileges.list
     , module Network.Google.Resource.Directory.Privileges.List
 
+    -- ** directory.resolvedAppAccessSettings.GetSettings
+    , module Network.Google.Resource.Directory.ResolvedAppAccessSettings.GetSettings
+
+    -- ** directory.resolvedAppAccessSettings.ListTrustedApps
+    , module Network.Google.Resource.Directory.ResolvedAppAccessSettings.ListTrustedApps
+
+    -- ** directory.resources.buildings.delete
+    , module Network.Google.Resource.Directory.Resources.Buildings.Delete
+
+    -- ** directory.resources.buildings.get
+    , module Network.Google.Resource.Directory.Resources.Buildings.Get
+
+    -- ** directory.resources.buildings.insert
+    , module Network.Google.Resource.Directory.Resources.Buildings.Insert
+
+    -- ** directory.resources.buildings.list
+    , module Network.Google.Resource.Directory.Resources.Buildings.List
+
+    -- ** directory.resources.buildings.patch
+    , module Network.Google.Resource.Directory.Resources.Buildings.Patch
+
+    -- ** directory.resources.buildings.update
+    , module Network.Google.Resource.Directory.Resources.Buildings.Update
+
     -- ** directory.resources.calendars.delete
     , module Network.Google.Resource.Directory.Resources.Calendars.Delete
 
@@ -228,6 +257,27 @@
     -- ** directory.resources.calendars.update
     , module Network.Google.Resource.Directory.Resources.Calendars.Update
 
+    -- ** directory.resources.features.delete
+    , module Network.Google.Resource.Directory.Resources.Features.Delete
+
+    -- ** directory.resources.features.get
+    , module Network.Google.Resource.Directory.Resources.Features.Get
+
+    -- ** directory.resources.features.insert
+    , module Network.Google.Resource.Directory.Resources.Features.Insert
+
+    -- ** directory.resources.features.list
+    , module Network.Google.Resource.Directory.Resources.Features.List
+
+    -- ** directory.resources.features.patch
+    , module Network.Google.Resource.Directory.Resources.Features.Patch
+
+    -- ** directory.resources.features.rename
+    , module Network.Google.Resource.Directory.Resources.Features.Rename
+
+    -- ** directory.resources.features.update
+    , module Network.Google.Resource.Directory.Resources.Features.Update
+
     -- ** directory.roleAssignments.delete
     , module Network.Google.Resource.Directory.RoleAssignments.Delete
 
@@ -347,6 +397,17 @@
 
     -- * Types
 
+    -- ** UserLocation
+    , UserLocation
+    , userLocation
+    , ulArea
+    , ulBuildingId
+    , ulDeskCode
+    , ulFloorName
+    , ulType
+    , ulCustomType
+    , ulFloorSection
+
     -- ** VerificationCode
     , VerificationCode
     , verificationCode
@@ -355,6 +416,13 @@
     , vcKind
     , vcUserId
 
+    -- ** Feature
+    , Feature
+    , feature
+    , fEtags
+    , fKind
+    , fName
+
     -- ** OrgUnit
     , OrgUnit
     , orgUnit
@@ -433,6 +501,11 @@
     -- ** UsersWatchEvent
     , UsersWatchEvent (..)
 
+    -- ** ChromeOSDeviceDiskVolumeReportsItem
+    , ChromeOSDeviceDiskVolumeReportsItem
+    , chromeOSDeviceDiskVolumeReportsItem
+    , coddvriVolumeInfo
+
     -- ** UserAddress
     , UserAddress
     , userAddress
@@ -493,7 +566,9 @@
     , chromeOSDevice
     , codStatus
     , codEtag
+    , codCPUStatusReports
     , codAnnotatedUser
+    , codSystemRamFreeReports
     , codPlatformVersion
     , codLastSync
     , codActiveTimeRanges
@@ -508,14 +583,18 @@
     , codModel
     , codWillAutoRenew
     , codMeid
+    , codDeviceFiles
     , codDeviceId
     , codBootMode
+    , codTpmVersionInfo
     , codOrderNumber
+    , codDiskVolumeReports
     , codAnnotatedAssetId
     , codNotes
     , codSerialNumber
     , codFirmwareVersion
     , codOSVersion
+    , codSystemRamTotal
 
     -- ** ChromeosDevicesPatchProjection
     , ChromeosDevicesPatchProjection (..)
@@ -550,9 +629,25 @@
     , sSchemas
     , sKind
 
+    -- ** ChromeOSDeviceDeviceFilesItem
+    , ChromeOSDeviceDeviceFilesItem
+    , chromeOSDeviceDeviceFilesItem
+    , coddfiName
+    , coddfiDownloadURL
+    , coddfiType
+    , coddfiCreateTime
+
     -- ** UsersListViewType
     , UsersListViewType (..)
 
+    -- ** Buildings
+    , Buildings
+    , buildings
+    , bEtag
+    , bNextPageToken
+    , bBuildings
+    , bKind
+
     -- ** OrgUnitsListType
     , OrgUnitsListType (..)
 
@@ -596,6 +691,13 @@
     , userCustomSchemas
     , ucsAddtional
 
+    -- ** UserKeyword
+    , UserKeyword
+    , userKeyword
+    , ukValue
+    , ukType
+    , ukCustomType
+
     -- ** DomainAliases
     , DomainAliases
     , domainAliases
@@ -618,9 +720,20 @@
     , crResourceType
     , crResourceName
     , crKind
+    , crBuildingId
+    , crFeatureInstances
     , crResourceEmail
+    , crCapacity
     , crResourceDescription
+    , crFloorName
+    , crGeneratedResourceName
+    , crResourceCategory
+    , crFloorSection
+    , crUserVisibleDescription
 
+    -- ** GroupsListOrderBy
+    , GroupsListOrderBy (..)
+
     -- ** UserUndelete
     , UserUndelete
     , userUndelete
@@ -678,6 +791,17 @@
     -- ** UsersWatchViewType
     , UsersWatchViewType (..)
 
+    -- ** Building
+    , Building
+    , building
+    , buiEtags
+    , buiKind
+    , buiBuildingId
+    , buiCoordinates
+    , buiBuildingName
+    , buiFloorNames
+    , buiDescription
+
     -- ** ChromeOSDeviceRecentUsersItem
     , ChromeOSDeviceRecentUsersItem
     , chromeOSDeviceRecentUsersItem
@@ -694,6 +818,13 @@
     , dDomainAliasName
     , dParentDomainName
 
+    -- ** UserGender
+    , UserGender
+    , userGender
+    , ugAddressMeAs
+    , ugCustomGender
+    , ugType
+
     -- ** Alias
     , Alias
     , alias
@@ -713,8 +844,14 @@
     , schKind
     , schSchemaName
     , schSchemaId
+    , schDisplayName
     , schFields
 
+    -- ** ChromeOSMoveDevicesToOu
+    , ChromeOSMoveDevicesToOu
+    , chromeOSMoveDevicesToOu
+    , comdtoDeviceIds
+
     -- ** User
     , User
     , user
@@ -722,8 +859,10 @@
     , useLastLoginTime
     , useThumbnailPhotoEtag
     , useEtag
+    , usePosixAccounts
     , useIPWhiteListed
     , useRelations
+    , useSSHPublicKeys
     , useHashFunction
     , useKind
     , useChangePasswordAtNextLogin
@@ -738,12 +877,15 @@
     , useNonEditableAliases
     , useOrgUnitPath
     , useCustomerId
+    , useLanguages
     , useIncludeInGlobalAddressList
+    , useGender
     , usePhones
     , useName
     , usePassword
     , useEmails
     , useIms
+    , useKeywords
     , useIsAdmin
     , useIsEnrolledIn2Sv
     , useId
@@ -752,6 +894,8 @@
     , useIsEnforcedIn2Sv
     , useNotes
     , useIsDelegatedAdmin
+    , useLocations
+    , useArchived
     , useIsMailboxSetup
     , useCustomSchemas
     , useSuspensionReason
@@ -765,6 +909,11 @@
     , codaAction
     , codaDeprovisionReason
 
+    -- ** FeatureRename
+    , FeatureRename
+    , featureRename
+    , frNewName
+
     -- ** Role
     , Role
     , role'
@@ -799,6 +948,13 @@
     , mdaiDisplayName
     , mdaiPermission
 
+    -- ** ChromeOSDeviceDiskVolumeReportsItemVolumeInfoItem
+    , ChromeOSDeviceDiskVolumeReportsItemVolumeInfoItem
+    , chromeOSDeviceDiskVolumeReportsItemVolumeInfoItem
+    , coddvriviiStorageFree
+    , coddvriviiStorageTotal
+    , coddvriviiVolumeId
+
     -- ** MobileDevicesListOrderBy
     , MobileDevicesListOrderBy (..)
 
@@ -812,6 +968,13 @@
     , oKind
     , oOrganizationUnits
 
+    -- ** UserSSHPublicKey
+    , UserSSHPublicKey
+    , userSSHPublicKey
+    , uspkFingerprint
+    , uspkKey
+    , uspkExpirationTimeUsec
+
     -- ** VerificationCodes
     , VerificationCodes
     , verificationCodes
@@ -819,6 +982,12 @@
     , vKind
     , vItems
 
+    -- ** BuildingCoordinates
+    , BuildingCoordinates
+    , buildingCoordinates
+    , bcLatitude
+    , bcLongitude
+
     -- ** ChromeosDevicesListSortOrder
     , ChromeosDevicesListSortOrder (..)
 
@@ -829,14 +998,40 @@
     , urType
     , urCustomType
 
+    -- ** TrustedApps
+    , TrustedApps
+    , trustedApps
+    , taEtag
+    , taNextPageToken
+    , taKind
+    , taTrustedApps
+
     -- ** UsersWatchSortOrder
     , UsersWatchSortOrder (..)
 
+    -- ** Features
+    , Features
+    , features
+    , feaEtag
+    , feaNextPageToken
+    , feaKind
+    , feaFeatures
+
     -- ** ChannelParams
     , ChannelParams
     , channelParams
     , cpAddtional
 
+    -- ** ChromeOSDeviceTpmVersionInfo
+    , ChromeOSDeviceTpmVersionInfo
+    , chromeOSDeviceTpmVersionInfo
+    , codtviVendorSpecific
+    , codtviManufacturer
+    , codtviSpecLevel
+    , codtviTpmModel
+    , codtviFamily
+    , codtviFirmwareVersion
+
     -- ** UserOrganization
     , UserOrganization
     , userOrganization
@@ -847,6 +1042,7 @@
     , uoSymbol
     , uoPrimary
     , uoName
+    , uoFullTimeEquivalent
     , uoTitle
     , uoType
     , uoCustomType
@@ -860,6 +1056,9 @@
     , uwType
     , uwCustomType
 
+    -- ** GroupsListSortOrder
+    , GroupsListSortOrder (..)
+
     -- ** ChromeOSDeviceActiveTimeRangesItem
     , ChromeOSDeviceActiveTimeRangesItem
     , chromeOSDeviceActiveTimeRangesItem
@@ -894,9 +1093,34 @@
     , upId
     , upPrimaryEmail
 
+    -- ** ChromeOSDeviceSystemRamFreeReportsItem
+    , ChromeOSDeviceSystemRamFreeReportsItem
+    , chromeOSDeviceSystemRamFreeReportsItem
+    , codsrfriReportTime
+    , codsrfriSystemRamFreeInfo
+
+    -- ** UserPosixAccount
+    , UserPosixAccount
+    , userPosixAccount
+    , upaGecos
+    , upaUid
+    , upaUsername
+    , upaShell
+    , upaPrimary
+    , upaAccountId
+    , upaGid
+    , upaOperatingSystemType
+    , upaSystemId
+    , upaHomeDirectory
+
     -- ** UsersListProjection
     , UsersListProjection (..)
 
+    -- ** FeatureInstance
+    , FeatureInstance
+    , featureInstance
+    , fiFeature
+
     -- ** ChromeosDevicesUpdateProjection
     , ChromeosDevicesUpdateProjection (..)
 
@@ -947,6 +1171,13 @@
     , mobApplications
     , mobDefaultLanguage
 
+    -- ** ChromeOSDeviceCPUStatusReportsItem
+    , ChromeOSDeviceCPUStatusReportsItem
+    , chromeOSDeviceCPUStatusReportsItem
+    , codcsriCPUUtilizationPercentageInfo
+    , codcsriCPUTemperatureInfo
+    , codcsriReportTime
+
     -- ** Member
     , Member
     , member
@@ -954,15 +1185,34 @@
     , memStatus
     , memEtag
     , memKind
+    , memDeliverySettings
     , memRole
     , memId
     , memType
 
+    -- ** AppAccessCollections
+    , AppAccessCollections
+    , appAccessCollections
+    , aacEtag
+    , aacResourceId
+    , aacEnforceSettingsForAndroidDrive
+    , aacResourceName
+    , aacKind
+    , aacTrustDomainOwnedApps
+    , aacBlockedAPIAccessBuckets
+    , aacErrorMessage
+
     -- ** UserCustomProperties
     , UserCustomProperties
     , userCustomProperties
     , ucpAddtional
 
+    -- ** UserLanguage
+    , UserLanguage
+    , userLanguage
+    , ulLanguageCode
+    , ulCustomLanguage
+
     -- ** Domains
     , Domains
     , domains
@@ -1025,6 +1275,7 @@
     , sfsIndexed
     , sfsFieldType
     , sfsFieldName
+    , sfsDisplayName
     , sfsMultiValued
 
     -- ** ChromeOSDevices
@@ -1035,6 +1286,20 @@
     , cosdKind
     , cosdChromeosDevices
 
+    -- ** MembersHasMember
+    , MembersHasMember
+    , membersHasMember
+    , mhmIsMember
+
+    -- ** TrustedAppId
+    , TrustedAppId
+    , trustedAppId
+    , taiCertificateHashSHA256
+    , taiEtag
+    , taiKind
+    , taiCertificateHashSHA1
+    , taiAndroidPackageName
+
     -- ** UserExternalId
     , UserExternalId
     , userExternalId
@@ -1049,6 +1314,12 @@
     , aspKind
     , aspItems
 
+    -- ** ChromeOSDeviceCPUStatusReportsItemCPUTemperatureInfoItem
+    , ChromeOSDeviceCPUStatusReportsItemCPUTemperatureInfoItem
+    , chromeOSDeviceCPUStatusReportsItemCPUTemperatureInfoItem
+    , codcsrictiiTemperature
+    , codcsrictiiLabel
+
     -- ** UsersGetViewType
     , UsersGetViewType (..)
 
@@ -1075,6 +1346,7 @@
 import           Network.Google.Resource.Directory.ChromeosDevices.Action
 import           Network.Google.Resource.Directory.ChromeosDevices.Get
 import           Network.Google.Resource.Directory.ChromeosDevices.List
+import           Network.Google.Resource.Directory.ChromeosDevices.MoveDevicesToOu
 import           Network.Google.Resource.Directory.ChromeosDevices.Patch
 import           Network.Google.Resource.Directory.ChromeosDevices.Update
 import           Network.Google.Resource.Directory.Customers.Get
@@ -1099,6 +1371,7 @@
 import           Network.Google.Resource.Directory.Groups.Update
 import           Network.Google.Resource.Directory.Members.Delete
 import           Network.Google.Resource.Directory.Members.Get
+import           Network.Google.Resource.Directory.Members.HasMember
 import           Network.Google.Resource.Directory.Members.Insert
 import           Network.Google.Resource.Directory.Members.List
 import           Network.Google.Resource.Directory.Members.Patch
@@ -1119,12 +1392,27 @@
 import           Network.Google.Resource.Directory.OrgUnits.Patch
 import           Network.Google.Resource.Directory.OrgUnits.Update
 import           Network.Google.Resource.Directory.Privileges.List
+import           Network.Google.Resource.Directory.ResolvedAppAccessSettings.GetSettings
+import           Network.Google.Resource.Directory.ResolvedAppAccessSettings.ListTrustedApps
+import           Network.Google.Resource.Directory.Resources.Buildings.Delete
+import           Network.Google.Resource.Directory.Resources.Buildings.Get
+import           Network.Google.Resource.Directory.Resources.Buildings.Insert
+import           Network.Google.Resource.Directory.Resources.Buildings.List
+import           Network.Google.Resource.Directory.Resources.Buildings.Patch
+import           Network.Google.Resource.Directory.Resources.Buildings.Update
 import           Network.Google.Resource.Directory.Resources.Calendars.Delete
 import           Network.Google.Resource.Directory.Resources.Calendars.Get
 import           Network.Google.Resource.Directory.Resources.Calendars.Insert
 import           Network.Google.Resource.Directory.Resources.Calendars.List
 import           Network.Google.Resource.Directory.Resources.Calendars.Patch
 import           Network.Google.Resource.Directory.Resources.Calendars.Update
+import           Network.Google.Resource.Directory.Resources.Features.Delete
+import           Network.Google.Resource.Directory.Resources.Features.Get
+import           Network.Google.Resource.Directory.Resources.Features.Insert
+import           Network.Google.Resource.Directory.Resources.Features.List
+import           Network.Google.Resource.Directory.Resources.Features.Patch
+import           Network.Google.Resource.Directory.Resources.Features.Rename
+import           Network.Google.Resource.Directory.Resources.Features.Update
 import           Network.Google.Resource.Directory.RoleAssignments.Delete
 import           Network.Google.Resource.Directory.RoleAssignments.Get
 import           Network.Google.Resource.Directory.RoleAssignments.Insert
@@ -1217,6 +1505,8 @@
        :<|> SchemasGetResource
        :<|> SchemasDeleteResource
        :<|> SchemasUpdateResource
+       :<|> ResolvedAppAccessSettingsListTrustedAppsResource
+       :<|> ResolvedAppAccessSettingsGetSettingsResource
        :<|> TokensListResource
        :<|> TokensGetResource
        :<|> TokensDeleteResource
@@ -1227,6 +1517,7 @@
        :<|> ChannelsStopResource
        :<|> MembersInsertResource
        :<|> MembersListResource
+       :<|> MembersHasMemberResource
        :<|> MembersPatchResource
        :<|> MembersGetResource
        :<|> MembersDeleteResource
@@ -1235,12 +1526,25 @@
        :<|> MobileDevicesGetResource
        :<|> MobileDevicesActionResource
        :<|> MobileDevicesDeleteResource
+       :<|> ResourcesBuildingsInsertResource
+       :<|> ResourcesBuildingsListResource
+       :<|> ResourcesBuildingsPatchResource
+       :<|> ResourcesBuildingsGetResource
+       :<|> ResourcesBuildingsDeleteResource
+       :<|> ResourcesBuildingsUpdateResource
        :<|> ResourcesCalendarsInsertResource
        :<|> ResourcesCalendarsListResource
        :<|> ResourcesCalendarsPatchResource
        :<|> ResourcesCalendarsGetResource
        :<|> ResourcesCalendarsDeleteResource
        :<|> ResourcesCalendarsUpdateResource
+       :<|> ResourcesFeaturesInsertResource
+       :<|> ResourcesFeaturesListResource
+       :<|> ResourcesFeaturesPatchResource
+       :<|> ResourcesFeaturesGetResource
+       :<|> ResourcesFeaturesRenameResource
+       :<|> ResourcesFeaturesDeleteResource
+       :<|> ResourcesFeaturesUpdateResource
        :<|> OrgUnitsInsertResource
        :<|> OrgUnitsListResource
        :<|> OrgUnitsPatchResource
@@ -1260,6 +1564,7 @@
        :<|> NotificationsDeleteResource
        :<|> NotificationsUpdateResource
        :<|> ChromeosDevicesListResource
+       :<|> ChromeosDevicesMoveDevicesToOuResource
        :<|> ChromeosDevicesPatchResource
        :<|> ChromeosDevicesGetResource
        :<|> ChromeosDevicesActionResource
diff --git a/gen/Network/Google/Directory/Types.hs b/gen/Network/Google/Directory/Types.hs
--- a/gen/Network/Google/Directory/Types.hs
+++ b/gen/Network/Google/Directory/Types.hs
@@ -48,6 +48,17 @@
     , adminDirectoryDeviceMobileScope
     , adminDirectoryDeviceMobileReadOnlyScope
 
+    -- * UserLocation
+    , UserLocation
+    , userLocation
+    , ulArea
+    , ulBuildingId
+    , ulDeskCode
+    , ulFloorName
+    , ulType
+    , ulCustomType
+    , ulFloorSection
+
     -- * VerificationCode
     , VerificationCode
     , verificationCode
@@ -56,6 +67,13 @@
     , vcKind
     , vcUserId
 
+    -- * Feature
+    , Feature
+    , feature
+    , fEtags
+    , fKind
+    , fName
+
     -- * OrgUnit
     , OrgUnit
     , orgUnit
@@ -134,6 +152,11 @@
     -- * UsersWatchEvent
     , UsersWatchEvent (..)
 
+    -- * ChromeOSDeviceDiskVolumeReportsItem
+    , ChromeOSDeviceDiskVolumeReportsItem
+    , chromeOSDeviceDiskVolumeReportsItem
+    , coddvriVolumeInfo
+
     -- * UserAddress
     , UserAddress
     , userAddress
@@ -194,7 +217,9 @@
     , chromeOSDevice
     , codStatus
     , codEtag
+    , codCPUStatusReports
     , codAnnotatedUser
+    , codSystemRamFreeReports
     , codPlatformVersion
     , codLastSync
     , codActiveTimeRanges
@@ -209,14 +234,18 @@
     , codModel
     , codWillAutoRenew
     , codMeid
+    , codDeviceFiles
     , codDeviceId
     , codBootMode
+    , codTpmVersionInfo
     , codOrderNumber
+    , codDiskVolumeReports
     , codAnnotatedAssetId
     , codNotes
     , codSerialNumber
     , codFirmwareVersion
     , codOSVersion
+    , codSystemRamTotal
 
     -- * ChromeosDevicesPatchProjection
     , ChromeosDevicesPatchProjection (..)
@@ -251,9 +280,25 @@
     , sSchemas
     , sKind
 
+    -- * ChromeOSDeviceDeviceFilesItem
+    , ChromeOSDeviceDeviceFilesItem
+    , chromeOSDeviceDeviceFilesItem
+    , coddfiName
+    , coddfiDownloadURL
+    , coddfiType
+    , coddfiCreateTime
+
     -- * UsersListViewType
     , UsersListViewType (..)
 
+    -- * Buildings
+    , Buildings
+    , buildings
+    , bEtag
+    , bNextPageToken
+    , bBuildings
+    , bKind
+
     -- * OrgUnitsListType
     , OrgUnitsListType (..)
 
@@ -297,6 +342,13 @@
     , userCustomSchemas
     , ucsAddtional
 
+    -- * UserKeyword
+    , UserKeyword
+    , userKeyword
+    , ukValue
+    , ukType
+    , ukCustomType
+
     -- * DomainAliases
     , DomainAliases
     , domainAliases
@@ -319,9 +371,20 @@
     , crResourceType
     , crResourceName
     , crKind
+    , crBuildingId
+    , crFeatureInstances
     , crResourceEmail
+    , crCapacity
     , crResourceDescription
+    , crFloorName
+    , crGeneratedResourceName
+    , crResourceCategory
+    , crFloorSection
+    , crUserVisibleDescription
 
+    -- * GroupsListOrderBy
+    , GroupsListOrderBy (..)
+
     -- * UserUndelete
     , UserUndelete
     , userUndelete
@@ -379,6 +442,17 @@
     -- * UsersWatchViewType
     , UsersWatchViewType (..)
 
+    -- * Building
+    , Building
+    , building
+    , buiEtags
+    , buiKind
+    , buiBuildingId
+    , buiCoordinates
+    , buiBuildingName
+    , buiFloorNames
+    , buiDescription
+
     -- * ChromeOSDeviceRecentUsersItem
     , ChromeOSDeviceRecentUsersItem
     , chromeOSDeviceRecentUsersItem
@@ -395,6 +469,13 @@
     , dDomainAliasName
     , dParentDomainName
 
+    -- * UserGender
+    , UserGender
+    , userGender
+    , ugAddressMeAs
+    , ugCustomGender
+    , ugType
+
     -- * Alias
     , Alias
     , alias
@@ -414,8 +495,14 @@
     , schKind
     , schSchemaName
     , schSchemaId
+    , schDisplayName
     , schFields
 
+    -- * ChromeOSMoveDevicesToOu
+    , ChromeOSMoveDevicesToOu
+    , chromeOSMoveDevicesToOu
+    , comdtoDeviceIds
+
     -- * User
     , User
     , user
@@ -423,8 +510,10 @@
     , useLastLoginTime
     , useThumbnailPhotoEtag
     , useEtag
+    , usePosixAccounts
     , useIPWhiteListed
     , useRelations
+    , useSSHPublicKeys
     , useHashFunction
     , useKind
     , useChangePasswordAtNextLogin
@@ -439,12 +528,15 @@
     , useNonEditableAliases
     , useOrgUnitPath
     , useCustomerId
+    , useLanguages
     , useIncludeInGlobalAddressList
+    , useGender
     , usePhones
     , useName
     , usePassword
     , useEmails
     , useIms
+    , useKeywords
     , useIsAdmin
     , useIsEnrolledIn2Sv
     , useId
@@ -453,6 +545,8 @@
     , useIsEnforcedIn2Sv
     , useNotes
     , useIsDelegatedAdmin
+    , useLocations
+    , useArchived
     , useIsMailboxSetup
     , useCustomSchemas
     , useSuspensionReason
@@ -466,6 +560,11 @@
     , codaAction
     , codaDeprovisionReason
 
+    -- * FeatureRename
+    , FeatureRename
+    , featureRename
+    , frNewName
+
     -- * Role
     , Role
     , role'
@@ -500,6 +599,13 @@
     , mdaiDisplayName
     , mdaiPermission
 
+    -- * ChromeOSDeviceDiskVolumeReportsItemVolumeInfoItem
+    , ChromeOSDeviceDiskVolumeReportsItemVolumeInfoItem
+    , chromeOSDeviceDiskVolumeReportsItemVolumeInfoItem
+    , coddvriviiStorageFree
+    , coddvriviiStorageTotal
+    , coddvriviiVolumeId
+
     -- * MobileDevicesListOrderBy
     , MobileDevicesListOrderBy (..)
 
@@ -513,6 +619,13 @@
     , oKind
     , oOrganizationUnits
 
+    -- * UserSSHPublicKey
+    , UserSSHPublicKey
+    , userSSHPublicKey
+    , uspkFingerprint
+    , uspkKey
+    , uspkExpirationTimeUsec
+
     -- * VerificationCodes
     , VerificationCodes
     , verificationCodes
@@ -520,6 +633,12 @@
     , vKind
     , vItems
 
+    -- * BuildingCoordinates
+    , BuildingCoordinates
+    , buildingCoordinates
+    , bcLatitude
+    , bcLongitude
+
     -- * ChromeosDevicesListSortOrder
     , ChromeosDevicesListSortOrder (..)
 
@@ -530,14 +649,40 @@
     , urType
     , urCustomType
 
+    -- * TrustedApps
+    , TrustedApps
+    , trustedApps
+    , taEtag
+    , taNextPageToken
+    , taKind
+    , taTrustedApps
+
     -- * UsersWatchSortOrder
     , UsersWatchSortOrder (..)
 
+    -- * Features
+    , Features
+    , features
+    , feaEtag
+    , feaNextPageToken
+    , feaKind
+    , feaFeatures
+
     -- * ChannelParams
     , ChannelParams
     , channelParams
     , cpAddtional
 
+    -- * ChromeOSDeviceTpmVersionInfo
+    , ChromeOSDeviceTpmVersionInfo
+    , chromeOSDeviceTpmVersionInfo
+    , codtviVendorSpecific
+    , codtviManufacturer
+    , codtviSpecLevel
+    , codtviTpmModel
+    , codtviFamily
+    , codtviFirmwareVersion
+
     -- * UserOrganization
     , UserOrganization
     , userOrganization
@@ -548,6 +693,7 @@
     , uoSymbol
     , uoPrimary
     , uoName
+    , uoFullTimeEquivalent
     , uoTitle
     , uoType
     , uoCustomType
@@ -561,6 +707,9 @@
     , uwType
     , uwCustomType
 
+    -- * GroupsListSortOrder
+    , GroupsListSortOrder (..)
+
     -- * ChromeOSDeviceActiveTimeRangesItem
     , ChromeOSDeviceActiveTimeRangesItem
     , chromeOSDeviceActiveTimeRangesItem
@@ -595,9 +744,34 @@
     , upId
     , upPrimaryEmail
 
+    -- * ChromeOSDeviceSystemRamFreeReportsItem
+    , ChromeOSDeviceSystemRamFreeReportsItem
+    , chromeOSDeviceSystemRamFreeReportsItem
+    , codsrfriReportTime
+    , codsrfriSystemRamFreeInfo
+
+    -- * UserPosixAccount
+    , UserPosixAccount
+    , userPosixAccount
+    , upaGecos
+    , upaUid
+    , upaUsername
+    , upaShell
+    , upaPrimary
+    , upaAccountId
+    , upaGid
+    , upaOperatingSystemType
+    , upaSystemId
+    , upaHomeDirectory
+
     -- * UsersListProjection
     , UsersListProjection (..)
 
+    -- * FeatureInstance
+    , FeatureInstance
+    , featureInstance
+    , fiFeature
+
     -- * ChromeosDevicesUpdateProjection
     , ChromeosDevicesUpdateProjection (..)
 
@@ -648,6 +822,13 @@
     , mobApplications
     , mobDefaultLanguage
 
+    -- * ChromeOSDeviceCPUStatusReportsItem
+    , ChromeOSDeviceCPUStatusReportsItem
+    , chromeOSDeviceCPUStatusReportsItem
+    , codcsriCPUUtilizationPercentageInfo
+    , codcsriCPUTemperatureInfo
+    , codcsriReportTime
+
     -- * Member
     , Member
     , member
@@ -655,15 +836,34 @@
     , memStatus
     , memEtag
     , memKind
+    , memDeliverySettings
     , memRole
     , memId
     , memType
 
+    -- * AppAccessCollections
+    , AppAccessCollections
+    , appAccessCollections
+    , aacEtag
+    , aacResourceId
+    , aacEnforceSettingsForAndroidDrive
+    , aacResourceName
+    , aacKind
+    , aacTrustDomainOwnedApps
+    , aacBlockedAPIAccessBuckets
+    , aacErrorMessage
+
     -- * UserCustomProperties
     , UserCustomProperties
     , userCustomProperties
     , ucpAddtional
 
+    -- * UserLanguage
+    , UserLanguage
+    , userLanguage
+    , ulLanguageCode
+    , ulCustomLanguage
+
     -- * Domains
     , Domains
     , domains
@@ -726,6 +926,7 @@
     , sfsIndexed
     , sfsFieldType
     , sfsFieldName
+    , sfsDisplayName
     , sfsMultiValued
 
     -- * ChromeOSDevices
@@ -736,6 +937,20 @@
     , cosdKind
     , cosdChromeosDevices
 
+    -- * MembersHasMember
+    , MembersHasMember
+    , membersHasMember
+    , mhmIsMember
+
+    -- * TrustedAppId
+    , TrustedAppId
+    , trustedAppId
+    , taiCertificateHashSHA256
+    , taiEtag
+    , taiKind
+    , taiCertificateHashSHA1
+    , taiAndroidPackageName
+
     -- * UserExternalId
     , UserExternalId
     , userExternalId
@@ -749,6 +964,12 @@
     , aspEtag
     , aspKind
     , aspItems
+
+    -- * ChromeOSDeviceCPUStatusReportsItemCPUTemperatureInfoItem
+    , ChromeOSDeviceCPUStatusReportsItemCPUTemperatureInfoItem
+    , chromeOSDeviceCPUStatusReportsItemCPUTemperatureInfoItem
+    , codcsrictiiTemperature
+    , codcsrictiiLabel
 
     -- * UsersGetViewType
     , UsersGetViewType (..)
diff --git a/gen/Network/Google/Directory/Types/Product.hs b/gen/Network/Google/Directory/Types/Product.hs
--- a/gen/Network/Google/Directory/Types/Product.hs
+++ b/gen/Network/Google/Directory/Types/Product.hs
@@ -20,5930 +20,7958 @@
 import           Network.Google.Directory.Types.Sum
 import           Network.Google.Prelude
 
--- | JSON template for verification codes in Directory API.
---
--- /See:/ 'verificationCode' smart constructor.
-data VerificationCode = VerificationCode'
-    { _vcVerificationCode :: !(Maybe Text)
-    , _vcEtag             :: !(Maybe Text)
-    , _vcKind             :: !Text
-    , _vcUserId           :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VerificationCode' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vcVerificationCode'
---
--- * 'vcEtag'
---
--- * 'vcKind'
---
--- * 'vcUserId'
-verificationCode
-    :: VerificationCode
-verificationCode =
-    VerificationCode'
-    { _vcVerificationCode = Nothing
-    , _vcEtag = Nothing
-    , _vcKind = "admin#directory#verificationCode"
-    , _vcUserId = Nothing
-    }
-
--- | A current verification code for the user. Invalidated or used
--- verification codes are not returned as part of the result.
-vcVerificationCode :: Lens' VerificationCode (Maybe Text)
-vcVerificationCode
-  = lens _vcVerificationCode
-      (\ s a -> s{_vcVerificationCode = a})
-
--- | ETag of the resource.
-vcEtag :: Lens' VerificationCode (Maybe Text)
-vcEtag = lens _vcEtag (\ s a -> s{_vcEtag = a})
-
--- | The type of the resource. This is always
--- admin#directory#verificationCode.
-vcKind :: Lens' VerificationCode Text
-vcKind = lens _vcKind (\ s a -> s{_vcKind = a})
-
--- | The obfuscated unique ID of the user.
-vcUserId :: Lens' VerificationCode (Maybe Text)
-vcUserId = lens _vcUserId (\ s a -> s{_vcUserId = a})
-
-instance FromJSON VerificationCode where
-        parseJSON
-          = withObject "VerificationCode"
-              (\ o ->
-                 VerificationCode' <$>
-                   (o .:? "verificationCode") <*> (o .:? "etag") <*>
-                     (o .:? "kind" .!= "admin#directory#verificationCode")
-                     <*> (o .:? "userId"))
-
-instance ToJSON VerificationCode where
-        toJSON VerificationCode'{..}
-          = object
-              (catMaybes
-                 [("verificationCode" .=) <$> _vcVerificationCode,
-                  ("etag" .=) <$> _vcEtag, Just ("kind" .= _vcKind),
-                  ("userId" .=) <$> _vcUserId])
-
--- | JSON template for Org Unit resource in Directory API.
---
--- /See:/ 'orgUnit' smart constructor.
-data OrgUnit = OrgUnit'
-    { _ouEtag              :: !(Maybe Text)
-    , _ouParentOrgUnitPath :: !(Maybe Text)
-    , _ouKind              :: !Text
-    , _ouOrgUnitPath       :: !(Maybe Text)
-    , _ouName              :: !(Maybe Text)
-    , _ouBlockInheritance  :: !(Maybe Bool)
-    , _ouParentOrgUnitId   :: !(Maybe Text)
-    , _ouDescription       :: !(Maybe Text)
-    , _ouOrgUnitId         :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'OrgUnit' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ouEtag'
---
--- * 'ouParentOrgUnitPath'
---
--- * 'ouKind'
---
--- * 'ouOrgUnitPath'
---
--- * 'ouName'
---
--- * 'ouBlockInheritance'
---
--- * 'ouParentOrgUnitId'
---
--- * 'ouDescription'
---
--- * 'ouOrgUnitId'
-orgUnit
-    :: OrgUnit
-orgUnit =
-    OrgUnit'
-    { _ouEtag = Nothing
-    , _ouParentOrgUnitPath = Nothing
-    , _ouKind = "admin#directory#orgUnit"
-    , _ouOrgUnitPath = Nothing
-    , _ouName = Nothing
-    , _ouBlockInheritance = Nothing
-    , _ouParentOrgUnitId = Nothing
-    , _ouDescription = Nothing
-    , _ouOrgUnitId = Nothing
-    }
-
--- | ETag of the resource.
-ouEtag :: Lens' OrgUnit (Maybe Text)
-ouEtag = lens _ouEtag (\ s a -> s{_ouEtag = a})
-
--- | Path of parent OrgUnit
-ouParentOrgUnitPath :: Lens' OrgUnit (Maybe Text)
-ouParentOrgUnitPath
-  = lens _ouParentOrgUnitPath
-      (\ s a -> s{_ouParentOrgUnitPath = a})
-
--- | Kind of resource this is.
-ouKind :: Lens' OrgUnit Text
-ouKind = lens _ouKind (\ s a -> s{_ouKind = a})
-
--- | Path of OrgUnit
-ouOrgUnitPath :: Lens' OrgUnit (Maybe Text)
-ouOrgUnitPath
-  = lens _ouOrgUnitPath
-      (\ s a -> s{_ouOrgUnitPath = a})
-
--- | Name of OrgUnit
-ouName :: Lens' OrgUnit (Maybe Text)
-ouName = lens _ouName (\ s a -> s{_ouName = a})
-
--- | Should block inheritance
-ouBlockInheritance :: Lens' OrgUnit (Maybe Bool)
-ouBlockInheritance
-  = lens _ouBlockInheritance
-      (\ s a -> s{_ouBlockInheritance = a})
-
--- | Id of parent OrgUnit
-ouParentOrgUnitId :: Lens' OrgUnit (Maybe Text)
-ouParentOrgUnitId
-  = lens _ouParentOrgUnitId
-      (\ s a -> s{_ouParentOrgUnitId = a})
-
--- | Description of OrgUnit
-ouDescription :: Lens' OrgUnit (Maybe Text)
-ouDescription
-  = lens _ouDescription
-      (\ s a -> s{_ouDescription = a})
-
--- | Id of OrgUnit
-ouOrgUnitId :: Lens' OrgUnit (Maybe Text)
-ouOrgUnitId
-  = lens _ouOrgUnitId (\ s a -> s{_ouOrgUnitId = a})
-
-instance FromJSON OrgUnit where
-        parseJSON
-          = withObject "OrgUnit"
-              (\ o ->
-                 OrgUnit' <$>
-                   (o .:? "etag") <*> (o .:? "parentOrgUnitPath") <*>
-                     (o .:? "kind" .!= "admin#directory#orgUnit")
-                     <*> (o .:? "orgUnitPath")
-                     <*> (o .:? "name")
-                     <*> (o .:? "blockInheritance")
-                     <*> (o .:? "parentOrgUnitId")
-                     <*> (o .:? "description")
-                     <*> (o .:? "orgUnitId"))
-
-instance ToJSON OrgUnit where
-        toJSON OrgUnit'{..}
-          = object
-              (catMaybes
-                 [("etag" .=) <$> _ouEtag,
-                  ("parentOrgUnitPath" .=) <$> _ouParentOrgUnitPath,
-                  Just ("kind" .= _ouKind),
-                  ("orgUnitPath" .=) <$> _ouOrgUnitPath,
-                  ("name" .=) <$> _ouName,
-                  ("blockInheritance" .=) <$> _ouBlockInheritance,
-                  ("parentOrgUnitId" .=) <$> _ouParentOrgUnitId,
-                  ("description" .=) <$> _ouDescription,
-                  ("orgUnitId" .=) <$> _ouOrgUnitId])
-
--- | JSON request template for setting\/revoking admin status of a user in
--- Directory API.
---
--- /See:/ 'userMakeAdmin' smart constructor.
-newtype UserMakeAdmin = UserMakeAdmin'
-    { _umaStatus :: Maybe Bool
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'UserMakeAdmin' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'umaStatus'
-userMakeAdmin
-    :: UserMakeAdmin
-userMakeAdmin =
-    UserMakeAdmin'
-    { _umaStatus = Nothing
-    }
-
--- | Boolean indicating new admin status of the user
-umaStatus :: Lens' UserMakeAdmin (Maybe Bool)
-umaStatus
-  = lens _umaStatus (\ s a -> s{_umaStatus = a})
-
-instance FromJSON UserMakeAdmin where
-        parseJSON
-          = withObject "UserMakeAdmin"
-              (\ o -> UserMakeAdmin' <$> (o .:? "status"))
-
-instance ToJSON UserMakeAdmin where
-        toJSON UserMakeAdmin'{..}
-          = object (catMaybes [("status" .=) <$> _umaStatus])
-
--- | JSON template for About (notes) of a user in Directory API.
---
--- /See:/ 'userAbout' smart constructor.
-data UserAbout = UserAbout'
-    { _uaValue       :: !(Maybe Text)
-    , _uaContentType :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'UserAbout' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'uaValue'
---
--- * 'uaContentType'
-userAbout
-    :: UserAbout
-userAbout =
-    UserAbout'
-    { _uaValue = Nothing
-    , _uaContentType = Nothing
-    }
-
--- | Actual value of notes.
-uaValue :: Lens' UserAbout (Maybe Text)
-uaValue = lens _uaValue (\ s a -> s{_uaValue = a})
-
--- | About entry can have a type which indicates the content type. It can
--- either be plain or html. By default, notes contents are assumed to
--- contain plain text.
-uaContentType :: Lens' UserAbout (Maybe Text)
-uaContentType
-  = lens _uaContentType
-      (\ s a -> s{_uaContentType = a})
-
-instance FromJSON UserAbout where
-        parseJSON
-          = withObject "UserAbout"
-              (\ o ->
-                 UserAbout' <$>
-                   (o .:? "value") <*> (o .:? "contentType"))
-
-instance ToJSON UserAbout where
-        toJSON UserAbout'{..}
-          = object
-              (catMaybes
-                 [("value" .=) <$> _uaValue,
-                  ("contentType" .=) <$> _uaContentType])
-
--- | JSON response template for List privileges operation in Directory API.
---
--- /See:/ 'privileges' smart constructor.
-data Privileges = Privileges'
-    { _pEtag  :: !(Maybe Text)
-    , _pKind  :: !Text
-    , _pItems :: !(Maybe [Privilege])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Privileges' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'pEtag'
---
--- * 'pKind'
---
--- * 'pItems'
-privileges
-    :: Privileges
-privileges =
-    Privileges'
-    { _pEtag = Nothing
-    , _pKind = "admin#directory#privileges"
-    , _pItems = Nothing
-    }
-
--- | ETag of the resource.
-pEtag :: Lens' Privileges (Maybe Text)
-pEtag = lens _pEtag (\ s a -> s{_pEtag = a})
-
--- | The type of the API resource. This is always admin#directory#privileges.
-pKind :: Lens' Privileges Text
-pKind = lens _pKind (\ s a -> s{_pKind = a})
-
--- | A list of Privilege resources.
-pItems :: Lens' Privileges [Privilege]
-pItems
-  = lens _pItems (\ s a -> s{_pItems = a}) . _Default .
-      _Coerce
-
-instance FromJSON Privileges where
-        parseJSON
-          = withObject "Privileges"
-              (\ o ->
-                 Privileges' <$>
-                   (o .:? "etag") <*>
-                     (o .:? "kind" .!= "admin#directory#privileges")
-                     <*> (o .:? "items" .!= mempty))
-
-instance ToJSON Privileges where
-        toJSON Privileges'{..}
-          = object
-              (catMaybes
-                 [("etag" .=) <$> _pEtag, Just ("kind" .= _pKind),
-                  ("items" .=) <$> _pItems])
-
--- | JSON response template for List Groups operation in Directory API.
---
--- /See:/ 'groups' smart constructor.
-data Groups = Groups'
-    { _gGroups        :: !(Maybe [Group])
-    , _gEtag          :: !(Maybe Text)
-    , _gNextPageToken :: !(Maybe Text)
-    , _gKind          :: !Text
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Groups' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gGroups'
---
--- * 'gEtag'
---
--- * 'gNextPageToken'
---
--- * 'gKind'
-groups
-    :: Groups
-groups =
-    Groups'
-    { _gGroups = Nothing
-    , _gEtag = Nothing
-    , _gNextPageToken = Nothing
-    , _gKind = "admin#directory#groups"
-    }
-
--- | List of group objects.
-gGroups :: Lens' Groups [Group]
-gGroups
-  = lens _gGroups (\ s a -> s{_gGroups = a}) . _Default
-      . _Coerce
-
--- | ETag of the resource.
-gEtag :: Lens' Groups (Maybe Text)
-gEtag = lens _gEtag (\ s a -> s{_gEtag = a})
-
--- | Token used to access next page of this result.
-gNextPageToken :: Lens' Groups (Maybe Text)
-gNextPageToken
-  = lens _gNextPageToken
-      (\ s a -> s{_gNextPageToken = a})
-
--- | Kind of resource this is.
-gKind :: Lens' Groups Text
-gKind = lens _gKind (\ s a -> s{_gKind = a})
-
-instance FromJSON Groups where
-        parseJSON
-          = withObject "Groups"
-              (\ o ->
-                 Groups' <$>
-                   (o .:? "groups" .!= mempty) <*> (o .:? "etag") <*>
-                     (o .:? "nextPageToken")
-                     <*> (o .:? "kind" .!= "admin#directory#groups"))
-
-instance ToJSON Groups where
-        toJSON Groups'{..}
-          = object
-              (catMaybes
-                 [("groups" .=) <$> _gGroups, ("etag" .=) <$> _gEtag,
-                  ("nextPageToken" .=) <$> _gNextPageToken,
-                  Just ("kind" .= _gKind)])
-
--- | JSON response template for List roleAssignments operation in Directory
--- API.
---
--- /See:/ 'roleAssignments' smart constructor.
-data RoleAssignments = RoleAssignments'
-    { _raEtag          :: !(Maybe Text)
-    , _raNextPageToken :: !(Maybe Text)
-    , _raKind          :: !Text
-    , _raItems         :: !(Maybe [RoleAssignment])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'RoleAssignments' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'raEtag'
---
--- * 'raNextPageToken'
---
--- * 'raKind'
---
--- * 'raItems'
-roleAssignments
-    :: RoleAssignments
-roleAssignments =
-    RoleAssignments'
-    { _raEtag = Nothing
-    , _raNextPageToken = Nothing
-    , _raKind = "admin#directory#roleAssignments"
-    , _raItems = Nothing
-    }
-
--- | ETag of the resource.
-raEtag :: Lens' RoleAssignments (Maybe Text)
-raEtag = lens _raEtag (\ s a -> s{_raEtag = a})
-
-raNextPageToken :: Lens' RoleAssignments (Maybe Text)
-raNextPageToken
-  = lens _raNextPageToken
-      (\ s a -> s{_raNextPageToken = a})
-
--- | The type of the API resource. This is always
--- admin#directory#roleAssignments.
-raKind :: Lens' RoleAssignments Text
-raKind = lens _raKind (\ s a -> s{_raKind = a})
-
--- | A list of RoleAssignment resources.
-raItems :: Lens' RoleAssignments [RoleAssignment]
-raItems
-  = lens _raItems (\ s a -> s{_raItems = a}) . _Default
-      . _Coerce
-
-instance FromJSON RoleAssignments where
-        parseJSON
-          = withObject "RoleAssignments"
-              (\ o ->
-                 RoleAssignments' <$>
-                   (o .:? "etag") <*> (o .:? "nextPageToken") <*>
-                     (o .:? "kind" .!= "admin#directory#roleAssignments")
-                     <*> (o .:? "items" .!= mempty))
-
-instance ToJSON RoleAssignments where
-        toJSON RoleAssignments'{..}
-          = object
-              (catMaybes
-                 [("etag" .=) <$> _raEtag,
-                  ("nextPageToken" .=) <$> _raNextPageToken,
-                  Just ("kind" .= _raKind), ("items" .=) <$> _raItems])
-
--- | JSON template for privilege resource in Directory API.
---
--- /See:/ 'privilege' smart constructor.
-data Privilege = Privilege'
-    { _priEtag            :: !(Maybe Text)
-    , _priIsOuScopable    :: !(Maybe Bool)
-    , _priKind            :: !Text
-    , _priServiceName     :: !(Maybe Text)
-    , _priServiceId       :: !(Maybe Text)
-    , _priPrivilegeName   :: !(Maybe Text)
-    , _priChildPrivileges :: !(Maybe [Privilege])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Privilege' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'priEtag'
---
--- * 'priIsOuScopable'
---
--- * 'priKind'
---
--- * 'priServiceName'
---
--- * 'priServiceId'
---
--- * 'priPrivilegeName'
---
--- * 'priChildPrivileges'
-privilege
-    :: Privilege
-privilege =
-    Privilege'
-    { _priEtag = Nothing
-    , _priIsOuScopable = Nothing
-    , _priKind = "admin#directory#privilege"
-    , _priServiceName = Nothing
-    , _priServiceId = Nothing
-    , _priPrivilegeName = Nothing
-    , _priChildPrivileges = Nothing
-    }
-
--- | ETag of the resource.
-priEtag :: Lens' Privilege (Maybe Text)
-priEtag = lens _priEtag (\ s a -> s{_priEtag = a})
-
--- | If the privilege can be restricted to an organization unit.
-priIsOuScopable :: Lens' Privilege (Maybe Bool)
-priIsOuScopable
-  = lens _priIsOuScopable
-      (\ s a -> s{_priIsOuScopable = a})
-
--- | The type of the API resource. This is always admin#directory#privilege.
-priKind :: Lens' Privilege Text
-priKind = lens _priKind (\ s a -> s{_priKind = a})
-
--- | The name of the service this privilege is for.
-priServiceName :: Lens' Privilege (Maybe Text)
-priServiceName
-  = lens _priServiceName
-      (\ s a -> s{_priServiceName = a})
-
--- | The obfuscated ID of the service this privilege is for.
-priServiceId :: Lens' Privilege (Maybe Text)
-priServiceId
-  = lens _priServiceId (\ s a -> s{_priServiceId = a})
-
--- | The name of the privilege.
-priPrivilegeName :: Lens' Privilege (Maybe Text)
-priPrivilegeName
-  = lens _priPrivilegeName
-      (\ s a -> s{_priPrivilegeName = a})
-
--- | A list of child privileges. Privileges for a service form a tree. Each
--- privilege can have a list of child privileges; this list is empty for a
--- leaf privilege.
-priChildPrivileges :: Lens' Privilege [Privilege]
-priChildPrivileges
-  = lens _priChildPrivileges
-      (\ s a -> s{_priChildPrivileges = a})
-      . _Default
-      . _Coerce
-
-instance FromJSON Privilege where
-        parseJSON
-          = withObject "Privilege"
-              (\ o ->
-                 Privilege' <$>
-                   (o .:? "etag") <*> (o .:? "isOuScopable") <*>
-                     (o .:? "kind" .!= "admin#directory#privilege")
-                     <*> (o .:? "serviceName")
-                     <*> (o .:? "serviceId")
-                     <*> (o .:? "privilegeName")
-                     <*> (o .:? "childPrivileges" .!= mempty))
-
-instance ToJSON Privilege where
-        toJSON Privilege'{..}
-          = object
-              (catMaybes
-                 [("etag" .=) <$> _priEtag,
-                  ("isOuScopable" .=) <$> _priIsOuScopable,
-                  Just ("kind" .= _priKind),
-                  ("serviceName" .=) <$> _priServiceName,
-                  ("serviceId" .=) <$> _priServiceId,
-                  ("privilegeName" .=) <$> _priPrivilegeName,
-                  ("childPrivileges" .=) <$> _priChildPrivileges])
-
--- | JSON response template for List roles operation in Directory API.
---
--- /See:/ 'roles' smart constructor.
-data Roles = Roles'
-    { _rEtag          :: !(Maybe Text)
-    , _rNextPageToken :: !(Maybe Text)
-    , _rKind          :: !Text
-    , _rItems         :: !(Maybe [Role])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Roles' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rEtag'
---
--- * 'rNextPageToken'
---
--- * 'rKind'
---
--- * 'rItems'
-roles
-    :: Roles
-roles =
-    Roles'
-    { _rEtag = Nothing
-    , _rNextPageToken = Nothing
-    , _rKind = "admin#directory#roles"
-    , _rItems = Nothing
-    }
-
--- | ETag of the resource.
-rEtag :: Lens' Roles (Maybe Text)
-rEtag = lens _rEtag (\ s a -> s{_rEtag = a})
-
-rNextPageToken :: Lens' Roles (Maybe Text)
-rNextPageToken
-  = lens _rNextPageToken
-      (\ s a -> s{_rNextPageToken = a})
-
--- | The type of the API resource. This is always admin#directory#roles.
-rKind :: Lens' Roles Text
-rKind = lens _rKind (\ s a -> s{_rKind = a})
-
--- | A list of Role resources.
-rItems :: Lens' Roles [Role]
-rItems
-  = lens _rItems (\ s a -> s{_rItems = a}) . _Default .
-      _Coerce
-
-instance FromJSON Roles where
-        parseJSON
-          = withObject "Roles"
-              (\ o ->
-                 Roles' <$>
-                   (o .:? "etag") <*> (o .:? "nextPageToken") <*>
-                     (o .:? "kind" .!= "admin#directory#roles")
-                     <*> (o .:? "items" .!= mempty))
-
-instance ToJSON Roles where
-        toJSON Roles'{..}
-          = object
-              (catMaybes
-                 [("etag" .=) <$> _rEtag,
-                  ("nextPageToken" .=) <$> _rNextPageToken,
-                  Just ("kind" .= _rKind), ("items" .=) <$> _rItems])
-
--- | JSON template for address.
---
--- /See:/ 'userAddress' smart constructor.
-data UserAddress = UserAddress'
-    { _uaStreetAddress      :: !(Maybe Text)
-    , _uaPoBox              :: !(Maybe Text)
-    , _uaCountry            :: !(Maybe Text)
-    , _uaPostalCode         :: !(Maybe Text)
-    , _uaFormatted          :: !(Maybe Text)
-    , _uaExtendedAddress    :: !(Maybe Text)
-    , _uaLocality           :: !(Maybe Text)
-    , _uaPrimary            :: !(Maybe Bool)
-    , _uaCountryCode        :: !(Maybe Text)
-    , _uaRegion             :: !(Maybe Text)
-    , _uaType               :: !(Maybe Text)
-    , _uaCustomType         :: !(Maybe Text)
-    , _uaSourceIsStructured :: !(Maybe Bool)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'UserAddress' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'uaStreetAddress'
---
--- * 'uaPoBox'
---
--- * 'uaCountry'
---
--- * 'uaPostalCode'
---
--- * 'uaFormatted'
---
--- * 'uaExtendedAddress'
---
--- * 'uaLocality'
---
--- * 'uaPrimary'
---
--- * 'uaCountryCode'
---
--- * 'uaRegion'
---
--- * 'uaType'
---
--- * 'uaCustomType'
---
--- * 'uaSourceIsStructured'
-userAddress
-    :: UserAddress
-userAddress =
-    UserAddress'
-    { _uaStreetAddress = Nothing
-    , _uaPoBox = Nothing
-    , _uaCountry = Nothing
-    , _uaPostalCode = Nothing
-    , _uaFormatted = Nothing
-    , _uaExtendedAddress = Nothing
-    , _uaLocality = Nothing
-    , _uaPrimary = Nothing
-    , _uaCountryCode = Nothing
-    , _uaRegion = Nothing
-    , _uaType = Nothing
-    , _uaCustomType = Nothing
-    , _uaSourceIsStructured = Nothing
-    }
-
--- | Street.
-uaStreetAddress :: Lens' UserAddress (Maybe Text)
-uaStreetAddress
-  = lens _uaStreetAddress
-      (\ s a -> s{_uaStreetAddress = a})
-
--- | Other parts of address.
-uaPoBox :: Lens' UserAddress (Maybe Text)
-uaPoBox = lens _uaPoBox (\ s a -> s{_uaPoBox = a})
-
--- | Country.
-uaCountry :: Lens' UserAddress (Maybe Text)
-uaCountry
-  = lens _uaCountry (\ s a -> s{_uaCountry = a})
-
--- | Postal code.
-uaPostalCode :: Lens' UserAddress (Maybe Text)
-uaPostalCode
-  = lens _uaPostalCode (\ s a -> s{_uaPostalCode = a})
-
--- | Formatted address.
-uaFormatted :: Lens' UserAddress (Maybe Text)
-uaFormatted
-  = lens _uaFormatted (\ s a -> s{_uaFormatted = a})
-
--- | Extended Address.
-uaExtendedAddress :: Lens' UserAddress (Maybe Text)
-uaExtendedAddress
-  = lens _uaExtendedAddress
-      (\ s a -> s{_uaExtendedAddress = a})
-
--- | Locality.
-uaLocality :: Lens' UserAddress (Maybe Text)
-uaLocality
-  = lens _uaLocality (\ s a -> s{_uaLocality = a})
-
--- | If this is user\'s primary address. Only one entry could be marked as
--- primary.
-uaPrimary :: Lens' UserAddress (Maybe Bool)
-uaPrimary
-  = lens _uaPrimary (\ s a -> s{_uaPrimary = a})
-
--- | Country code.
-uaCountryCode :: Lens' UserAddress (Maybe Text)
-uaCountryCode
-  = lens _uaCountryCode
-      (\ s a -> s{_uaCountryCode = a})
-
--- | Region.
-uaRegion :: Lens' UserAddress (Maybe Text)
-uaRegion = lens _uaRegion (\ s a -> s{_uaRegion = a})
-
--- | Each entry can have a type which indicates standard values of that
--- entry. For example address could be of home, work etc. In addition to
--- the standard type, an entry can have a custom type and can take any
--- value. Such type should have the CUSTOM value as type and also have a
--- customType value.
-uaType :: Lens' UserAddress (Maybe Text)
-uaType = lens _uaType (\ s a -> s{_uaType = a})
-
--- | Custom type.
-uaCustomType :: Lens' UserAddress (Maybe Text)
-uaCustomType
-  = lens _uaCustomType (\ s a -> s{_uaCustomType = a})
-
--- | User supplied address was structured. Structured addresses are NOT
--- supported at this time. You might be able to write structured addresses,
--- but any values will eventually be clobbered.
-uaSourceIsStructured :: Lens' UserAddress (Maybe Bool)
-uaSourceIsStructured
-  = lens _uaSourceIsStructured
-      (\ s a -> s{_uaSourceIsStructured = a})
-
-instance FromJSON UserAddress where
-        parseJSON
-          = withObject "UserAddress"
-              (\ o ->
-                 UserAddress' <$>
-                   (o .:? "streetAddress") <*> (o .:? "poBox") <*>
-                     (o .:? "country")
-                     <*> (o .:? "postalCode")
-                     <*> (o .:? "formatted")
-                     <*> (o .:? "extendedAddress")
-                     <*> (o .:? "locality")
-                     <*> (o .:? "primary")
-                     <*> (o .:? "countryCode")
-                     <*> (o .:? "region")
-                     <*> (o .:? "type")
-                     <*> (o .:? "customType")
-                     <*> (o .:? "sourceIsStructured"))
-
-instance ToJSON UserAddress where
-        toJSON UserAddress'{..}
-          = object
-              (catMaybes
-                 [("streetAddress" .=) <$> _uaStreetAddress,
-                  ("poBox" .=) <$> _uaPoBox,
-                  ("country" .=) <$> _uaCountry,
-                  ("postalCode" .=) <$> _uaPostalCode,
-                  ("formatted" .=) <$> _uaFormatted,
-                  ("extendedAddress" .=) <$> _uaExtendedAddress,
-                  ("locality" .=) <$> _uaLocality,
-                  ("primary" .=) <$> _uaPrimary,
-                  ("countryCode" .=) <$> _uaCountryCode,
-                  ("region" .=) <$> _uaRegion, ("type" .=) <$> _uaType,
-                  ("customType" .=) <$> _uaCustomType,
-                  ("sourceIsStructured" .=) <$> _uaSourceIsStructured])
-
--- | JSON template for postal address of a customer.
---
--- /See:/ 'customerPostalAddress' smart constructor.
-data CustomerPostalAddress = CustomerPostalAddress'
-    { _cpaOrganizationName :: !(Maybe Text)
-    , _cpaPostalCode       :: !(Maybe Text)
-    , _cpaAddressLine1     :: !(Maybe Text)
-    , _cpaLocality         :: !(Maybe Text)
-    , _cpaContactName      :: !(Maybe Text)
-    , _cpaAddressLine2     :: !(Maybe Text)
-    , _cpaCountryCode      :: !(Maybe Text)
-    , _cpaRegion           :: !(Maybe Text)
-    , _cpaAddressLine3     :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CustomerPostalAddress' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cpaOrganizationName'
---
--- * 'cpaPostalCode'
---
--- * 'cpaAddressLine1'
---
--- * 'cpaLocality'
---
--- * 'cpaContactName'
---
--- * 'cpaAddressLine2'
---
--- * 'cpaCountryCode'
---
--- * 'cpaRegion'
---
--- * 'cpaAddressLine3'
-customerPostalAddress
-    :: CustomerPostalAddress
-customerPostalAddress =
-    CustomerPostalAddress'
-    { _cpaOrganizationName = Nothing
-    , _cpaPostalCode = Nothing
-    , _cpaAddressLine1 = Nothing
-    , _cpaLocality = Nothing
-    , _cpaContactName = Nothing
-    , _cpaAddressLine2 = Nothing
-    , _cpaCountryCode = Nothing
-    , _cpaRegion = Nothing
-    , _cpaAddressLine3 = Nothing
-    }
-
--- | The company or company division name.
-cpaOrganizationName :: Lens' CustomerPostalAddress (Maybe Text)
-cpaOrganizationName
-  = lens _cpaOrganizationName
-      (\ s a -> s{_cpaOrganizationName = a})
-
--- | The postal code. A postalCode example is a postal zip code such as
--- 10009. This is in accordance with -
--- http:\/\/portablecontacts.net\/draft-spec.html#address_element.
-cpaPostalCode :: Lens' CustomerPostalAddress (Maybe Text)
-cpaPostalCode
-  = lens _cpaPostalCode
-      (\ s a -> s{_cpaPostalCode = a})
-
--- | A customer\'s physical address. The address can be composed of one to
--- three lines.
-cpaAddressLine1 :: Lens' CustomerPostalAddress (Maybe Text)
-cpaAddressLine1
-  = lens _cpaAddressLine1
-      (\ s a -> s{_cpaAddressLine1 = a})
-
--- | Name of the locality. An example of a locality value is the city of San
--- Francisco.
-cpaLocality :: Lens' CustomerPostalAddress (Maybe Text)
-cpaLocality
-  = lens _cpaLocality (\ s a -> s{_cpaLocality = a})
-
--- | The customer contact\'s name.
-cpaContactName :: Lens' CustomerPostalAddress (Maybe Text)
-cpaContactName
-  = lens _cpaContactName
-      (\ s a -> s{_cpaContactName = a})
-
--- | Address line 2 of the address.
-cpaAddressLine2 :: Lens' CustomerPostalAddress (Maybe Text)
-cpaAddressLine2
-  = lens _cpaAddressLine2
-      (\ s a -> s{_cpaAddressLine2 = a})
-
--- | This is a required property. For countryCode information see the ISO
--- 3166 country code elements.
-cpaCountryCode :: Lens' CustomerPostalAddress (Maybe Text)
-cpaCountryCode
-  = lens _cpaCountryCode
-      (\ s a -> s{_cpaCountryCode = a})
-
--- | Name of the region. An example of a region value is NY for the state of
--- New York.
-cpaRegion :: Lens' CustomerPostalAddress (Maybe Text)
-cpaRegion
-  = lens _cpaRegion (\ s a -> s{_cpaRegion = a})
-
--- | Address line 3 of the address.
-cpaAddressLine3 :: Lens' CustomerPostalAddress (Maybe Text)
-cpaAddressLine3
-  = lens _cpaAddressLine3
-      (\ s a -> s{_cpaAddressLine3 = a})
-
-instance FromJSON CustomerPostalAddress where
-        parseJSON
-          = withObject "CustomerPostalAddress"
-              (\ o ->
-                 CustomerPostalAddress' <$>
-                   (o .:? "organizationName") <*> (o .:? "postalCode")
-                     <*> (o .:? "addressLine1")
-                     <*> (o .:? "locality")
-                     <*> (o .:? "contactName")
-                     <*> (o .:? "addressLine2")
-                     <*> (o .:? "countryCode")
-                     <*> (o .:? "region")
-                     <*> (o .:? "addressLine3"))
-
-instance ToJSON CustomerPostalAddress where
-        toJSON CustomerPostalAddress'{..}
-          = object
-              (catMaybes
-                 [("organizationName" .=) <$> _cpaOrganizationName,
-                  ("postalCode" .=) <$> _cpaPostalCode,
-                  ("addressLine1" .=) <$> _cpaAddressLine1,
-                  ("locality" .=) <$> _cpaLocality,
-                  ("contactName" .=) <$> _cpaContactName,
-                  ("addressLine2" .=) <$> _cpaAddressLine2,
-                  ("countryCode" .=) <$> _cpaCountryCode,
-                  ("region" .=) <$> _cpaRegion,
-                  ("addressLine3" .=) <$> _cpaAddressLine3])
-
--- | JSON template for roleAssignment resource in Directory API.
---
--- /See:/ 'roleAssignment' smart constructor.
-data RoleAssignment = RoleAssignment'
-    { _rolEtag             :: !(Maybe Text)
-    , _rolScopeType        :: !(Maybe Text)
-    , _rolKind             :: !Text
-    , _rolAssignedTo       :: !(Maybe Text)
-    , _rolRoleId           :: !(Maybe (Textual Int64))
-    , _rolRoleAssignmentId :: !(Maybe (Textual Int64))
-    , _rolOrgUnitId        :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'RoleAssignment' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rolEtag'
---
--- * 'rolScopeType'
---
--- * 'rolKind'
---
--- * 'rolAssignedTo'
---
--- * 'rolRoleId'
---
--- * 'rolRoleAssignmentId'
---
--- * 'rolOrgUnitId'
-roleAssignment
-    :: RoleAssignment
-roleAssignment =
-    RoleAssignment'
-    { _rolEtag = Nothing
-    , _rolScopeType = Nothing
-    , _rolKind = "admin#directory#roleAssignment"
-    , _rolAssignedTo = Nothing
-    , _rolRoleId = Nothing
-    , _rolRoleAssignmentId = Nothing
-    , _rolOrgUnitId = Nothing
-    }
-
--- | ETag of the resource.
-rolEtag :: Lens' RoleAssignment (Maybe Text)
-rolEtag = lens _rolEtag (\ s a -> s{_rolEtag = a})
-
--- | The scope in which this role is assigned. Possible values are: -
--- CUSTOMER - ORG_UNIT
-rolScopeType :: Lens' RoleAssignment (Maybe Text)
-rolScopeType
-  = lens _rolScopeType (\ s a -> s{_rolScopeType = a})
-
--- | The type of the API resource. This is always
--- admin#directory#roleAssignment.
-rolKind :: Lens' RoleAssignment Text
-rolKind = lens _rolKind (\ s a -> s{_rolKind = a})
-
--- | The unique ID of the user this role is assigned to.
-rolAssignedTo :: Lens' RoleAssignment (Maybe Text)
-rolAssignedTo
-  = lens _rolAssignedTo
-      (\ s a -> s{_rolAssignedTo = a})
-
--- | The ID of the role that is assigned.
-rolRoleId :: Lens' RoleAssignment (Maybe Int64)
-rolRoleId
-  = lens _rolRoleId (\ s a -> s{_rolRoleId = a}) .
-      mapping _Coerce
-
--- | ID of this roleAssignment.
-rolRoleAssignmentId :: Lens' RoleAssignment (Maybe Int64)
-rolRoleAssignmentId
-  = lens _rolRoleAssignmentId
-      (\ s a -> s{_rolRoleAssignmentId = a})
-      . mapping _Coerce
-
--- | If the role is restricted to an organization unit, this contains the ID
--- for the organization unit the exercise of this role is restricted to.
-rolOrgUnitId :: Lens' RoleAssignment (Maybe Text)
-rolOrgUnitId
-  = lens _rolOrgUnitId (\ s a -> s{_rolOrgUnitId = a})
-
-instance FromJSON RoleAssignment where
-        parseJSON
-          = withObject "RoleAssignment"
-              (\ o ->
-                 RoleAssignment' <$>
-                   (o .:? "etag") <*> (o .:? "scopeType") <*>
-                     (o .:? "kind" .!= "admin#directory#roleAssignment")
-                     <*> (o .:? "assignedTo")
-                     <*> (o .:? "roleId")
-                     <*> (o .:? "roleAssignmentId")
-                     <*> (o .:? "orgUnitId"))
-
-instance ToJSON RoleAssignment where
-        toJSON RoleAssignment'{..}
-          = object
-              (catMaybes
-                 [("etag" .=) <$> _rolEtag,
-                  ("scopeType" .=) <$> _rolScopeType,
-                  Just ("kind" .= _rolKind),
-                  ("assignedTo" .=) <$> _rolAssignedTo,
-                  ("roleId" .=) <$> _rolRoleId,
-                  ("roleAssignmentId" .=) <$> _rolRoleAssignmentId,
-                  ("orgUnitId" .=) <$> _rolOrgUnitId])
-
--- | JSON template for Group resource in Directory API.
---
--- /See:/ 'group'' smart constructor.
-data Group = Group'
-    { _groEmail              :: !(Maybe Text)
-    , _groEtag               :: !(Maybe Text)
-    , _groDirectMembersCount :: !(Maybe (Textual Int64))
-    , _groKind               :: !Text
-    , _groAliases            :: !(Maybe [Text])
-    , _groNonEditableAliases :: !(Maybe [Text])
-    , _groName               :: !(Maybe Text)
-    , _groAdminCreated       :: !(Maybe Bool)
-    , _groId                 :: !(Maybe Text)
-    , _groDescription        :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Group' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'groEmail'
---
--- * 'groEtag'
---
--- * 'groDirectMembersCount'
---
--- * 'groKind'
---
--- * 'groAliases'
---
--- * 'groNonEditableAliases'
---
--- * 'groName'
---
--- * 'groAdminCreated'
---
--- * 'groId'
---
--- * 'groDescription'
-group'
-    :: Group
-group' =
-    Group'
-    { _groEmail = Nothing
-    , _groEtag = Nothing
-    , _groDirectMembersCount = Nothing
-    , _groKind = "admin#directory#group"
-    , _groAliases = Nothing
-    , _groNonEditableAliases = Nothing
-    , _groName = Nothing
-    , _groAdminCreated = Nothing
-    , _groId = Nothing
-    , _groDescription = Nothing
-    }
-
--- | Email of Group
-groEmail :: Lens' Group (Maybe Text)
-groEmail = lens _groEmail (\ s a -> s{_groEmail = a})
-
--- | ETag of the resource.
-groEtag :: Lens' Group (Maybe Text)
-groEtag = lens _groEtag (\ s a -> s{_groEtag = a})
-
--- | Group direct members count
-groDirectMembersCount :: Lens' Group (Maybe Int64)
-groDirectMembersCount
-  = lens _groDirectMembersCount
-      (\ s a -> s{_groDirectMembersCount = a})
-      . mapping _Coerce
-
--- | Kind of resource this is.
-groKind :: Lens' Group Text
-groKind = lens _groKind (\ s a -> s{_groKind = a})
-
--- | List of aliases (Read-only)
-groAliases :: Lens' Group [Text]
-groAliases
-  = lens _groAliases (\ s a -> s{_groAliases = a}) .
-      _Default
-      . _Coerce
-
--- | List of non editable aliases (Read-only)
-groNonEditableAliases :: Lens' Group [Text]
-groNonEditableAliases
-  = lens _groNonEditableAliases
-      (\ s a -> s{_groNonEditableAliases = a})
-      . _Default
-      . _Coerce
-
--- | Group name
-groName :: Lens' Group (Maybe Text)
-groName = lens _groName (\ s a -> s{_groName = a})
-
--- | Is the group created by admin (Read-only) *
-groAdminCreated :: Lens' Group (Maybe Bool)
-groAdminCreated
-  = lens _groAdminCreated
-      (\ s a -> s{_groAdminCreated = a})
-
--- | Unique identifier of Group (Read-only)
-groId :: Lens' Group (Maybe Text)
-groId = lens _groId (\ s a -> s{_groId = a})
-
--- | Description of the group
-groDescription :: Lens' Group (Maybe Text)
-groDescription
-  = lens _groDescription
-      (\ s a -> s{_groDescription = a})
-
-instance FromJSON Group where
-        parseJSON
-          = withObject "Group"
-              (\ o ->
-                 Group' <$>
-                   (o .:? "email") <*> (o .:? "etag") <*>
-                     (o .:? "directMembersCount")
-                     <*> (o .:? "kind" .!= "admin#directory#group")
-                     <*> (o .:? "aliases" .!= mempty)
-                     <*> (o .:? "nonEditableAliases" .!= mempty)
-                     <*> (o .:? "name")
-                     <*> (o .:? "adminCreated")
-                     <*> (o .:? "id")
-                     <*> (o .:? "description"))
-
-instance ToJSON Group where
-        toJSON Group'{..}
-          = object
-              (catMaybes
-                 [("email" .=) <$> _groEmail,
-                  ("etag" .=) <$> _groEtag,
-                  ("directMembersCount" .=) <$> _groDirectMembersCount,
-                  Just ("kind" .= _groKind),
-                  ("aliases" .=) <$> _groAliases,
-                  ("nonEditableAliases" .=) <$> _groNonEditableAliases,
-                  ("name" .=) <$> _groName,
-                  ("adminCreated" .=) <$> _groAdminCreated,
-                  ("id" .=) <$> _groId,
-                  ("description" .=) <$> _groDescription])
-
--- | JSON template for Chrome Os Device resource in Directory API.
---
--- /See:/ 'chromeOSDevice' smart constructor.
-data ChromeOSDevice = ChromeOSDevice'
-    { _codStatus             :: !(Maybe Text)
-    , _codEtag               :: !(Maybe Text)
-    , _codAnnotatedUser      :: !(Maybe Text)
-    , _codPlatformVersion    :: !(Maybe Text)
-    , _codLastSync           :: !(Maybe DateTime')
-    , _codActiveTimeRanges   :: !(Maybe [ChromeOSDeviceActiveTimeRangesItem])
-    , _codKind               :: !Text
-    , _codEthernetMACAddress :: !(Maybe Text)
-    , _codLastEnrollmentTime :: !(Maybe DateTime')
-    , _codAnnotatedLocation  :: !(Maybe Text)
-    , _codMACAddress         :: !(Maybe Text)
-    , _codOrgUnitPath        :: !(Maybe Text)
-    , _codRecentUsers        :: !(Maybe [ChromeOSDeviceRecentUsersItem])
-    , _codSupportEndDate     :: !(Maybe DateTime')
-    , _codModel              :: !(Maybe Text)
-    , _codWillAutoRenew      :: !(Maybe Bool)
-    , _codMeid               :: !(Maybe Text)
-    , _codDeviceId           :: !(Maybe Text)
-    , _codBootMode           :: !(Maybe Text)
-    , _codOrderNumber        :: !(Maybe Text)
-    , _codAnnotatedAssetId   :: !(Maybe Text)
-    , _codNotes              :: !(Maybe Text)
-    , _codSerialNumber       :: !(Maybe Text)
-    , _codFirmwareVersion    :: !(Maybe Text)
-    , _codOSVersion          :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ChromeOSDevice' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'codStatus'
---
--- * 'codEtag'
---
--- * 'codAnnotatedUser'
---
--- * 'codPlatformVersion'
---
--- * 'codLastSync'
---
--- * 'codActiveTimeRanges'
---
--- * 'codKind'
---
--- * 'codEthernetMACAddress'
---
--- * 'codLastEnrollmentTime'
---
--- * 'codAnnotatedLocation'
---
--- * 'codMACAddress'
---
--- * 'codOrgUnitPath'
---
--- * 'codRecentUsers'
---
--- * 'codSupportEndDate'
---
--- * 'codModel'
---
--- * 'codWillAutoRenew'
---
--- * 'codMeid'
---
--- * 'codDeviceId'
---
--- * 'codBootMode'
---
--- * 'codOrderNumber'
---
--- * 'codAnnotatedAssetId'
---
--- * 'codNotes'
---
--- * 'codSerialNumber'
---
--- * 'codFirmwareVersion'
---
--- * 'codOSVersion'
-chromeOSDevice
-    :: ChromeOSDevice
-chromeOSDevice =
-    ChromeOSDevice'
-    { _codStatus = Nothing
-    , _codEtag = Nothing
-    , _codAnnotatedUser = Nothing
-    , _codPlatformVersion = Nothing
-    , _codLastSync = Nothing
-    , _codActiveTimeRanges = Nothing
-    , _codKind = "admin#directory#chromeosdevice"
-    , _codEthernetMACAddress = Nothing
-    , _codLastEnrollmentTime = Nothing
-    , _codAnnotatedLocation = Nothing
-    , _codMACAddress = Nothing
-    , _codOrgUnitPath = Nothing
-    , _codRecentUsers = Nothing
-    , _codSupportEndDate = Nothing
-    , _codModel = Nothing
-    , _codWillAutoRenew = Nothing
-    , _codMeid = Nothing
-    , _codDeviceId = Nothing
-    , _codBootMode = Nothing
-    , _codOrderNumber = Nothing
-    , _codAnnotatedAssetId = Nothing
-    , _codNotes = Nothing
-    , _codSerialNumber = Nothing
-    , _codFirmwareVersion = Nothing
-    , _codOSVersion = Nothing
-    }
-
--- | status of the device (Read-only)
-codStatus :: Lens' ChromeOSDevice (Maybe Text)
-codStatus
-  = lens _codStatus (\ s a -> s{_codStatus = a})
-
--- | ETag of the resource.
-codEtag :: Lens' ChromeOSDevice (Maybe Text)
-codEtag = lens _codEtag (\ s a -> s{_codEtag = a})
-
--- | User of the device
-codAnnotatedUser :: Lens' ChromeOSDevice (Maybe Text)
-codAnnotatedUser
-  = lens _codAnnotatedUser
-      (\ s a -> s{_codAnnotatedUser = a})
-
--- | Chromebook platform version (Read-only)
-codPlatformVersion :: Lens' ChromeOSDevice (Maybe Text)
-codPlatformVersion
-  = lens _codPlatformVersion
-      (\ s a -> s{_codPlatformVersion = a})
-
--- | Date and time the device was last synchronized with the policy settings
--- in the Google Apps administrator control panel (Read-only)
-codLastSync :: Lens' ChromeOSDevice (Maybe UTCTime)
-codLastSync
-  = lens _codLastSync (\ s a -> s{_codLastSync = a}) .
-      mapping _DateTime
-
--- | List of active time ranges (Read-only)
-codActiveTimeRanges :: Lens' ChromeOSDevice [ChromeOSDeviceActiveTimeRangesItem]
-codActiveTimeRanges
-  = lens _codActiveTimeRanges
-      (\ s a -> s{_codActiveTimeRanges = a})
-      . _Default
-      . _Coerce
-
--- | Kind of resource this is.
-codKind :: Lens' ChromeOSDevice Text
-codKind = lens _codKind (\ s a -> s{_codKind = a})
-
--- | Chromebook Mac Address on ethernet network interface (Read-only)
-codEthernetMACAddress :: Lens' ChromeOSDevice (Maybe Text)
-codEthernetMACAddress
-  = lens _codEthernetMACAddress
-      (\ s a -> s{_codEthernetMACAddress = a})
-
--- | Date and time the device was last enrolled (Read-only)
-codLastEnrollmentTime :: Lens' ChromeOSDevice (Maybe UTCTime)
-codLastEnrollmentTime
-  = lens _codLastEnrollmentTime
-      (\ s a -> s{_codLastEnrollmentTime = a})
-      . mapping _DateTime
-
--- | Address or location of the device as noted by the administrator
-codAnnotatedLocation :: Lens' ChromeOSDevice (Maybe Text)
-codAnnotatedLocation
-  = lens _codAnnotatedLocation
-      (\ s a -> s{_codAnnotatedLocation = a})
-
--- | Chromebook Mac Address on wifi network interface (Read-only)
-codMACAddress :: Lens' ChromeOSDevice (Maybe Text)
-codMACAddress
-  = lens _codMACAddress
-      (\ s a -> s{_codMACAddress = a})
-
--- | OrgUnit of the device
-codOrgUnitPath :: Lens' ChromeOSDevice (Maybe Text)
-codOrgUnitPath
-  = lens _codOrgUnitPath
-      (\ s a -> s{_codOrgUnitPath = a})
-
--- | List of recent device users, in descending order by last login time
--- (Read-only)
-codRecentUsers :: Lens' ChromeOSDevice [ChromeOSDeviceRecentUsersItem]
-codRecentUsers
-  = lens _codRecentUsers
-      (\ s a -> s{_codRecentUsers = a})
-      . _Default
-      . _Coerce
-
--- | Final date the device will be supported (Read-only)
-codSupportEndDate :: Lens' ChromeOSDevice (Maybe UTCTime)
-codSupportEndDate
-  = lens _codSupportEndDate
-      (\ s a -> s{_codSupportEndDate = a})
-      . mapping _DateTime
-
--- | Chromebook Model (Read-only)
-codModel :: Lens' ChromeOSDevice (Maybe Text)
-codModel = lens _codModel (\ s a -> s{_codModel = a})
-
--- | Will Chromebook auto renew after support end date (Read-only)
-codWillAutoRenew :: Lens' ChromeOSDevice (Maybe Bool)
-codWillAutoRenew
-  = lens _codWillAutoRenew
-      (\ s a -> s{_codWillAutoRenew = a})
-
--- | Mobile Equipment identifier for the 3G mobile card in the Chromebook
--- (Read-only)
-codMeid :: Lens' ChromeOSDevice (Maybe Text)
-codMeid = lens _codMeid (\ s a -> s{_codMeid = a})
-
--- | Unique identifier of Chrome OS Device (Read-only)
-codDeviceId :: Lens' ChromeOSDevice (Maybe Text)
-codDeviceId
-  = lens _codDeviceId (\ s a -> s{_codDeviceId = a})
-
--- | Chromebook boot mode (Read-only)
-codBootMode :: Lens' ChromeOSDevice (Maybe Text)
-codBootMode
-  = lens _codBootMode (\ s a -> s{_codBootMode = a})
-
--- | Chromebook order number (Read-only)
-codOrderNumber :: Lens' ChromeOSDevice (Maybe Text)
-codOrderNumber
-  = lens _codOrderNumber
-      (\ s a -> s{_codOrderNumber = a})
-
--- | AssetId specified during enrollment or through later annotation
-codAnnotatedAssetId :: Lens' ChromeOSDevice (Maybe Text)
-codAnnotatedAssetId
-  = lens _codAnnotatedAssetId
-      (\ s a -> s{_codAnnotatedAssetId = a})
-
--- | Notes added by the administrator
-codNotes :: Lens' ChromeOSDevice (Maybe Text)
-codNotes = lens _codNotes (\ s a -> s{_codNotes = a})
-
--- | Chromebook serial number (Read-only)
-codSerialNumber :: Lens' ChromeOSDevice (Maybe Text)
-codSerialNumber
-  = lens _codSerialNumber
-      (\ s a -> s{_codSerialNumber = a})
-
--- | Chromebook firmware version (Read-only)
-codFirmwareVersion :: Lens' ChromeOSDevice (Maybe Text)
-codFirmwareVersion
-  = lens _codFirmwareVersion
-      (\ s a -> s{_codFirmwareVersion = a})
-
--- | Chromebook Os Version (Read-only)
-codOSVersion :: Lens' ChromeOSDevice (Maybe Text)
-codOSVersion
-  = lens _codOSVersion (\ s a -> s{_codOSVersion = a})
-
-instance FromJSON ChromeOSDevice where
-        parseJSON
-          = withObject "ChromeOSDevice"
-              (\ o ->
-                 ChromeOSDevice' <$>
-                   (o .:? "status") <*> (o .:? "etag") <*>
-                     (o .:? "annotatedUser")
-                     <*> (o .:? "platformVersion")
-                     <*> (o .:? "lastSync")
-                     <*> (o .:? "activeTimeRanges" .!= mempty)
-                     <*>
-                     (o .:? "kind" .!= "admin#directory#chromeosdevice")
-                     <*> (o .:? "ethernetMacAddress")
-                     <*> (o .:? "lastEnrollmentTime")
-                     <*> (o .:? "annotatedLocation")
-                     <*> (o .:? "macAddress")
-                     <*> (o .:? "orgUnitPath")
-                     <*> (o .:? "recentUsers" .!= mempty)
-                     <*> (o .:? "supportEndDate")
-                     <*> (o .:? "model")
-                     <*> (o .:? "willAutoRenew")
-                     <*> (o .:? "meid")
-                     <*> (o .:? "deviceId")
-                     <*> (o .:? "bootMode")
-                     <*> (o .:? "orderNumber")
-                     <*> (o .:? "annotatedAssetId")
-                     <*> (o .:? "notes")
-                     <*> (o .:? "serialNumber")
-                     <*> (o .:? "firmwareVersion")
-                     <*> (o .:? "osVersion"))
-
-instance ToJSON ChromeOSDevice where
-        toJSON ChromeOSDevice'{..}
-          = object
-              (catMaybes
-                 [("status" .=) <$> _codStatus,
-                  ("etag" .=) <$> _codEtag,
-                  ("annotatedUser" .=) <$> _codAnnotatedUser,
-                  ("platformVersion" .=) <$> _codPlatformVersion,
-                  ("lastSync" .=) <$> _codLastSync,
-                  ("activeTimeRanges" .=) <$> _codActiveTimeRanges,
-                  Just ("kind" .= _codKind),
-                  ("ethernetMacAddress" .=) <$> _codEthernetMACAddress,
-                  ("lastEnrollmentTime" .=) <$> _codLastEnrollmentTime,
-                  ("annotatedLocation" .=) <$> _codAnnotatedLocation,
-                  ("macAddress" .=) <$> _codMACAddress,
-                  ("orgUnitPath" .=) <$> _codOrgUnitPath,
-                  ("recentUsers" .=) <$> _codRecentUsers,
-                  ("supportEndDate" .=) <$> _codSupportEndDate,
-                  ("model" .=) <$> _codModel,
-                  ("willAutoRenew" .=) <$> _codWillAutoRenew,
-                  ("meid" .=) <$> _codMeid,
-                  ("deviceId" .=) <$> _codDeviceId,
-                  ("bootMode" .=) <$> _codBootMode,
-                  ("orderNumber" .=) <$> _codOrderNumber,
-                  ("annotatedAssetId" .=) <$> _codAnnotatedAssetId,
-                  ("notes" .=) <$> _codNotes,
-                  ("serialNumber" .=) <$> _codSerialNumber,
-                  ("firmwareVersion" .=) <$> _codFirmwareVersion,
-                  ("osVersion" .=) <$> _codOSVersion])
-
--- | JSON response template for List Users operation in Apps Directory API.
---
--- /See:/ 'users' smart constructor.
-data Users = Users'
-    { _uEtag          :: !(Maybe Text)
-    , _uNextPageToken :: !(Maybe Text)
-    , _uUsers         :: !(Maybe [User])
-    , _uKind          :: !Text
-    , _uTriggerEvent  :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Users' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'uEtag'
---
--- * 'uNextPageToken'
---
--- * 'uUsers'
---
--- * 'uKind'
---
--- * 'uTriggerEvent'
-users
-    :: Users
-users =
-    Users'
-    { _uEtag = Nothing
-    , _uNextPageToken = Nothing
-    , _uUsers = Nothing
-    , _uKind = "admin#directory#users"
-    , _uTriggerEvent = Nothing
-    }
-
--- | ETag of the resource.
-uEtag :: Lens' Users (Maybe Text)
-uEtag = lens _uEtag (\ s a -> s{_uEtag = a})
-
--- | Token used to access next page of this result.
-uNextPageToken :: Lens' Users (Maybe Text)
-uNextPageToken
-  = lens _uNextPageToken
-      (\ s a -> s{_uNextPageToken = a})
-
--- | List of user objects.
-uUsers :: Lens' Users [User]
-uUsers
-  = lens _uUsers (\ s a -> s{_uUsers = a}) . _Default .
-      _Coerce
-
--- | Kind of resource this is.
-uKind :: Lens' Users Text
-uKind = lens _uKind (\ s a -> s{_uKind = a})
-
--- | Event that triggered this response (only used in case of Push Response)
-uTriggerEvent :: Lens' Users (Maybe Text)
-uTriggerEvent
-  = lens _uTriggerEvent
-      (\ s a -> s{_uTriggerEvent = a})
-
-instance FromJSON Users where
-        parseJSON
-          = withObject "Users"
-              (\ o ->
-                 Users' <$>
-                   (o .:? "etag") <*> (o .:? "nextPageToken") <*>
-                     (o .:? "users" .!= mempty)
-                     <*> (o .:? "kind" .!= "admin#directory#users")
-                     <*> (o .:? "trigger_event"))
-
-instance ToJSON Users where
-        toJSON Users'{..}
-          = object
-              (catMaybes
-                 [("etag" .=) <$> _uEtag,
-                  ("nextPageToken" .=) <$> _uNextPageToken,
-                  ("users" .=) <$> _uUsers, Just ("kind" .= _uKind),
-                  ("trigger_event" .=) <$> _uTriggerEvent])
-
--- | The template that returns individual ASP (Access Code) data.
---
--- /See:/ 'asp' smart constructor.
-data Asp = Asp'
-    { _aCreationTime :: !(Maybe (Textual Int64))
-    , _aEtag         :: !(Maybe Text)
-    , _aCodeId       :: !(Maybe (Textual Int32))
-    , _aKind         :: !Text
-    , _aName         :: !(Maybe Text)
-    , _aLastTimeUsed :: !(Maybe (Textual Int64))
-    , _aUserKey      :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Asp' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'aCreationTime'
---
--- * 'aEtag'
---
--- * 'aCodeId'
---
--- * 'aKind'
---
--- * 'aName'
---
--- * 'aLastTimeUsed'
---
--- * 'aUserKey'
-asp
-    :: Asp
-asp =
-    Asp'
-    { _aCreationTime = Nothing
-    , _aEtag = Nothing
-    , _aCodeId = Nothing
-    , _aKind = "admin#directory#asp"
-    , _aName = Nothing
-    , _aLastTimeUsed = Nothing
-    , _aUserKey = Nothing
-    }
-
--- | The time when the ASP was created. Expressed in Unix time format.
-aCreationTime :: Lens' Asp (Maybe Int64)
-aCreationTime
-  = lens _aCreationTime
-      (\ s a -> s{_aCreationTime = a})
-      . mapping _Coerce
-
--- | ETag of the ASP.
-aEtag :: Lens' Asp (Maybe Text)
-aEtag = lens _aEtag (\ s a -> s{_aEtag = a})
-
--- | The unique ID of the ASP.
-aCodeId :: Lens' Asp (Maybe Int32)
-aCodeId
-  = lens _aCodeId (\ s a -> s{_aCodeId = a}) .
-      mapping _Coerce
-
--- | The type of the API resource. This is always admin#directory#asp.
-aKind :: Lens' Asp Text
-aKind = lens _aKind (\ s a -> s{_aKind = a})
-
--- | The name of the application that the user, represented by their userId,
--- entered when the ASP was created.
-aName :: Lens' Asp (Maybe Text)
-aName = lens _aName (\ s a -> s{_aName = a})
-
--- | The time when the ASP was last used. Expressed in Unix time format.
-aLastTimeUsed :: Lens' Asp (Maybe Int64)
-aLastTimeUsed
-  = lens _aLastTimeUsed
-      (\ s a -> s{_aLastTimeUsed = a})
-      . mapping _Coerce
-
--- | The unique ID of the user who issued the ASP.
-aUserKey :: Lens' Asp (Maybe Text)
-aUserKey = lens _aUserKey (\ s a -> s{_aUserKey = a})
-
-instance FromJSON Asp where
-        parseJSON
-          = withObject "Asp"
-              (\ o ->
-                 Asp' <$>
-                   (o .:? "creationTime") <*> (o .:? "etag") <*>
-                     (o .:? "codeId")
-                     <*> (o .:? "kind" .!= "admin#directory#asp")
-                     <*> (o .:? "name")
-                     <*> (o .:? "lastTimeUsed")
-                     <*> (o .:? "userKey"))
-
-instance ToJSON Asp where
-        toJSON Asp'{..}
-          = object
-              (catMaybes
-                 [("creationTime" .=) <$> _aCreationTime,
-                  ("etag" .=) <$> _aEtag, ("codeId" .=) <$> _aCodeId,
-                  Just ("kind" .= _aKind), ("name" .=) <$> _aName,
-                  ("lastTimeUsed" .=) <$> _aLastTimeUsed,
-                  ("userKey" .=) <$> _aUserKey])
-
--- | JSON response template for List Schema operation in Directory API.
---
--- /See:/ 'schemas' smart constructor.
-data Schemas = Schemas'
-    { _sEtag    :: !(Maybe Text)
-    , _sSchemas :: !(Maybe [Schema])
-    , _sKind    :: !Text
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Schemas' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sEtag'
---
--- * 'sSchemas'
---
--- * 'sKind'
-schemas
-    :: Schemas
-schemas =
-    Schemas'
-    { _sEtag = Nothing
-    , _sSchemas = Nothing
-    , _sKind = "admin#directory#schemas"
-    }
-
--- | ETag of the resource.
-sEtag :: Lens' Schemas (Maybe Text)
-sEtag = lens _sEtag (\ s a -> s{_sEtag = a})
-
--- | List of UserSchema objects.
-sSchemas :: Lens' Schemas [Schema]
-sSchemas
-  = lens _sSchemas (\ s a -> s{_sSchemas = a}) .
-      _Default
-      . _Coerce
-
--- | Kind of resource this is.
-sKind :: Lens' Schemas Text
-sKind = lens _sKind (\ s a -> s{_sKind = a})
-
-instance FromJSON Schemas where
-        parseJSON
-          = withObject "Schemas"
-              (\ o ->
-                 Schemas' <$>
-                   (o .:? "etag") <*> (o .:? "schemas" .!= mempty) <*>
-                     (o .:? "kind" .!= "admin#directory#schemas"))
-
-instance ToJSON Schemas where
-        toJSON Schemas'{..}
-          = object
-              (catMaybes
-                 [("etag" .=) <$> _sEtag,
-                  ("schemas" .=) <$> _sSchemas,
-                  Just ("kind" .= _sKind)])
-
--- | Template for a notification resource.
---
--- /See:/ 'notification' smart constructor.
-data Notification = Notification'
-    { _nSubject        :: !(Maybe Text)
-    , _nEtag           :: !(Maybe Text)
-    , _nKind           :: !Text
-    , _nBody           :: !(Maybe Text)
-    , _nFromAddress    :: !(Maybe Text)
-    , _nIsUnread       :: !(Maybe Bool)
-    , _nNotificationId :: !(Maybe Text)
-    , _nSendTime       :: !(Maybe DateTime')
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Notification' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'nSubject'
---
--- * 'nEtag'
---
--- * 'nKind'
---
--- * 'nBody'
---
--- * 'nFromAddress'
---
--- * 'nIsUnread'
---
--- * 'nNotificationId'
---
--- * 'nSendTime'
-notification
-    :: Notification
-notification =
-    Notification'
-    { _nSubject = Nothing
-    , _nEtag = Nothing
-    , _nKind = "admin#directory#notification"
-    , _nBody = Nothing
-    , _nFromAddress = Nothing
-    , _nIsUnread = Nothing
-    , _nNotificationId = Nothing
-    , _nSendTime = Nothing
-    }
-
--- | Subject of the notification (Read-only)
-nSubject :: Lens' Notification (Maybe Text)
-nSubject = lens _nSubject (\ s a -> s{_nSubject = a})
-
--- | ETag of the resource.
-nEtag :: Lens' Notification (Maybe Text)
-nEtag = lens _nEtag (\ s a -> s{_nEtag = a})
-
--- | The type of the resource.
-nKind :: Lens' Notification Text
-nKind = lens _nKind (\ s a -> s{_nKind = a})
-
--- | Body of the notification (Read-only)
-nBody :: Lens' Notification (Maybe Text)
-nBody = lens _nBody (\ s a -> s{_nBody = a})
-
--- | Address from which the notification is received (Read-only)
-nFromAddress :: Lens' Notification (Maybe Text)
-nFromAddress
-  = lens _nFromAddress (\ s a -> s{_nFromAddress = a})
-
--- | Boolean indicating whether the notification is unread or not.
-nIsUnread :: Lens' Notification (Maybe Bool)
-nIsUnread
-  = lens _nIsUnread (\ s a -> s{_nIsUnread = a})
-
-nNotificationId :: Lens' Notification (Maybe Text)
-nNotificationId
-  = lens _nNotificationId
-      (\ s a -> s{_nNotificationId = a})
-
--- | Time at which notification was sent (Read-only)
-nSendTime :: Lens' Notification (Maybe UTCTime)
-nSendTime
-  = lens _nSendTime (\ s a -> s{_nSendTime = a}) .
-      mapping _DateTime
-
-instance FromJSON Notification where
-        parseJSON
-          = withObject "Notification"
-              (\ o ->
-                 Notification' <$>
-                   (o .:? "subject") <*> (o .:? "etag") <*>
-                     (o .:? "kind" .!= "admin#directory#notification")
-                     <*> (o .:? "body")
-                     <*> (o .:? "fromAddress")
-                     <*> (o .:? "isUnread")
-                     <*> (o .:? "notificationId")
-                     <*> (o .:? "sendTime"))
-
-instance ToJSON Notification where
-        toJSON Notification'{..}
-          = object
-              (catMaybes
-                 [("subject" .=) <$> _nSubject,
-                  ("etag" .=) <$> _nEtag, Just ("kind" .= _nKind),
-                  ("body" .=) <$> _nBody,
-                  ("fromAddress" .=) <$> _nFromAddress,
-                  ("isUnread" .=) <$> _nIsUnread,
-                  ("notificationId" .=) <$> _nNotificationId,
-                  ("sendTime" .=) <$> _nSendTime])
-
--- | JSON template for instant messenger of an user.
---
--- /See:/ 'userIm' smart constructor.
-data UserIm = UserIm'
-    { _uiIm             :: !(Maybe Text)
-    , _uiProtocol       :: !(Maybe Text)
-    , _uiPrimary        :: !(Maybe Bool)
-    , _uiCustomProtocol :: !(Maybe Text)
-    , _uiType           :: !(Maybe Text)
-    , _uiCustomType     :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'UserIm' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'uiIm'
---
--- * 'uiProtocol'
---
--- * 'uiPrimary'
---
--- * 'uiCustomProtocol'
---
--- * 'uiType'
---
--- * 'uiCustomType'
-userIm
-    :: UserIm
-userIm =
-    UserIm'
-    { _uiIm = Nothing
-    , _uiProtocol = Nothing
-    , _uiPrimary = Nothing
-    , _uiCustomProtocol = Nothing
-    , _uiType = Nothing
-    , _uiCustomType = Nothing
-    }
-
--- | Instant messenger id.
-uiIm :: Lens' UserIm (Maybe Text)
-uiIm = lens _uiIm (\ s a -> s{_uiIm = a})
-
--- | Protocol used in the instant messenger. It should be one of the values
--- from ImProtocolTypes map. Similar to type, it can take a CUSTOM value
--- and specify the custom name in customProtocol field.
-uiProtocol :: Lens' UserIm (Maybe Text)
-uiProtocol
-  = lens _uiProtocol (\ s a -> s{_uiProtocol = a})
-
--- | If this is user\'s primary im. Only one entry could be marked as
--- primary.
-uiPrimary :: Lens' UserIm (Maybe Bool)
-uiPrimary
-  = lens _uiPrimary (\ s a -> s{_uiPrimary = a})
-
--- | Custom protocol.
-uiCustomProtocol :: Lens' UserIm (Maybe Text)
-uiCustomProtocol
-  = lens _uiCustomProtocol
-      (\ s a -> s{_uiCustomProtocol = a})
-
--- | Each entry can have a type which indicates standard types of that entry.
--- For example instant messengers could be of home, work etc. In addition
--- to the standard type, an entry can have a custom type and can take any
--- value. Such types should have the CUSTOM value as type and also have a
--- customType value.
-uiType :: Lens' UserIm (Maybe Text)
-uiType = lens _uiType (\ s a -> s{_uiType = a})
-
--- | Custom type.
-uiCustomType :: Lens' UserIm (Maybe Text)
-uiCustomType
-  = lens _uiCustomType (\ s a -> s{_uiCustomType = a})
-
-instance FromJSON UserIm where
-        parseJSON
-          = withObject "UserIm"
-              (\ o ->
-                 UserIm' <$>
-                   (o .:? "im") <*> (o .:? "protocol") <*>
-                     (o .:? "primary")
-                     <*> (o .:? "customProtocol")
-                     <*> (o .:? "type")
-                     <*> (o .:? "customType"))
-
-instance ToJSON UserIm where
-        toJSON UserIm'{..}
-          = object
-              (catMaybes
-                 [("im" .=) <$> _uiIm,
-                  ("protocol" .=) <$> _uiProtocol,
-                  ("primary" .=) <$> _uiPrimary,
-                  ("customProtocol" .=) <$> _uiCustomProtocol,
-                  ("type" .=) <$> _uiType,
-                  ("customType" .=) <$> _uiCustomType])
-
--- | JSON response template for List tokens operation in Directory API.
---
--- /See:/ 'tokens' smart constructor.
-data Tokens = Tokens'
-    { _tEtag  :: !(Maybe Text)
-    , _tKind  :: !Text
-    , _tItems :: !(Maybe [Token])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Tokens' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tEtag'
---
--- * 'tKind'
---
--- * 'tItems'
-tokens
-    :: Tokens
-tokens =
-    Tokens'
-    { _tEtag = Nothing
-    , _tKind = "admin#directory#tokenList"
-    , _tItems = Nothing
-    }
-
--- | ETag of the resource.
-tEtag :: Lens' Tokens (Maybe Text)
-tEtag = lens _tEtag (\ s a -> s{_tEtag = a})
-
--- | The type of the API resource. This is always admin#directory#tokenList.
-tKind :: Lens' Tokens Text
-tKind = lens _tKind (\ s a -> s{_tKind = a})
-
--- | A list of Token resources.
-tItems :: Lens' Tokens [Token]
-tItems
-  = lens _tItems (\ s a -> s{_tItems = a}) . _Default .
-      _Coerce
-
-instance FromJSON Tokens where
-        parseJSON
-          = withObject "Tokens"
-              (\ o ->
-                 Tokens' <$>
-                   (o .:? "etag") <*>
-                     (o .:? "kind" .!= "admin#directory#tokenList")
-                     <*> (o .:? "items" .!= mempty))
-
-instance ToJSON Tokens where
-        toJSON Tokens'{..}
-          = object
-              (catMaybes
-                 [("etag" .=) <$> _tEtag, Just ("kind" .= _tKind),
-                  ("items" .=) <$> _tItems])
-
--- | Custom fields of the user.
---
--- /See:/ 'userCustomSchemas' smart constructor.
-newtype UserCustomSchemas = UserCustomSchemas'
-    { _ucsAddtional :: HashMap Text UserCustomProperties
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'UserCustomSchemas' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ucsAddtional'
-userCustomSchemas
-    :: HashMap Text UserCustomProperties -- ^ 'ucsAddtional'
-    -> UserCustomSchemas
-userCustomSchemas pUcsAddtional_ =
-    UserCustomSchemas'
-    { _ucsAddtional = _Coerce # pUcsAddtional_
-    }
-
-ucsAddtional :: Lens' UserCustomSchemas (HashMap Text UserCustomProperties)
-ucsAddtional
-  = lens _ucsAddtional (\ s a -> s{_ucsAddtional = a})
-      . _Coerce
-
-instance FromJSON UserCustomSchemas where
-        parseJSON
-          = withObject "UserCustomSchemas"
-              (\ o -> UserCustomSchemas' <$> (parseJSONObject o))
-
-instance ToJSON UserCustomSchemas where
-        toJSON = toJSON . _ucsAddtional
-
--- | JSON response template to list domain aliases in Directory API.
---
--- /See:/ 'domainAliases' smart constructor.
-data DomainAliases = DomainAliases'
-    { _daEtag          :: !(Maybe Text)
-    , _daKind          :: !Text
-    , _daDomainAliases :: !(Maybe [DomainAlias])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DomainAliases' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'daEtag'
---
--- * 'daKind'
---
--- * 'daDomainAliases'
-domainAliases
-    :: DomainAliases
-domainAliases =
-    DomainAliases'
-    { _daEtag = Nothing
-    , _daKind = "admin#directory#domainAliases"
-    , _daDomainAliases = Nothing
-    }
-
--- | ETag of the resource.
-daEtag :: Lens' DomainAliases (Maybe Text)
-daEtag = lens _daEtag (\ s a -> s{_daEtag = a})
-
--- | Kind of resource this is.
-daKind :: Lens' DomainAliases Text
-daKind = lens _daKind (\ s a -> s{_daKind = a})
-
--- | List of domain alias objects.
-daDomainAliases :: Lens' DomainAliases [DomainAlias]
-daDomainAliases
-  = lens _daDomainAliases
-      (\ s a -> s{_daDomainAliases = a})
-      . _Default
-      . _Coerce
-
-instance FromJSON DomainAliases where
-        parseJSON
-          = withObject "DomainAliases"
-              (\ o ->
-                 DomainAliases' <$>
-                   (o .:? "etag") <*>
-                     (o .:? "kind" .!= "admin#directory#domainAliases")
-                     <*> (o .:? "domainAliases" .!= mempty))
-
-instance ToJSON DomainAliases where
-        toJSON DomainAliases'{..}
-          = object
-              (catMaybes
-                 [("etag" .=) <$> _daEtag, Just ("kind" .= _daKind),
-                  ("domainAliases" .=) <$> _daDomainAliases])
-
--- | JSON response template to list aliases in Directory API.
---
--- /See:/ 'aliases' smart constructor.
-data Aliases = Aliases'
-    { _aliEtag    :: !(Maybe Text)
-    , _aliKind    :: !Text
-    , _aliAliases :: !(Maybe [JSONValue])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Aliases' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'aliEtag'
---
--- * 'aliKind'
---
--- * 'aliAliases'
-aliases
-    :: Aliases
-aliases =
-    Aliases'
-    { _aliEtag = Nothing
-    , _aliKind = "admin#directory#aliases"
-    , _aliAliases = Nothing
-    }
-
--- | ETag of the resource.
-aliEtag :: Lens' Aliases (Maybe Text)
-aliEtag = lens _aliEtag (\ s a -> s{_aliEtag = a})
-
--- | Kind of resource this is.
-aliKind :: Lens' Aliases Text
-aliKind = lens _aliKind (\ s a -> s{_aliKind = a})
-
--- | List of alias objects.
-aliAliases :: Lens' Aliases [JSONValue]
-aliAliases
-  = lens _aliAliases (\ s a -> s{_aliAliases = a}) .
-      _Default
-      . _Coerce
-
-instance FromJSON Aliases where
-        parseJSON
-          = withObject "Aliases"
-              (\ o ->
-                 Aliases' <$>
-                   (o .:? "etag") <*>
-                     (o .:? "kind" .!= "admin#directory#aliases")
-                     <*> (o .:? "aliases" .!= mempty))
-
-instance ToJSON Aliases where
-        toJSON Aliases'{..}
-          = object
-              (catMaybes
-                 [("etag" .=) <$> _aliEtag, Just ("kind" .= _aliKind),
-                  ("aliases" .=) <$> _aliAliases])
-
--- | JSON template for Calendar Resource object in Directory API.
---
--- /See:/ 'calendarResource' smart constructor.
-data CalendarResource = CalendarResource'
-    { _crEtags               :: !(Maybe Text)
-    , _crResourceId          :: !(Maybe Text)
-    , _crResourceType        :: !(Maybe Text)
-    , _crResourceName        :: !(Maybe Text)
-    , _crKind                :: !Text
-    , _crResourceEmail       :: !(Maybe Text)
-    , _crResourceDescription :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CalendarResource' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'crEtags'
---
--- * 'crResourceId'
---
--- * 'crResourceType'
---
--- * 'crResourceName'
---
--- * 'crKind'
---
--- * 'crResourceEmail'
---
--- * 'crResourceDescription'
-calendarResource
-    :: CalendarResource
-calendarResource =
-    CalendarResource'
-    { _crEtags = Nothing
-    , _crResourceId = Nothing
-    , _crResourceType = Nothing
-    , _crResourceName = Nothing
-    , _crKind = "admin#directory#resources#calendars#CalendarResource"
-    , _crResourceEmail = Nothing
-    , _crResourceDescription = Nothing
-    }
-
--- | ETag of the resource.
-crEtags :: Lens' CalendarResource (Maybe Text)
-crEtags = lens _crEtags (\ s a -> s{_crEtags = a})
-
--- | The unique ID for the calendar resource.
-crResourceId :: Lens' CalendarResource (Maybe Text)
-crResourceId
-  = lens _crResourceId (\ s a -> s{_crResourceId = a})
-
--- | The type of the calendar resource. Used for grouping resources in the
--- calendar user interface.
-crResourceType :: Lens' CalendarResource (Maybe Text)
-crResourceType
-  = lens _crResourceType
-      (\ s a -> s{_crResourceType = a})
-
--- | The name of the calendar resource. For example, Training Room 1A
-crResourceName :: Lens' CalendarResource (Maybe Text)
-crResourceName
-  = lens _crResourceName
-      (\ s a -> s{_crResourceName = a})
-
--- | The type of the resource. For calendar resources, the value is
--- admin#directory#resources#calendars#CalendarResource.
-crKind :: Lens' CalendarResource Text
-crKind = lens _crKind (\ s a -> s{_crKind = a})
-
--- | The read-only email ID for the calendar resource. Generated as part of
--- creating a new calendar resource.
-crResourceEmail :: Lens' CalendarResource (Maybe Text)
-crResourceEmail
-  = lens _crResourceEmail
-      (\ s a -> s{_crResourceEmail = a})
-
--- | The brief description of the calendar resource.
-crResourceDescription :: Lens' CalendarResource (Maybe Text)
-crResourceDescription
-  = lens _crResourceDescription
-      (\ s a -> s{_crResourceDescription = a})
-
-instance FromJSON CalendarResource where
-        parseJSON
-          = withObject "CalendarResource"
-              (\ o ->
-                 CalendarResource' <$>
-                   (o .:? "etags") <*> (o .:? "resourceId") <*>
-                     (o .:? "resourceType")
-                     <*> (o .:? "resourceName")
-                     <*>
-                     (o .:? "kind" .!=
-                        "admin#directory#resources#calendars#CalendarResource")
-                     <*> (o .:? "resourceEmail")
-                     <*> (o .:? "resourceDescription"))
-
-instance ToJSON CalendarResource where
-        toJSON CalendarResource'{..}
-          = object
-              (catMaybes
-                 [("etags" .=) <$> _crEtags,
-                  ("resourceId" .=) <$> _crResourceId,
-                  ("resourceType" .=) <$> _crResourceType,
-                  ("resourceName" .=) <$> _crResourceName,
-                  Just ("kind" .= _crKind),
-                  ("resourceEmail" .=) <$> _crResourceEmail,
-                  ("resourceDescription" .=) <$>
-                    _crResourceDescription])
-
--- | JSON request template to undelete a user in Directory API.
---
--- /See:/ 'userUndelete' smart constructor.
-newtype UserUndelete = UserUndelete'
-    { _uuOrgUnitPath :: Maybe Text
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'UserUndelete' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'uuOrgUnitPath'
-userUndelete
-    :: UserUndelete
-userUndelete =
-    UserUndelete'
-    { _uuOrgUnitPath = Nothing
-    }
-
--- | OrgUnit of User
-uuOrgUnitPath :: Lens' UserUndelete (Maybe Text)
-uuOrgUnitPath
-  = lens _uuOrgUnitPath
-      (\ s a -> s{_uuOrgUnitPath = a})
-
-instance FromJSON UserUndelete where
-        parseJSON
-          = withObject "UserUndelete"
-              (\ o -> UserUndelete' <$> (o .:? "orgUnitPath"))
-
-instance ToJSON UserUndelete where
-        toJSON UserUndelete'{..}
-          = object
-              (catMaybes [("orgUnitPath" .=) <$> _uuOrgUnitPath])
-
--- | JSON response template for List Members operation in Directory API.
---
--- /See:/ 'members' smart constructor.
-data Members = Members'
-    { _mEtag          :: !(Maybe Text)
-    , _mNextPageToken :: !(Maybe Text)
-    , _mKind          :: !Text
-    , _mMembers       :: !(Maybe [Member])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Members' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'mEtag'
---
--- * 'mNextPageToken'
---
--- * 'mKind'
---
--- * 'mMembers'
-members
-    :: Members
-members =
-    Members'
-    { _mEtag = Nothing
-    , _mNextPageToken = Nothing
-    , _mKind = "admin#directory#members"
-    , _mMembers = Nothing
-    }
-
--- | ETag of the resource.
-mEtag :: Lens' Members (Maybe Text)
-mEtag = lens _mEtag (\ s a -> s{_mEtag = a})
-
--- | Token used to access next page of this result.
-mNextPageToken :: Lens' Members (Maybe Text)
-mNextPageToken
-  = lens _mNextPageToken
-      (\ s a -> s{_mNextPageToken = a})
-
--- | Kind of resource this is.
-mKind :: Lens' Members Text
-mKind = lens _mKind (\ s a -> s{_mKind = a})
-
--- | List of member objects.
-mMembers :: Lens' Members [Member]
-mMembers
-  = lens _mMembers (\ s a -> s{_mMembers = a}) .
-      _Default
-      . _Coerce
-
-instance FromJSON Members where
-        parseJSON
-          = withObject "Members"
-              (\ o ->
-                 Members' <$>
-                   (o .:? "etag") <*> (o .:? "nextPageToken") <*>
-                     (o .:? "kind" .!= "admin#directory#members")
-                     <*> (o .:? "members" .!= mempty))
-
-instance ToJSON Members where
-        toJSON Members'{..}
-          = object
-              (catMaybes
-                 [("etag" .=) <$> _mEtag,
-                  ("nextPageToken" .=) <$> _mNextPageToken,
-                  Just ("kind" .= _mKind),
-                  ("members" .=) <$> _mMembers])
-
--- | An notification channel used to watch for resource changes.
---
--- /See:/ 'channel' smart constructor.
-data Channel = Channel'
-    { _cResourceURI :: !(Maybe Text)
-    , _cResourceId  :: !(Maybe Text)
-    , _cKind        :: !Text
-    , _cExpiration  :: !(Maybe (Textual Int64))
-    , _cToken       :: !(Maybe Text)
-    , _cAddress     :: !(Maybe Text)
-    , _cPayload     :: !(Maybe Bool)
-    , _cParams      :: !(Maybe ChannelParams)
-    , _cId          :: !(Maybe Text)
-    , _cType        :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Channel' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cResourceURI'
---
--- * 'cResourceId'
---
--- * 'cKind'
---
--- * 'cExpiration'
---
--- * 'cToken'
---
--- * 'cAddress'
---
--- * 'cPayload'
---
--- * 'cParams'
---
--- * 'cId'
---
--- * 'cType'
-channel
-    :: Channel
-channel =
-    Channel'
-    { _cResourceURI = Nothing
-    , _cResourceId = Nothing
-    , _cKind = "api#channel"
-    , _cExpiration = Nothing
-    , _cToken = Nothing
-    , _cAddress = Nothing
-    , _cPayload = Nothing
-    , _cParams = Nothing
-    , _cId = Nothing
-    , _cType = Nothing
-    }
-
--- | A version-specific identifier for the watched resource.
-cResourceURI :: Lens' Channel (Maybe Text)
-cResourceURI
-  = lens _cResourceURI (\ s a -> s{_cResourceURI = a})
-
--- | An opaque ID that identifies the resource being watched on this channel.
--- Stable across different API versions.
-cResourceId :: Lens' Channel (Maybe Text)
-cResourceId
-  = lens _cResourceId (\ s a -> s{_cResourceId = a})
-
--- | Identifies this as a notification channel used to watch for changes to a
--- resource. Value: the fixed string \"api#channel\".
-cKind :: Lens' Channel Text
-cKind = lens _cKind (\ s a -> s{_cKind = a})
-
--- | Date and time of notification channel expiration, expressed as a Unix
--- timestamp, in milliseconds. Optional.
-cExpiration :: Lens' Channel (Maybe Int64)
-cExpiration
-  = lens _cExpiration (\ s a -> s{_cExpiration = a}) .
-      mapping _Coerce
-
--- | An arbitrary string delivered to the target address with each
--- notification delivered over this channel. Optional.
-cToken :: Lens' Channel (Maybe Text)
-cToken = lens _cToken (\ s a -> s{_cToken = a})
-
--- | The address where notifications are delivered for this channel.
-cAddress :: Lens' Channel (Maybe Text)
-cAddress = lens _cAddress (\ s a -> s{_cAddress = a})
-
--- | A Boolean value to indicate whether payload is wanted. Optional.
-cPayload :: Lens' Channel (Maybe Bool)
-cPayload = lens _cPayload (\ s a -> s{_cPayload = a})
-
--- | Additional parameters controlling delivery channel behavior. Optional.
-cParams :: Lens' Channel (Maybe ChannelParams)
-cParams = lens _cParams (\ s a -> s{_cParams = a})
-
--- | A UUID or similar unique string that identifies this channel.
-cId :: Lens' Channel (Maybe Text)
-cId = lens _cId (\ s a -> s{_cId = a})
-
--- | The type of delivery mechanism used for this channel.
-cType :: Lens' Channel (Maybe Text)
-cType = lens _cType (\ s a -> s{_cType = a})
-
-instance FromJSON Channel where
-        parseJSON
-          = withObject "Channel"
-              (\ o ->
-                 Channel' <$>
-                   (o .:? "resourceUri") <*> (o .:? "resourceId") <*>
-                     (o .:? "kind" .!= "api#channel")
-                     <*> (o .:? "expiration")
-                     <*> (o .:? "token")
-                     <*> (o .:? "address")
-                     <*> (o .:? "payload")
-                     <*> (o .:? "params")
-                     <*> (o .:? "id")
-                     <*> (o .:? "type"))
-
-instance ToJSON Channel where
-        toJSON Channel'{..}
-          = object
-              (catMaybes
-                 [("resourceUri" .=) <$> _cResourceURI,
-                  ("resourceId" .=) <$> _cResourceId,
-                  Just ("kind" .= _cKind),
-                  ("expiration" .=) <$> _cExpiration,
-                  ("token" .=) <$> _cToken,
-                  ("address" .=) <$> _cAddress,
-                  ("payload" .=) <$> _cPayload,
-                  ("params" .=) <$> _cParams, ("id" .=) <$> _cId,
-                  ("type" .=) <$> _cType])
-
--- | JSON response template for List Mobile Devices operation in Directory
--- API.
---
--- /See:/ 'mobileDevices' smart constructor.
-data MobileDevices = MobileDevices'
-    { _mdEtag          :: !(Maybe Text)
-    , _mdNextPageToken :: !(Maybe Text)
-    , _mdKind          :: !Text
-    , _mdMobileDevices :: !(Maybe [MobileDevice])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'MobileDevices' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'mdEtag'
---
--- * 'mdNextPageToken'
---
--- * 'mdKind'
---
--- * 'mdMobileDevices'
-mobileDevices
-    :: MobileDevices
-mobileDevices =
-    MobileDevices'
-    { _mdEtag = Nothing
-    , _mdNextPageToken = Nothing
-    , _mdKind = "admin#directory#mobiledevices"
-    , _mdMobileDevices = Nothing
-    }
-
--- | ETag of the resource.
-mdEtag :: Lens' MobileDevices (Maybe Text)
-mdEtag = lens _mdEtag (\ s a -> s{_mdEtag = a})
-
--- | Token used to access next page of this result.
-mdNextPageToken :: Lens' MobileDevices (Maybe Text)
-mdNextPageToken
-  = lens _mdNextPageToken
-      (\ s a -> s{_mdNextPageToken = a})
-
--- | Kind of resource this is.
-mdKind :: Lens' MobileDevices Text
-mdKind = lens _mdKind (\ s a -> s{_mdKind = a})
-
--- | List of Mobile Device objects.
-mdMobileDevices :: Lens' MobileDevices [MobileDevice]
-mdMobileDevices
-  = lens _mdMobileDevices
-      (\ s a -> s{_mdMobileDevices = a})
-      . _Default
-      . _Coerce
-
-instance FromJSON MobileDevices where
-        parseJSON
-          = withObject "MobileDevices"
-              (\ o ->
-                 MobileDevices' <$>
-                   (o .:? "etag") <*> (o .:? "nextPageToken") <*>
-                     (o .:? "kind" .!= "admin#directory#mobiledevices")
-                     <*> (o .:? "mobiledevices" .!= mempty))
-
-instance ToJSON MobileDevices where
-        toJSON MobileDevices'{..}
-          = object
-              (catMaybes
-                 [("etag" .=) <$> _mdEtag,
-                  ("nextPageToken" .=) <$> _mdNextPageToken,
-                  Just ("kind" .= _mdKind),
-                  ("mobiledevices" .=) <$> _mdMobileDevices])
-
--- | JSON template for token resource in Directory API.
---
--- /See:/ 'token' smart constructor.
-data Token = Token'
-    { _tokClientId    :: !(Maybe Text)
-    , _tokEtag        :: !(Maybe Text)
-    , _tokDisplayText :: !(Maybe Text)
-    , _tokKind        :: !Text
-    , _tokScopes      :: !(Maybe [Text])
-    , _tokNATiveApp   :: !(Maybe Bool)
-    , _tokAnonymous   :: !(Maybe Bool)
-    , _tokUserKey     :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Token' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tokClientId'
---
--- * 'tokEtag'
---
--- * 'tokDisplayText'
---
--- * 'tokKind'
---
--- * 'tokScopes'
---
--- * 'tokNATiveApp'
---
--- * 'tokAnonymous'
---
--- * 'tokUserKey'
-token
-    :: Token
-token =
-    Token'
-    { _tokClientId = Nothing
-    , _tokEtag = Nothing
-    , _tokDisplayText = Nothing
-    , _tokKind = "admin#directory#token"
-    , _tokScopes = Nothing
-    , _tokNATiveApp = Nothing
-    , _tokAnonymous = Nothing
-    , _tokUserKey = Nothing
-    }
-
--- | The Client ID of the application the token is issued to.
-tokClientId :: Lens' Token (Maybe Text)
-tokClientId
-  = lens _tokClientId (\ s a -> s{_tokClientId = a})
-
--- | ETag of the resource.
-tokEtag :: Lens' Token (Maybe Text)
-tokEtag = lens _tokEtag (\ s a -> s{_tokEtag = a})
-
--- | The displayable name of the application the token is issued to.
-tokDisplayText :: Lens' Token (Maybe Text)
-tokDisplayText
-  = lens _tokDisplayText
-      (\ s a -> s{_tokDisplayText = a})
-
--- | The type of the API resource. This is always admin#directory#token.
-tokKind :: Lens' Token Text
-tokKind = lens _tokKind (\ s a -> s{_tokKind = a})
-
--- | A list of authorization scopes the application is granted.
-tokScopes :: Lens' Token [Text]
-tokScopes
-  = lens _tokScopes (\ s a -> s{_tokScopes = a}) .
-      _Default
-      . _Coerce
-
--- | Whether the token is issued to an installed application. The value is
--- true if the application is installed to a desktop or mobile device.
-tokNATiveApp :: Lens' Token (Maybe Bool)
-tokNATiveApp
-  = lens _tokNATiveApp (\ s a -> s{_tokNATiveApp = a})
-
--- | Whether the application is registered with Google. The value is true if
--- the application has an anonymous Client ID.
-tokAnonymous :: Lens' Token (Maybe Bool)
-tokAnonymous
-  = lens _tokAnonymous (\ s a -> s{_tokAnonymous = a})
-
--- | The unique ID of the user that issued the token.
-tokUserKey :: Lens' Token (Maybe Text)
-tokUserKey
-  = lens _tokUserKey (\ s a -> s{_tokUserKey = a})
-
-instance FromJSON Token where
-        parseJSON
-          = withObject "Token"
-              (\ o ->
-                 Token' <$>
-                   (o .:? "clientId") <*> (o .:? "etag") <*>
-                     (o .:? "displayText")
-                     <*> (o .:? "kind" .!= "admin#directory#token")
-                     <*> (o .:? "scopes" .!= mempty)
-                     <*> (o .:? "nativeApp")
-                     <*> (o .:? "anonymous")
-                     <*> (o .:? "userKey"))
-
-instance ToJSON Token where
-        toJSON Token'{..}
-          = object
-              (catMaybes
-                 [("clientId" .=) <$> _tokClientId,
-                  ("etag" .=) <$> _tokEtag,
-                  ("displayText" .=) <$> _tokDisplayText,
-                  Just ("kind" .= _tokKind),
-                  ("scopes" .=) <$> _tokScopes,
-                  ("nativeApp" .=) <$> _tokNATiveApp,
-                  ("anonymous" .=) <$> _tokAnonymous,
-                  ("userKey" .=) <$> _tokUserKey])
-
--- | JSON template for name of a user in Directory API.
---
--- /See:/ 'userName' smart constructor.
-data UserName = UserName'
-    { _unGivenName  :: !(Maybe Text)
-    , _unFullName   :: !(Maybe Text)
-    , _unFamilyName :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'UserName' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'unGivenName'
---
--- * 'unFullName'
---
--- * 'unFamilyName'
-userName
-    :: UserName
-userName =
-    UserName'
-    { _unGivenName = Nothing
-    , _unFullName = Nothing
-    , _unFamilyName = Nothing
-    }
-
--- | First Name
-unGivenName :: Lens' UserName (Maybe Text)
-unGivenName
-  = lens _unGivenName (\ s a -> s{_unGivenName = a})
-
--- | Full Name
-unFullName :: Lens' UserName (Maybe Text)
-unFullName
-  = lens _unFullName (\ s a -> s{_unFullName = a})
-
--- | Last Name
-unFamilyName :: Lens' UserName (Maybe Text)
-unFamilyName
-  = lens _unFamilyName (\ s a -> s{_unFamilyName = a})
-
-instance FromJSON UserName where
-        parseJSON
-          = withObject "UserName"
-              (\ o ->
-                 UserName' <$>
-                   (o .:? "givenName") <*> (o .:? "fullName") <*>
-                     (o .:? "familyName"))
-
-instance ToJSON UserName where
-        toJSON UserName'{..}
-          = object
-              (catMaybes
-                 [("givenName" .=) <$> _unGivenName,
-                  ("fullName" .=) <$> _unFullName,
-                  ("familyName" .=) <$> _unFamilyName])
-
---
--- /See:/ 'chromeOSDeviceRecentUsersItem' smart constructor.
-data ChromeOSDeviceRecentUsersItem = ChromeOSDeviceRecentUsersItem'
-    { _codruiEmail :: !(Maybe Text)
-    , _codruiType  :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ChromeOSDeviceRecentUsersItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'codruiEmail'
---
--- * 'codruiType'
-chromeOSDeviceRecentUsersItem
-    :: ChromeOSDeviceRecentUsersItem
-chromeOSDeviceRecentUsersItem =
-    ChromeOSDeviceRecentUsersItem'
-    { _codruiEmail = Nothing
-    , _codruiType = Nothing
-    }
-
--- | Email address of the user. Present only if the user type is managed
-codruiEmail :: Lens' ChromeOSDeviceRecentUsersItem (Maybe Text)
-codruiEmail
-  = lens _codruiEmail (\ s a -> s{_codruiEmail = a})
-
--- | The type of the user
-codruiType :: Lens' ChromeOSDeviceRecentUsersItem (Maybe Text)
-codruiType
-  = lens _codruiType (\ s a -> s{_codruiType = a})
-
-instance FromJSON ChromeOSDeviceRecentUsersItem where
-        parseJSON
-          = withObject "ChromeOSDeviceRecentUsersItem"
-              (\ o ->
-                 ChromeOSDeviceRecentUsersItem' <$>
-                   (o .:? "email") <*> (o .:? "type"))
-
-instance ToJSON ChromeOSDeviceRecentUsersItem where
-        toJSON ChromeOSDeviceRecentUsersItem'{..}
-          = object
-              (catMaybes
-                 [("email" .=) <$> _codruiEmail,
-                  ("type" .=) <$> _codruiType])
-
--- | JSON template for Domain Alias object in Directory API.
---
--- /See:/ 'domainAlias' smart constructor.
-data DomainAlias = DomainAlias'
-    { _dCreationTime     :: !(Maybe (Textual Int64))
-    , _dEtag             :: !(Maybe Text)
-    , _dKind             :: !Text
-    , _dVerified         :: !(Maybe Bool)
-    , _dDomainAliasName  :: !(Maybe Text)
-    , _dParentDomainName :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DomainAlias' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dCreationTime'
---
--- * 'dEtag'
---
--- * 'dKind'
---
--- * 'dVerified'
---
--- * 'dDomainAliasName'
---
--- * 'dParentDomainName'
-domainAlias
-    :: DomainAlias
-domainAlias =
-    DomainAlias'
-    { _dCreationTime = Nothing
-    , _dEtag = Nothing
-    , _dKind = "admin#directory#domainAlias"
-    , _dVerified = Nothing
-    , _dDomainAliasName = Nothing
-    , _dParentDomainName = Nothing
-    }
-
--- | The creation time of the domain alias. (Read-only).
-dCreationTime :: Lens' DomainAlias (Maybe Int64)
-dCreationTime
-  = lens _dCreationTime
-      (\ s a -> s{_dCreationTime = a})
-      . mapping _Coerce
-
--- | ETag of the resource.
-dEtag :: Lens' DomainAlias (Maybe Text)
-dEtag = lens _dEtag (\ s a -> s{_dEtag = a})
-
--- | Kind of resource this is.
-dKind :: Lens' DomainAlias Text
-dKind = lens _dKind (\ s a -> s{_dKind = a})
-
--- | Indicates the verification state of a domain alias. (Read-only)
-dVerified :: Lens' DomainAlias (Maybe Bool)
-dVerified
-  = lens _dVerified (\ s a -> s{_dVerified = a})
-
--- | The domain alias name.
-dDomainAliasName :: Lens' DomainAlias (Maybe Text)
-dDomainAliasName
-  = lens _dDomainAliasName
-      (\ s a -> s{_dDomainAliasName = a})
-
--- | The parent domain name that the domain alias is associated with. This
--- can either be a primary or secondary domain name within a customer.
-dParentDomainName :: Lens' DomainAlias (Maybe Text)
-dParentDomainName
-  = lens _dParentDomainName
-      (\ s a -> s{_dParentDomainName = a})
-
-instance FromJSON DomainAlias where
-        parseJSON
-          = withObject "DomainAlias"
-              (\ o ->
-                 DomainAlias' <$>
-                   (o .:? "creationTime") <*> (o .:? "etag") <*>
-                     (o .:? "kind" .!= "admin#directory#domainAlias")
-                     <*> (o .:? "verified")
-                     <*> (o .:? "domainAliasName")
-                     <*> (o .:? "parentDomainName"))
-
-instance ToJSON DomainAlias where
-        toJSON DomainAlias'{..}
-          = object
-              (catMaybes
-                 [("creationTime" .=) <$> _dCreationTime,
-                  ("etag" .=) <$> _dEtag, Just ("kind" .= _dKind),
-                  ("verified" .=) <$> _dVerified,
-                  ("domainAliasName" .=) <$> _dDomainAliasName,
-                  ("parentDomainName" .=) <$> _dParentDomainName])
-
--- | JSON template for Alias object in Directory API.
---
--- /See:/ 'alias' smart constructor.
-data Alias = Alias'
-    { _aaEtag         :: !(Maybe Text)
-    , _aaKind         :: !Text
-    , _aaAlias        :: !(Maybe Text)
-    , _aaId           :: !(Maybe Text)
-    , _aaPrimaryEmail :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Alias' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'aaEtag'
---
--- * 'aaKind'
---
--- * 'aaAlias'
---
--- * 'aaId'
---
--- * 'aaPrimaryEmail'
-alias
-    :: Alias
-alias =
-    Alias'
-    { _aaEtag = Nothing
-    , _aaKind = "admin#directory#alias"
-    , _aaAlias = Nothing
-    , _aaId = Nothing
-    , _aaPrimaryEmail = Nothing
-    }
-
--- | ETag of the resource.
-aaEtag :: Lens' Alias (Maybe Text)
-aaEtag = lens _aaEtag (\ s a -> s{_aaEtag = a})
-
--- | Kind of resource this is.
-aaKind :: Lens' Alias Text
-aaKind = lens _aaKind (\ s a -> s{_aaKind = a})
-
--- | A alias email
-aaAlias :: Lens' Alias (Maybe Text)
-aaAlias = lens _aaAlias (\ s a -> s{_aaAlias = a})
-
--- | Unique id of the group (Read-only) Unique id of the user (Read-only)
-aaId :: Lens' Alias (Maybe Text)
-aaId = lens _aaId (\ s a -> s{_aaId = a})
-
--- | Group\'s primary email (Read-only) User\'s primary email (Read-only)
-aaPrimaryEmail :: Lens' Alias (Maybe Text)
-aaPrimaryEmail
-  = lens _aaPrimaryEmail
-      (\ s a -> s{_aaPrimaryEmail = a})
-
-instance FromJSON Alias where
-        parseJSON
-          = withObject "Alias"
-              (\ o ->
-                 Alias' <$>
-                   (o .:? "etag") <*>
-                     (o .:? "kind" .!= "admin#directory#alias")
-                     <*> (o .:? "alias")
-                     <*> (o .:? "id")
-                     <*> (o .:? "primaryEmail"))
-
-instance ToJSON Alias where
-        toJSON Alias'{..}
-          = object
-              (catMaybes
-                 [("etag" .=) <$> _aaEtag, Just ("kind" .= _aaKind),
-                  ("alias" .=) <$> _aaAlias, ("id" .=) <$> _aaId,
-                  ("primaryEmail" .=) <$> _aaPrimaryEmail])
-
--- | JSON template for Schema resource in Directory API.
---
--- /See:/ 'schema' smart constructor.
-data Schema = Schema'
-    { _schEtag       :: !(Maybe Text)
-    , _schKind       :: !Text
-    , _schSchemaName :: !(Maybe Text)
-    , _schSchemaId   :: !(Maybe Text)
-    , _schFields     :: !(Maybe [SchemaFieldSpec])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Schema' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'schEtag'
---
--- * 'schKind'
---
--- * 'schSchemaName'
---
--- * 'schSchemaId'
---
--- * 'schFields'
-schema
-    :: Schema
-schema =
-    Schema'
-    { _schEtag = Nothing
-    , _schKind = "admin#directory#schema"
-    , _schSchemaName = Nothing
-    , _schSchemaId = Nothing
-    , _schFields = Nothing
-    }
-
--- | ETag of the resource.
-schEtag :: Lens' Schema (Maybe Text)
-schEtag = lens _schEtag (\ s a -> s{_schEtag = a})
-
--- | Kind of resource this is.
-schKind :: Lens' Schema Text
-schKind = lens _schKind (\ s a -> s{_schKind = a})
-
--- | Schema name
-schSchemaName :: Lens' Schema (Maybe Text)
-schSchemaName
-  = lens _schSchemaName
-      (\ s a -> s{_schSchemaName = a})
-
--- | Unique identifier of Schema (Read-only)
-schSchemaId :: Lens' Schema (Maybe Text)
-schSchemaId
-  = lens _schSchemaId (\ s a -> s{_schSchemaId = a})
-
--- | Fields of Schema
-schFields :: Lens' Schema [SchemaFieldSpec]
-schFields
-  = lens _schFields (\ s a -> s{_schFields = a}) .
-      _Default
-      . _Coerce
-
-instance FromJSON Schema where
-        parseJSON
-          = withObject "Schema"
-              (\ o ->
-                 Schema' <$>
-                   (o .:? "etag") <*>
-                     (o .:? "kind" .!= "admin#directory#schema")
-                     <*> (o .:? "schemaName")
-                     <*> (o .:? "schemaId")
-                     <*> (o .:? "fields" .!= mempty))
-
-instance ToJSON Schema where
-        toJSON Schema'{..}
-          = object
-              (catMaybes
-                 [("etag" .=) <$> _schEtag, Just ("kind" .= _schKind),
-                  ("schemaName" .=) <$> _schSchemaName,
-                  ("schemaId" .=) <$> _schSchemaId,
-                  ("fields" .=) <$> _schFields])
-
--- | JSON template for User object in Directory API.
---
--- /See:/ 'user' smart constructor.
-data User = User'
-    { _useCreationTime               :: !(Maybe DateTime')
-    , _useLastLoginTime              :: !(Maybe DateTime')
-    , _useThumbnailPhotoEtag         :: !(Maybe Text)
-    , _useEtag                       :: !(Maybe Text)
-    , _useIPWhiteListed              :: !(Maybe Bool)
-    , _useRelations                  :: !(Maybe JSONValue)
-    , _useHashFunction               :: !(Maybe Text)
-    , _useKind                       :: !Text
-    , _useChangePasswordAtNextLogin  :: !(Maybe Bool)
-    , _useWebsites                   :: !(Maybe JSONValue)
-    , _useAddresses                  :: !(Maybe JSONValue)
-    , _useAliases                    :: !(Maybe [Text])
-    , _useThumbnailPhotoURL          :: !(Maybe Text)
-    , _useExternalIds                :: !(Maybe JSONValue)
-    , _useSuspended                  :: !(Maybe Bool)
-    , _useAgreedToTerms              :: !(Maybe Bool)
-    , _useDeletionTime               :: !(Maybe DateTime')
-    , _useNonEditableAliases         :: !(Maybe [Text])
-    , _useOrgUnitPath                :: !(Maybe Text)
-    , _useCustomerId                 :: !(Maybe Text)
-    , _useIncludeInGlobalAddressList :: !(Maybe Bool)
-    , _usePhones                     :: !(Maybe JSONValue)
-    , _useName                       :: !(Maybe UserName)
-    , _usePassword                   :: !(Maybe Text)
-    , _useEmails                     :: !(Maybe JSONValue)
-    , _useIms                        :: !(Maybe JSONValue)
-    , _useIsAdmin                    :: !(Maybe Bool)
-    , _useIsEnrolledIn2Sv            :: !(Maybe Bool)
-    , _useId                         :: !(Maybe Text)
-    , _useOrganizations              :: !(Maybe JSONValue)
-    , _usePrimaryEmail               :: !(Maybe Text)
-    , _useIsEnforcedIn2Sv            :: !(Maybe Bool)
-    , _useNotes                      :: !(Maybe JSONValue)
-    , _useIsDelegatedAdmin           :: !(Maybe Bool)
-    , _useIsMailboxSetup             :: !(Maybe Bool)
-    , _useCustomSchemas              :: !(Maybe UserCustomSchemas)
-    , _useSuspensionReason           :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'User' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'useCreationTime'
---
--- * 'useLastLoginTime'
---
--- * 'useThumbnailPhotoEtag'
---
--- * 'useEtag'
---
--- * 'useIPWhiteListed'
---
--- * 'useRelations'
---
--- * 'useHashFunction'
---
--- * 'useKind'
---
--- * 'useChangePasswordAtNextLogin'
---
--- * 'useWebsites'
---
--- * 'useAddresses'
---
--- * 'useAliases'
---
--- * 'useThumbnailPhotoURL'
---
--- * 'useExternalIds'
---
--- * 'useSuspended'
---
--- * 'useAgreedToTerms'
---
--- * 'useDeletionTime'
---
--- * 'useNonEditableAliases'
---
--- * 'useOrgUnitPath'
---
--- * 'useCustomerId'
---
--- * 'useIncludeInGlobalAddressList'
---
--- * 'usePhones'
---
--- * 'useName'
---
--- * 'usePassword'
---
--- * 'useEmails'
---
--- * 'useIms'
---
--- * 'useIsAdmin'
---
--- * 'useIsEnrolledIn2Sv'
---
--- * 'useId'
---
--- * 'useOrganizations'
---
--- * 'usePrimaryEmail'
---
--- * 'useIsEnforcedIn2Sv'
---
--- * 'useNotes'
---
--- * 'useIsDelegatedAdmin'
---
--- * 'useIsMailboxSetup'
---
--- * 'useCustomSchemas'
---
--- * 'useSuspensionReason'
-user
-    :: User
-user =
-    User'
-    { _useCreationTime = Nothing
-    , _useLastLoginTime = Nothing
-    , _useThumbnailPhotoEtag = Nothing
-    , _useEtag = Nothing
-    , _useIPWhiteListed = Nothing
-    , _useRelations = Nothing
-    , _useHashFunction = Nothing
-    , _useKind = "admin#directory#user"
-    , _useChangePasswordAtNextLogin = Nothing
-    , _useWebsites = Nothing
-    , _useAddresses = Nothing
-    , _useAliases = Nothing
-    , _useThumbnailPhotoURL = Nothing
-    , _useExternalIds = Nothing
-    , _useSuspended = Nothing
-    , _useAgreedToTerms = Nothing
-    , _useDeletionTime = Nothing
-    , _useNonEditableAliases = Nothing
-    , _useOrgUnitPath = Nothing
-    , _useCustomerId = Nothing
-    , _useIncludeInGlobalAddressList = Nothing
-    , _usePhones = Nothing
-    , _useName = Nothing
-    , _usePassword = Nothing
-    , _useEmails = Nothing
-    , _useIms = Nothing
-    , _useIsAdmin = Nothing
-    , _useIsEnrolledIn2Sv = Nothing
-    , _useId = Nothing
-    , _useOrganizations = Nothing
-    , _usePrimaryEmail = Nothing
-    , _useIsEnforcedIn2Sv = Nothing
-    , _useNotes = Nothing
-    , _useIsDelegatedAdmin = Nothing
-    , _useIsMailboxSetup = Nothing
-    , _useCustomSchemas = Nothing
-    , _useSuspensionReason = Nothing
-    }
-
--- | User\'s Google account creation time. (Read-only)
-useCreationTime :: Lens' User (Maybe UTCTime)
-useCreationTime
-  = lens _useCreationTime
-      (\ s a -> s{_useCreationTime = a})
-      . mapping _DateTime
-
--- | User\'s last login time. (Read-only)
-useLastLoginTime :: Lens' User (Maybe UTCTime)
-useLastLoginTime
-  = lens _useLastLoginTime
-      (\ s a -> s{_useLastLoginTime = a})
-      . mapping _DateTime
-
--- | ETag of the user\'s photo (Read-only)
-useThumbnailPhotoEtag :: Lens' User (Maybe Text)
-useThumbnailPhotoEtag
-  = lens _useThumbnailPhotoEtag
-      (\ s a -> s{_useThumbnailPhotoEtag = a})
-
--- | ETag of the resource.
-useEtag :: Lens' User (Maybe Text)
-useEtag = lens _useEtag (\ s a -> s{_useEtag = a})
-
--- | Boolean indicating if ip is whitelisted
-useIPWhiteListed :: Lens' User (Maybe Bool)
-useIPWhiteListed
-  = lens _useIPWhiteListed
-      (\ s a -> s{_useIPWhiteListed = a})
-
-useRelations :: Lens' User (Maybe JSONValue)
-useRelations
-  = lens _useRelations (\ s a -> s{_useRelations = a})
-
--- | Hash function name for password. Supported are MD5, SHA-1 and crypt
-useHashFunction :: Lens' User (Maybe Text)
-useHashFunction
-  = lens _useHashFunction
-      (\ s a -> s{_useHashFunction = a})
-
--- | Kind of resource this is.
-useKind :: Lens' User Text
-useKind = lens _useKind (\ s a -> s{_useKind = a})
-
--- | Boolean indicating if the user should change password in next login
-useChangePasswordAtNextLogin :: Lens' User (Maybe Bool)
-useChangePasswordAtNextLogin
-  = lens _useChangePasswordAtNextLogin
-      (\ s a -> s{_useChangePasswordAtNextLogin = a})
-
-useWebsites :: Lens' User (Maybe JSONValue)
-useWebsites
-  = lens _useWebsites (\ s a -> s{_useWebsites = a})
-
-useAddresses :: Lens' User (Maybe JSONValue)
-useAddresses
-  = lens _useAddresses (\ s a -> s{_useAddresses = a})
-
--- | List of aliases (Read-only)
-useAliases :: Lens' User [Text]
-useAliases
-  = lens _useAliases (\ s a -> s{_useAliases = a}) .
-      _Default
-      . _Coerce
-
--- | Photo Url of the user (Read-only)
-useThumbnailPhotoURL :: Lens' User (Maybe Text)
-useThumbnailPhotoURL
-  = lens _useThumbnailPhotoURL
-      (\ s a -> s{_useThumbnailPhotoURL = a})
-
-useExternalIds :: Lens' User (Maybe JSONValue)
-useExternalIds
-  = lens _useExternalIds
-      (\ s a -> s{_useExternalIds = a})
-
--- | Indicates if user is suspended
-useSuspended :: Lens' User (Maybe Bool)
-useSuspended
-  = lens _useSuspended (\ s a -> s{_useSuspended = a})
-
--- | Indicates if user has agreed to terms (Read-only)
-useAgreedToTerms :: Lens' User (Maybe Bool)
-useAgreedToTerms
-  = lens _useAgreedToTerms
-      (\ s a -> s{_useAgreedToTerms = a})
-
-useDeletionTime :: Lens' User (Maybe UTCTime)
-useDeletionTime
-  = lens _useDeletionTime
-      (\ s a -> s{_useDeletionTime = a})
-      . mapping _DateTime
-
--- | List of non editable aliases (Read-only)
-useNonEditableAliases :: Lens' User [Text]
-useNonEditableAliases
-  = lens _useNonEditableAliases
-      (\ s a -> s{_useNonEditableAliases = a})
-      . _Default
-      . _Coerce
-
--- | OrgUnit of User
-useOrgUnitPath :: Lens' User (Maybe Text)
-useOrgUnitPath
-  = lens _useOrgUnitPath
-      (\ s a -> s{_useOrgUnitPath = a})
-
--- | CustomerId of User (Read-only)
-useCustomerId :: Lens' User (Maybe Text)
-useCustomerId
-  = lens _useCustomerId
-      (\ s a -> s{_useCustomerId = a})
-
--- | Boolean indicating if user is included in Global Address List
-useIncludeInGlobalAddressList :: Lens' User (Maybe Bool)
-useIncludeInGlobalAddressList
-  = lens _useIncludeInGlobalAddressList
-      (\ s a -> s{_useIncludeInGlobalAddressList = a})
-
-usePhones :: Lens' User (Maybe JSONValue)
-usePhones
-  = lens _usePhones (\ s a -> s{_usePhones = a})
-
--- | User\'s name
-useName :: Lens' User (Maybe UserName)
-useName = lens _useName (\ s a -> s{_useName = a})
-
--- | User\'s password
-usePassword :: Lens' User (Maybe Text)
-usePassword
-  = lens _usePassword (\ s a -> s{_usePassword = a})
-
-useEmails :: Lens' User (Maybe JSONValue)
-useEmails
-  = lens _useEmails (\ s a -> s{_useEmails = a})
-
-useIms :: Lens' User (Maybe JSONValue)
-useIms = lens _useIms (\ s a -> s{_useIms = a})
-
--- | Boolean indicating if the user is admin (Read-only)
-useIsAdmin :: Lens' User (Maybe Bool)
-useIsAdmin
-  = lens _useIsAdmin (\ s a -> s{_useIsAdmin = a})
-
--- | Is enrolled in 2-step verification (Read-only)
-useIsEnrolledIn2Sv :: Lens' User (Maybe Bool)
-useIsEnrolledIn2Sv
-  = lens _useIsEnrolledIn2Sv
-      (\ s a -> s{_useIsEnrolledIn2Sv = a})
-
--- | Unique identifier of User (Read-only)
-useId :: Lens' User (Maybe Text)
-useId = lens _useId (\ s a -> s{_useId = a})
-
-useOrganizations :: Lens' User (Maybe JSONValue)
-useOrganizations
-  = lens _useOrganizations
-      (\ s a -> s{_useOrganizations = a})
-
--- | username of User
-usePrimaryEmail :: Lens' User (Maybe Text)
-usePrimaryEmail
-  = lens _usePrimaryEmail
-      (\ s a -> s{_usePrimaryEmail = a})
-
--- | Is 2-step verification enforced (Read-only)
-useIsEnforcedIn2Sv :: Lens' User (Maybe Bool)
-useIsEnforcedIn2Sv
-  = lens _useIsEnforcedIn2Sv
-      (\ s a -> s{_useIsEnforcedIn2Sv = a})
-
-useNotes :: Lens' User (Maybe JSONValue)
-useNotes = lens _useNotes (\ s a -> s{_useNotes = a})
-
--- | Boolean indicating if the user is delegated admin (Read-only)
-useIsDelegatedAdmin :: Lens' User (Maybe Bool)
-useIsDelegatedAdmin
-  = lens _useIsDelegatedAdmin
-      (\ s a -> s{_useIsDelegatedAdmin = a})
-
--- | Is mailbox setup (Read-only)
-useIsMailboxSetup :: Lens' User (Maybe Bool)
-useIsMailboxSetup
-  = lens _useIsMailboxSetup
-      (\ s a -> s{_useIsMailboxSetup = a})
-
--- | Custom fields of the user.
-useCustomSchemas :: Lens' User (Maybe UserCustomSchemas)
-useCustomSchemas
-  = lens _useCustomSchemas
-      (\ s a -> s{_useCustomSchemas = a})
-
--- | Suspension reason if user is suspended (Read-only)
-useSuspensionReason :: Lens' User (Maybe Text)
-useSuspensionReason
-  = lens _useSuspensionReason
-      (\ s a -> s{_useSuspensionReason = a})
-
-instance FromJSON User where
-        parseJSON
-          = withObject "User"
-              (\ o ->
-                 User' <$>
-                   (o .:? "creationTime") <*> (o .:? "lastLoginTime")
-                     <*> (o .:? "thumbnailPhotoEtag")
-                     <*> (o .:? "etag")
-                     <*> (o .:? "ipWhitelisted")
-                     <*> (o .:? "relations")
-                     <*> (o .:? "hashFunction")
-                     <*> (o .:? "kind" .!= "admin#directory#user")
-                     <*> (o .:? "changePasswordAtNextLogin")
-                     <*> (o .:? "websites")
-                     <*> (o .:? "addresses")
-                     <*> (o .:? "aliases" .!= mempty)
-                     <*> (o .:? "thumbnailPhotoUrl")
-                     <*> (o .:? "externalIds")
-                     <*> (o .:? "suspended")
-                     <*> (o .:? "agreedToTerms")
-                     <*> (o .:? "deletionTime")
-                     <*> (o .:? "nonEditableAliases" .!= mempty)
-                     <*> (o .:? "orgUnitPath")
-                     <*> (o .:? "customerId")
-                     <*> (o .:? "includeInGlobalAddressList")
-                     <*> (o .:? "phones")
-                     <*> (o .:? "name")
-                     <*> (o .:? "password")
-                     <*> (o .:? "emails")
-                     <*> (o .:? "ims")
-                     <*> (o .:? "isAdmin")
-                     <*> (o .:? "isEnrolledIn2Sv")
-                     <*> (o .:? "id")
-                     <*> (o .:? "organizations")
-                     <*> (o .:? "primaryEmail")
-                     <*> (o .:? "isEnforcedIn2Sv")
-                     <*> (o .:? "notes")
-                     <*> (o .:? "isDelegatedAdmin")
-                     <*> (o .:? "isMailboxSetup")
-                     <*> (o .:? "customSchemas")
-                     <*> (o .:? "suspensionReason"))
-
-instance ToJSON User where
-        toJSON User'{..}
-          = object
-              (catMaybes
-                 [("creationTime" .=) <$> _useCreationTime,
-                  ("lastLoginTime" .=) <$> _useLastLoginTime,
-                  ("thumbnailPhotoEtag" .=) <$> _useThumbnailPhotoEtag,
-                  ("etag" .=) <$> _useEtag,
-                  ("ipWhitelisted" .=) <$> _useIPWhiteListed,
-                  ("relations" .=) <$> _useRelations,
-                  ("hashFunction" .=) <$> _useHashFunction,
-                  Just ("kind" .= _useKind),
-                  ("changePasswordAtNextLogin" .=) <$>
-                    _useChangePasswordAtNextLogin,
-                  ("websites" .=) <$> _useWebsites,
-                  ("addresses" .=) <$> _useAddresses,
-                  ("aliases" .=) <$> _useAliases,
-                  ("thumbnailPhotoUrl" .=) <$> _useThumbnailPhotoURL,
-                  ("externalIds" .=) <$> _useExternalIds,
-                  ("suspended" .=) <$> _useSuspended,
-                  ("agreedToTerms" .=) <$> _useAgreedToTerms,
-                  ("deletionTime" .=) <$> _useDeletionTime,
-                  ("nonEditableAliases" .=) <$> _useNonEditableAliases,
-                  ("orgUnitPath" .=) <$> _useOrgUnitPath,
-                  ("customerId" .=) <$> _useCustomerId,
-                  ("includeInGlobalAddressList" .=) <$>
-                    _useIncludeInGlobalAddressList,
-                  ("phones" .=) <$> _usePhones,
-                  ("name" .=) <$> _useName,
-                  ("password" .=) <$> _usePassword,
-                  ("emails" .=) <$> _useEmails, ("ims" .=) <$> _useIms,
-                  ("isAdmin" .=) <$> _useIsAdmin,
-                  ("isEnrolledIn2Sv" .=) <$> _useIsEnrolledIn2Sv,
-                  ("id" .=) <$> _useId,
-                  ("organizations" .=) <$> _useOrganizations,
-                  ("primaryEmail" .=) <$> _usePrimaryEmail,
-                  ("isEnforcedIn2Sv" .=) <$> _useIsEnforcedIn2Sv,
-                  ("notes" .=) <$> _useNotes,
-                  ("isDelegatedAdmin" .=) <$> _useIsDelegatedAdmin,
-                  ("isMailboxSetup" .=) <$> _useIsMailboxSetup,
-                  ("customSchemas" .=) <$> _useCustomSchemas,
-                  ("suspensionReason" .=) <$> _useSuspensionReason])
-
--- | JSON request template for firing actions on ChromeOs Device in Directory
--- Devices API.
---
--- /See:/ 'chromeOSDeviceAction' smart constructor.
-data ChromeOSDeviceAction = ChromeOSDeviceAction'
-    { _codaAction            :: !(Maybe Text)
-    , _codaDeprovisionReason :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ChromeOSDeviceAction' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'codaAction'
---
--- * 'codaDeprovisionReason'
-chromeOSDeviceAction
-    :: ChromeOSDeviceAction
-chromeOSDeviceAction =
-    ChromeOSDeviceAction'
-    { _codaAction = Nothing
-    , _codaDeprovisionReason = Nothing
-    }
-
--- | Action to be taken on the ChromeOs Device
-codaAction :: Lens' ChromeOSDeviceAction (Maybe Text)
-codaAction
-  = lens _codaAction (\ s a -> s{_codaAction = a})
-
-codaDeprovisionReason :: Lens' ChromeOSDeviceAction (Maybe Text)
-codaDeprovisionReason
-  = lens _codaDeprovisionReason
-      (\ s a -> s{_codaDeprovisionReason = a})
-
-instance FromJSON ChromeOSDeviceAction where
-        parseJSON
-          = withObject "ChromeOSDeviceAction"
-              (\ o ->
-                 ChromeOSDeviceAction' <$>
-                   (o .:? "action") <*> (o .:? "deprovisionReason"))
-
-instance ToJSON ChromeOSDeviceAction where
-        toJSON ChromeOSDeviceAction'{..}
-          = object
-              (catMaybes
-                 [("action" .=) <$> _codaAction,
-                  ("deprovisionReason" .=) <$> _codaDeprovisionReason])
-
--- | JSON template for role resource in Directory API.
---
--- /See:/ 'role'' smart constructor.
-data Role = Role'
-    { _rrEtag             :: !(Maybe Text)
-    , _rrKind             :: !Text
-    , _rrRoleName         :: !(Maybe Text)
-    , _rrIsSystemRole     :: !(Maybe Bool)
-    , _rrRoleId           :: !(Maybe (Textual Int64))
-    , _rrRoleDescription  :: !(Maybe Text)
-    , _rrIsSuperAdminRole :: !(Maybe Bool)
-    , _rrRolePrivileges   :: !(Maybe [RoleRolePrivilegesItem])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Role' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rrEtag'
---
--- * 'rrKind'
---
--- * 'rrRoleName'
---
--- * 'rrIsSystemRole'
---
--- * 'rrRoleId'
---
--- * 'rrRoleDescription'
---
--- * 'rrIsSuperAdminRole'
---
--- * 'rrRolePrivileges'
-role'
-    :: Role
-role' =
-    Role'
-    { _rrEtag = Nothing
-    , _rrKind = "admin#directory#role"
-    , _rrRoleName = Nothing
-    , _rrIsSystemRole = Nothing
-    , _rrRoleId = Nothing
-    , _rrRoleDescription = Nothing
-    , _rrIsSuperAdminRole = Nothing
-    , _rrRolePrivileges = Nothing
-    }
-
--- | ETag of the resource.
-rrEtag :: Lens' Role (Maybe Text)
-rrEtag = lens _rrEtag (\ s a -> s{_rrEtag = a})
-
--- | The type of the API resource. This is always admin#directory#role.
-rrKind :: Lens' Role Text
-rrKind = lens _rrKind (\ s a -> s{_rrKind = a})
-
--- | Name of the role.
-rrRoleName :: Lens' Role (Maybe Text)
-rrRoleName
-  = lens _rrRoleName (\ s a -> s{_rrRoleName = a})
-
--- | Returns true if this is a pre-defined system role.
-rrIsSystemRole :: Lens' Role (Maybe Bool)
-rrIsSystemRole
-  = lens _rrIsSystemRole
-      (\ s a -> s{_rrIsSystemRole = a})
-
--- | ID of the role.
-rrRoleId :: Lens' Role (Maybe Int64)
-rrRoleId
-  = lens _rrRoleId (\ s a -> s{_rrRoleId = a}) .
-      mapping _Coerce
-
--- | A short description of the role.
-rrRoleDescription :: Lens' Role (Maybe Text)
-rrRoleDescription
-  = lens _rrRoleDescription
-      (\ s a -> s{_rrRoleDescription = a})
-
--- | Returns true if the role is a super admin role.
-rrIsSuperAdminRole :: Lens' Role (Maybe Bool)
-rrIsSuperAdminRole
-  = lens _rrIsSuperAdminRole
-      (\ s a -> s{_rrIsSuperAdminRole = a})
-
--- | The set of privileges that are granted to this role.
-rrRolePrivileges :: Lens' Role [RoleRolePrivilegesItem]
-rrRolePrivileges
-  = lens _rrRolePrivileges
-      (\ s a -> s{_rrRolePrivileges = a})
-      . _Default
-      . _Coerce
-
-instance FromJSON Role where
-        parseJSON
-          = withObject "Role"
-              (\ o ->
-                 Role' <$>
-                   (o .:? "etag") <*>
-                     (o .:? "kind" .!= "admin#directory#role")
-                     <*> (o .:? "roleName")
-                     <*> (o .:? "isSystemRole")
-                     <*> (o .:? "roleId")
-                     <*> (o .:? "roleDescription")
-                     <*> (o .:? "isSuperAdminRole")
-                     <*> (o .:? "rolePrivileges" .!= mempty))
-
-instance ToJSON Role where
-        toJSON Role'{..}
-          = object
-              (catMaybes
-                 [("etag" .=) <$> _rrEtag, Just ("kind" .= _rrKind),
-                  ("roleName" .=) <$> _rrRoleName,
-                  ("isSystemRole" .=) <$> _rrIsSystemRole,
-                  ("roleId" .=) <$> _rrRoleId,
-                  ("roleDescription" .=) <$> _rrRoleDescription,
-                  ("isSuperAdminRole" .=) <$> _rrIsSuperAdminRole,
-                  ("rolePrivileges" .=) <$> _rrRolePrivileges])
-
--- | JSON template for Customer Resource object in Directory API.
---
--- /See:/ 'customer' smart constructor.
-data Customer = Customer'
-    { _cusEtag                 :: !(Maybe Text)
-    , _cusKind                 :: !Text
-    , _cusAlternateEmail       :: !(Maybe Text)
-    , _cusCustomerDomain       :: !(Maybe Text)
-    , _cusPhoneNumber          :: !(Maybe Text)
-    , _cusLanguage             :: !(Maybe Text)
-    , _cusId                   :: !(Maybe Text)
-    , _cusCustomerCreationTime :: !(Maybe DateTime')
-    , _cusPostalAddress        :: !(Maybe CustomerPostalAddress)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Customer' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cusEtag'
---
--- * 'cusKind'
---
--- * 'cusAlternateEmail'
---
--- * 'cusCustomerDomain'
---
--- * 'cusPhoneNumber'
---
--- * 'cusLanguage'
---
--- * 'cusId'
---
--- * 'cusCustomerCreationTime'
---
--- * 'cusPostalAddress'
-customer
-    :: Customer
-customer =
-    Customer'
-    { _cusEtag = Nothing
-    , _cusKind = "admin#directory#customer"
-    , _cusAlternateEmail = Nothing
-    , _cusCustomerDomain = Nothing
-    , _cusPhoneNumber = Nothing
-    , _cusLanguage = Nothing
-    , _cusId = Nothing
-    , _cusCustomerCreationTime = Nothing
-    , _cusPostalAddress = Nothing
-    }
-
--- | ETag of the resource.
-cusEtag :: Lens' Customer (Maybe Text)
-cusEtag = lens _cusEtag (\ s a -> s{_cusEtag = a})
-
--- | Identifies the resource as a customer. Value: admin#directory#customer
-cusKind :: Lens' Customer Text
-cusKind = lens _cusKind (\ s a -> s{_cusKind = a})
-
--- | The customer\'s secondary contact email address. This email address
--- cannot be on the same domain as the customerDomain
-cusAlternateEmail :: Lens' Customer (Maybe Text)
-cusAlternateEmail
-  = lens _cusAlternateEmail
-      (\ s a -> s{_cusAlternateEmail = a})
-
--- | The customer\'s primary domain name string. Do not include the www
--- prefix when creating a new customer.
-cusCustomerDomain :: Lens' Customer (Maybe Text)
-cusCustomerDomain
-  = lens _cusCustomerDomain
-      (\ s a -> s{_cusCustomerDomain = a})
-
--- | The customer\'s contact phone number in E.164 format.
-cusPhoneNumber :: Lens' Customer (Maybe Text)
-cusPhoneNumber
-  = lens _cusPhoneNumber
-      (\ s a -> s{_cusPhoneNumber = a})
-
--- | The customer\'s ISO 639-2 language code. The default value is en-US
-cusLanguage :: Lens' Customer (Maybe Text)
-cusLanguage
-  = lens _cusLanguage (\ s a -> s{_cusLanguage = a})
-
--- | The unique ID for the customer\'s Google account. (Readonly)
-cusId :: Lens' Customer (Maybe Text)
-cusId = lens _cusId (\ s a -> s{_cusId = a})
-
--- | The customer\'s creation time (Readonly)
-cusCustomerCreationTime :: Lens' Customer (Maybe UTCTime)
-cusCustomerCreationTime
-  = lens _cusCustomerCreationTime
-      (\ s a -> s{_cusCustomerCreationTime = a})
-      . mapping _DateTime
-
--- | The customer\'s postal address information.
-cusPostalAddress :: Lens' Customer (Maybe CustomerPostalAddress)
-cusPostalAddress
-  = lens _cusPostalAddress
-      (\ s a -> s{_cusPostalAddress = a})
-
-instance FromJSON Customer where
-        parseJSON
-          = withObject "Customer"
-              (\ o ->
-                 Customer' <$>
-                   (o .:? "etag") <*>
-                     (o .:? "kind" .!= "admin#directory#customer")
-                     <*> (o .:? "alternateEmail")
-                     <*> (o .:? "customerDomain")
-                     <*> (o .:? "phoneNumber")
-                     <*> (o .:? "language")
-                     <*> (o .:? "id")
-                     <*> (o .:? "customerCreationTime")
-                     <*> (o .:? "postalAddress"))
-
-instance ToJSON Customer where
-        toJSON Customer'{..}
-          = object
-              (catMaybes
-                 [("etag" .=) <$> _cusEtag, Just ("kind" .= _cusKind),
-                  ("alternateEmail" .=) <$> _cusAlternateEmail,
-                  ("customerDomain" .=) <$> _cusCustomerDomain,
-                  ("phoneNumber" .=) <$> _cusPhoneNumber,
-                  ("language" .=) <$> _cusLanguage,
-                  ("id" .=) <$> _cusId,
-                  ("customerCreationTime" .=) <$>
-                    _cusCustomerCreationTime,
-                  ("postalAddress" .=) <$> _cusPostalAddress])
-
---
--- /See:/ 'mobileDeviceApplicationsItem' smart constructor.
-data MobileDeviceApplicationsItem = MobileDeviceApplicationsItem'
-    { _mdaiVersionCode :: !(Maybe (Textual Int32))
-    , _mdaiVersionName :: !(Maybe Text)
-    , _mdaiPackageName :: !(Maybe Text)
-    , _mdaiDisplayName :: !(Maybe Text)
-    , _mdaiPermission  :: !(Maybe [Text])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'MobileDeviceApplicationsItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'mdaiVersionCode'
---
--- * 'mdaiVersionName'
---
--- * 'mdaiPackageName'
---
--- * 'mdaiDisplayName'
---
--- * 'mdaiPermission'
-mobileDeviceApplicationsItem
-    :: MobileDeviceApplicationsItem
-mobileDeviceApplicationsItem =
-    MobileDeviceApplicationsItem'
-    { _mdaiVersionCode = Nothing
-    , _mdaiVersionName = Nothing
-    , _mdaiPackageName = Nothing
-    , _mdaiDisplayName = Nothing
-    , _mdaiPermission = Nothing
-    }
-
--- | Version code of application
-mdaiVersionCode :: Lens' MobileDeviceApplicationsItem (Maybe Int32)
-mdaiVersionCode
-  = lens _mdaiVersionCode
-      (\ s a -> s{_mdaiVersionCode = a})
-      . mapping _Coerce
-
--- | Version name of application
-mdaiVersionName :: Lens' MobileDeviceApplicationsItem (Maybe Text)
-mdaiVersionName
-  = lens _mdaiVersionName
-      (\ s a -> s{_mdaiVersionName = a})
-
--- | Package name of application
-mdaiPackageName :: Lens' MobileDeviceApplicationsItem (Maybe Text)
-mdaiPackageName
-  = lens _mdaiPackageName
-      (\ s a -> s{_mdaiPackageName = a})
-
--- | Display name of application
-mdaiDisplayName :: Lens' MobileDeviceApplicationsItem (Maybe Text)
-mdaiDisplayName
-  = lens _mdaiDisplayName
-      (\ s a -> s{_mdaiDisplayName = a})
-
--- | List of Permissions for application
-mdaiPermission :: Lens' MobileDeviceApplicationsItem [Text]
-mdaiPermission
-  = lens _mdaiPermission
-      (\ s a -> s{_mdaiPermission = a})
-      . _Default
-      . _Coerce
-
-instance FromJSON MobileDeviceApplicationsItem where
-        parseJSON
-          = withObject "MobileDeviceApplicationsItem"
-              (\ o ->
-                 MobileDeviceApplicationsItem' <$>
-                   (o .:? "versionCode") <*> (o .:? "versionName") <*>
-                     (o .:? "packageName")
-                     <*> (o .:? "displayName")
-                     <*> (o .:? "permission" .!= mempty))
-
-instance ToJSON MobileDeviceApplicationsItem where
-        toJSON MobileDeviceApplicationsItem'{..}
-          = object
-              (catMaybes
-                 [("versionCode" .=) <$> _mdaiVersionCode,
-                  ("versionName" .=) <$> _mdaiVersionName,
-                  ("packageName" .=) <$> _mdaiPackageName,
-                  ("displayName" .=) <$> _mdaiDisplayName,
-                  ("permission" .=) <$> _mdaiPermission])
-
--- | JSON response template for List Organization Units operation in
--- Directory API.
---
--- /See:/ 'orgUnits' smart constructor.
-data OrgUnits = OrgUnits'
-    { _oEtag              :: !(Maybe Text)
-    , _oKind              :: !Text
-    , _oOrganizationUnits :: !(Maybe [OrgUnit])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'OrgUnits' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'oEtag'
---
--- * 'oKind'
---
--- * 'oOrganizationUnits'
-orgUnits
-    :: OrgUnits
-orgUnits =
-    OrgUnits'
-    { _oEtag = Nothing
-    , _oKind = "admin#directory#orgUnits"
-    , _oOrganizationUnits = Nothing
-    }
-
--- | ETag of the resource.
-oEtag :: Lens' OrgUnits (Maybe Text)
-oEtag = lens _oEtag (\ s a -> s{_oEtag = a})
-
--- | Kind of resource this is.
-oKind :: Lens' OrgUnits Text
-oKind = lens _oKind (\ s a -> s{_oKind = a})
-
--- | List of user objects.
-oOrganizationUnits :: Lens' OrgUnits [OrgUnit]
-oOrganizationUnits
-  = lens _oOrganizationUnits
-      (\ s a -> s{_oOrganizationUnits = a})
-      . _Default
-      . _Coerce
-
-instance FromJSON OrgUnits where
-        parseJSON
-          = withObject "OrgUnits"
-              (\ o ->
-                 OrgUnits' <$>
-                   (o .:? "etag") <*>
-                     (o .:? "kind" .!= "admin#directory#orgUnits")
-                     <*> (o .:? "organizationUnits" .!= mempty))
-
-instance ToJSON OrgUnits where
-        toJSON OrgUnits'{..}
-          = object
-              (catMaybes
-                 [("etag" .=) <$> _oEtag, Just ("kind" .= _oKind),
-                  ("organizationUnits" .=) <$> _oOrganizationUnits])
-
--- | JSON response template for List verification codes operation in
--- Directory API.
---
--- /See:/ 'verificationCodes' smart constructor.
-data VerificationCodes = VerificationCodes'
-    { _vEtag  :: !(Maybe Text)
-    , _vKind  :: !Text
-    , _vItems :: !(Maybe [VerificationCode])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VerificationCodes' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vEtag'
---
--- * 'vKind'
---
--- * 'vItems'
-verificationCodes
-    :: VerificationCodes
-verificationCodes =
-    VerificationCodes'
-    { _vEtag = Nothing
-    , _vKind = "admin#directory#verificationCodesList"
-    , _vItems = Nothing
-    }
-
--- | ETag of the resource.
-vEtag :: Lens' VerificationCodes (Maybe Text)
-vEtag = lens _vEtag (\ s a -> s{_vEtag = a})
-
--- | The type of the resource. This is always
--- admin#directory#verificationCodesList.
-vKind :: Lens' VerificationCodes Text
-vKind = lens _vKind (\ s a -> s{_vKind = a})
-
--- | A list of verification code resources.
-vItems :: Lens' VerificationCodes [VerificationCode]
-vItems
-  = lens _vItems (\ s a -> s{_vItems = a}) . _Default .
-      _Coerce
-
-instance FromJSON VerificationCodes where
-        parseJSON
-          = withObject "VerificationCodes"
-              (\ o ->
-                 VerificationCodes' <$>
-                   (o .:? "etag") <*>
-                     (o .:? "kind" .!=
-                        "admin#directory#verificationCodesList")
-                     <*> (o .:? "items" .!= mempty))
-
-instance ToJSON VerificationCodes where
-        toJSON VerificationCodes'{..}
-          = object
-              (catMaybes
-                 [("etag" .=) <$> _vEtag, Just ("kind" .= _vKind),
-                  ("items" .=) <$> _vItems])
-
--- | JSON template for a relation entry.
---
--- /See:/ 'userRelation' smart constructor.
-data UserRelation = UserRelation'
-    { _urValue      :: !(Maybe Text)
-    , _urType       :: !(Maybe Text)
-    , _urCustomType :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'UserRelation' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'urValue'
---
--- * 'urType'
---
--- * 'urCustomType'
-userRelation
-    :: UserRelation
-userRelation =
-    UserRelation'
-    { _urValue = Nothing
-    , _urType = Nothing
-    , _urCustomType = Nothing
-    }
-
--- | The name of the relation.
-urValue :: Lens' UserRelation (Maybe Text)
-urValue = lens _urValue (\ s a -> s{_urValue = a})
-
--- | The relation of the user. Some of the possible values are mother,
--- father, sister, brother, manager, assistant, partner.
-urType :: Lens' UserRelation (Maybe Text)
-urType = lens _urType (\ s a -> s{_urType = a})
-
--- | Custom Type.
-urCustomType :: Lens' UserRelation (Maybe Text)
-urCustomType
-  = lens _urCustomType (\ s a -> s{_urCustomType = a})
-
-instance FromJSON UserRelation where
-        parseJSON
-          = withObject "UserRelation"
-              (\ o ->
-                 UserRelation' <$>
-                   (o .:? "value") <*> (o .:? "type") <*>
-                     (o .:? "customType"))
-
-instance ToJSON UserRelation where
-        toJSON UserRelation'{..}
-          = object
-              (catMaybes
-                 [("value" .=) <$> _urValue, ("type" .=) <$> _urType,
-                  ("customType" .=) <$> _urCustomType])
-
--- | 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
-
--- | JSON template for an organization entry.
---
--- /See:/ 'userOrganization' smart constructor.
-data UserOrganization = UserOrganization'
-    { _uoDePartment  :: !(Maybe Text)
-    , _uoLocation    :: !(Maybe Text)
-    , _uoCostCenter  :: !(Maybe Text)
-    , _uoDomain      :: !(Maybe Text)
-    , _uoSymbol      :: !(Maybe Text)
-    , _uoPrimary     :: !(Maybe Bool)
-    , _uoName        :: !(Maybe Text)
-    , _uoTitle       :: !(Maybe Text)
-    , _uoType        :: !(Maybe Text)
-    , _uoCustomType  :: !(Maybe Text)
-    , _uoDescription :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'UserOrganization' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'uoDePartment'
---
--- * 'uoLocation'
---
--- * 'uoCostCenter'
---
--- * 'uoDomain'
---
--- * 'uoSymbol'
---
--- * 'uoPrimary'
---
--- * 'uoName'
---
--- * 'uoTitle'
---
--- * 'uoType'
---
--- * 'uoCustomType'
---
--- * 'uoDescription'
-userOrganization
-    :: UserOrganization
-userOrganization =
-    UserOrganization'
-    { _uoDePartment = Nothing
-    , _uoLocation = Nothing
-    , _uoCostCenter = Nothing
-    , _uoDomain = Nothing
-    , _uoSymbol = Nothing
-    , _uoPrimary = Nothing
-    , _uoName = Nothing
-    , _uoTitle = Nothing
-    , _uoType = Nothing
-    , _uoCustomType = Nothing
-    , _uoDescription = Nothing
-    }
-
--- | Department within the organization.
-uoDePartment :: Lens' UserOrganization (Maybe Text)
-uoDePartment
-  = lens _uoDePartment (\ s a -> s{_uoDePartment = a})
-
--- | Location of the organization. This need not be fully qualified address.
-uoLocation :: Lens' UserOrganization (Maybe Text)
-uoLocation
-  = lens _uoLocation (\ s a -> s{_uoLocation = a})
-
--- | The cost center of the users department.
-uoCostCenter :: Lens' UserOrganization (Maybe Text)
-uoCostCenter
-  = lens _uoCostCenter (\ s a -> s{_uoCostCenter = a})
-
--- | The domain to which the organization belongs to.
-uoDomain :: Lens' UserOrganization (Maybe Text)
-uoDomain = lens _uoDomain (\ s a -> s{_uoDomain = a})
-
--- | Symbol of the organization.
-uoSymbol :: Lens' UserOrganization (Maybe Text)
-uoSymbol = lens _uoSymbol (\ s a -> s{_uoSymbol = a})
-
--- | If it user\'s primary organization.
-uoPrimary :: Lens' UserOrganization (Maybe Bool)
-uoPrimary
-  = lens _uoPrimary (\ s a -> s{_uoPrimary = a})
-
--- | Name of the organization
-uoName :: Lens' UserOrganization (Maybe Text)
-uoName = lens _uoName (\ s a -> s{_uoName = a})
-
--- | Title (designation) of the user in the organization.
-uoTitle :: Lens' UserOrganization (Maybe Text)
-uoTitle = lens _uoTitle (\ s a -> s{_uoTitle = a})
-
--- | Each entry can have a type which indicates standard types of that entry.
--- For example organization could be of school, work etc. In addition to
--- the standard type, an entry can have a custom type and can give it any
--- name. Such types should have the CUSTOM value as type and also have a
--- CustomType value.
-uoType :: Lens' UserOrganization (Maybe Text)
-uoType = lens _uoType (\ s a -> s{_uoType = a})
-
--- | Custom type.
-uoCustomType :: Lens' UserOrganization (Maybe Text)
-uoCustomType
-  = lens _uoCustomType (\ s a -> s{_uoCustomType = a})
-
--- | Description of the organization.
-uoDescription :: Lens' UserOrganization (Maybe Text)
-uoDescription
-  = lens _uoDescription
-      (\ s a -> s{_uoDescription = a})
-
-instance FromJSON UserOrganization where
-        parseJSON
-          = withObject "UserOrganization"
-              (\ o ->
-                 UserOrganization' <$>
-                   (o .:? "department") <*> (o .:? "location") <*>
-                     (o .:? "costCenter")
-                     <*> (o .:? "domain")
-                     <*> (o .:? "symbol")
-                     <*> (o .:? "primary")
-                     <*> (o .:? "name")
-                     <*> (o .:? "title")
-                     <*> (o .:? "type")
-                     <*> (o .:? "customType")
-                     <*> (o .:? "description"))
-
-instance ToJSON UserOrganization where
-        toJSON UserOrganization'{..}
-          = object
-              (catMaybes
-                 [("department" .=) <$> _uoDePartment,
-                  ("location" .=) <$> _uoLocation,
-                  ("costCenter" .=) <$> _uoCostCenter,
-                  ("domain" .=) <$> _uoDomain,
-                  ("symbol" .=) <$> _uoSymbol,
-                  ("primary" .=) <$> _uoPrimary,
-                  ("name" .=) <$> _uoName, ("title" .=) <$> _uoTitle,
-                  ("type" .=) <$> _uoType,
-                  ("customType" .=) <$> _uoCustomType,
-                  ("description" .=) <$> _uoDescription])
-
--- | JSON template for a website entry.
---
--- /See:/ 'userWebsite' smart constructor.
-data UserWebsite = UserWebsite'
-    { _uwValue      :: !(Maybe Text)
-    , _uwPrimary    :: !(Maybe Bool)
-    , _uwType       :: !(Maybe Text)
-    , _uwCustomType :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'UserWebsite' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'uwValue'
---
--- * 'uwPrimary'
---
--- * 'uwType'
---
--- * 'uwCustomType'
-userWebsite
-    :: UserWebsite
-userWebsite =
-    UserWebsite'
-    { _uwValue = Nothing
-    , _uwPrimary = Nothing
-    , _uwType = Nothing
-    , _uwCustomType = Nothing
-    }
-
--- | Website.
-uwValue :: Lens' UserWebsite (Maybe Text)
-uwValue = lens _uwValue (\ s a -> s{_uwValue = a})
-
--- | If this is user\'s primary website or not.
-uwPrimary :: Lens' UserWebsite (Maybe Bool)
-uwPrimary
-  = lens _uwPrimary (\ s a -> s{_uwPrimary = a})
-
--- | Each entry can have a type which indicates standard types of that entry.
--- For example website could be of home, work, blog etc. In addition to the
--- standard type, an entry can have a custom type and can give it any name.
--- Such types should have the CUSTOM value as type and also have a
--- customType value.
-uwType :: Lens' UserWebsite (Maybe Text)
-uwType = lens _uwType (\ s a -> s{_uwType = a})
-
--- | Custom Type.
-uwCustomType :: Lens' UserWebsite (Maybe Text)
-uwCustomType
-  = lens _uwCustomType (\ s a -> s{_uwCustomType = a})
-
-instance FromJSON UserWebsite where
-        parseJSON
-          = withObject "UserWebsite"
-              (\ o ->
-                 UserWebsite' <$>
-                   (o .:? "value") <*> (o .:? "primary") <*>
-                     (o .:? "type")
-                     <*> (o .:? "customType"))
-
-instance ToJSON UserWebsite where
-        toJSON UserWebsite'{..}
-          = object
-              (catMaybes
-                 [("value" .=) <$> _uwValue,
-                  ("primary" .=) <$> _uwPrimary,
-                  ("type" .=) <$> _uwType,
-                  ("customType" .=) <$> _uwCustomType])
-
---
--- /See:/ 'chromeOSDeviceActiveTimeRangesItem' smart constructor.
-data ChromeOSDeviceActiveTimeRangesItem = ChromeOSDeviceActiveTimeRangesItem'
-    { _codatriDate       :: !(Maybe Date')
-    , _codatriActiveTime :: !(Maybe (Textual Int32))
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ChromeOSDeviceActiveTimeRangesItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'codatriDate'
---
--- * 'codatriActiveTime'
-chromeOSDeviceActiveTimeRangesItem
-    :: ChromeOSDeviceActiveTimeRangesItem
-chromeOSDeviceActiveTimeRangesItem =
-    ChromeOSDeviceActiveTimeRangesItem'
-    { _codatriDate = Nothing
-    , _codatriActiveTime = Nothing
-    }
-
--- | Date of usage
-codatriDate :: Lens' ChromeOSDeviceActiveTimeRangesItem (Maybe Day)
-codatriDate
-  = lens _codatriDate (\ s a -> s{_codatriDate = a}) .
-      mapping _Date
-
--- | Duration in milliseconds
-codatriActiveTime :: Lens' ChromeOSDeviceActiveTimeRangesItem (Maybe Int32)
-codatriActiveTime
-  = lens _codatriActiveTime
-      (\ s a -> s{_codatriActiveTime = a})
-      . mapping _Coerce
-
-instance FromJSON ChromeOSDeviceActiveTimeRangesItem
-         where
-        parseJSON
-          = withObject "ChromeOSDeviceActiveTimeRangesItem"
-              (\ o ->
-                 ChromeOSDeviceActiveTimeRangesItem' <$>
-                   (o .:? "date") <*> (o .:? "activeTime"))
-
-instance ToJSON ChromeOSDeviceActiveTimeRangesItem
-         where
-        toJSON ChromeOSDeviceActiveTimeRangesItem'{..}
-          = object
-              (catMaybes
-                 [("date" .=) <$> _codatriDate,
-                  ("activeTime" .=) <$> _codatriActiveTime])
-
--- | JSON template for an email.
---
--- /See:/ 'userEmail' smart constructor.
-data UserEmail = UserEmail'
-    { _ueAddress    :: !(Maybe Text)
-    , _uePrimary    :: !(Maybe Bool)
-    , _ueType       :: !(Maybe Text)
-    , _ueCustomType :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'UserEmail' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ueAddress'
---
--- * 'uePrimary'
---
--- * 'ueType'
---
--- * 'ueCustomType'
-userEmail
-    :: UserEmail
-userEmail =
-    UserEmail'
-    { _ueAddress = Nothing
-    , _uePrimary = Nothing
-    , _ueType = Nothing
-    , _ueCustomType = Nothing
-    }
-
--- | Email id of the user.
-ueAddress :: Lens' UserEmail (Maybe Text)
-ueAddress
-  = lens _ueAddress (\ s a -> s{_ueAddress = a})
-
--- | If this is user\'s primary email. Only one entry could be marked as
--- primary.
-uePrimary :: Lens' UserEmail (Maybe Bool)
-uePrimary
-  = lens _uePrimary (\ s a -> s{_uePrimary = a})
-
--- | Each entry can have a type which indicates standard types of that entry.
--- For example email could be of home, work etc. In addition to the
--- standard type, an entry can have a custom type and can take any value
--- Such types should have the CUSTOM value as type and also have a
--- customType value.
-ueType :: Lens' UserEmail (Maybe Text)
-ueType = lens _ueType (\ s a -> s{_ueType = a})
-
--- | Custom Type.
-ueCustomType :: Lens' UserEmail (Maybe Text)
-ueCustomType
-  = lens _ueCustomType (\ s a -> s{_ueCustomType = a})
-
-instance FromJSON UserEmail where
-        parseJSON
-          = withObject "UserEmail"
-              (\ o ->
-                 UserEmail' <$>
-                   (o .:? "address") <*> (o .:? "primary") <*>
-                     (o .:? "type")
-                     <*> (o .:? "customType"))
-
-instance ToJSON UserEmail where
-        toJSON UserEmail'{..}
-          = object
-              (catMaybes
-                 [("address" .=) <$> _ueAddress,
-                  ("primary" .=) <$> _uePrimary,
-                  ("type" .=) <$> _ueType,
-                  ("customType" .=) <$> _ueCustomType])
-
--- | JSON template for a phone entry.
---
--- /See:/ 'userPhone' smart constructor.
-data UserPhone = UserPhone'
-    { _upValue      :: !(Maybe Text)
-    , _upPrimary    :: !(Maybe Bool)
-    , _upType       :: !(Maybe Text)
-    , _upCustomType :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'UserPhone' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'upValue'
---
--- * 'upPrimary'
---
--- * 'upType'
---
--- * 'upCustomType'
-userPhone
-    :: UserPhone
-userPhone =
-    UserPhone'
-    { _upValue = Nothing
-    , _upPrimary = Nothing
-    , _upType = Nothing
-    , _upCustomType = Nothing
-    }
-
--- | Phone number.
-upValue :: Lens' UserPhone (Maybe Text)
-upValue = lens _upValue (\ s a -> s{_upValue = a})
-
--- | If this is user\'s primary phone or not.
-upPrimary :: Lens' UserPhone (Maybe Bool)
-upPrimary
-  = lens _upPrimary (\ s a -> s{_upPrimary = a})
-
--- | Each entry can have a type which indicates standard types of that entry.
--- For example phone could be of home_fax, work, mobile etc. In addition to
--- the standard type, an entry can have a custom type and can give it any
--- name. Such types should have the CUSTOM value as type and also have a
--- customType value.
-upType :: Lens' UserPhone (Maybe Text)
-upType = lens _upType (\ s a -> s{_upType = a})
-
--- | Custom Type.
-upCustomType :: Lens' UserPhone (Maybe Text)
-upCustomType
-  = lens _upCustomType (\ s a -> s{_upCustomType = a})
-
-instance FromJSON UserPhone where
-        parseJSON
-          = withObject "UserPhone"
-              (\ o ->
-                 UserPhone' <$>
-                   (o .:? "value") <*> (o .:? "primary") <*>
-                     (o .:? "type")
-                     <*> (o .:? "customType"))
-
-instance ToJSON UserPhone where
-        toJSON UserPhone'{..}
-          = object
-              (catMaybes
-                 [("value" .=) <$> _upValue,
-                  ("primary" .=) <$> _upPrimary,
-                  ("type" .=) <$> _upType,
-                  ("customType" .=) <$> _upCustomType])
-
--- | JSON template for Photo object in Directory API.
---
--- /See:/ 'userPhoto' smart constructor.
-data UserPhoto = UserPhoto'
-    { _upPhotoData    :: !(Maybe Bytes)
-    , _upEtag         :: !(Maybe Text)
-    , _upHeight       :: !(Maybe (Textual Int32))
-    , _upKind         :: !Text
-    , _upWidth        :: !(Maybe (Textual Int32))
-    , _upMimeType     :: !(Maybe Text)
-    , _upId           :: !(Maybe Text)
-    , _upPrimaryEmail :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'UserPhoto' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'upPhotoData'
---
--- * 'upEtag'
---
--- * 'upHeight'
---
--- * 'upKind'
---
--- * 'upWidth'
---
--- * 'upMimeType'
---
--- * 'upId'
---
--- * 'upPrimaryEmail'
-userPhoto
-    :: UserPhoto
-userPhoto =
-    UserPhoto'
-    { _upPhotoData = Nothing
-    , _upEtag = Nothing
-    , _upHeight = Nothing
-    , _upKind = "admin#directory#user#photo"
-    , _upWidth = Nothing
-    , _upMimeType = Nothing
-    , _upId = Nothing
-    , _upPrimaryEmail = Nothing
-    }
-
--- | Base64 encoded photo data
-upPhotoData :: Lens' UserPhoto (Maybe ByteString)
-upPhotoData
-  = lens _upPhotoData (\ s a -> s{_upPhotoData = a}) .
-      mapping _Bytes
-
--- | ETag of the resource.
-upEtag :: Lens' UserPhoto (Maybe Text)
-upEtag = lens _upEtag (\ s a -> s{_upEtag = a})
-
--- | Height in pixels of the photo
-upHeight :: Lens' UserPhoto (Maybe Int32)
-upHeight
-  = lens _upHeight (\ s a -> s{_upHeight = a}) .
-      mapping _Coerce
-
--- | Kind of resource this is.
-upKind :: Lens' UserPhoto Text
-upKind = lens _upKind (\ s a -> s{_upKind = a})
-
--- | Width in pixels of the photo
-upWidth :: Lens' UserPhoto (Maybe Int32)
-upWidth
-  = lens _upWidth (\ s a -> s{_upWidth = a}) .
-      mapping _Coerce
-
--- | Mime Type of the photo
-upMimeType :: Lens' UserPhoto (Maybe Text)
-upMimeType
-  = lens _upMimeType (\ s a -> s{_upMimeType = a})
-
--- | Unique identifier of User (Read-only)
-upId :: Lens' UserPhoto (Maybe Text)
-upId = lens _upId (\ s a -> s{_upId = a})
-
--- | Primary email of User (Read-only)
-upPrimaryEmail :: Lens' UserPhoto (Maybe Text)
-upPrimaryEmail
-  = lens _upPrimaryEmail
-      (\ s a -> s{_upPrimaryEmail = a})
-
-instance FromJSON UserPhoto where
-        parseJSON
-          = withObject "UserPhoto"
-              (\ o ->
-                 UserPhoto' <$>
-                   (o .:? "photoData") <*> (o .:? "etag") <*>
-                     (o .:? "height")
-                     <*> (o .:? "kind" .!= "admin#directory#user#photo")
-                     <*> (o .:? "width")
-                     <*> (o .:? "mimeType")
-                     <*> (o .:? "id")
-                     <*> (o .:? "primaryEmail"))
-
-instance ToJSON UserPhoto where
-        toJSON UserPhoto'{..}
-          = object
-              (catMaybes
-                 [("photoData" .=) <$> _upPhotoData,
-                  ("etag" .=) <$> _upEtag, ("height" .=) <$> _upHeight,
-                  Just ("kind" .= _upKind), ("width" .=) <$> _upWidth,
-                  ("mimeType" .=) <$> _upMimeType, ("id" .=) <$> _upId,
-                  ("primaryEmail" .=) <$> _upPrimaryEmail])
-
--- | JSON template for Mobile Device resource in Directory API.
---
--- /See:/ 'mobileDevice' smart constructor.
-data MobileDevice = MobileDevice'
-    { _mobEmail                          :: !(Maybe [Text])
-    , _mobStatus                         :: !(Maybe Text)
-    , _mobPrivilege                      :: !(Maybe Text)
-    , _mobEtag                           :: !(Maybe Text)
-    , _mobResourceId                     :: !(Maybe Text)
-    , _mobManufacturer                   :: !(Maybe Text)
-    , _mobBuildNumber                    :: !(Maybe Text)
-    , _mobManagedAccountIsOnOwnerProFile :: !(Maybe Bool)
-    , _mobLastSync                       :: !(Maybe DateTime')
-    , _mobOtherAccountsInfo              :: !(Maybe [Text])
-    , _mobKind                           :: !Text
-    , _mobAdbStatus                      :: !(Maybe Bool)
-    , _mobReleaseVersion                 :: !(Maybe Text)
-    , _mobBrand                          :: !(Maybe Text)
-    , _mobSecurityPatchLevel             :: !(Maybe (Textual Int64))
-    , _mobNetworkOperator                :: !(Maybe Text)
-    , _mobKernelVersion                  :: !(Maybe Text)
-    , _mobOS                             :: !(Maybe Text)
-    , _mobName                           :: !(Maybe [Text])
-    , _mobModel                          :: !(Maybe Text)
-    , _mobDeveloperOptionsStatus         :: !(Maybe Bool)
-    , _mobUnknownSourcesStatus           :: !(Maybe Bool)
-    , _mobMeid                           :: !(Maybe Text)
-    , _mobBootLoaderVersion              :: !(Maybe Text)
-    , _mobDeviceId                       :: !(Maybe Text)
-    , _mobFirstSync                      :: !(Maybe DateTime')
-    , _mobUserAgent                      :: !(Maybe Text)
-    , _mobImei                           :: !(Maybe Text)
-    , _mobType                           :: !(Maybe Text)
-    , _mobWifiMACAddress                 :: !(Maybe Text)
-    , _mobEncryptionStatus               :: !(Maybe Text)
-    , _mobSerialNumber                   :: !(Maybe Text)
-    , _mobDevicePasswordStatus           :: !(Maybe Text)
-    , _mobHardwareId                     :: !(Maybe Text)
-    , _mobBasebandVersion                :: !(Maybe Text)
-    , _mobSupportsWorkProFile            :: !(Maybe Bool)
-    , _mobHardware                       :: !(Maybe Text)
-    , _mobDeviceCompromisedStatus        :: !(Maybe Text)
-    , _mobApplications                   :: !(Maybe [MobileDeviceApplicationsItem])
-    , _mobDefaultLanguage                :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'MobileDevice' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'mobEmail'
---
--- * 'mobStatus'
---
--- * 'mobPrivilege'
---
--- * 'mobEtag'
---
--- * 'mobResourceId'
---
--- * 'mobManufacturer'
---
--- * 'mobBuildNumber'
---
--- * 'mobManagedAccountIsOnOwnerProFile'
---
--- * 'mobLastSync'
---
--- * 'mobOtherAccountsInfo'
---
--- * 'mobKind'
---
--- * 'mobAdbStatus'
---
--- * 'mobReleaseVersion'
---
--- * 'mobBrand'
---
--- * 'mobSecurityPatchLevel'
---
--- * 'mobNetworkOperator'
---
--- * 'mobKernelVersion'
---
--- * 'mobOS'
---
--- * 'mobName'
---
--- * 'mobModel'
---
--- * 'mobDeveloperOptionsStatus'
---
--- * 'mobUnknownSourcesStatus'
---
--- * 'mobMeid'
---
--- * 'mobBootLoaderVersion'
---
--- * 'mobDeviceId'
---
--- * 'mobFirstSync'
---
--- * 'mobUserAgent'
---
--- * 'mobImei'
---
--- * 'mobType'
---
--- * 'mobWifiMACAddress'
---
--- * 'mobEncryptionStatus'
---
--- * 'mobSerialNumber'
---
--- * 'mobDevicePasswordStatus'
---
--- * 'mobHardwareId'
---
--- * 'mobBasebandVersion'
---
--- * 'mobSupportsWorkProFile'
---
--- * 'mobHardware'
---
--- * 'mobDeviceCompromisedStatus'
---
--- * 'mobApplications'
---
--- * 'mobDefaultLanguage'
-mobileDevice
-    :: MobileDevice
-mobileDevice =
-    MobileDevice'
-    { _mobEmail = Nothing
-    , _mobStatus = Nothing
-    , _mobPrivilege = Nothing
-    , _mobEtag = Nothing
-    , _mobResourceId = Nothing
-    , _mobManufacturer = Nothing
-    , _mobBuildNumber = Nothing
-    , _mobManagedAccountIsOnOwnerProFile = Nothing
-    , _mobLastSync = Nothing
-    , _mobOtherAccountsInfo = Nothing
-    , _mobKind = "admin#directory#mobiledevice"
-    , _mobAdbStatus = Nothing
-    , _mobReleaseVersion = Nothing
-    , _mobBrand = Nothing
-    , _mobSecurityPatchLevel = Nothing
-    , _mobNetworkOperator = Nothing
-    , _mobKernelVersion = Nothing
-    , _mobOS = Nothing
-    , _mobName = Nothing
-    , _mobModel = Nothing
-    , _mobDeveloperOptionsStatus = Nothing
-    , _mobUnknownSourcesStatus = Nothing
-    , _mobMeid = Nothing
-    , _mobBootLoaderVersion = Nothing
-    , _mobDeviceId = Nothing
-    , _mobFirstSync = Nothing
-    , _mobUserAgent = Nothing
-    , _mobImei = Nothing
-    , _mobType = Nothing
-    , _mobWifiMACAddress = Nothing
-    , _mobEncryptionStatus = Nothing
-    , _mobSerialNumber = Nothing
-    , _mobDevicePasswordStatus = Nothing
-    , _mobHardwareId = Nothing
-    , _mobBasebandVersion = Nothing
-    , _mobSupportsWorkProFile = Nothing
-    , _mobHardware = Nothing
-    , _mobDeviceCompromisedStatus = Nothing
-    , _mobApplications = Nothing
-    , _mobDefaultLanguage = Nothing
-    }
-
--- | List of owner user\'s email addresses (Read-only)
-mobEmail :: Lens' MobileDevice [Text]
-mobEmail
-  = lens _mobEmail (\ s a -> s{_mobEmail = a}) .
-      _Default
-      . _Coerce
-
--- | Status of the device (Read-only)
-mobStatus :: Lens' MobileDevice (Maybe Text)
-mobStatus
-  = lens _mobStatus (\ s a -> s{_mobStatus = a})
-
--- | DMAgentPermission (Read-only)
-mobPrivilege :: Lens' MobileDevice (Maybe Text)
-mobPrivilege
-  = lens _mobPrivilege (\ s a -> s{_mobPrivilege = a})
-
--- | ETag of the resource.
-mobEtag :: Lens' MobileDevice (Maybe Text)
-mobEtag = lens _mobEtag (\ s a -> s{_mobEtag = a})
-
--- | Unique identifier of Mobile Device (Read-only)
-mobResourceId :: Lens' MobileDevice (Maybe Text)
-mobResourceId
-  = lens _mobResourceId
-      (\ s a -> s{_mobResourceId = a})
-
--- | Mobile Device manufacturer (Read-only)
-mobManufacturer :: Lens' MobileDevice (Maybe Text)
-mobManufacturer
-  = lens _mobManufacturer
-      (\ s a -> s{_mobManufacturer = a})
-
--- | Mobile Device Build number (Read-only)
-mobBuildNumber :: Lens' MobileDevice (Maybe Text)
-mobBuildNumber
-  = lens _mobBuildNumber
-      (\ s a -> s{_mobBuildNumber = a})
-
--- | Boolean indicating if this account is on owner\/primary profile or not
--- (Read-only)
-mobManagedAccountIsOnOwnerProFile :: Lens' MobileDevice (Maybe Bool)
-mobManagedAccountIsOnOwnerProFile
-  = lens _mobManagedAccountIsOnOwnerProFile
-      (\ s a -> s{_mobManagedAccountIsOnOwnerProFile = a})
-
--- | Date and time the device was last synchronized with the policy settings
--- in the Google Apps administrator control panel (Read-only)
-mobLastSync :: Lens' MobileDevice (Maybe UTCTime)
-mobLastSync
-  = lens _mobLastSync (\ s a -> s{_mobLastSync = a}) .
-      mapping _DateTime
-
--- | List of accounts added on device (Read-only)
-mobOtherAccountsInfo :: Lens' MobileDevice [Text]
-mobOtherAccountsInfo
-  = lens _mobOtherAccountsInfo
-      (\ s a -> s{_mobOtherAccountsInfo = a})
-      . _Default
-      . _Coerce
-
--- | Kind of resource this is.
-mobKind :: Lens' MobileDevice Text
-mobKind = lens _mobKind (\ s a -> s{_mobKind = a})
-
--- | Adb (USB debugging) enabled or disabled on device (Read-only)
-mobAdbStatus :: Lens' MobileDevice (Maybe Bool)
-mobAdbStatus
-  = lens _mobAdbStatus (\ s a -> s{_mobAdbStatus = a})
-
--- | Mobile Device release version version (Read-only)
-mobReleaseVersion :: Lens' MobileDevice (Maybe Text)
-mobReleaseVersion
-  = lens _mobReleaseVersion
-      (\ s a -> s{_mobReleaseVersion = a})
-
--- | Mobile Device Brand (Read-only)
-mobBrand :: Lens' MobileDevice (Maybe Text)
-mobBrand = lens _mobBrand (\ s a -> s{_mobBrand = a})
-
--- | Mobile Device Security patch level (Read-only)
-mobSecurityPatchLevel :: Lens' MobileDevice (Maybe Int64)
-mobSecurityPatchLevel
-  = lens _mobSecurityPatchLevel
-      (\ s a -> s{_mobSecurityPatchLevel = a})
-      . mapping _Coerce
-
--- | Mobile Device mobile or network operator (if available) (Read-only)
-mobNetworkOperator :: Lens' MobileDevice (Maybe Text)
-mobNetworkOperator
-  = lens _mobNetworkOperator
-      (\ s a -> s{_mobNetworkOperator = a})
-
--- | Mobile Device Kernel version (Read-only)
-mobKernelVersion :: Lens' MobileDevice (Maybe Text)
-mobKernelVersion
-  = lens _mobKernelVersion
-      (\ s a -> s{_mobKernelVersion = a})
-
--- | Name of the mobile operating system
-mobOS :: Lens' MobileDevice (Maybe Text)
-mobOS = lens _mobOS (\ s a -> s{_mobOS = a})
-
--- | List of owner user\'s names (Read-only)
-mobName :: Lens' MobileDevice [Text]
-mobName
-  = lens _mobName (\ s a -> s{_mobName = a}) . _Default
-      . _Coerce
-
--- | Name of the model of the device
-mobModel :: Lens' MobileDevice (Maybe Text)
-mobModel = lens _mobModel (\ s a -> s{_mobModel = a})
-
--- | Developer options enabled or disabled on device (Read-only)
-mobDeveloperOptionsStatus :: Lens' MobileDevice (Maybe Bool)
-mobDeveloperOptionsStatus
-  = lens _mobDeveloperOptionsStatus
-      (\ s a -> s{_mobDeveloperOptionsStatus = a})
-
--- | Unknown sources enabled or disabled on device (Read-only)
-mobUnknownSourcesStatus :: Lens' MobileDevice (Maybe Bool)
-mobUnknownSourcesStatus
-  = lens _mobUnknownSourcesStatus
-      (\ s a -> s{_mobUnknownSourcesStatus = a})
-
--- | Mobile Device MEID number (Read-only)
-mobMeid :: Lens' MobileDevice (Maybe Text)
-mobMeid = lens _mobMeid (\ s a -> s{_mobMeid = a})
-
--- | Mobile Device Bootloader version (Read-only)
-mobBootLoaderVersion :: Lens' MobileDevice (Maybe Text)
-mobBootLoaderVersion
-  = lens _mobBootLoaderVersion
-      (\ s a -> s{_mobBootLoaderVersion = a})
-
--- | Mobile Device serial number (Read-only)
-mobDeviceId :: Lens' MobileDevice (Maybe Text)
-mobDeviceId
-  = lens _mobDeviceId (\ s a -> s{_mobDeviceId = a})
-
--- | Date and time the device was first synchronized with the policy settings
--- in the Google Apps administrator control panel (Read-only)
-mobFirstSync :: Lens' MobileDevice (Maybe UTCTime)
-mobFirstSync
-  = lens _mobFirstSync (\ s a -> s{_mobFirstSync = a})
-      . mapping _DateTime
-
--- | Mobile Device user agent
-mobUserAgent :: Lens' MobileDevice (Maybe Text)
-mobUserAgent
-  = lens _mobUserAgent (\ s a -> s{_mobUserAgent = a})
-
--- | Mobile Device IMEI number (Read-only)
-mobImei :: Lens' MobileDevice (Maybe Text)
-mobImei = lens _mobImei (\ s a -> s{_mobImei = a})
-
--- | The type of device (Read-only)
-mobType :: Lens' MobileDevice (Maybe Text)
-mobType = lens _mobType (\ s a -> s{_mobType = a})
-
--- | Mobile Device WiFi MAC address (Read-only)
-mobWifiMACAddress :: Lens' MobileDevice (Maybe Text)
-mobWifiMACAddress
-  = lens _mobWifiMACAddress
-      (\ s a -> s{_mobWifiMACAddress = a})
-
--- | Mobile Device Encryption Status (Read-only)
-mobEncryptionStatus :: Lens' MobileDevice (Maybe Text)
-mobEncryptionStatus
-  = lens _mobEncryptionStatus
-      (\ s a -> s{_mobEncryptionStatus = a})
-
--- | Mobile Device SSN or Serial Number (Read-only)
-mobSerialNumber :: Lens' MobileDevice (Maybe Text)
-mobSerialNumber
-  = lens _mobSerialNumber
-      (\ s a -> s{_mobSerialNumber = a})
-
--- | DevicePasswordStatus (Read-only)
-mobDevicePasswordStatus :: Lens' MobileDevice (Maybe Text)
-mobDevicePasswordStatus
-  = lens _mobDevicePasswordStatus
-      (\ s a -> s{_mobDevicePasswordStatus = a})
-
--- | Mobile Device Hardware Id (Read-only)
-mobHardwareId :: Lens' MobileDevice (Maybe Text)
-mobHardwareId
-  = lens _mobHardwareId
-      (\ s a -> s{_mobHardwareId = a})
-
--- | Mobile Device Baseband version (Read-only)
-mobBasebandVersion :: Lens' MobileDevice (Maybe Text)
-mobBasebandVersion
-  = lens _mobBasebandVersion
-      (\ s a -> s{_mobBasebandVersion = a})
-
--- | Work profile supported on device (Read-only)
-mobSupportsWorkProFile :: Lens' MobileDevice (Maybe Bool)
-mobSupportsWorkProFile
-  = lens _mobSupportsWorkProFile
-      (\ s a -> s{_mobSupportsWorkProFile = a})
-
--- | Mobile Device Hardware (Read-only)
-mobHardware :: Lens' MobileDevice (Maybe Text)
-mobHardware
-  = lens _mobHardware (\ s a -> s{_mobHardware = a})
-
--- | Mobile Device compromised status (Read-only)
-mobDeviceCompromisedStatus :: Lens' MobileDevice (Maybe Text)
-mobDeviceCompromisedStatus
-  = lens _mobDeviceCompromisedStatus
-      (\ s a -> s{_mobDeviceCompromisedStatus = a})
-
--- | List of applications installed on Mobile Device
-mobApplications :: Lens' MobileDevice [MobileDeviceApplicationsItem]
-mobApplications
-  = lens _mobApplications
-      (\ s a -> s{_mobApplications = a})
-      . _Default
-      . _Coerce
-
--- | The default locale used on the Mobile Device (Read-only)
-mobDefaultLanguage :: Lens' MobileDevice (Maybe Text)
-mobDefaultLanguage
-  = lens _mobDefaultLanguage
-      (\ s a -> s{_mobDefaultLanguage = a})
-
-instance FromJSON MobileDevice where
-        parseJSON
-          = withObject "MobileDevice"
-              (\ o ->
-                 MobileDevice' <$>
-                   (o .:? "email" .!= mempty) <*> (o .:? "status") <*>
-                     (o .:? "privilege")
-                     <*> (o .:? "etag")
-                     <*> (o .:? "resourceId")
-                     <*> (o .:? "manufacturer")
-                     <*> (o .:? "buildNumber")
-                     <*> (o .:? "managedAccountIsOnOwnerProfile")
-                     <*> (o .:? "lastSync")
-                     <*> (o .:? "otherAccountsInfo" .!= mempty)
-                     <*> (o .:? "kind" .!= "admin#directory#mobiledevice")
-                     <*> (o .:? "adbStatus")
-                     <*> (o .:? "releaseVersion")
-                     <*> (o .:? "brand")
-                     <*> (o .:? "securityPatchLevel")
-                     <*> (o .:? "networkOperator")
-                     <*> (o .:? "kernelVersion")
-                     <*> (o .:? "os")
-                     <*> (o .:? "name" .!= mempty)
-                     <*> (o .:? "model")
-                     <*> (o .:? "developerOptionsStatus")
-                     <*> (o .:? "unknownSourcesStatus")
-                     <*> (o .:? "meid")
-                     <*> (o .:? "bootloaderVersion")
-                     <*> (o .:? "deviceId")
-                     <*> (o .:? "firstSync")
-                     <*> (o .:? "userAgent")
-                     <*> (o .:? "imei")
-                     <*> (o .:? "type")
-                     <*> (o .:? "wifiMacAddress")
-                     <*> (o .:? "encryptionStatus")
-                     <*> (o .:? "serialNumber")
-                     <*> (o .:? "devicePasswordStatus")
-                     <*> (o .:? "hardwareId")
-                     <*> (o .:? "basebandVersion")
-                     <*> (o .:? "supportsWorkProfile")
-                     <*> (o .:? "hardware")
-                     <*> (o .:? "deviceCompromisedStatus")
-                     <*> (o .:? "applications" .!= mempty)
-                     <*> (o .:? "defaultLanguage"))
-
-instance ToJSON MobileDevice where
-        toJSON MobileDevice'{..}
-          = object
-              (catMaybes
-                 [("email" .=) <$> _mobEmail,
-                  ("status" .=) <$> _mobStatus,
-                  ("privilege" .=) <$> _mobPrivilege,
-                  ("etag" .=) <$> _mobEtag,
-                  ("resourceId" .=) <$> _mobResourceId,
-                  ("manufacturer" .=) <$> _mobManufacturer,
-                  ("buildNumber" .=) <$> _mobBuildNumber,
-                  ("managedAccountIsOnOwnerProfile" .=) <$>
-                    _mobManagedAccountIsOnOwnerProFile,
-                  ("lastSync" .=) <$> _mobLastSync,
-                  ("otherAccountsInfo" .=) <$> _mobOtherAccountsInfo,
-                  Just ("kind" .= _mobKind),
-                  ("adbStatus" .=) <$> _mobAdbStatus,
-                  ("releaseVersion" .=) <$> _mobReleaseVersion,
-                  ("brand" .=) <$> _mobBrand,
-                  ("securityPatchLevel" .=) <$> _mobSecurityPatchLevel,
-                  ("networkOperator" .=) <$> _mobNetworkOperator,
-                  ("kernelVersion" .=) <$> _mobKernelVersion,
-                  ("os" .=) <$> _mobOS, ("name" .=) <$> _mobName,
-                  ("model" .=) <$> _mobModel,
-                  ("developerOptionsStatus" .=) <$>
-                    _mobDeveloperOptionsStatus,
-                  ("unknownSourcesStatus" .=) <$>
-                    _mobUnknownSourcesStatus,
-                  ("meid" .=) <$> _mobMeid,
-                  ("bootloaderVersion" .=) <$> _mobBootLoaderVersion,
-                  ("deviceId" .=) <$> _mobDeviceId,
-                  ("firstSync" .=) <$> _mobFirstSync,
-                  ("userAgent" .=) <$> _mobUserAgent,
-                  ("imei" .=) <$> _mobImei, ("type" .=) <$> _mobType,
-                  ("wifiMacAddress" .=) <$> _mobWifiMACAddress,
-                  ("encryptionStatus" .=) <$> _mobEncryptionStatus,
-                  ("serialNumber" .=) <$> _mobSerialNumber,
-                  ("devicePasswordStatus" .=) <$>
-                    _mobDevicePasswordStatus,
-                  ("hardwareId" .=) <$> _mobHardwareId,
-                  ("basebandVersion" .=) <$> _mobBasebandVersion,
-                  ("supportsWorkProfile" .=) <$>
-                    _mobSupportsWorkProFile,
-                  ("hardware" .=) <$> _mobHardware,
-                  ("deviceCompromisedStatus" .=) <$>
-                    _mobDeviceCompromisedStatus,
-                  ("applications" .=) <$> _mobApplications,
-                  ("defaultLanguage" .=) <$> _mobDefaultLanguage])
-
--- | JSON template for Member resource in Directory API.
---
--- /See:/ 'member' smart constructor.
-data Member = Member'
-    { _memEmail  :: !(Maybe Text)
-    , _memStatus :: !(Maybe Text)
-    , _memEtag   :: !(Maybe Text)
-    , _memKind   :: !Text
-    , _memRole   :: !(Maybe Text)
-    , _memId     :: !(Maybe Text)
-    , _memType   :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Member' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'memEmail'
---
--- * 'memStatus'
---
--- * 'memEtag'
---
--- * 'memKind'
---
--- * 'memRole'
---
--- * 'memId'
---
--- * 'memType'
-member
-    :: Member
-member =
-    Member'
-    { _memEmail = Nothing
-    , _memStatus = Nothing
-    , _memEtag = Nothing
-    , _memKind = "admin#directory#member"
-    , _memRole = Nothing
-    , _memId = Nothing
-    , _memType = Nothing
-    }
-
--- | Email of member (Read-only)
-memEmail :: Lens' Member (Maybe Text)
-memEmail = lens _memEmail (\ s a -> s{_memEmail = a})
-
--- | Status of member (Immutable)
-memStatus :: Lens' Member (Maybe Text)
-memStatus
-  = lens _memStatus (\ s a -> s{_memStatus = a})
-
--- | ETag of the resource.
-memEtag :: Lens' Member (Maybe Text)
-memEtag = lens _memEtag (\ s a -> s{_memEtag = a})
-
--- | Kind of resource this is.
-memKind :: Lens' Member Text
-memKind = lens _memKind (\ s a -> s{_memKind = a})
-
--- | Role of member
-memRole :: Lens' Member (Maybe Text)
-memRole = lens _memRole (\ s a -> s{_memRole = a})
-
--- | Unique identifier of customer member (Read-only) Unique identifier of
--- group (Read-only) Unique identifier of member (Read-only)
-memId :: Lens' Member (Maybe Text)
-memId = lens _memId (\ s a -> s{_memId = a})
-
--- | Type of member (Immutable)
-memType :: Lens' Member (Maybe Text)
-memType = lens _memType (\ s a -> s{_memType = a})
-
-instance FromJSON Member where
-        parseJSON
-          = withObject "Member"
-              (\ o ->
-                 Member' <$>
-                   (o .:? "email") <*> (o .:? "status") <*>
-                     (o .:? "etag")
-                     <*> (o .:? "kind" .!= "admin#directory#member")
-                     <*> (o .:? "role")
-                     <*> (o .:? "id")
-                     <*> (o .:? "type"))
-
-instance ToJSON Member where
-        toJSON Member'{..}
-          = object
-              (catMaybes
-                 [("email" .=) <$> _memEmail,
-                  ("status" .=) <$> _memStatus,
-                  ("etag" .=) <$> _memEtag, Just ("kind" .= _memKind),
-                  ("role" .=) <$> _memRole, ("id" .=) <$> _memId,
-                  ("type" .=) <$> _memType])
-
--- | JSON template for a set of custom properties (i.e. all fields in a
--- particular schema)
---
--- /See:/ 'userCustomProperties' smart constructor.
-newtype UserCustomProperties = UserCustomProperties'
-    { _ucpAddtional :: HashMap Text JSONValue
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'UserCustomProperties' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ucpAddtional'
-userCustomProperties
-    :: HashMap Text JSONValue -- ^ 'ucpAddtional'
-    -> UserCustomProperties
-userCustomProperties pUcpAddtional_ =
-    UserCustomProperties'
-    { _ucpAddtional = _Coerce # pUcpAddtional_
-    }
-
-ucpAddtional :: Lens' UserCustomProperties (HashMap Text JSONValue)
-ucpAddtional
-  = lens _ucpAddtional (\ s a -> s{_ucpAddtional = a})
-      . _Coerce
-
-instance FromJSON UserCustomProperties where
-        parseJSON
-          = withObject "UserCustomProperties"
-              (\ o ->
-                 UserCustomProperties' <$> (parseJSONObject o))
-
-instance ToJSON UserCustomProperties where
-        toJSON = toJSON . _ucpAddtional
-
--- | JSON template for Domain object in Directory API.
---
--- /See:/ 'domains' smart constructor.
-data Domains = Domains'
-    { _domCreationTime  :: !(Maybe (Textual Int64))
-    , _domEtag          :: !(Maybe Text)
-    , _domKind          :: !Text
-    , _domDomainAliases :: !(Maybe [DomainAlias])
-    , _domVerified      :: !(Maybe Bool)
-    , _domDomainName    :: !(Maybe Text)
-    , _domIsPrimary     :: !(Maybe Bool)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Domains' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'domCreationTime'
---
--- * 'domEtag'
---
--- * 'domKind'
---
--- * 'domDomainAliases'
---
--- * 'domVerified'
---
--- * 'domDomainName'
---
--- * 'domIsPrimary'
-domains
-    :: Domains
-domains =
-    Domains'
-    { _domCreationTime = Nothing
-    , _domEtag = Nothing
-    , _domKind = "admin#directory#domain"
-    , _domDomainAliases = Nothing
-    , _domVerified = Nothing
-    , _domDomainName = Nothing
-    , _domIsPrimary = Nothing
-    }
-
--- | Creation time of the domain. (Read-only).
-domCreationTime :: Lens' Domains (Maybe Int64)
-domCreationTime
-  = lens _domCreationTime
-      (\ s a -> s{_domCreationTime = a})
-      . mapping _Coerce
-
--- | ETag of the resource.
-domEtag :: Lens' Domains (Maybe Text)
-domEtag = lens _domEtag (\ s a -> s{_domEtag = a})
-
--- | Kind of resource this is.
-domKind :: Lens' Domains Text
-domKind = lens _domKind (\ s a -> s{_domKind = a})
-
--- | List of domain alias objects. (Read-only)
-domDomainAliases :: Lens' Domains [DomainAlias]
-domDomainAliases
-  = lens _domDomainAliases
-      (\ s a -> s{_domDomainAliases = a})
-      . _Default
-      . _Coerce
-
--- | Indicates the verification state of a domain. (Read-only).
-domVerified :: Lens' Domains (Maybe Bool)
-domVerified
-  = lens _domVerified (\ s a -> s{_domVerified = a})
-
--- | The domain name of the customer.
-domDomainName :: Lens' Domains (Maybe Text)
-domDomainName
-  = lens _domDomainName
-      (\ s a -> s{_domDomainName = a})
-
--- | Indicates if the domain is a primary domain (Read-only).
-domIsPrimary :: Lens' Domains (Maybe Bool)
-domIsPrimary
-  = lens _domIsPrimary (\ s a -> s{_domIsPrimary = a})
-
-instance FromJSON Domains where
-        parseJSON
-          = withObject "Domains"
-              (\ o ->
-                 Domains' <$>
-                   (o .:? "creationTime") <*> (o .:? "etag") <*>
-                     (o .:? "kind" .!= "admin#directory#domain")
-                     <*> (o .:? "domainAliases" .!= mempty)
-                     <*> (o .:? "verified")
-                     <*> (o .:? "domainName")
-                     <*> (o .:? "isPrimary"))
-
-instance ToJSON Domains where
-        toJSON Domains'{..}
-          = object
-              (catMaybes
-                 [("creationTime" .=) <$> _domCreationTime,
-                  ("etag" .=) <$> _domEtag, Just ("kind" .= _domKind),
-                  ("domainAliases" .=) <$> _domDomainAliases,
-                  ("verified" .=) <$> _domVerified,
-                  ("domainName" .=) <$> _domDomainName,
-                  ("isPrimary" .=) <$> _domIsPrimary])
-
--- | JSON template for Calendar Resource List Response object in Directory
--- API.
---
--- /See:/ 'calendarResources' smart constructor.
-data CalendarResources = CalendarResources'
-    { _crsEtag          :: !(Maybe Text)
-    , _crsNextPageToken :: !(Maybe Text)
-    , _crsKind          :: !Text
-    , _crsItems         :: !(Maybe [CalendarResource])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CalendarResources' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'crsEtag'
---
--- * 'crsNextPageToken'
---
--- * 'crsKind'
---
--- * 'crsItems'
-calendarResources
-    :: CalendarResources
-calendarResources =
-    CalendarResources'
-    { _crsEtag = Nothing
-    , _crsNextPageToken = Nothing
-    , _crsKind = "admin#directory#resources#calendars#calendarResourcesList"
-    , _crsItems = Nothing
-    }
-
--- | ETag of the resource.
-crsEtag :: Lens' CalendarResources (Maybe Text)
-crsEtag = lens _crsEtag (\ s a -> s{_crsEtag = a})
-
--- | The continuation token, used to page through large result sets. Provide
--- this value in a subsequent request to return the next page of results.
-crsNextPageToken :: Lens' CalendarResources (Maybe Text)
-crsNextPageToken
-  = lens _crsNextPageToken
-      (\ s a -> s{_crsNextPageToken = a})
-
--- | Identifies this as a collection of CalendarResources. This is always
--- admin#directory#resources#calendars#calendarResourcesList.
-crsKind :: Lens' CalendarResources Text
-crsKind = lens _crsKind (\ s a -> s{_crsKind = a})
-
--- | The CalendarResources in this page of results.
-crsItems :: Lens' CalendarResources [CalendarResource]
-crsItems
-  = lens _crsItems (\ s a -> s{_crsItems = a}) .
-      _Default
-      . _Coerce
-
-instance FromJSON CalendarResources where
-        parseJSON
-          = withObject "CalendarResources"
-              (\ o ->
-                 CalendarResources' <$>
-                   (o .:? "etag") <*> (o .:? "nextPageToken") <*>
-                     (o .:? "kind" .!=
-                        "admin#directory#resources#calendars#calendarResourcesList")
-                     <*> (o .:? "items" .!= mempty))
-
-instance ToJSON CalendarResources where
-        toJSON CalendarResources'{..}
-          = object
-              (catMaybes
-                 [("etag" .=) <$> _crsEtag,
-                  ("nextPageToken" .=) <$> _crsNextPageToken,
-                  Just ("kind" .= _crsKind),
-                  ("items" .=) <$> _crsItems])
-
--- | Template for notifications list response.
---
--- /See:/ 'notifications' smart constructor.
-data Notifications = Notifications'
-    { _notEtag                     :: !(Maybe Text)
-    , _notNextPageToken            :: !(Maybe Text)
-    , _notKind                     :: !Text
-    , _notItems                    :: !(Maybe [Notification])
-    , _notUnreadNotificationsCount :: !(Maybe (Textual Int32))
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Notifications' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'notEtag'
---
--- * 'notNextPageToken'
---
--- * 'notKind'
---
--- * 'notItems'
---
--- * 'notUnreadNotificationsCount'
-notifications
-    :: Notifications
-notifications =
-    Notifications'
-    { _notEtag = Nothing
-    , _notNextPageToken = Nothing
-    , _notKind = "admin#directory#notifications"
-    , _notItems = Nothing
-    , _notUnreadNotificationsCount = Nothing
-    }
-
--- | ETag of the resource.
-notEtag :: Lens' Notifications (Maybe Text)
-notEtag = lens _notEtag (\ s a -> s{_notEtag = a})
-
--- | Token for fetching the next page of notifications.
-notNextPageToken :: Lens' Notifications (Maybe Text)
-notNextPageToken
-  = lens _notNextPageToken
-      (\ s a -> s{_notNextPageToken = a})
-
--- | The type of the resource.
-notKind :: Lens' Notifications Text
-notKind = lens _notKind (\ s a -> s{_notKind = a})
-
--- | List of notifications in this page.
-notItems :: Lens' Notifications [Notification]
-notItems
-  = lens _notItems (\ s a -> s{_notItems = a}) .
-      _Default
-      . _Coerce
-
--- | Number of unread notification for the domain.
-notUnreadNotificationsCount :: Lens' Notifications (Maybe Int32)
-notUnreadNotificationsCount
-  = lens _notUnreadNotificationsCount
-      (\ s a -> s{_notUnreadNotificationsCount = a})
-      . mapping _Coerce
-
-instance FromJSON Notifications where
-        parseJSON
-          = withObject "Notifications"
-              (\ o ->
-                 Notifications' <$>
-                   (o .:? "etag") <*> (o .:? "nextPageToken") <*>
-                     (o .:? "kind" .!= "admin#directory#notifications")
-                     <*> (o .:? "items" .!= mempty)
-                     <*> (o .:? "unreadNotificationsCount"))
-
-instance ToJSON Notifications where
-        toJSON Notifications'{..}
-          = object
-              (catMaybes
-                 [("etag" .=) <$> _notEtag,
-                  ("nextPageToken" .=) <$> _notNextPageToken,
-                  Just ("kind" .= _notKind),
-                  ("items" .=) <$> _notItems,
-                  ("unreadNotificationsCount" .=) <$>
-                    _notUnreadNotificationsCount])
-
--- | Indexing spec for a numeric field. By default, only exact match queries
--- will be supported for numeric fields. Setting the numericIndexingSpec
--- allows range queries to be supported.
---
--- /See:/ 'schemaFieldSpecNumericIndexingSpec' smart constructor.
-data SchemaFieldSpecNumericIndexingSpec = SchemaFieldSpecNumericIndexingSpec'
-    { _sfsnisMaxValue :: !(Maybe (Textual Double))
-    , _sfsnisMinValue :: !(Maybe (Textual Double))
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'SchemaFieldSpecNumericIndexingSpec' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sfsnisMaxValue'
---
--- * 'sfsnisMinValue'
-schemaFieldSpecNumericIndexingSpec
-    :: SchemaFieldSpecNumericIndexingSpec
-schemaFieldSpecNumericIndexingSpec =
-    SchemaFieldSpecNumericIndexingSpec'
-    { _sfsnisMaxValue = Nothing
-    , _sfsnisMinValue = Nothing
-    }
-
--- | Maximum value of this field. This is meant to be indicative rather than
--- enforced. Values outside this range will still be indexed, but search
--- may not be as performant.
-sfsnisMaxValue :: Lens' SchemaFieldSpecNumericIndexingSpec (Maybe Double)
-sfsnisMaxValue
-  = lens _sfsnisMaxValue
-      (\ s a -> s{_sfsnisMaxValue = a})
-      . mapping _Coerce
-
--- | Minimum value of this field. This is meant to be indicative rather than
--- enforced. Values outside this range will still be indexed, but search
--- may not be as performant.
-sfsnisMinValue :: Lens' SchemaFieldSpecNumericIndexingSpec (Maybe Double)
-sfsnisMinValue
-  = lens _sfsnisMinValue
-      (\ s a -> s{_sfsnisMinValue = a})
-      . mapping _Coerce
-
-instance FromJSON SchemaFieldSpecNumericIndexingSpec
-         where
-        parseJSON
-          = withObject "SchemaFieldSpecNumericIndexingSpec"
-              (\ o ->
-                 SchemaFieldSpecNumericIndexingSpec' <$>
-                   (o .:? "maxValue") <*> (o .:? "minValue"))
-
-instance ToJSON SchemaFieldSpecNumericIndexingSpec
-         where
-        toJSON SchemaFieldSpecNumericIndexingSpec'{..}
-          = object
-              (catMaybes
-                 [("maxValue" .=) <$> _sfsnisMaxValue,
-                  ("minValue" .=) <$> _sfsnisMinValue])
-
--- | JSON request template for firing commands on Mobile Device in Directory
--- Devices API.
---
--- /See:/ 'mobileDeviceAction' smart constructor.
-newtype MobileDeviceAction = MobileDeviceAction'
-    { _mdaAction :: Maybe Text
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'MobileDeviceAction' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'mdaAction'
-mobileDeviceAction
-    :: MobileDeviceAction
-mobileDeviceAction =
-    MobileDeviceAction'
-    { _mdaAction = Nothing
-    }
-
--- | Action to be taken on the Mobile Device
-mdaAction :: Lens' MobileDeviceAction (Maybe Text)
-mdaAction
-  = lens _mdaAction (\ s a -> s{_mdaAction = a})
-
-instance FromJSON MobileDeviceAction where
-        parseJSON
-          = withObject "MobileDeviceAction"
-              (\ o -> MobileDeviceAction' <$> (o .:? "action"))
-
-instance ToJSON MobileDeviceAction where
-        toJSON MobileDeviceAction'{..}
-          = object (catMaybes [("action" .=) <$> _mdaAction])
-
--- | JSON template for FieldSpec resource for Schemas in Directory API.
---
--- /See:/ 'schemaFieldSpec' smart constructor.
-data SchemaFieldSpec = SchemaFieldSpec'
-    { _sfsEtag                :: !(Maybe Text)
-    , _sfsKind                :: !Text
-    , _sfsNumericIndexingSpec :: !(Maybe SchemaFieldSpecNumericIndexingSpec)
-    , _sfsReadAccessType      :: !Text
-    , _sfsFieldId             :: !(Maybe Text)
-    , _sfsIndexed             :: !Bool
-    , _sfsFieldType           :: !(Maybe Text)
-    , _sfsFieldName           :: !(Maybe Text)
-    , _sfsMultiValued         :: !(Maybe Bool)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'SchemaFieldSpec' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sfsEtag'
---
--- * 'sfsKind'
---
--- * 'sfsNumericIndexingSpec'
---
--- * 'sfsReadAccessType'
---
--- * 'sfsFieldId'
---
--- * 'sfsIndexed'
---
--- * 'sfsFieldType'
---
--- * 'sfsFieldName'
---
--- * 'sfsMultiValued'
-schemaFieldSpec
-    :: SchemaFieldSpec
-schemaFieldSpec =
-    SchemaFieldSpec'
-    { _sfsEtag = Nothing
-    , _sfsKind = "admin#directory#schema#fieldspec"
-    , _sfsNumericIndexingSpec = Nothing
-    , _sfsReadAccessType = "ALL_DOMAIN_USERS"
-    , _sfsFieldId = Nothing
-    , _sfsIndexed = True
-    , _sfsFieldType = Nothing
-    , _sfsFieldName = Nothing
-    , _sfsMultiValued = Nothing
-    }
-
--- | ETag of the resource.
-sfsEtag :: Lens' SchemaFieldSpec (Maybe Text)
-sfsEtag = lens _sfsEtag (\ s a -> s{_sfsEtag = a})
-
--- | Kind of resource this is.
-sfsKind :: Lens' SchemaFieldSpec Text
-sfsKind = lens _sfsKind (\ s a -> s{_sfsKind = a})
-
--- | Indexing spec for a numeric field. By default, only exact match queries
--- will be supported for numeric fields. Setting the numericIndexingSpec
--- allows range queries to be supported.
-sfsNumericIndexingSpec :: Lens' SchemaFieldSpec (Maybe SchemaFieldSpecNumericIndexingSpec)
-sfsNumericIndexingSpec
-  = lens _sfsNumericIndexingSpec
-      (\ s a -> s{_sfsNumericIndexingSpec = a})
-
--- | Read ACLs on the field specifying who can view values of this field.
--- Valid values are \"ALL_DOMAIN_USERS\" and \"ADMINS_AND_SELF\".
-sfsReadAccessType :: Lens' SchemaFieldSpec Text
-sfsReadAccessType
-  = lens _sfsReadAccessType
-      (\ s a -> s{_sfsReadAccessType = a})
-
--- | Unique identifier of Field (Read-only)
-sfsFieldId :: Lens' SchemaFieldSpec (Maybe Text)
-sfsFieldId
-  = lens _sfsFieldId (\ s a -> s{_sfsFieldId = a})
-
--- | Boolean specifying whether the field is indexed or not.
-sfsIndexed :: Lens' SchemaFieldSpec Bool
-sfsIndexed
-  = lens _sfsIndexed (\ s a -> s{_sfsIndexed = a})
-
--- | Type of the field.
-sfsFieldType :: Lens' SchemaFieldSpec (Maybe Text)
-sfsFieldType
-  = lens _sfsFieldType (\ s a -> s{_sfsFieldType = a})
-
--- | Name of the field.
-sfsFieldName :: Lens' SchemaFieldSpec (Maybe Text)
-sfsFieldName
-  = lens _sfsFieldName (\ s a -> s{_sfsFieldName = a})
-
--- | Boolean specifying whether this is a multi-valued field or not.
-sfsMultiValued :: Lens' SchemaFieldSpec (Maybe Bool)
-sfsMultiValued
-  = lens _sfsMultiValued
-      (\ s a -> s{_sfsMultiValued = a})
-
-instance FromJSON SchemaFieldSpec where
-        parseJSON
-          = withObject "SchemaFieldSpec"
-              (\ o ->
-                 SchemaFieldSpec' <$>
-                   (o .:? "etag") <*>
-                     (o .:? "kind" .!= "admin#directory#schema#fieldspec")
-                     <*> (o .:? "numericIndexingSpec")
-                     <*> (o .:? "readAccessType" .!= "ALL_DOMAIN_USERS")
-                     <*> (o .:? "fieldId")
-                     <*> (o .:? "indexed" .!= True)
-                     <*> (o .:? "fieldType")
-                     <*> (o .:? "fieldName")
-                     <*> (o .:? "multiValued"))
-
-instance ToJSON SchemaFieldSpec where
-        toJSON SchemaFieldSpec'{..}
-          = object
-              (catMaybes
-                 [("etag" .=) <$> _sfsEtag, Just ("kind" .= _sfsKind),
-                  ("numericIndexingSpec" .=) <$>
-                    _sfsNumericIndexingSpec,
-                  Just ("readAccessType" .= _sfsReadAccessType),
-                  ("fieldId" .=) <$> _sfsFieldId,
-                  Just ("indexed" .= _sfsIndexed),
-                  ("fieldType" .=) <$> _sfsFieldType,
-                  ("fieldName" .=) <$> _sfsFieldName,
-                  ("multiValued" .=) <$> _sfsMultiValued])
-
--- | JSON response template for List Chrome OS Devices operation in Directory
--- API.
---
--- /See:/ 'chromeOSDevices' smart constructor.
-data ChromeOSDevices = ChromeOSDevices'
-    { _cosdEtag            :: !(Maybe Text)
-    , _cosdNextPageToken   :: !(Maybe Text)
-    , _cosdKind            :: !Text
-    , _cosdChromeosDevices :: !(Maybe [ChromeOSDevice])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ChromeOSDevices' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cosdEtag'
---
--- * 'cosdNextPageToken'
---
--- * 'cosdKind'
---
--- * 'cosdChromeosDevices'
-chromeOSDevices
-    :: ChromeOSDevices
-chromeOSDevices =
-    ChromeOSDevices'
-    { _cosdEtag = Nothing
-    , _cosdNextPageToken = Nothing
-    , _cosdKind = "admin#directory#chromeosdevices"
-    , _cosdChromeosDevices = Nothing
-    }
-
--- | ETag of the resource.
-cosdEtag :: Lens' ChromeOSDevices (Maybe Text)
-cosdEtag = lens _cosdEtag (\ s a -> s{_cosdEtag = a})
-
--- | Token used to access next page of this result.
-cosdNextPageToken :: Lens' ChromeOSDevices (Maybe Text)
-cosdNextPageToken
-  = lens _cosdNextPageToken
-      (\ s a -> s{_cosdNextPageToken = a})
-
--- | Kind of resource this is.
-cosdKind :: Lens' ChromeOSDevices Text
-cosdKind = lens _cosdKind (\ s a -> s{_cosdKind = a})
-
--- | List of Chrome OS Device objects.
-cosdChromeosDevices :: Lens' ChromeOSDevices [ChromeOSDevice]
-cosdChromeosDevices
-  = lens _cosdChromeosDevices
-      (\ s a -> s{_cosdChromeosDevices = a})
-      . _Default
-      . _Coerce
-
-instance FromJSON ChromeOSDevices where
-        parseJSON
-          = withObject "ChromeOSDevices"
-              (\ o ->
-                 ChromeOSDevices' <$>
-                   (o .:? "etag") <*> (o .:? "nextPageToken") <*>
-                     (o .:? "kind" .!= "admin#directory#chromeosdevices")
-                     <*> (o .:? "chromeosdevices" .!= mempty))
-
-instance ToJSON ChromeOSDevices where
-        toJSON ChromeOSDevices'{..}
-          = object
-              (catMaybes
-                 [("etag" .=) <$> _cosdEtag,
-                  ("nextPageToken" .=) <$> _cosdNextPageToken,
-                  Just ("kind" .= _cosdKind),
-                  ("chromeosdevices" .=) <$> _cosdChromeosDevices])
-
--- | JSON template for an externalId entry.
---
--- /See:/ 'userExternalId' smart constructor.
-data UserExternalId = UserExternalId'
-    { _ueiValue      :: !(Maybe Text)
-    , _ueiType       :: !(Maybe Text)
-    , _ueiCustomType :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'UserExternalId' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ueiValue'
---
--- * 'ueiType'
---
--- * 'ueiCustomType'
-userExternalId
-    :: UserExternalId
-userExternalId =
-    UserExternalId'
-    { _ueiValue = Nothing
-    , _ueiType = Nothing
-    , _ueiCustomType = Nothing
-    }
-
--- | The value of the id.
-ueiValue :: Lens' UserExternalId (Maybe Text)
-ueiValue = lens _ueiValue (\ s a -> s{_ueiValue = a})
-
--- | The type of the Id.
-ueiType :: Lens' UserExternalId (Maybe Text)
-ueiType = lens _ueiType (\ s a -> s{_ueiType = a})
-
--- | Custom type.
-ueiCustomType :: Lens' UserExternalId (Maybe Text)
-ueiCustomType
-  = lens _ueiCustomType
-      (\ s a -> s{_ueiCustomType = a})
-
-instance FromJSON UserExternalId where
-        parseJSON
-          = withObject "UserExternalId"
-              (\ o ->
-                 UserExternalId' <$>
-                   (o .:? "value") <*> (o .:? "type") <*>
-                     (o .:? "customType"))
-
-instance ToJSON UserExternalId where
-        toJSON UserExternalId'{..}
-          = object
-              (catMaybes
-                 [("value" .=) <$> _ueiValue,
-                  ("type" .=) <$> _ueiType,
-                  ("customType" .=) <$> _ueiCustomType])
-
---
--- /See:/ 'asps' smart constructor.
-data Asps = Asps'
-    { _aspEtag  :: !(Maybe Text)
-    , _aspKind  :: !Text
-    , _aspItems :: !(Maybe [Asp])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Asps' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'aspEtag'
---
--- * 'aspKind'
---
--- * 'aspItems'
-asps
-    :: Asps
-asps =
-    Asps'
-    { _aspEtag = Nothing
-    , _aspKind = "admin#directory#aspList"
-    , _aspItems = Nothing
-    }
-
--- | ETag of the resource.
-aspEtag :: Lens' Asps (Maybe Text)
-aspEtag = lens _aspEtag (\ s a -> s{_aspEtag = a})
-
--- | The type of the API resource. This is always admin#directory#aspList.
-aspKind :: Lens' Asps Text
-aspKind = lens _aspKind (\ s a -> s{_aspKind = a})
-
--- | A list of ASP resources.
-aspItems :: Lens' Asps [Asp]
-aspItems
-  = lens _aspItems (\ s a -> s{_aspItems = a}) .
-      _Default
-      . _Coerce
-
-instance FromJSON Asps where
-        parseJSON
-          = withObject "Asps"
-              (\ o ->
-                 Asps' <$>
-                   (o .:? "etag") <*>
-                     (o .:? "kind" .!= "admin#directory#aspList")
-                     <*> (o .:? "items" .!= mempty))
-
-instance ToJSON Asps where
-        toJSON Asps'{..}
-          = object
-              (catMaybes
-                 [("etag" .=) <$> _aspEtag, Just ("kind" .= _aspKind),
-                  ("items" .=) <$> _aspItems])
+-- | JSON template for a location entry.
+--
+-- /See:/ 'userLocation' smart constructor.
+data UserLocation = UserLocation'
+    { _ulArea         :: !(Maybe Text)
+    , _ulBuildingId   :: !(Maybe Text)
+    , _ulDeskCode     :: !(Maybe Text)
+    , _ulFloorName    :: !(Maybe Text)
+    , _ulType         :: !(Maybe Text)
+    , _ulCustomType   :: !(Maybe Text)
+    , _ulFloorSection :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UserLocation' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ulArea'
+--
+-- * 'ulBuildingId'
+--
+-- * 'ulDeskCode'
+--
+-- * 'ulFloorName'
+--
+-- * 'ulType'
+--
+-- * 'ulCustomType'
+--
+-- * 'ulFloorSection'
+userLocation
+    :: UserLocation
+userLocation =
+    UserLocation'
+    { _ulArea = Nothing
+    , _ulBuildingId = Nothing
+    , _ulDeskCode = Nothing
+    , _ulFloorName = Nothing
+    , _ulType = Nothing
+    , _ulCustomType = Nothing
+    , _ulFloorSection = Nothing
+    }
+
+-- | Textual location. This is most useful for display purposes to concisely
+-- describe the location. For example, \"Mountain View, CA\", \"Near
+-- Seattle\", \"US-NYC-9TH 9A209A\".
+ulArea :: Lens' UserLocation (Maybe Text)
+ulArea = lens _ulArea (\ s a -> s{_ulArea = a})
+
+-- | Building Identifier.
+ulBuildingId :: Lens' UserLocation (Maybe Text)
+ulBuildingId
+  = lens _ulBuildingId (\ s a -> s{_ulBuildingId = a})
+
+-- | Most specific textual code of individual desk location.
+ulDeskCode :: Lens' UserLocation (Maybe Text)
+ulDeskCode
+  = lens _ulDeskCode (\ s a -> s{_ulDeskCode = a})
+
+-- | Floor name\/number.
+ulFloorName :: Lens' UserLocation (Maybe Text)
+ulFloorName
+  = lens _ulFloorName (\ s a -> s{_ulFloorName = a})
+
+-- | Each entry can have a type which indicates standard types of that entry.
+-- For example location could be of types default and desk. In addition to
+-- standard type, an entry can have a custom type and can give it any name.
+-- Such types should have \"custom\" as type and also have a customType
+-- value.
+ulType :: Lens' UserLocation (Maybe Text)
+ulType = lens _ulType (\ s a -> s{_ulType = a})
+
+-- | Custom Type.
+ulCustomType :: Lens' UserLocation (Maybe Text)
+ulCustomType
+  = lens _ulCustomType (\ s a -> s{_ulCustomType = a})
+
+-- | Floor section. More specific location within the floor. For example, if
+-- a floor is divided into sections \"A\", \"B\", and \"C\", this field
+-- would identify one of those values.
+ulFloorSection :: Lens' UserLocation (Maybe Text)
+ulFloorSection
+  = lens _ulFloorSection
+      (\ s a -> s{_ulFloorSection = a})
+
+instance FromJSON UserLocation where
+        parseJSON
+          = withObject "UserLocation"
+              (\ o ->
+                 UserLocation' <$>
+                   (o .:? "area") <*> (o .:? "buildingId") <*>
+                     (o .:? "deskCode")
+                     <*> (o .:? "floorName")
+                     <*> (o .:? "type")
+                     <*> (o .:? "customType")
+                     <*> (o .:? "floorSection"))
+
+instance ToJSON UserLocation where
+        toJSON UserLocation'{..}
+          = object
+              (catMaybes
+                 [("area" .=) <$> _ulArea,
+                  ("buildingId" .=) <$> _ulBuildingId,
+                  ("deskCode" .=) <$> _ulDeskCode,
+                  ("floorName" .=) <$> _ulFloorName,
+                  ("type" .=) <$> _ulType,
+                  ("customType" .=) <$> _ulCustomType,
+                  ("floorSection" .=) <$> _ulFloorSection])
+
+-- | JSON template for verification codes in Directory API.
+--
+-- /See:/ 'verificationCode' smart constructor.
+data VerificationCode = VerificationCode'
+    { _vcVerificationCode :: !(Maybe Text)
+    , _vcEtag             :: !(Maybe Text)
+    , _vcKind             :: !Text
+    , _vcUserId           :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VerificationCode' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vcVerificationCode'
+--
+-- * 'vcEtag'
+--
+-- * 'vcKind'
+--
+-- * 'vcUserId'
+verificationCode
+    :: VerificationCode
+verificationCode =
+    VerificationCode'
+    { _vcVerificationCode = Nothing
+    , _vcEtag = Nothing
+    , _vcKind = "admin#directory#verificationCode"
+    , _vcUserId = Nothing
+    }
+
+-- | A current verification code for the user. Invalidated or used
+-- verification codes are not returned as part of the result.
+vcVerificationCode :: Lens' VerificationCode (Maybe Text)
+vcVerificationCode
+  = lens _vcVerificationCode
+      (\ s a -> s{_vcVerificationCode = a})
+
+-- | ETag of the resource.
+vcEtag :: Lens' VerificationCode (Maybe Text)
+vcEtag = lens _vcEtag (\ s a -> s{_vcEtag = a})
+
+-- | The type of the resource. This is always
+-- admin#directory#verificationCode.
+vcKind :: Lens' VerificationCode Text
+vcKind = lens _vcKind (\ s a -> s{_vcKind = a})
+
+-- | The obfuscated unique ID of the user.
+vcUserId :: Lens' VerificationCode (Maybe Text)
+vcUserId = lens _vcUserId (\ s a -> s{_vcUserId = a})
+
+instance FromJSON VerificationCode where
+        parseJSON
+          = withObject "VerificationCode"
+              (\ o ->
+                 VerificationCode' <$>
+                   (o .:? "verificationCode") <*> (o .:? "etag") <*>
+                     (o .:? "kind" .!= "admin#directory#verificationCode")
+                     <*> (o .:? "userId"))
+
+instance ToJSON VerificationCode where
+        toJSON VerificationCode'{..}
+          = object
+              (catMaybes
+                 [("verificationCode" .=) <$> _vcVerificationCode,
+                  ("etag" .=) <$> _vcEtag, Just ("kind" .= _vcKind),
+                  ("userId" .=) <$> _vcUserId])
+
+-- | JSON template for Feature object in Directory API.
+--
+-- /See:/ 'feature' smart constructor.
+data Feature = Feature'
+    { _fEtags :: !(Maybe Text)
+    , _fKind  :: !Text
+    , _fName  :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Feature' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fEtags'
+--
+-- * 'fKind'
+--
+-- * 'fName'
+feature
+    :: Feature
+feature =
+    Feature'
+    { _fEtags = Nothing
+    , _fKind = "admin#directory#resources#features#Feature"
+    , _fName = Nothing
+    }
+
+-- | ETag of the resource.
+fEtags :: Lens' Feature (Maybe Text)
+fEtags = lens _fEtags (\ s a -> s{_fEtags = a})
+
+-- | Kind of resource this is.
+fKind :: Lens' Feature Text
+fKind = lens _fKind (\ s a -> s{_fKind = a})
+
+-- | The name of the feature.
+fName :: Lens' Feature (Maybe Text)
+fName = lens _fName (\ s a -> s{_fName = a})
+
+instance FromJSON Feature where
+        parseJSON
+          = withObject "Feature"
+              (\ o ->
+                 Feature' <$>
+                   (o .:? "etags") <*>
+                     (o .:? "kind" .!=
+                        "admin#directory#resources#features#Feature")
+                     <*> (o .:? "name"))
+
+instance ToJSON Feature where
+        toJSON Feature'{..}
+          = object
+              (catMaybes
+                 [("etags" .=) <$> _fEtags, Just ("kind" .= _fKind),
+                  ("name" .=) <$> _fName])
+
+-- | JSON template for Org Unit resource in Directory API.
+--
+-- /See:/ 'orgUnit' smart constructor.
+data OrgUnit = OrgUnit'
+    { _ouEtag              :: !(Maybe Text)
+    , _ouParentOrgUnitPath :: !(Maybe Text)
+    , _ouKind              :: !Text
+    , _ouOrgUnitPath       :: !(Maybe Text)
+    , _ouName              :: !(Maybe Text)
+    , _ouBlockInheritance  :: !(Maybe Bool)
+    , _ouParentOrgUnitId   :: !(Maybe Text)
+    , _ouDescription       :: !(Maybe Text)
+    , _ouOrgUnitId         :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'OrgUnit' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ouEtag'
+--
+-- * 'ouParentOrgUnitPath'
+--
+-- * 'ouKind'
+--
+-- * 'ouOrgUnitPath'
+--
+-- * 'ouName'
+--
+-- * 'ouBlockInheritance'
+--
+-- * 'ouParentOrgUnitId'
+--
+-- * 'ouDescription'
+--
+-- * 'ouOrgUnitId'
+orgUnit
+    :: OrgUnit
+orgUnit =
+    OrgUnit'
+    { _ouEtag = Nothing
+    , _ouParentOrgUnitPath = Nothing
+    , _ouKind = "admin#directory#orgUnit"
+    , _ouOrgUnitPath = Nothing
+    , _ouName = Nothing
+    , _ouBlockInheritance = Nothing
+    , _ouParentOrgUnitId = Nothing
+    , _ouDescription = Nothing
+    , _ouOrgUnitId = Nothing
+    }
+
+-- | ETag of the resource.
+ouEtag :: Lens' OrgUnit (Maybe Text)
+ouEtag = lens _ouEtag (\ s a -> s{_ouEtag = a})
+
+-- | Path of parent OrgUnit
+ouParentOrgUnitPath :: Lens' OrgUnit (Maybe Text)
+ouParentOrgUnitPath
+  = lens _ouParentOrgUnitPath
+      (\ s a -> s{_ouParentOrgUnitPath = a})
+
+-- | Kind of resource this is.
+ouKind :: Lens' OrgUnit Text
+ouKind = lens _ouKind (\ s a -> s{_ouKind = a})
+
+-- | Path of OrgUnit
+ouOrgUnitPath :: Lens' OrgUnit (Maybe Text)
+ouOrgUnitPath
+  = lens _ouOrgUnitPath
+      (\ s a -> s{_ouOrgUnitPath = a})
+
+-- | Name of OrgUnit
+ouName :: Lens' OrgUnit (Maybe Text)
+ouName = lens _ouName (\ s a -> s{_ouName = a})
+
+-- | Should block inheritance
+ouBlockInheritance :: Lens' OrgUnit (Maybe Bool)
+ouBlockInheritance
+  = lens _ouBlockInheritance
+      (\ s a -> s{_ouBlockInheritance = a})
+
+-- | Id of parent OrgUnit
+ouParentOrgUnitId :: Lens' OrgUnit (Maybe Text)
+ouParentOrgUnitId
+  = lens _ouParentOrgUnitId
+      (\ s a -> s{_ouParentOrgUnitId = a})
+
+-- | Description of OrgUnit
+ouDescription :: Lens' OrgUnit (Maybe Text)
+ouDescription
+  = lens _ouDescription
+      (\ s a -> s{_ouDescription = a})
+
+-- | Id of OrgUnit
+ouOrgUnitId :: Lens' OrgUnit (Maybe Text)
+ouOrgUnitId
+  = lens _ouOrgUnitId (\ s a -> s{_ouOrgUnitId = a})
+
+instance FromJSON OrgUnit where
+        parseJSON
+          = withObject "OrgUnit"
+              (\ o ->
+                 OrgUnit' <$>
+                   (o .:? "etag") <*> (o .:? "parentOrgUnitPath") <*>
+                     (o .:? "kind" .!= "admin#directory#orgUnit")
+                     <*> (o .:? "orgUnitPath")
+                     <*> (o .:? "name")
+                     <*> (o .:? "blockInheritance")
+                     <*> (o .:? "parentOrgUnitId")
+                     <*> (o .:? "description")
+                     <*> (o .:? "orgUnitId"))
+
+instance ToJSON OrgUnit where
+        toJSON OrgUnit'{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _ouEtag,
+                  ("parentOrgUnitPath" .=) <$> _ouParentOrgUnitPath,
+                  Just ("kind" .= _ouKind),
+                  ("orgUnitPath" .=) <$> _ouOrgUnitPath,
+                  ("name" .=) <$> _ouName,
+                  ("blockInheritance" .=) <$> _ouBlockInheritance,
+                  ("parentOrgUnitId" .=) <$> _ouParentOrgUnitId,
+                  ("description" .=) <$> _ouDescription,
+                  ("orgUnitId" .=) <$> _ouOrgUnitId])
+
+-- | JSON request template for setting\/revoking admin status of a user in
+-- Directory API.
+--
+-- /See:/ 'userMakeAdmin' smart constructor.
+newtype UserMakeAdmin = UserMakeAdmin'
+    { _umaStatus :: Maybe Bool
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UserMakeAdmin' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'umaStatus'
+userMakeAdmin
+    :: UserMakeAdmin
+userMakeAdmin =
+    UserMakeAdmin'
+    { _umaStatus = Nothing
+    }
+
+-- | Boolean indicating new admin status of the user
+umaStatus :: Lens' UserMakeAdmin (Maybe Bool)
+umaStatus
+  = lens _umaStatus (\ s a -> s{_umaStatus = a})
+
+instance FromJSON UserMakeAdmin where
+        parseJSON
+          = withObject "UserMakeAdmin"
+              (\ o -> UserMakeAdmin' <$> (o .:? "status"))
+
+instance ToJSON UserMakeAdmin where
+        toJSON UserMakeAdmin'{..}
+          = object (catMaybes [("status" .=) <$> _umaStatus])
+
+-- | JSON template for About (notes) of a user in Directory API.
+--
+-- /See:/ 'userAbout' smart constructor.
+data UserAbout = UserAbout'
+    { _uaValue       :: !(Maybe Text)
+    , _uaContentType :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UserAbout' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uaValue'
+--
+-- * 'uaContentType'
+userAbout
+    :: UserAbout
+userAbout =
+    UserAbout'
+    { _uaValue = Nothing
+    , _uaContentType = Nothing
+    }
+
+-- | Actual value of notes.
+uaValue :: Lens' UserAbout (Maybe Text)
+uaValue = lens _uaValue (\ s a -> s{_uaValue = a})
+
+-- | About entry can have a type which indicates the content type. It can
+-- either be plain or html. By default, notes contents are assumed to
+-- contain plain text.
+uaContentType :: Lens' UserAbout (Maybe Text)
+uaContentType
+  = lens _uaContentType
+      (\ s a -> s{_uaContentType = a})
+
+instance FromJSON UserAbout where
+        parseJSON
+          = withObject "UserAbout"
+              (\ o ->
+                 UserAbout' <$>
+                   (o .:? "value") <*> (o .:? "contentType"))
+
+instance ToJSON UserAbout where
+        toJSON UserAbout'{..}
+          = object
+              (catMaybes
+                 [("value" .=) <$> _uaValue,
+                  ("contentType" .=) <$> _uaContentType])
+
+-- | JSON response template for List privileges operation in Directory API.
+--
+-- /See:/ 'privileges' smart constructor.
+data Privileges = Privileges'
+    { _pEtag  :: !(Maybe Text)
+    , _pKind  :: !Text
+    , _pItems :: !(Maybe [Privilege])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Privileges' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pEtag'
+--
+-- * 'pKind'
+--
+-- * 'pItems'
+privileges
+    :: Privileges
+privileges =
+    Privileges'
+    { _pEtag = Nothing
+    , _pKind = "admin#directory#privileges"
+    , _pItems = Nothing
+    }
+
+-- | ETag of the resource.
+pEtag :: Lens' Privileges (Maybe Text)
+pEtag = lens _pEtag (\ s a -> s{_pEtag = a})
+
+-- | The type of the API resource. This is always admin#directory#privileges.
+pKind :: Lens' Privileges Text
+pKind = lens _pKind (\ s a -> s{_pKind = a})
+
+-- | A list of Privilege resources.
+pItems :: Lens' Privileges [Privilege]
+pItems
+  = lens _pItems (\ s a -> s{_pItems = a}) . _Default .
+      _Coerce
+
+instance FromJSON Privileges where
+        parseJSON
+          = withObject "Privileges"
+              (\ o ->
+                 Privileges' <$>
+                   (o .:? "etag") <*>
+                     (o .:? "kind" .!= "admin#directory#privileges")
+                     <*> (o .:? "items" .!= mempty))
+
+instance ToJSON Privileges where
+        toJSON Privileges'{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _pEtag, Just ("kind" .= _pKind),
+                  ("items" .=) <$> _pItems])
+
+-- | JSON response template for List Groups operation in Directory API.
+--
+-- /See:/ 'groups' smart constructor.
+data Groups = Groups'
+    { _gGroups        :: !(Maybe [Group])
+    , _gEtag          :: !(Maybe Text)
+    , _gNextPageToken :: !(Maybe Text)
+    , _gKind          :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Groups' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gGroups'
+--
+-- * 'gEtag'
+--
+-- * 'gNextPageToken'
+--
+-- * 'gKind'
+groups
+    :: Groups
+groups =
+    Groups'
+    { _gGroups = Nothing
+    , _gEtag = Nothing
+    , _gNextPageToken = Nothing
+    , _gKind = "admin#directory#groups"
+    }
+
+-- | List of group objects.
+gGroups :: Lens' Groups [Group]
+gGroups
+  = lens _gGroups (\ s a -> s{_gGroups = a}) . _Default
+      . _Coerce
+
+-- | ETag of the resource.
+gEtag :: Lens' Groups (Maybe Text)
+gEtag = lens _gEtag (\ s a -> s{_gEtag = a})
+
+-- | Token used to access next page of this result.
+gNextPageToken :: Lens' Groups (Maybe Text)
+gNextPageToken
+  = lens _gNextPageToken
+      (\ s a -> s{_gNextPageToken = a})
+
+-- | Kind of resource this is.
+gKind :: Lens' Groups Text
+gKind = lens _gKind (\ s a -> s{_gKind = a})
+
+instance FromJSON Groups where
+        parseJSON
+          = withObject "Groups"
+              (\ o ->
+                 Groups' <$>
+                   (o .:? "groups" .!= mempty) <*> (o .:? "etag") <*>
+                     (o .:? "nextPageToken")
+                     <*> (o .:? "kind" .!= "admin#directory#groups"))
+
+instance ToJSON Groups where
+        toJSON Groups'{..}
+          = object
+              (catMaybes
+                 [("groups" .=) <$> _gGroups, ("etag" .=) <$> _gEtag,
+                  ("nextPageToken" .=) <$> _gNextPageToken,
+                  Just ("kind" .= _gKind)])
+
+-- | JSON response template for List roleAssignments operation in Directory
+-- API.
+--
+-- /See:/ 'roleAssignments' smart constructor.
+data RoleAssignments = RoleAssignments'
+    { _raEtag          :: !(Maybe Text)
+    , _raNextPageToken :: !(Maybe Text)
+    , _raKind          :: !Text
+    , _raItems         :: !(Maybe [RoleAssignment])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RoleAssignments' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'raEtag'
+--
+-- * 'raNextPageToken'
+--
+-- * 'raKind'
+--
+-- * 'raItems'
+roleAssignments
+    :: RoleAssignments
+roleAssignments =
+    RoleAssignments'
+    { _raEtag = Nothing
+    , _raNextPageToken = Nothing
+    , _raKind = "admin#directory#roleAssignments"
+    , _raItems = Nothing
+    }
+
+-- | ETag of the resource.
+raEtag :: Lens' RoleAssignments (Maybe Text)
+raEtag = lens _raEtag (\ s a -> s{_raEtag = a})
+
+raNextPageToken :: Lens' RoleAssignments (Maybe Text)
+raNextPageToken
+  = lens _raNextPageToken
+      (\ s a -> s{_raNextPageToken = a})
+
+-- | The type of the API resource. This is always
+-- admin#directory#roleAssignments.
+raKind :: Lens' RoleAssignments Text
+raKind = lens _raKind (\ s a -> s{_raKind = a})
+
+-- | A list of RoleAssignment resources.
+raItems :: Lens' RoleAssignments [RoleAssignment]
+raItems
+  = lens _raItems (\ s a -> s{_raItems = a}) . _Default
+      . _Coerce
+
+instance FromJSON RoleAssignments where
+        parseJSON
+          = withObject "RoleAssignments"
+              (\ o ->
+                 RoleAssignments' <$>
+                   (o .:? "etag") <*> (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "admin#directory#roleAssignments")
+                     <*> (o .:? "items" .!= mempty))
+
+instance ToJSON RoleAssignments where
+        toJSON RoleAssignments'{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _raEtag,
+                  ("nextPageToken" .=) <$> _raNextPageToken,
+                  Just ("kind" .= _raKind), ("items" .=) <$> _raItems])
+
+-- | JSON template for privilege resource in Directory API.
+--
+-- /See:/ 'privilege' smart constructor.
+data Privilege = Privilege'
+    { _priEtag            :: !(Maybe Text)
+    , _priIsOuScopable    :: !(Maybe Bool)
+    , _priKind            :: !Text
+    , _priServiceName     :: !(Maybe Text)
+    , _priServiceId       :: !(Maybe Text)
+    , _priPrivilegeName   :: !(Maybe Text)
+    , _priChildPrivileges :: !(Maybe [Privilege])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Privilege' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'priEtag'
+--
+-- * 'priIsOuScopable'
+--
+-- * 'priKind'
+--
+-- * 'priServiceName'
+--
+-- * 'priServiceId'
+--
+-- * 'priPrivilegeName'
+--
+-- * 'priChildPrivileges'
+privilege
+    :: Privilege
+privilege =
+    Privilege'
+    { _priEtag = Nothing
+    , _priIsOuScopable = Nothing
+    , _priKind = "admin#directory#privilege"
+    , _priServiceName = Nothing
+    , _priServiceId = Nothing
+    , _priPrivilegeName = Nothing
+    , _priChildPrivileges = Nothing
+    }
+
+-- | ETag of the resource.
+priEtag :: Lens' Privilege (Maybe Text)
+priEtag = lens _priEtag (\ s a -> s{_priEtag = a})
+
+-- | If the privilege can be restricted to an organization unit.
+priIsOuScopable :: Lens' Privilege (Maybe Bool)
+priIsOuScopable
+  = lens _priIsOuScopable
+      (\ s a -> s{_priIsOuScopable = a})
+
+-- | The type of the API resource. This is always admin#directory#privilege.
+priKind :: Lens' Privilege Text
+priKind = lens _priKind (\ s a -> s{_priKind = a})
+
+-- | The name of the service this privilege is for.
+priServiceName :: Lens' Privilege (Maybe Text)
+priServiceName
+  = lens _priServiceName
+      (\ s a -> s{_priServiceName = a})
+
+-- | The obfuscated ID of the service this privilege is for.
+priServiceId :: Lens' Privilege (Maybe Text)
+priServiceId
+  = lens _priServiceId (\ s a -> s{_priServiceId = a})
+
+-- | The name of the privilege.
+priPrivilegeName :: Lens' Privilege (Maybe Text)
+priPrivilegeName
+  = lens _priPrivilegeName
+      (\ s a -> s{_priPrivilegeName = a})
+
+-- | A list of child privileges. Privileges for a service form a tree. Each
+-- privilege can have a list of child privileges; this list is empty for a
+-- leaf privilege.
+priChildPrivileges :: Lens' Privilege [Privilege]
+priChildPrivileges
+  = lens _priChildPrivileges
+      (\ s a -> s{_priChildPrivileges = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON Privilege where
+        parseJSON
+          = withObject "Privilege"
+              (\ o ->
+                 Privilege' <$>
+                   (o .:? "etag") <*> (o .:? "isOuScopable") <*>
+                     (o .:? "kind" .!= "admin#directory#privilege")
+                     <*> (o .:? "serviceName")
+                     <*> (o .:? "serviceId")
+                     <*> (o .:? "privilegeName")
+                     <*> (o .:? "childPrivileges" .!= mempty))
+
+instance ToJSON Privilege where
+        toJSON Privilege'{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _priEtag,
+                  ("isOuScopable" .=) <$> _priIsOuScopable,
+                  Just ("kind" .= _priKind),
+                  ("serviceName" .=) <$> _priServiceName,
+                  ("serviceId" .=) <$> _priServiceId,
+                  ("privilegeName" .=) <$> _priPrivilegeName,
+                  ("childPrivileges" .=) <$> _priChildPrivileges])
+
+-- | JSON response template for List roles operation in Directory API.
+--
+-- /See:/ 'roles' smart constructor.
+data Roles = Roles'
+    { _rEtag          :: !(Maybe Text)
+    , _rNextPageToken :: !(Maybe Text)
+    , _rKind          :: !Text
+    , _rItems         :: !(Maybe [Role])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Roles' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rEtag'
+--
+-- * 'rNextPageToken'
+--
+-- * 'rKind'
+--
+-- * 'rItems'
+roles
+    :: Roles
+roles =
+    Roles'
+    { _rEtag = Nothing
+    , _rNextPageToken = Nothing
+    , _rKind = "admin#directory#roles"
+    , _rItems = Nothing
+    }
+
+-- | ETag of the resource.
+rEtag :: Lens' Roles (Maybe Text)
+rEtag = lens _rEtag (\ s a -> s{_rEtag = a})
+
+rNextPageToken :: Lens' Roles (Maybe Text)
+rNextPageToken
+  = lens _rNextPageToken
+      (\ s a -> s{_rNextPageToken = a})
+
+-- | The type of the API resource. This is always admin#directory#roles.
+rKind :: Lens' Roles Text
+rKind = lens _rKind (\ s a -> s{_rKind = a})
+
+-- | A list of Role resources.
+rItems :: Lens' Roles [Role]
+rItems
+  = lens _rItems (\ s a -> s{_rItems = a}) . _Default .
+      _Coerce
+
+instance FromJSON Roles where
+        parseJSON
+          = withObject "Roles"
+              (\ o ->
+                 Roles' <$>
+                   (o .:? "etag") <*> (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "admin#directory#roles")
+                     <*> (o .:? "items" .!= mempty))
+
+instance ToJSON Roles where
+        toJSON Roles'{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _rEtag,
+                  ("nextPageToken" .=) <$> _rNextPageToken,
+                  Just ("kind" .= _rKind), ("items" .=) <$> _rItems])
+
+--
+-- /See:/ 'chromeOSDeviceDiskVolumeReportsItem' smart constructor.
+newtype ChromeOSDeviceDiskVolumeReportsItem = ChromeOSDeviceDiskVolumeReportsItem'
+    { _coddvriVolumeInfo :: Maybe [ChromeOSDeviceDiskVolumeReportsItemVolumeInfoItem]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ChromeOSDeviceDiskVolumeReportsItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'coddvriVolumeInfo'
+chromeOSDeviceDiskVolumeReportsItem
+    :: ChromeOSDeviceDiskVolumeReportsItem
+chromeOSDeviceDiskVolumeReportsItem =
+    ChromeOSDeviceDiskVolumeReportsItem'
+    { _coddvriVolumeInfo = Nothing
+    }
+
+-- | Disk volumes
+coddvriVolumeInfo :: Lens' ChromeOSDeviceDiskVolumeReportsItem [ChromeOSDeviceDiskVolumeReportsItemVolumeInfoItem]
+coddvriVolumeInfo
+  = lens _coddvriVolumeInfo
+      (\ s a -> s{_coddvriVolumeInfo = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON ChromeOSDeviceDiskVolumeReportsItem
+         where
+        parseJSON
+          = withObject "ChromeOSDeviceDiskVolumeReportsItem"
+              (\ o ->
+                 ChromeOSDeviceDiskVolumeReportsItem' <$>
+                   (o .:? "volumeInfo" .!= mempty))
+
+instance ToJSON ChromeOSDeviceDiskVolumeReportsItem
+         where
+        toJSON ChromeOSDeviceDiskVolumeReportsItem'{..}
+          = object
+              (catMaybes
+                 [("volumeInfo" .=) <$> _coddvriVolumeInfo])
+
+-- | JSON template for address.
+--
+-- /See:/ 'userAddress' smart constructor.
+data UserAddress = UserAddress'
+    { _uaStreetAddress      :: !(Maybe Text)
+    , _uaPoBox              :: !(Maybe Text)
+    , _uaCountry            :: !(Maybe Text)
+    , _uaPostalCode         :: !(Maybe Text)
+    , _uaFormatted          :: !(Maybe Text)
+    , _uaExtendedAddress    :: !(Maybe Text)
+    , _uaLocality           :: !(Maybe Text)
+    , _uaPrimary            :: !(Maybe Bool)
+    , _uaCountryCode        :: !(Maybe Text)
+    , _uaRegion             :: !(Maybe Text)
+    , _uaType               :: !(Maybe Text)
+    , _uaCustomType         :: !(Maybe Text)
+    , _uaSourceIsStructured :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UserAddress' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uaStreetAddress'
+--
+-- * 'uaPoBox'
+--
+-- * 'uaCountry'
+--
+-- * 'uaPostalCode'
+--
+-- * 'uaFormatted'
+--
+-- * 'uaExtendedAddress'
+--
+-- * 'uaLocality'
+--
+-- * 'uaPrimary'
+--
+-- * 'uaCountryCode'
+--
+-- * 'uaRegion'
+--
+-- * 'uaType'
+--
+-- * 'uaCustomType'
+--
+-- * 'uaSourceIsStructured'
+userAddress
+    :: UserAddress
+userAddress =
+    UserAddress'
+    { _uaStreetAddress = Nothing
+    , _uaPoBox = Nothing
+    , _uaCountry = Nothing
+    , _uaPostalCode = Nothing
+    , _uaFormatted = Nothing
+    , _uaExtendedAddress = Nothing
+    , _uaLocality = Nothing
+    , _uaPrimary = Nothing
+    , _uaCountryCode = Nothing
+    , _uaRegion = Nothing
+    , _uaType = Nothing
+    , _uaCustomType = Nothing
+    , _uaSourceIsStructured = Nothing
+    }
+
+-- | Street.
+uaStreetAddress :: Lens' UserAddress (Maybe Text)
+uaStreetAddress
+  = lens _uaStreetAddress
+      (\ s a -> s{_uaStreetAddress = a})
+
+-- | Other parts of address.
+uaPoBox :: Lens' UserAddress (Maybe Text)
+uaPoBox = lens _uaPoBox (\ s a -> s{_uaPoBox = a})
+
+-- | Country.
+uaCountry :: Lens' UserAddress (Maybe Text)
+uaCountry
+  = lens _uaCountry (\ s a -> s{_uaCountry = a})
+
+-- | Postal code.
+uaPostalCode :: Lens' UserAddress (Maybe Text)
+uaPostalCode
+  = lens _uaPostalCode (\ s a -> s{_uaPostalCode = a})
+
+-- | Formatted address.
+uaFormatted :: Lens' UserAddress (Maybe Text)
+uaFormatted
+  = lens _uaFormatted (\ s a -> s{_uaFormatted = a})
+
+-- | Extended Address.
+uaExtendedAddress :: Lens' UserAddress (Maybe Text)
+uaExtendedAddress
+  = lens _uaExtendedAddress
+      (\ s a -> s{_uaExtendedAddress = a})
+
+-- | Locality.
+uaLocality :: Lens' UserAddress (Maybe Text)
+uaLocality
+  = lens _uaLocality (\ s a -> s{_uaLocality = a})
+
+-- | If this is user\'s primary address. Only one entry could be marked as
+-- primary.
+uaPrimary :: Lens' UserAddress (Maybe Bool)
+uaPrimary
+  = lens _uaPrimary (\ s a -> s{_uaPrimary = a})
+
+-- | Country code.
+uaCountryCode :: Lens' UserAddress (Maybe Text)
+uaCountryCode
+  = lens _uaCountryCode
+      (\ s a -> s{_uaCountryCode = a})
+
+-- | Region.
+uaRegion :: Lens' UserAddress (Maybe Text)
+uaRegion = lens _uaRegion (\ s a -> s{_uaRegion = a})
+
+-- | Each entry can have a type which indicates standard values of that
+-- entry. For example address could be of home, work etc. In addition to
+-- the standard type, an entry can have a custom type and can take any
+-- value. Such type should have the CUSTOM value as type and also have a
+-- customType value.
+uaType :: Lens' UserAddress (Maybe Text)
+uaType = lens _uaType (\ s a -> s{_uaType = a})
+
+-- | Custom type.
+uaCustomType :: Lens' UserAddress (Maybe Text)
+uaCustomType
+  = lens _uaCustomType (\ s a -> s{_uaCustomType = a})
+
+-- | User supplied address was structured. Structured addresses are NOT
+-- supported at this time. You might be able to write structured addresses,
+-- but any values will eventually be clobbered.
+uaSourceIsStructured :: Lens' UserAddress (Maybe Bool)
+uaSourceIsStructured
+  = lens _uaSourceIsStructured
+      (\ s a -> s{_uaSourceIsStructured = a})
+
+instance FromJSON UserAddress where
+        parseJSON
+          = withObject "UserAddress"
+              (\ o ->
+                 UserAddress' <$>
+                   (o .:? "streetAddress") <*> (o .:? "poBox") <*>
+                     (o .:? "country")
+                     <*> (o .:? "postalCode")
+                     <*> (o .:? "formatted")
+                     <*> (o .:? "extendedAddress")
+                     <*> (o .:? "locality")
+                     <*> (o .:? "primary")
+                     <*> (o .:? "countryCode")
+                     <*> (o .:? "region")
+                     <*> (o .:? "type")
+                     <*> (o .:? "customType")
+                     <*> (o .:? "sourceIsStructured"))
+
+instance ToJSON UserAddress where
+        toJSON UserAddress'{..}
+          = object
+              (catMaybes
+                 [("streetAddress" .=) <$> _uaStreetAddress,
+                  ("poBox" .=) <$> _uaPoBox,
+                  ("country" .=) <$> _uaCountry,
+                  ("postalCode" .=) <$> _uaPostalCode,
+                  ("formatted" .=) <$> _uaFormatted,
+                  ("extendedAddress" .=) <$> _uaExtendedAddress,
+                  ("locality" .=) <$> _uaLocality,
+                  ("primary" .=) <$> _uaPrimary,
+                  ("countryCode" .=) <$> _uaCountryCode,
+                  ("region" .=) <$> _uaRegion, ("type" .=) <$> _uaType,
+                  ("customType" .=) <$> _uaCustomType,
+                  ("sourceIsStructured" .=) <$> _uaSourceIsStructured])
+
+-- | JSON template for postal address of a customer.
+--
+-- /See:/ 'customerPostalAddress' smart constructor.
+data CustomerPostalAddress = CustomerPostalAddress'
+    { _cpaOrganizationName :: !(Maybe Text)
+    , _cpaPostalCode       :: !(Maybe Text)
+    , _cpaAddressLine1     :: !(Maybe Text)
+    , _cpaLocality         :: !(Maybe Text)
+    , _cpaContactName      :: !(Maybe Text)
+    , _cpaAddressLine2     :: !(Maybe Text)
+    , _cpaCountryCode      :: !(Maybe Text)
+    , _cpaRegion           :: !(Maybe Text)
+    , _cpaAddressLine3     :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CustomerPostalAddress' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cpaOrganizationName'
+--
+-- * 'cpaPostalCode'
+--
+-- * 'cpaAddressLine1'
+--
+-- * 'cpaLocality'
+--
+-- * 'cpaContactName'
+--
+-- * 'cpaAddressLine2'
+--
+-- * 'cpaCountryCode'
+--
+-- * 'cpaRegion'
+--
+-- * 'cpaAddressLine3'
+customerPostalAddress
+    :: CustomerPostalAddress
+customerPostalAddress =
+    CustomerPostalAddress'
+    { _cpaOrganizationName = Nothing
+    , _cpaPostalCode = Nothing
+    , _cpaAddressLine1 = Nothing
+    , _cpaLocality = Nothing
+    , _cpaContactName = Nothing
+    , _cpaAddressLine2 = Nothing
+    , _cpaCountryCode = Nothing
+    , _cpaRegion = Nothing
+    , _cpaAddressLine3 = Nothing
+    }
+
+-- | The company or company division name.
+cpaOrganizationName :: Lens' CustomerPostalAddress (Maybe Text)
+cpaOrganizationName
+  = lens _cpaOrganizationName
+      (\ s a -> s{_cpaOrganizationName = a})
+
+-- | The postal code. A postalCode example is a postal zip code such as
+-- 10009. This is in accordance with -
+-- http:\/\/portablecontacts.net\/draft-spec.html#address_element.
+cpaPostalCode :: Lens' CustomerPostalAddress (Maybe Text)
+cpaPostalCode
+  = lens _cpaPostalCode
+      (\ s a -> s{_cpaPostalCode = a})
+
+-- | A customer\'s physical address. The address can be composed of one to
+-- three lines.
+cpaAddressLine1 :: Lens' CustomerPostalAddress (Maybe Text)
+cpaAddressLine1
+  = lens _cpaAddressLine1
+      (\ s a -> s{_cpaAddressLine1 = a})
+
+-- | Name of the locality. An example of a locality value is the city of San
+-- Francisco.
+cpaLocality :: Lens' CustomerPostalAddress (Maybe Text)
+cpaLocality
+  = lens _cpaLocality (\ s a -> s{_cpaLocality = a})
+
+-- | The customer contact\'s name.
+cpaContactName :: Lens' CustomerPostalAddress (Maybe Text)
+cpaContactName
+  = lens _cpaContactName
+      (\ s a -> s{_cpaContactName = a})
+
+-- | Address line 2 of the address.
+cpaAddressLine2 :: Lens' CustomerPostalAddress (Maybe Text)
+cpaAddressLine2
+  = lens _cpaAddressLine2
+      (\ s a -> s{_cpaAddressLine2 = a})
+
+-- | This is a required property. For countryCode information see the ISO
+-- 3166 country code elements.
+cpaCountryCode :: Lens' CustomerPostalAddress (Maybe Text)
+cpaCountryCode
+  = lens _cpaCountryCode
+      (\ s a -> s{_cpaCountryCode = a})
+
+-- | Name of the region. An example of a region value is NY for the state of
+-- New York.
+cpaRegion :: Lens' CustomerPostalAddress (Maybe Text)
+cpaRegion
+  = lens _cpaRegion (\ s a -> s{_cpaRegion = a})
+
+-- | Address line 3 of the address.
+cpaAddressLine3 :: Lens' CustomerPostalAddress (Maybe Text)
+cpaAddressLine3
+  = lens _cpaAddressLine3
+      (\ s a -> s{_cpaAddressLine3 = a})
+
+instance FromJSON CustomerPostalAddress where
+        parseJSON
+          = withObject "CustomerPostalAddress"
+              (\ o ->
+                 CustomerPostalAddress' <$>
+                   (o .:? "organizationName") <*> (o .:? "postalCode")
+                     <*> (o .:? "addressLine1")
+                     <*> (o .:? "locality")
+                     <*> (o .:? "contactName")
+                     <*> (o .:? "addressLine2")
+                     <*> (o .:? "countryCode")
+                     <*> (o .:? "region")
+                     <*> (o .:? "addressLine3"))
+
+instance ToJSON CustomerPostalAddress where
+        toJSON CustomerPostalAddress'{..}
+          = object
+              (catMaybes
+                 [("organizationName" .=) <$> _cpaOrganizationName,
+                  ("postalCode" .=) <$> _cpaPostalCode,
+                  ("addressLine1" .=) <$> _cpaAddressLine1,
+                  ("locality" .=) <$> _cpaLocality,
+                  ("contactName" .=) <$> _cpaContactName,
+                  ("addressLine2" .=) <$> _cpaAddressLine2,
+                  ("countryCode" .=) <$> _cpaCountryCode,
+                  ("region" .=) <$> _cpaRegion,
+                  ("addressLine3" .=) <$> _cpaAddressLine3])
+
+-- | JSON template for roleAssignment resource in Directory API.
+--
+-- /See:/ 'roleAssignment' smart constructor.
+data RoleAssignment = RoleAssignment'
+    { _rolEtag             :: !(Maybe Text)
+    , _rolScopeType        :: !(Maybe Text)
+    , _rolKind             :: !Text
+    , _rolAssignedTo       :: !(Maybe Text)
+    , _rolRoleId           :: !(Maybe (Textual Int64))
+    , _rolRoleAssignmentId :: !(Maybe (Textual Int64))
+    , _rolOrgUnitId        :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RoleAssignment' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rolEtag'
+--
+-- * 'rolScopeType'
+--
+-- * 'rolKind'
+--
+-- * 'rolAssignedTo'
+--
+-- * 'rolRoleId'
+--
+-- * 'rolRoleAssignmentId'
+--
+-- * 'rolOrgUnitId'
+roleAssignment
+    :: RoleAssignment
+roleAssignment =
+    RoleAssignment'
+    { _rolEtag = Nothing
+    , _rolScopeType = Nothing
+    , _rolKind = "admin#directory#roleAssignment"
+    , _rolAssignedTo = Nothing
+    , _rolRoleId = Nothing
+    , _rolRoleAssignmentId = Nothing
+    , _rolOrgUnitId = Nothing
+    }
+
+-- | ETag of the resource.
+rolEtag :: Lens' RoleAssignment (Maybe Text)
+rolEtag = lens _rolEtag (\ s a -> s{_rolEtag = a})
+
+-- | The scope in which this role is assigned. Possible values are: -
+-- CUSTOMER - ORG_UNIT
+rolScopeType :: Lens' RoleAssignment (Maybe Text)
+rolScopeType
+  = lens _rolScopeType (\ s a -> s{_rolScopeType = a})
+
+-- | The type of the API resource. This is always
+-- admin#directory#roleAssignment.
+rolKind :: Lens' RoleAssignment Text
+rolKind = lens _rolKind (\ s a -> s{_rolKind = a})
+
+-- | The unique ID of the user this role is assigned to.
+rolAssignedTo :: Lens' RoleAssignment (Maybe Text)
+rolAssignedTo
+  = lens _rolAssignedTo
+      (\ s a -> s{_rolAssignedTo = a})
+
+-- | The ID of the role that is assigned.
+rolRoleId :: Lens' RoleAssignment (Maybe Int64)
+rolRoleId
+  = lens _rolRoleId (\ s a -> s{_rolRoleId = a}) .
+      mapping _Coerce
+
+-- | ID of this roleAssignment.
+rolRoleAssignmentId :: Lens' RoleAssignment (Maybe Int64)
+rolRoleAssignmentId
+  = lens _rolRoleAssignmentId
+      (\ s a -> s{_rolRoleAssignmentId = a})
+      . mapping _Coerce
+
+-- | If the role is restricted to an organization unit, this contains the ID
+-- for the organization unit the exercise of this role is restricted to.
+rolOrgUnitId :: Lens' RoleAssignment (Maybe Text)
+rolOrgUnitId
+  = lens _rolOrgUnitId (\ s a -> s{_rolOrgUnitId = a})
+
+instance FromJSON RoleAssignment where
+        parseJSON
+          = withObject "RoleAssignment"
+              (\ o ->
+                 RoleAssignment' <$>
+                   (o .:? "etag") <*> (o .:? "scopeType") <*>
+                     (o .:? "kind" .!= "admin#directory#roleAssignment")
+                     <*> (o .:? "assignedTo")
+                     <*> (o .:? "roleId")
+                     <*> (o .:? "roleAssignmentId")
+                     <*> (o .:? "orgUnitId"))
+
+instance ToJSON RoleAssignment where
+        toJSON RoleAssignment'{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _rolEtag,
+                  ("scopeType" .=) <$> _rolScopeType,
+                  Just ("kind" .= _rolKind),
+                  ("assignedTo" .=) <$> _rolAssignedTo,
+                  ("roleId" .=) <$> _rolRoleId,
+                  ("roleAssignmentId" .=) <$> _rolRoleAssignmentId,
+                  ("orgUnitId" .=) <$> _rolOrgUnitId])
+
+-- | JSON template for Group resource in Directory API.
+--
+-- /See:/ 'group'' smart constructor.
+data Group = Group'
+    { _groEmail              :: !(Maybe Text)
+    , _groEtag               :: !(Maybe Text)
+    , _groDirectMembersCount :: !(Maybe (Textual Int64))
+    , _groKind               :: !Text
+    , _groAliases            :: !(Maybe [Text])
+    , _groNonEditableAliases :: !(Maybe [Text])
+    , _groName               :: !(Maybe Text)
+    , _groAdminCreated       :: !(Maybe Bool)
+    , _groId                 :: !(Maybe Text)
+    , _groDescription        :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Group' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'groEmail'
+--
+-- * 'groEtag'
+--
+-- * 'groDirectMembersCount'
+--
+-- * 'groKind'
+--
+-- * 'groAliases'
+--
+-- * 'groNonEditableAliases'
+--
+-- * 'groName'
+--
+-- * 'groAdminCreated'
+--
+-- * 'groId'
+--
+-- * 'groDescription'
+group'
+    :: Group
+group' =
+    Group'
+    { _groEmail = Nothing
+    , _groEtag = Nothing
+    , _groDirectMembersCount = Nothing
+    , _groKind = "admin#directory#group"
+    , _groAliases = Nothing
+    , _groNonEditableAliases = Nothing
+    , _groName = Nothing
+    , _groAdminCreated = Nothing
+    , _groId = Nothing
+    , _groDescription = Nothing
+    }
+
+-- | Email of Group
+groEmail :: Lens' Group (Maybe Text)
+groEmail = lens _groEmail (\ s a -> s{_groEmail = a})
+
+-- | ETag of the resource.
+groEtag :: Lens' Group (Maybe Text)
+groEtag = lens _groEtag (\ s a -> s{_groEtag = a})
+
+-- | Group direct members count
+groDirectMembersCount :: Lens' Group (Maybe Int64)
+groDirectMembersCount
+  = lens _groDirectMembersCount
+      (\ s a -> s{_groDirectMembersCount = a})
+      . mapping _Coerce
+
+-- | Kind of resource this is.
+groKind :: Lens' Group Text
+groKind = lens _groKind (\ s a -> s{_groKind = a})
+
+-- | List of aliases (Read-only)
+groAliases :: Lens' Group [Text]
+groAliases
+  = lens _groAliases (\ s a -> s{_groAliases = a}) .
+      _Default
+      . _Coerce
+
+-- | List of non editable aliases (Read-only)
+groNonEditableAliases :: Lens' Group [Text]
+groNonEditableAliases
+  = lens _groNonEditableAliases
+      (\ s a -> s{_groNonEditableAliases = a})
+      . _Default
+      . _Coerce
+
+-- | Group name
+groName :: Lens' Group (Maybe Text)
+groName = lens _groName (\ s a -> s{_groName = a})
+
+-- | Is the group created by admin (Read-only) *
+groAdminCreated :: Lens' Group (Maybe Bool)
+groAdminCreated
+  = lens _groAdminCreated
+      (\ s a -> s{_groAdminCreated = a})
+
+-- | Unique identifier of Group (Read-only)
+groId :: Lens' Group (Maybe Text)
+groId = lens _groId (\ s a -> s{_groId = a})
+
+-- | Description of the group
+groDescription :: Lens' Group (Maybe Text)
+groDescription
+  = lens _groDescription
+      (\ s a -> s{_groDescription = a})
+
+instance FromJSON Group where
+        parseJSON
+          = withObject "Group"
+              (\ o ->
+                 Group' <$>
+                   (o .:? "email") <*> (o .:? "etag") <*>
+                     (o .:? "directMembersCount")
+                     <*> (o .:? "kind" .!= "admin#directory#group")
+                     <*> (o .:? "aliases" .!= mempty)
+                     <*> (o .:? "nonEditableAliases" .!= mempty)
+                     <*> (o .:? "name")
+                     <*> (o .:? "adminCreated")
+                     <*> (o .:? "id")
+                     <*> (o .:? "description"))
+
+instance ToJSON Group where
+        toJSON Group'{..}
+          = object
+              (catMaybes
+                 [("email" .=) <$> _groEmail,
+                  ("etag" .=) <$> _groEtag,
+                  ("directMembersCount" .=) <$> _groDirectMembersCount,
+                  Just ("kind" .= _groKind),
+                  ("aliases" .=) <$> _groAliases,
+                  ("nonEditableAliases" .=) <$> _groNonEditableAliases,
+                  ("name" .=) <$> _groName,
+                  ("adminCreated" .=) <$> _groAdminCreated,
+                  ("id" .=) <$> _groId,
+                  ("description" .=) <$> _groDescription])
+
+-- | JSON template for Chrome Os Device resource in Directory API.
+--
+-- /See:/ 'chromeOSDevice' smart constructor.
+data ChromeOSDevice = ChromeOSDevice'
+    { _codStatus               :: !(Maybe Text)
+    , _codEtag                 :: !(Maybe Text)
+    , _codCPUStatusReports     :: !(Maybe [ChromeOSDeviceCPUStatusReportsItem])
+    , _codAnnotatedUser        :: !(Maybe Text)
+    , _codSystemRamFreeReports :: !(Maybe [ChromeOSDeviceSystemRamFreeReportsItem])
+    , _codPlatformVersion      :: !(Maybe Text)
+    , _codLastSync             :: !(Maybe DateTime')
+    , _codActiveTimeRanges     :: !(Maybe [ChromeOSDeviceActiveTimeRangesItem])
+    , _codKind                 :: !Text
+    , _codEthernetMACAddress   :: !(Maybe Text)
+    , _codLastEnrollmentTime   :: !(Maybe DateTime')
+    , _codAnnotatedLocation    :: !(Maybe Text)
+    , _codMACAddress           :: !(Maybe Text)
+    , _codOrgUnitPath          :: !(Maybe Text)
+    , _codRecentUsers          :: !(Maybe [ChromeOSDeviceRecentUsersItem])
+    , _codSupportEndDate       :: !(Maybe DateTime')
+    , _codModel                :: !(Maybe Text)
+    , _codWillAutoRenew        :: !(Maybe Bool)
+    , _codMeid                 :: !(Maybe Text)
+    , _codDeviceFiles          :: !(Maybe [ChromeOSDeviceDeviceFilesItem])
+    , _codDeviceId             :: !(Maybe Text)
+    , _codBootMode             :: !(Maybe Text)
+    , _codTpmVersionInfo       :: !(Maybe ChromeOSDeviceTpmVersionInfo)
+    , _codOrderNumber          :: !(Maybe Text)
+    , _codDiskVolumeReports    :: !(Maybe [ChromeOSDeviceDiskVolumeReportsItem])
+    , _codAnnotatedAssetId     :: !(Maybe Text)
+    , _codNotes                :: !(Maybe Text)
+    , _codSerialNumber         :: !(Maybe Text)
+    , _codFirmwareVersion      :: !(Maybe Text)
+    , _codOSVersion            :: !(Maybe Text)
+    , _codSystemRamTotal       :: !(Maybe (Textual Int64))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ChromeOSDevice' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'codStatus'
+--
+-- * 'codEtag'
+--
+-- * 'codCPUStatusReports'
+--
+-- * 'codAnnotatedUser'
+--
+-- * 'codSystemRamFreeReports'
+--
+-- * 'codPlatformVersion'
+--
+-- * 'codLastSync'
+--
+-- * 'codActiveTimeRanges'
+--
+-- * 'codKind'
+--
+-- * 'codEthernetMACAddress'
+--
+-- * 'codLastEnrollmentTime'
+--
+-- * 'codAnnotatedLocation'
+--
+-- * 'codMACAddress'
+--
+-- * 'codOrgUnitPath'
+--
+-- * 'codRecentUsers'
+--
+-- * 'codSupportEndDate'
+--
+-- * 'codModel'
+--
+-- * 'codWillAutoRenew'
+--
+-- * 'codMeid'
+--
+-- * 'codDeviceFiles'
+--
+-- * 'codDeviceId'
+--
+-- * 'codBootMode'
+--
+-- * 'codTpmVersionInfo'
+--
+-- * 'codOrderNumber'
+--
+-- * 'codDiskVolumeReports'
+--
+-- * 'codAnnotatedAssetId'
+--
+-- * 'codNotes'
+--
+-- * 'codSerialNumber'
+--
+-- * 'codFirmwareVersion'
+--
+-- * 'codOSVersion'
+--
+-- * 'codSystemRamTotal'
+chromeOSDevice
+    :: ChromeOSDevice
+chromeOSDevice =
+    ChromeOSDevice'
+    { _codStatus = Nothing
+    , _codEtag = Nothing
+    , _codCPUStatusReports = Nothing
+    , _codAnnotatedUser = Nothing
+    , _codSystemRamFreeReports = Nothing
+    , _codPlatformVersion = Nothing
+    , _codLastSync = Nothing
+    , _codActiveTimeRanges = Nothing
+    , _codKind = "admin#directory#chromeosdevice"
+    , _codEthernetMACAddress = Nothing
+    , _codLastEnrollmentTime = Nothing
+    , _codAnnotatedLocation = Nothing
+    , _codMACAddress = Nothing
+    , _codOrgUnitPath = Nothing
+    , _codRecentUsers = Nothing
+    , _codSupportEndDate = Nothing
+    , _codModel = Nothing
+    , _codWillAutoRenew = Nothing
+    , _codMeid = Nothing
+    , _codDeviceFiles = Nothing
+    , _codDeviceId = Nothing
+    , _codBootMode = Nothing
+    , _codTpmVersionInfo = Nothing
+    , _codOrderNumber = Nothing
+    , _codDiskVolumeReports = Nothing
+    , _codAnnotatedAssetId = Nothing
+    , _codNotes = Nothing
+    , _codSerialNumber = Nothing
+    , _codFirmwareVersion = Nothing
+    , _codOSVersion = Nothing
+    , _codSystemRamTotal = Nothing
+    }
+
+-- | status of the device (Read-only)
+codStatus :: Lens' ChromeOSDevice (Maybe Text)
+codStatus
+  = lens _codStatus (\ s a -> s{_codStatus = a})
+
+-- | ETag of the resource.
+codEtag :: Lens' ChromeOSDevice (Maybe Text)
+codEtag = lens _codEtag (\ s a -> s{_codEtag = a})
+
+-- | Reports of CPU utilization and temperature (Read-only)
+codCPUStatusReports :: Lens' ChromeOSDevice [ChromeOSDeviceCPUStatusReportsItem]
+codCPUStatusReports
+  = lens _codCPUStatusReports
+      (\ s a -> s{_codCPUStatusReports = a})
+      . _Default
+      . _Coerce
+
+-- | User of the device
+codAnnotatedUser :: Lens' ChromeOSDevice (Maybe Text)
+codAnnotatedUser
+  = lens _codAnnotatedUser
+      (\ s a -> s{_codAnnotatedUser = a})
+
+-- | Reports of amounts of available RAM memory (Read-only)
+codSystemRamFreeReports :: Lens' ChromeOSDevice [ChromeOSDeviceSystemRamFreeReportsItem]
+codSystemRamFreeReports
+  = lens _codSystemRamFreeReports
+      (\ s a -> s{_codSystemRamFreeReports = a})
+      . _Default
+      . _Coerce
+
+-- | Chromebook platform version (Read-only)
+codPlatformVersion :: Lens' ChromeOSDevice (Maybe Text)
+codPlatformVersion
+  = lens _codPlatformVersion
+      (\ s a -> s{_codPlatformVersion = a})
+
+-- | Date and time the device was last synchronized with the policy settings
+-- in the G Suite administrator control panel (Read-only)
+codLastSync :: Lens' ChromeOSDevice (Maybe UTCTime)
+codLastSync
+  = lens _codLastSync (\ s a -> s{_codLastSync = a}) .
+      mapping _DateTime
+
+-- | List of active time ranges (Read-only)
+codActiveTimeRanges :: Lens' ChromeOSDevice [ChromeOSDeviceActiveTimeRangesItem]
+codActiveTimeRanges
+  = lens _codActiveTimeRanges
+      (\ s a -> s{_codActiveTimeRanges = a})
+      . _Default
+      . _Coerce
+
+-- | Kind of resource this is.
+codKind :: Lens' ChromeOSDevice Text
+codKind = lens _codKind (\ s a -> s{_codKind = a})
+
+-- | Chromebook Mac Address on ethernet network interface (Read-only)
+codEthernetMACAddress :: Lens' ChromeOSDevice (Maybe Text)
+codEthernetMACAddress
+  = lens _codEthernetMACAddress
+      (\ s a -> s{_codEthernetMACAddress = a})
+
+-- | Date and time the device was last enrolled (Read-only)
+codLastEnrollmentTime :: Lens' ChromeOSDevice (Maybe UTCTime)
+codLastEnrollmentTime
+  = lens _codLastEnrollmentTime
+      (\ s a -> s{_codLastEnrollmentTime = a})
+      . mapping _DateTime
+
+-- | Address or location of the device as noted by the administrator
+codAnnotatedLocation :: Lens' ChromeOSDevice (Maybe Text)
+codAnnotatedLocation
+  = lens _codAnnotatedLocation
+      (\ s a -> s{_codAnnotatedLocation = a})
+
+-- | Chromebook Mac Address on wifi network interface (Read-only)
+codMACAddress :: Lens' ChromeOSDevice (Maybe Text)
+codMACAddress
+  = lens _codMACAddress
+      (\ s a -> s{_codMACAddress = a})
+
+-- | OrgUnit of the device
+codOrgUnitPath :: Lens' ChromeOSDevice (Maybe Text)
+codOrgUnitPath
+  = lens _codOrgUnitPath
+      (\ s a -> s{_codOrgUnitPath = a})
+
+-- | List of recent device users, in descending order by last login time
+-- (Read-only)
+codRecentUsers :: Lens' ChromeOSDevice [ChromeOSDeviceRecentUsersItem]
+codRecentUsers
+  = lens _codRecentUsers
+      (\ s a -> s{_codRecentUsers = a})
+      . _Default
+      . _Coerce
+
+-- | Final date the device will be supported (Read-only)
+codSupportEndDate :: Lens' ChromeOSDevice (Maybe UTCTime)
+codSupportEndDate
+  = lens _codSupportEndDate
+      (\ s a -> s{_codSupportEndDate = a})
+      . mapping _DateTime
+
+-- | Chromebook Model (Read-only)
+codModel :: Lens' ChromeOSDevice (Maybe Text)
+codModel = lens _codModel (\ s a -> s{_codModel = a})
+
+-- | Will Chromebook auto renew after support end date (Read-only)
+codWillAutoRenew :: Lens' ChromeOSDevice (Maybe Bool)
+codWillAutoRenew
+  = lens _codWillAutoRenew
+      (\ s a -> s{_codWillAutoRenew = a})
+
+-- | Mobile Equipment identifier for the 3G mobile card in the Chromebook
+-- (Read-only)
+codMeid :: Lens' ChromeOSDevice (Maybe Text)
+codMeid = lens _codMeid (\ s a -> s{_codMeid = a})
+
+-- | List of device files to download (Read-only)
+codDeviceFiles :: Lens' ChromeOSDevice [ChromeOSDeviceDeviceFilesItem]
+codDeviceFiles
+  = lens _codDeviceFiles
+      (\ s a -> s{_codDeviceFiles = a})
+      . _Default
+      . _Coerce
+
+-- | Unique identifier of Chrome OS Device (Read-only)
+codDeviceId :: Lens' ChromeOSDevice (Maybe Text)
+codDeviceId
+  = lens _codDeviceId (\ s a -> s{_codDeviceId = a})
+
+-- | Chromebook boot mode (Read-only)
+codBootMode :: Lens' ChromeOSDevice (Maybe Text)
+codBootMode
+  = lens _codBootMode (\ s a -> s{_codBootMode = a})
+
+-- | Trusted Platform Module (TPM) (Read-only)
+codTpmVersionInfo :: Lens' ChromeOSDevice (Maybe ChromeOSDeviceTpmVersionInfo)
+codTpmVersionInfo
+  = lens _codTpmVersionInfo
+      (\ s a -> s{_codTpmVersionInfo = a})
+
+-- | Chromebook order number (Read-only)
+codOrderNumber :: Lens' ChromeOSDevice (Maybe Text)
+codOrderNumber
+  = lens _codOrderNumber
+      (\ s a -> s{_codOrderNumber = a})
+
+-- | Reports of disk space and other info about mounted\/connected volumes.
+codDiskVolumeReports :: Lens' ChromeOSDevice [ChromeOSDeviceDiskVolumeReportsItem]
+codDiskVolumeReports
+  = lens _codDiskVolumeReports
+      (\ s a -> s{_codDiskVolumeReports = a})
+      . _Default
+      . _Coerce
+
+-- | AssetId specified during enrollment or through later annotation
+codAnnotatedAssetId :: Lens' ChromeOSDevice (Maybe Text)
+codAnnotatedAssetId
+  = lens _codAnnotatedAssetId
+      (\ s a -> s{_codAnnotatedAssetId = a})
+
+-- | Notes added by the administrator
+codNotes :: Lens' ChromeOSDevice (Maybe Text)
+codNotes = lens _codNotes (\ s a -> s{_codNotes = a})
+
+-- | Chromebook serial number (Read-only)
+codSerialNumber :: Lens' ChromeOSDevice (Maybe Text)
+codSerialNumber
+  = lens _codSerialNumber
+      (\ s a -> s{_codSerialNumber = a})
+
+-- | Chromebook firmware version (Read-only)
+codFirmwareVersion :: Lens' ChromeOSDevice (Maybe Text)
+codFirmwareVersion
+  = lens _codFirmwareVersion
+      (\ s a -> s{_codFirmwareVersion = a})
+
+-- | Chromebook Os Version (Read-only)
+codOSVersion :: Lens' ChromeOSDevice (Maybe Text)
+codOSVersion
+  = lens _codOSVersion (\ s a -> s{_codOSVersion = a})
+
+-- | Total RAM on the device [in bytes] (Read-only)
+codSystemRamTotal :: Lens' ChromeOSDevice (Maybe Int64)
+codSystemRamTotal
+  = lens _codSystemRamTotal
+      (\ s a -> s{_codSystemRamTotal = a})
+      . mapping _Coerce
+
+instance FromJSON ChromeOSDevice where
+        parseJSON
+          = withObject "ChromeOSDevice"
+              (\ o ->
+                 ChromeOSDevice' <$>
+                   (o .:? "status") <*> (o .:? "etag") <*>
+                     (o .:? "cpuStatusReports" .!= mempty)
+                     <*> (o .:? "annotatedUser")
+                     <*> (o .:? "systemRamFreeReports" .!= mempty)
+                     <*> (o .:? "platformVersion")
+                     <*> (o .:? "lastSync")
+                     <*> (o .:? "activeTimeRanges" .!= mempty)
+                     <*>
+                     (o .:? "kind" .!= "admin#directory#chromeosdevice")
+                     <*> (o .:? "ethernetMacAddress")
+                     <*> (o .:? "lastEnrollmentTime")
+                     <*> (o .:? "annotatedLocation")
+                     <*> (o .:? "macAddress")
+                     <*> (o .:? "orgUnitPath")
+                     <*> (o .:? "recentUsers" .!= mempty)
+                     <*> (o .:? "supportEndDate")
+                     <*> (o .:? "model")
+                     <*> (o .:? "willAutoRenew")
+                     <*> (o .:? "meid")
+                     <*> (o .:? "deviceFiles" .!= mempty)
+                     <*> (o .:? "deviceId")
+                     <*> (o .:? "bootMode")
+                     <*> (o .:? "tpmVersionInfo")
+                     <*> (o .:? "orderNumber")
+                     <*> (o .:? "diskVolumeReports" .!= mempty)
+                     <*> (o .:? "annotatedAssetId")
+                     <*> (o .:? "notes")
+                     <*> (o .:? "serialNumber")
+                     <*> (o .:? "firmwareVersion")
+                     <*> (o .:? "osVersion")
+                     <*> (o .:? "systemRamTotal"))
+
+instance ToJSON ChromeOSDevice where
+        toJSON ChromeOSDevice'{..}
+          = object
+              (catMaybes
+                 [("status" .=) <$> _codStatus,
+                  ("etag" .=) <$> _codEtag,
+                  ("cpuStatusReports" .=) <$> _codCPUStatusReports,
+                  ("annotatedUser" .=) <$> _codAnnotatedUser,
+                  ("systemRamFreeReports" .=) <$>
+                    _codSystemRamFreeReports,
+                  ("platformVersion" .=) <$> _codPlatformVersion,
+                  ("lastSync" .=) <$> _codLastSync,
+                  ("activeTimeRanges" .=) <$> _codActiveTimeRanges,
+                  Just ("kind" .= _codKind),
+                  ("ethernetMacAddress" .=) <$> _codEthernetMACAddress,
+                  ("lastEnrollmentTime" .=) <$> _codLastEnrollmentTime,
+                  ("annotatedLocation" .=) <$> _codAnnotatedLocation,
+                  ("macAddress" .=) <$> _codMACAddress,
+                  ("orgUnitPath" .=) <$> _codOrgUnitPath,
+                  ("recentUsers" .=) <$> _codRecentUsers,
+                  ("supportEndDate" .=) <$> _codSupportEndDate,
+                  ("model" .=) <$> _codModel,
+                  ("willAutoRenew" .=) <$> _codWillAutoRenew,
+                  ("meid" .=) <$> _codMeid,
+                  ("deviceFiles" .=) <$> _codDeviceFiles,
+                  ("deviceId" .=) <$> _codDeviceId,
+                  ("bootMode" .=) <$> _codBootMode,
+                  ("tpmVersionInfo" .=) <$> _codTpmVersionInfo,
+                  ("orderNumber" .=) <$> _codOrderNumber,
+                  ("diskVolumeReports" .=) <$> _codDiskVolumeReports,
+                  ("annotatedAssetId" .=) <$> _codAnnotatedAssetId,
+                  ("notes" .=) <$> _codNotes,
+                  ("serialNumber" .=) <$> _codSerialNumber,
+                  ("firmwareVersion" .=) <$> _codFirmwareVersion,
+                  ("osVersion" .=) <$> _codOSVersion,
+                  ("systemRamTotal" .=) <$> _codSystemRamTotal])
+
+-- | JSON response template for List Users operation in Apps Directory API.
+--
+-- /See:/ 'users' smart constructor.
+data Users = Users'
+    { _uEtag          :: !(Maybe Text)
+    , _uNextPageToken :: !(Maybe Text)
+    , _uUsers         :: !(Maybe [User])
+    , _uKind          :: !Text
+    , _uTriggerEvent  :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Users' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uEtag'
+--
+-- * 'uNextPageToken'
+--
+-- * 'uUsers'
+--
+-- * 'uKind'
+--
+-- * 'uTriggerEvent'
+users
+    :: Users
+users =
+    Users'
+    { _uEtag = Nothing
+    , _uNextPageToken = Nothing
+    , _uUsers = Nothing
+    , _uKind = "admin#directory#users"
+    , _uTriggerEvent = Nothing
+    }
+
+-- | ETag of the resource.
+uEtag :: Lens' Users (Maybe Text)
+uEtag = lens _uEtag (\ s a -> s{_uEtag = a})
+
+-- | Token used to access next page of this result.
+uNextPageToken :: Lens' Users (Maybe Text)
+uNextPageToken
+  = lens _uNextPageToken
+      (\ s a -> s{_uNextPageToken = a})
+
+-- | List of user objects.
+uUsers :: Lens' Users [User]
+uUsers
+  = lens _uUsers (\ s a -> s{_uUsers = a}) . _Default .
+      _Coerce
+
+-- | Kind of resource this is.
+uKind :: Lens' Users Text
+uKind = lens _uKind (\ s a -> s{_uKind = a})
+
+-- | Event that triggered this response (only used in case of Push Response)
+uTriggerEvent :: Lens' Users (Maybe Text)
+uTriggerEvent
+  = lens _uTriggerEvent
+      (\ s a -> s{_uTriggerEvent = a})
+
+instance FromJSON Users where
+        parseJSON
+          = withObject "Users"
+              (\ o ->
+                 Users' <$>
+                   (o .:? "etag") <*> (o .:? "nextPageToken") <*>
+                     (o .:? "users" .!= mempty)
+                     <*> (o .:? "kind" .!= "admin#directory#users")
+                     <*> (o .:? "trigger_event"))
+
+instance ToJSON Users where
+        toJSON Users'{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _uEtag,
+                  ("nextPageToken" .=) <$> _uNextPageToken,
+                  ("users" .=) <$> _uUsers, Just ("kind" .= _uKind),
+                  ("trigger_event" .=) <$> _uTriggerEvent])
+
+-- | The template that returns individual ASP (Access Code) data.
+--
+-- /See:/ 'asp' smart constructor.
+data Asp = Asp'
+    { _aCreationTime :: !(Maybe (Textual Int64))
+    , _aEtag         :: !(Maybe Text)
+    , _aCodeId       :: !(Maybe (Textual Int32))
+    , _aKind         :: !Text
+    , _aName         :: !(Maybe Text)
+    , _aLastTimeUsed :: !(Maybe (Textual Int64))
+    , _aUserKey      :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Asp' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aCreationTime'
+--
+-- * 'aEtag'
+--
+-- * 'aCodeId'
+--
+-- * 'aKind'
+--
+-- * 'aName'
+--
+-- * 'aLastTimeUsed'
+--
+-- * 'aUserKey'
+asp
+    :: Asp
+asp =
+    Asp'
+    { _aCreationTime = Nothing
+    , _aEtag = Nothing
+    , _aCodeId = Nothing
+    , _aKind = "admin#directory#asp"
+    , _aName = Nothing
+    , _aLastTimeUsed = Nothing
+    , _aUserKey = Nothing
+    }
+
+-- | The time when the ASP was created. Expressed in Unix time format.
+aCreationTime :: Lens' Asp (Maybe Int64)
+aCreationTime
+  = lens _aCreationTime
+      (\ s a -> s{_aCreationTime = a})
+      . mapping _Coerce
+
+-- | ETag of the ASP.
+aEtag :: Lens' Asp (Maybe Text)
+aEtag = lens _aEtag (\ s a -> s{_aEtag = a})
+
+-- | The unique ID of the ASP.
+aCodeId :: Lens' Asp (Maybe Int32)
+aCodeId
+  = lens _aCodeId (\ s a -> s{_aCodeId = a}) .
+      mapping _Coerce
+
+-- | The type of the API resource. This is always admin#directory#asp.
+aKind :: Lens' Asp Text
+aKind = lens _aKind (\ s a -> s{_aKind = a})
+
+-- | The name of the application that the user, represented by their userId,
+-- entered when the ASP was created.
+aName :: Lens' Asp (Maybe Text)
+aName = lens _aName (\ s a -> s{_aName = a})
+
+-- | The time when the ASP was last used. Expressed in Unix time format.
+aLastTimeUsed :: Lens' Asp (Maybe Int64)
+aLastTimeUsed
+  = lens _aLastTimeUsed
+      (\ s a -> s{_aLastTimeUsed = a})
+      . mapping _Coerce
+
+-- | The unique ID of the user who issued the ASP.
+aUserKey :: Lens' Asp (Maybe Text)
+aUserKey = lens _aUserKey (\ s a -> s{_aUserKey = a})
+
+instance FromJSON Asp where
+        parseJSON
+          = withObject "Asp"
+              (\ o ->
+                 Asp' <$>
+                   (o .:? "creationTime") <*> (o .:? "etag") <*>
+                     (o .:? "codeId")
+                     <*> (o .:? "kind" .!= "admin#directory#asp")
+                     <*> (o .:? "name")
+                     <*> (o .:? "lastTimeUsed")
+                     <*> (o .:? "userKey"))
+
+instance ToJSON Asp where
+        toJSON Asp'{..}
+          = object
+              (catMaybes
+                 [("creationTime" .=) <$> _aCreationTime,
+                  ("etag" .=) <$> _aEtag, ("codeId" .=) <$> _aCodeId,
+                  Just ("kind" .= _aKind), ("name" .=) <$> _aName,
+                  ("lastTimeUsed" .=) <$> _aLastTimeUsed,
+                  ("userKey" .=) <$> _aUserKey])
+
+-- | JSON response template for List Schema operation in Directory API.
+--
+-- /See:/ 'schemas' smart constructor.
+data Schemas = Schemas'
+    { _sEtag    :: !(Maybe Text)
+    , _sSchemas :: !(Maybe [Schema])
+    , _sKind    :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Schemas' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sEtag'
+--
+-- * 'sSchemas'
+--
+-- * 'sKind'
+schemas
+    :: Schemas
+schemas =
+    Schemas'
+    { _sEtag = Nothing
+    , _sSchemas = Nothing
+    , _sKind = "admin#directory#schemas"
+    }
+
+-- | ETag of the resource.
+sEtag :: Lens' Schemas (Maybe Text)
+sEtag = lens _sEtag (\ s a -> s{_sEtag = a})
+
+-- | List of UserSchema objects.
+sSchemas :: Lens' Schemas [Schema]
+sSchemas
+  = lens _sSchemas (\ s a -> s{_sSchemas = a}) .
+      _Default
+      . _Coerce
+
+-- | Kind of resource this is.
+sKind :: Lens' Schemas Text
+sKind = lens _sKind (\ s a -> s{_sKind = a})
+
+instance FromJSON Schemas where
+        parseJSON
+          = withObject "Schemas"
+              (\ o ->
+                 Schemas' <$>
+                   (o .:? "etag") <*> (o .:? "schemas" .!= mempty) <*>
+                     (o .:? "kind" .!= "admin#directory#schemas"))
+
+instance ToJSON Schemas where
+        toJSON Schemas'{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _sEtag,
+                  ("schemas" .=) <$> _sSchemas,
+                  Just ("kind" .= _sKind)])
+
+--
+-- /See:/ 'chromeOSDeviceDeviceFilesItem' smart constructor.
+data ChromeOSDeviceDeviceFilesItem = ChromeOSDeviceDeviceFilesItem'
+    { _coddfiName        :: !(Maybe Text)
+    , _coddfiDownloadURL :: !(Maybe Text)
+    , _coddfiType        :: !(Maybe Text)
+    , _coddfiCreateTime  :: !(Maybe DateTime')
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ChromeOSDeviceDeviceFilesItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'coddfiName'
+--
+-- * 'coddfiDownloadURL'
+--
+-- * 'coddfiType'
+--
+-- * 'coddfiCreateTime'
+chromeOSDeviceDeviceFilesItem
+    :: ChromeOSDeviceDeviceFilesItem
+chromeOSDeviceDeviceFilesItem =
+    ChromeOSDeviceDeviceFilesItem'
+    { _coddfiName = Nothing
+    , _coddfiDownloadURL = Nothing
+    , _coddfiType = Nothing
+    , _coddfiCreateTime = Nothing
+    }
+
+-- | File name
+coddfiName :: Lens' ChromeOSDeviceDeviceFilesItem (Maybe Text)
+coddfiName
+  = lens _coddfiName (\ s a -> s{_coddfiName = a})
+
+-- | File download URL
+coddfiDownloadURL :: Lens' ChromeOSDeviceDeviceFilesItem (Maybe Text)
+coddfiDownloadURL
+  = lens _coddfiDownloadURL
+      (\ s a -> s{_coddfiDownloadURL = a})
+
+-- | File type
+coddfiType :: Lens' ChromeOSDeviceDeviceFilesItem (Maybe Text)
+coddfiType
+  = lens _coddfiType (\ s a -> s{_coddfiType = a})
+
+-- | Date and time the file was created
+coddfiCreateTime :: Lens' ChromeOSDeviceDeviceFilesItem (Maybe UTCTime)
+coddfiCreateTime
+  = lens _coddfiCreateTime
+      (\ s a -> s{_coddfiCreateTime = a})
+      . mapping _DateTime
+
+instance FromJSON ChromeOSDeviceDeviceFilesItem where
+        parseJSON
+          = withObject "ChromeOSDeviceDeviceFilesItem"
+              (\ o ->
+                 ChromeOSDeviceDeviceFilesItem' <$>
+                   (o .:? "name") <*> (o .:? "downloadUrl") <*>
+                     (o .:? "type")
+                     <*> (o .:? "createTime"))
+
+instance ToJSON ChromeOSDeviceDeviceFilesItem where
+        toJSON ChromeOSDeviceDeviceFilesItem'{..}
+          = object
+              (catMaybes
+                 [("name" .=) <$> _coddfiName,
+                  ("downloadUrl" .=) <$> _coddfiDownloadURL,
+                  ("type" .=) <$> _coddfiType,
+                  ("createTime" .=) <$> _coddfiCreateTime])
+
+-- | JSON template for Building List Response object in Directory API.
+--
+-- /See:/ 'buildings' smart constructor.
+data Buildings = Buildings'
+    { _bEtag          :: !(Maybe Text)
+    , _bNextPageToken :: !(Maybe Text)
+    , _bBuildings     :: !(Maybe [Building])
+    , _bKind          :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Buildings' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bEtag'
+--
+-- * 'bNextPageToken'
+--
+-- * 'bBuildings'
+--
+-- * 'bKind'
+buildings
+    :: Buildings
+buildings =
+    Buildings'
+    { _bEtag = Nothing
+    , _bNextPageToken = Nothing
+    , _bBuildings = Nothing
+    , _bKind = "admin#directory#resources#buildings#buildingsList"
+    }
+
+-- | ETag of the resource.
+bEtag :: Lens' Buildings (Maybe Text)
+bEtag = lens _bEtag (\ s a -> s{_bEtag = a})
+
+-- | The continuation token, used to page through large result sets. Provide
+-- this value in a subsequent request to return the next page of results.
+bNextPageToken :: Lens' Buildings (Maybe Text)
+bNextPageToken
+  = lens _bNextPageToken
+      (\ s a -> s{_bNextPageToken = a})
+
+-- | The Buildings in this page of results.
+bBuildings :: Lens' Buildings [Building]
+bBuildings
+  = lens _bBuildings (\ s a -> s{_bBuildings = a}) .
+      _Default
+      . _Coerce
+
+-- | Kind of resource this is.
+bKind :: Lens' Buildings Text
+bKind = lens _bKind (\ s a -> s{_bKind = a})
+
+instance FromJSON Buildings where
+        parseJSON
+          = withObject "Buildings"
+              (\ o ->
+                 Buildings' <$>
+                   (o .:? "etag") <*> (o .:? "nextPageToken") <*>
+                     (o .:? "buildings" .!= mempty)
+                     <*>
+                     (o .:? "kind" .!=
+                        "admin#directory#resources#buildings#buildingsList"))
+
+instance ToJSON Buildings where
+        toJSON Buildings'{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _bEtag,
+                  ("nextPageToken" .=) <$> _bNextPageToken,
+                  ("buildings" .=) <$> _bBuildings,
+                  Just ("kind" .= _bKind)])
+
+-- | Template for a notification resource.
+--
+-- /See:/ 'notification' smart constructor.
+data Notification = Notification'
+    { _nSubject        :: !(Maybe Text)
+    , _nEtag           :: !(Maybe Text)
+    , _nKind           :: !Text
+    , _nBody           :: !(Maybe Text)
+    , _nFromAddress    :: !(Maybe Text)
+    , _nIsUnread       :: !(Maybe Bool)
+    , _nNotificationId :: !(Maybe Text)
+    , _nSendTime       :: !(Maybe DateTime')
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Notification' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'nSubject'
+--
+-- * 'nEtag'
+--
+-- * 'nKind'
+--
+-- * 'nBody'
+--
+-- * 'nFromAddress'
+--
+-- * 'nIsUnread'
+--
+-- * 'nNotificationId'
+--
+-- * 'nSendTime'
+notification
+    :: Notification
+notification =
+    Notification'
+    { _nSubject = Nothing
+    , _nEtag = Nothing
+    , _nKind = "admin#directory#notification"
+    , _nBody = Nothing
+    , _nFromAddress = Nothing
+    , _nIsUnread = Nothing
+    , _nNotificationId = Nothing
+    , _nSendTime = Nothing
+    }
+
+-- | Subject of the notification (Read-only)
+nSubject :: Lens' Notification (Maybe Text)
+nSubject = lens _nSubject (\ s a -> s{_nSubject = a})
+
+-- | ETag of the resource.
+nEtag :: Lens' Notification (Maybe Text)
+nEtag = lens _nEtag (\ s a -> s{_nEtag = a})
+
+-- | The type of the resource.
+nKind :: Lens' Notification Text
+nKind = lens _nKind (\ s a -> s{_nKind = a})
+
+-- | Body of the notification (Read-only)
+nBody :: Lens' Notification (Maybe Text)
+nBody = lens _nBody (\ s a -> s{_nBody = a})
+
+-- | Address from which the notification is received (Read-only)
+nFromAddress :: Lens' Notification (Maybe Text)
+nFromAddress
+  = lens _nFromAddress (\ s a -> s{_nFromAddress = a})
+
+-- | Boolean indicating whether the notification is unread or not.
+nIsUnread :: Lens' Notification (Maybe Bool)
+nIsUnread
+  = lens _nIsUnread (\ s a -> s{_nIsUnread = a})
+
+nNotificationId :: Lens' Notification (Maybe Text)
+nNotificationId
+  = lens _nNotificationId
+      (\ s a -> s{_nNotificationId = a})
+
+-- | Time at which notification was sent (Read-only)
+nSendTime :: Lens' Notification (Maybe UTCTime)
+nSendTime
+  = lens _nSendTime (\ s a -> s{_nSendTime = a}) .
+      mapping _DateTime
+
+instance FromJSON Notification where
+        parseJSON
+          = withObject "Notification"
+              (\ o ->
+                 Notification' <$>
+                   (o .:? "subject") <*> (o .:? "etag") <*>
+                     (o .:? "kind" .!= "admin#directory#notification")
+                     <*> (o .:? "body")
+                     <*> (o .:? "fromAddress")
+                     <*> (o .:? "isUnread")
+                     <*> (o .:? "notificationId")
+                     <*> (o .:? "sendTime"))
+
+instance ToJSON Notification where
+        toJSON Notification'{..}
+          = object
+              (catMaybes
+                 [("subject" .=) <$> _nSubject,
+                  ("etag" .=) <$> _nEtag, Just ("kind" .= _nKind),
+                  ("body" .=) <$> _nBody,
+                  ("fromAddress" .=) <$> _nFromAddress,
+                  ("isUnread" .=) <$> _nIsUnread,
+                  ("notificationId" .=) <$> _nNotificationId,
+                  ("sendTime" .=) <$> _nSendTime])
+
+-- | JSON template for instant messenger of an user.
+--
+-- /See:/ 'userIm' smart constructor.
+data UserIm = UserIm'
+    { _uiIm             :: !(Maybe Text)
+    , _uiProtocol       :: !(Maybe Text)
+    , _uiPrimary        :: !(Maybe Bool)
+    , _uiCustomProtocol :: !(Maybe Text)
+    , _uiType           :: !(Maybe Text)
+    , _uiCustomType     :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UserIm' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uiIm'
+--
+-- * 'uiProtocol'
+--
+-- * 'uiPrimary'
+--
+-- * 'uiCustomProtocol'
+--
+-- * 'uiType'
+--
+-- * 'uiCustomType'
+userIm
+    :: UserIm
+userIm =
+    UserIm'
+    { _uiIm = Nothing
+    , _uiProtocol = Nothing
+    , _uiPrimary = Nothing
+    , _uiCustomProtocol = Nothing
+    , _uiType = Nothing
+    , _uiCustomType = Nothing
+    }
+
+-- | Instant messenger id.
+uiIm :: Lens' UserIm (Maybe Text)
+uiIm = lens _uiIm (\ s a -> s{_uiIm = a})
+
+-- | Protocol used in the instant messenger. It should be one of the values
+-- from ImProtocolTypes map. Similar to type, it can take a CUSTOM value
+-- and specify the custom name in customProtocol field.
+uiProtocol :: Lens' UserIm (Maybe Text)
+uiProtocol
+  = lens _uiProtocol (\ s a -> s{_uiProtocol = a})
+
+-- | If this is user\'s primary im. Only one entry could be marked as
+-- primary.
+uiPrimary :: Lens' UserIm (Maybe Bool)
+uiPrimary
+  = lens _uiPrimary (\ s a -> s{_uiPrimary = a})
+
+-- | Custom protocol.
+uiCustomProtocol :: Lens' UserIm (Maybe Text)
+uiCustomProtocol
+  = lens _uiCustomProtocol
+      (\ s a -> s{_uiCustomProtocol = a})
+
+-- | Each entry can have a type which indicates standard types of that entry.
+-- For example instant messengers could be of home, work etc. In addition
+-- to the standard type, an entry can have a custom type and can take any
+-- value. Such types should have the CUSTOM value as type and also have a
+-- customType value.
+uiType :: Lens' UserIm (Maybe Text)
+uiType = lens _uiType (\ s a -> s{_uiType = a})
+
+-- | Custom type.
+uiCustomType :: Lens' UserIm (Maybe Text)
+uiCustomType
+  = lens _uiCustomType (\ s a -> s{_uiCustomType = a})
+
+instance FromJSON UserIm where
+        parseJSON
+          = withObject "UserIm"
+              (\ o ->
+                 UserIm' <$>
+                   (o .:? "im") <*> (o .:? "protocol") <*>
+                     (o .:? "primary")
+                     <*> (o .:? "customProtocol")
+                     <*> (o .:? "type")
+                     <*> (o .:? "customType"))
+
+instance ToJSON UserIm where
+        toJSON UserIm'{..}
+          = object
+              (catMaybes
+                 [("im" .=) <$> _uiIm,
+                  ("protocol" .=) <$> _uiProtocol,
+                  ("primary" .=) <$> _uiPrimary,
+                  ("customProtocol" .=) <$> _uiCustomProtocol,
+                  ("type" .=) <$> _uiType,
+                  ("customType" .=) <$> _uiCustomType])
+
+-- | JSON response template for List tokens operation in Directory API.
+--
+-- /See:/ 'tokens' smart constructor.
+data Tokens = Tokens'
+    { _tEtag  :: !(Maybe Text)
+    , _tKind  :: !Text
+    , _tItems :: !(Maybe [Token])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Tokens' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tEtag'
+--
+-- * 'tKind'
+--
+-- * 'tItems'
+tokens
+    :: Tokens
+tokens =
+    Tokens'
+    { _tEtag = Nothing
+    , _tKind = "admin#directory#tokenList"
+    , _tItems = Nothing
+    }
+
+-- | ETag of the resource.
+tEtag :: Lens' Tokens (Maybe Text)
+tEtag = lens _tEtag (\ s a -> s{_tEtag = a})
+
+-- | The type of the API resource. This is always admin#directory#tokenList.
+tKind :: Lens' Tokens Text
+tKind = lens _tKind (\ s a -> s{_tKind = a})
+
+-- | A list of Token resources.
+tItems :: Lens' Tokens [Token]
+tItems
+  = lens _tItems (\ s a -> s{_tItems = a}) . _Default .
+      _Coerce
+
+instance FromJSON Tokens where
+        parseJSON
+          = withObject "Tokens"
+              (\ o ->
+                 Tokens' <$>
+                   (o .:? "etag") <*>
+                     (o .:? "kind" .!= "admin#directory#tokenList")
+                     <*> (o .:? "items" .!= mempty))
+
+instance ToJSON Tokens where
+        toJSON Tokens'{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _tEtag, Just ("kind" .= _tKind),
+                  ("items" .=) <$> _tItems])
+
+-- | Custom fields of the user.
+--
+-- /See:/ 'userCustomSchemas' smart constructor.
+newtype UserCustomSchemas = UserCustomSchemas'
+    { _ucsAddtional :: HashMap Text UserCustomProperties
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UserCustomSchemas' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ucsAddtional'
+userCustomSchemas
+    :: HashMap Text UserCustomProperties -- ^ 'ucsAddtional'
+    -> UserCustomSchemas
+userCustomSchemas pUcsAddtional_ =
+    UserCustomSchemas'
+    { _ucsAddtional = _Coerce # pUcsAddtional_
+    }
+
+ucsAddtional :: Lens' UserCustomSchemas (HashMap Text UserCustomProperties)
+ucsAddtional
+  = lens _ucsAddtional (\ s a -> s{_ucsAddtional = a})
+      . _Coerce
+
+instance FromJSON UserCustomSchemas where
+        parseJSON
+          = withObject "UserCustomSchemas"
+              (\ o -> UserCustomSchemas' <$> (parseJSONObject o))
+
+instance ToJSON UserCustomSchemas where
+        toJSON = toJSON . _ucsAddtional
+
+-- | JSON template for a keyword entry.
+--
+-- /See:/ 'userKeyword' smart constructor.
+data UserKeyword = UserKeyword'
+    { _ukValue      :: !(Maybe Text)
+    , _ukType       :: !(Maybe Text)
+    , _ukCustomType :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UserKeyword' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ukValue'
+--
+-- * 'ukType'
+--
+-- * 'ukCustomType'
+userKeyword
+    :: UserKeyword
+userKeyword =
+    UserKeyword'
+    { _ukValue = Nothing
+    , _ukType = Nothing
+    , _ukCustomType = Nothing
+    }
+
+-- | Keyword.
+ukValue :: Lens' UserKeyword (Maybe Text)
+ukValue = lens _ukValue (\ s a -> s{_ukValue = a})
+
+-- | Each entry can have a type which indicates standard type of that entry.
+-- For example, keyword could be of type occupation or outlook. In addition
+-- to the standard type, an entry can have a custom type and can give it
+-- any name. Such types should have the CUSTOM value as type and also have
+-- a customType value.
+ukType :: Lens' UserKeyword (Maybe Text)
+ukType = lens _ukType (\ s a -> s{_ukType = a})
+
+-- | Custom Type.
+ukCustomType :: Lens' UserKeyword (Maybe Text)
+ukCustomType
+  = lens _ukCustomType (\ s a -> s{_ukCustomType = a})
+
+instance FromJSON UserKeyword where
+        parseJSON
+          = withObject "UserKeyword"
+              (\ o ->
+                 UserKeyword' <$>
+                   (o .:? "value") <*> (o .:? "type") <*>
+                     (o .:? "customType"))
+
+instance ToJSON UserKeyword where
+        toJSON UserKeyword'{..}
+          = object
+              (catMaybes
+                 [("value" .=) <$> _ukValue, ("type" .=) <$> _ukType,
+                  ("customType" .=) <$> _ukCustomType])
+
+-- | JSON response template to list domain aliases in Directory API.
+--
+-- /See:/ 'domainAliases' smart constructor.
+data DomainAliases = DomainAliases'
+    { _daEtag          :: !(Maybe Text)
+    , _daKind          :: !Text
+    , _daDomainAliases :: !(Maybe [DomainAlias])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DomainAliases' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'daEtag'
+--
+-- * 'daKind'
+--
+-- * 'daDomainAliases'
+domainAliases
+    :: DomainAliases
+domainAliases =
+    DomainAliases'
+    { _daEtag = Nothing
+    , _daKind = "admin#directory#domainAliases"
+    , _daDomainAliases = Nothing
+    }
+
+-- | ETag of the resource.
+daEtag :: Lens' DomainAliases (Maybe Text)
+daEtag = lens _daEtag (\ s a -> s{_daEtag = a})
+
+-- | Kind of resource this is.
+daKind :: Lens' DomainAliases Text
+daKind = lens _daKind (\ s a -> s{_daKind = a})
+
+-- | List of domain alias objects.
+daDomainAliases :: Lens' DomainAliases [DomainAlias]
+daDomainAliases
+  = lens _daDomainAliases
+      (\ s a -> s{_daDomainAliases = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON DomainAliases where
+        parseJSON
+          = withObject "DomainAliases"
+              (\ o ->
+                 DomainAliases' <$>
+                   (o .:? "etag") <*>
+                     (o .:? "kind" .!= "admin#directory#domainAliases")
+                     <*> (o .:? "domainAliases" .!= mempty))
+
+instance ToJSON DomainAliases where
+        toJSON DomainAliases'{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _daEtag, Just ("kind" .= _daKind),
+                  ("domainAliases" .=) <$> _daDomainAliases])
+
+-- | JSON response template to list aliases in Directory API.
+--
+-- /See:/ 'aliases' smart constructor.
+data Aliases = Aliases'
+    { _aliEtag    :: !(Maybe Text)
+    , _aliKind    :: !Text
+    , _aliAliases :: !(Maybe [JSONValue])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Aliases' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aliEtag'
+--
+-- * 'aliKind'
+--
+-- * 'aliAliases'
+aliases
+    :: Aliases
+aliases =
+    Aliases'
+    { _aliEtag = Nothing
+    , _aliKind = "admin#directory#aliases"
+    , _aliAliases = Nothing
+    }
+
+-- | ETag of the resource.
+aliEtag :: Lens' Aliases (Maybe Text)
+aliEtag = lens _aliEtag (\ s a -> s{_aliEtag = a})
+
+-- | Kind of resource this is.
+aliKind :: Lens' Aliases Text
+aliKind = lens _aliKind (\ s a -> s{_aliKind = a})
+
+-- | List of alias objects.
+aliAliases :: Lens' Aliases [JSONValue]
+aliAliases
+  = lens _aliAliases (\ s a -> s{_aliAliases = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON Aliases where
+        parseJSON
+          = withObject "Aliases"
+              (\ o ->
+                 Aliases' <$>
+                   (o .:? "etag") <*>
+                     (o .:? "kind" .!= "admin#directory#aliases")
+                     <*> (o .:? "aliases" .!= mempty))
+
+instance ToJSON Aliases where
+        toJSON Aliases'{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _aliEtag, Just ("kind" .= _aliKind),
+                  ("aliases" .=) <$> _aliAliases])
+
+-- | JSON template for Calendar Resource object in Directory API.
+--
+-- /See:/ 'calendarResource' smart constructor.
+data CalendarResource = CalendarResource'
+    { _crEtags                  :: !(Maybe Text)
+    , _crResourceId             :: !(Maybe Text)
+    , _crResourceType           :: !(Maybe Text)
+    , _crResourceName           :: !(Maybe Text)
+    , _crKind                   :: !Text
+    , _crBuildingId             :: !(Maybe Text)
+    , _crFeatureInstances       :: !(Maybe JSONValue)
+    , _crResourceEmail          :: !(Maybe Text)
+    , _crCapacity               :: !(Maybe (Textual Int32))
+    , _crResourceDescription    :: !(Maybe Text)
+    , _crFloorName              :: !(Maybe Text)
+    , _crGeneratedResourceName  :: !(Maybe Text)
+    , _crResourceCategory       :: !(Maybe Text)
+    , _crFloorSection           :: !(Maybe Text)
+    , _crUserVisibleDescription :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CalendarResource' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'crEtags'
+--
+-- * 'crResourceId'
+--
+-- * 'crResourceType'
+--
+-- * 'crResourceName'
+--
+-- * 'crKind'
+--
+-- * 'crBuildingId'
+--
+-- * 'crFeatureInstances'
+--
+-- * 'crResourceEmail'
+--
+-- * 'crCapacity'
+--
+-- * 'crResourceDescription'
+--
+-- * 'crFloorName'
+--
+-- * 'crGeneratedResourceName'
+--
+-- * 'crResourceCategory'
+--
+-- * 'crFloorSection'
+--
+-- * 'crUserVisibleDescription'
+calendarResource
+    :: CalendarResource
+calendarResource =
+    CalendarResource'
+    { _crEtags = Nothing
+    , _crResourceId = Nothing
+    , _crResourceType = Nothing
+    , _crResourceName = Nothing
+    , _crKind = "admin#directory#resources#calendars#CalendarResource"
+    , _crBuildingId = Nothing
+    , _crFeatureInstances = Nothing
+    , _crResourceEmail = Nothing
+    , _crCapacity = Nothing
+    , _crResourceDescription = Nothing
+    , _crFloorName = Nothing
+    , _crGeneratedResourceName = Nothing
+    , _crResourceCategory = Nothing
+    , _crFloorSection = Nothing
+    , _crUserVisibleDescription = Nothing
+    }
+
+-- | ETag of the resource.
+crEtags :: Lens' CalendarResource (Maybe Text)
+crEtags = lens _crEtags (\ s a -> s{_crEtags = a})
+
+-- | The unique ID for the calendar resource.
+crResourceId :: Lens' CalendarResource (Maybe Text)
+crResourceId
+  = lens _crResourceId (\ s a -> s{_crResourceId = a})
+
+-- | The type of the calendar resource, intended for non-room resources.
+crResourceType :: Lens' CalendarResource (Maybe Text)
+crResourceType
+  = lens _crResourceType
+      (\ s a -> s{_crResourceType = a})
+
+-- | The name of the calendar resource. For example, \"Training Room 1A\".
+crResourceName :: Lens' CalendarResource (Maybe Text)
+crResourceName
+  = lens _crResourceName
+      (\ s a -> s{_crResourceName = a})
+
+-- | The type of the resource. For calendar resources, the value is
+-- admin#directory#resources#calendars#CalendarResource.
+crKind :: Lens' CalendarResource Text
+crKind = lens _crKind (\ s a -> s{_crKind = a})
+
+-- | Unique ID for the building a resource is located in.
+crBuildingId :: Lens' CalendarResource (Maybe Text)
+crBuildingId
+  = lens _crBuildingId (\ s a -> s{_crBuildingId = a})
+
+crFeatureInstances :: Lens' CalendarResource (Maybe JSONValue)
+crFeatureInstances
+  = lens _crFeatureInstances
+      (\ s a -> s{_crFeatureInstances = a})
+
+-- | The read-only email for the calendar resource. Generated as part of
+-- creating a new calendar resource.
+crResourceEmail :: Lens' CalendarResource (Maybe Text)
+crResourceEmail
+  = lens _crResourceEmail
+      (\ s a -> s{_crResourceEmail = a})
+
+-- | Capacity of a resource, number of seats in a room.
+crCapacity :: Lens' CalendarResource (Maybe Int32)
+crCapacity
+  = lens _crCapacity (\ s a -> s{_crCapacity = a}) .
+      mapping _Coerce
+
+-- | Description of the resource, visible only to admins.
+crResourceDescription :: Lens' CalendarResource (Maybe Text)
+crResourceDescription
+  = lens _crResourceDescription
+      (\ s a -> s{_crResourceDescription = a})
+
+-- | Name of the floor a resource is located on.
+crFloorName :: Lens' CalendarResource (Maybe Text)
+crFloorName
+  = lens _crFloorName (\ s a -> s{_crFloorName = a})
+
+-- | The read-only auto-generated name of the calendar resource which
+-- includes metadata about the resource such as building name, floor,
+-- capacity, etc. For example, \"NYC-2-Training Room 1A (16)\".
+crGeneratedResourceName :: Lens' CalendarResource (Maybe Text)
+crGeneratedResourceName
+  = lens _crGeneratedResourceName
+      (\ s a -> s{_crGeneratedResourceName = a})
+
+-- | The category of the calendar resource. Either CONFERENCE_ROOM or OTHER.
+-- Legacy data is set to CATEGORY_UNKNOWN.
+crResourceCategory :: Lens' CalendarResource (Maybe Text)
+crResourceCategory
+  = lens _crResourceCategory
+      (\ s a -> s{_crResourceCategory = a})
+
+-- | Name of the section within a floor a resource is located in.
+crFloorSection :: Lens' CalendarResource (Maybe Text)
+crFloorSection
+  = lens _crFloorSection
+      (\ s a -> s{_crFloorSection = a})
+
+-- | Description of the resource, visible to users and admins.
+crUserVisibleDescription :: Lens' CalendarResource (Maybe Text)
+crUserVisibleDescription
+  = lens _crUserVisibleDescription
+      (\ s a -> s{_crUserVisibleDescription = a})
+
+instance FromJSON CalendarResource where
+        parseJSON
+          = withObject "CalendarResource"
+              (\ o ->
+                 CalendarResource' <$>
+                   (o .:? "etags") <*> (o .:? "resourceId") <*>
+                     (o .:? "resourceType")
+                     <*> (o .:? "resourceName")
+                     <*>
+                     (o .:? "kind" .!=
+                        "admin#directory#resources#calendars#CalendarResource")
+                     <*> (o .:? "buildingId")
+                     <*> (o .:? "featureInstances")
+                     <*> (o .:? "resourceEmail")
+                     <*> (o .:? "capacity")
+                     <*> (o .:? "resourceDescription")
+                     <*> (o .:? "floorName")
+                     <*> (o .:? "generatedResourceName")
+                     <*> (o .:? "resourceCategory")
+                     <*> (o .:? "floorSection")
+                     <*> (o .:? "userVisibleDescription"))
+
+instance ToJSON CalendarResource where
+        toJSON CalendarResource'{..}
+          = object
+              (catMaybes
+                 [("etags" .=) <$> _crEtags,
+                  ("resourceId" .=) <$> _crResourceId,
+                  ("resourceType" .=) <$> _crResourceType,
+                  ("resourceName" .=) <$> _crResourceName,
+                  Just ("kind" .= _crKind),
+                  ("buildingId" .=) <$> _crBuildingId,
+                  ("featureInstances" .=) <$> _crFeatureInstances,
+                  ("resourceEmail" .=) <$> _crResourceEmail,
+                  ("capacity" .=) <$> _crCapacity,
+                  ("resourceDescription" .=) <$>
+                    _crResourceDescription,
+                  ("floorName" .=) <$> _crFloorName,
+                  ("generatedResourceName" .=) <$>
+                    _crGeneratedResourceName,
+                  ("resourceCategory" .=) <$> _crResourceCategory,
+                  ("floorSection" .=) <$> _crFloorSection,
+                  ("userVisibleDescription" .=) <$>
+                    _crUserVisibleDescription])
+
+-- | JSON request template to undelete a user in Directory API.
+--
+-- /See:/ 'userUndelete' smart constructor.
+newtype UserUndelete = UserUndelete'
+    { _uuOrgUnitPath :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UserUndelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uuOrgUnitPath'
+userUndelete
+    :: UserUndelete
+userUndelete =
+    UserUndelete'
+    { _uuOrgUnitPath = Nothing
+    }
+
+-- | OrgUnit of User
+uuOrgUnitPath :: Lens' UserUndelete (Maybe Text)
+uuOrgUnitPath
+  = lens _uuOrgUnitPath
+      (\ s a -> s{_uuOrgUnitPath = a})
+
+instance FromJSON UserUndelete where
+        parseJSON
+          = withObject "UserUndelete"
+              (\ o -> UserUndelete' <$> (o .:? "orgUnitPath"))
+
+instance ToJSON UserUndelete where
+        toJSON UserUndelete'{..}
+          = object
+              (catMaybes [("orgUnitPath" .=) <$> _uuOrgUnitPath])
+
+-- | JSON response template for List Members operation in Directory API.
+--
+-- /See:/ 'members' smart constructor.
+data Members = Members'
+    { _mEtag          :: !(Maybe Text)
+    , _mNextPageToken :: !(Maybe Text)
+    , _mKind          :: !Text
+    , _mMembers       :: !(Maybe [Member])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Members' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mEtag'
+--
+-- * 'mNextPageToken'
+--
+-- * 'mKind'
+--
+-- * 'mMembers'
+members
+    :: Members
+members =
+    Members'
+    { _mEtag = Nothing
+    , _mNextPageToken = Nothing
+    , _mKind = "admin#directory#members"
+    , _mMembers = Nothing
+    }
+
+-- | ETag of the resource.
+mEtag :: Lens' Members (Maybe Text)
+mEtag = lens _mEtag (\ s a -> s{_mEtag = a})
+
+-- | Token used to access next page of this result.
+mNextPageToken :: Lens' Members (Maybe Text)
+mNextPageToken
+  = lens _mNextPageToken
+      (\ s a -> s{_mNextPageToken = a})
+
+-- | Kind of resource this is.
+mKind :: Lens' Members Text
+mKind = lens _mKind (\ s a -> s{_mKind = a})
+
+-- | List of member objects.
+mMembers :: Lens' Members [Member]
+mMembers
+  = lens _mMembers (\ s a -> s{_mMembers = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON Members where
+        parseJSON
+          = withObject "Members"
+              (\ o ->
+                 Members' <$>
+                   (o .:? "etag") <*> (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "admin#directory#members")
+                     <*> (o .:? "members" .!= mempty))
+
+instance ToJSON Members where
+        toJSON Members'{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _mEtag,
+                  ("nextPageToken" .=) <$> _mNextPageToken,
+                  Just ("kind" .= _mKind),
+                  ("members" .=) <$> _mMembers])
+
+-- | An notification channel used to watch for resource changes.
+--
+-- /See:/ 'channel' smart constructor.
+data Channel = Channel'
+    { _cResourceURI :: !(Maybe Text)
+    , _cResourceId  :: !(Maybe Text)
+    , _cKind        :: !Text
+    , _cExpiration  :: !(Maybe (Textual Int64))
+    , _cToken       :: !(Maybe Text)
+    , _cAddress     :: !(Maybe Text)
+    , _cPayload     :: !(Maybe Bool)
+    , _cParams      :: !(Maybe ChannelParams)
+    , _cId          :: !(Maybe Text)
+    , _cType        :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Channel' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cResourceURI'
+--
+-- * 'cResourceId'
+--
+-- * 'cKind'
+--
+-- * 'cExpiration'
+--
+-- * 'cToken'
+--
+-- * 'cAddress'
+--
+-- * 'cPayload'
+--
+-- * 'cParams'
+--
+-- * 'cId'
+--
+-- * 'cType'
+channel
+    :: Channel
+channel =
+    Channel'
+    { _cResourceURI = Nothing
+    , _cResourceId = Nothing
+    , _cKind = "api#channel"
+    , _cExpiration = Nothing
+    , _cToken = Nothing
+    , _cAddress = Nothing
+    , _cPayload = Nothing
+    , _cParams = Nothing
+    , _cId = Nothing
+    , _cType = Nothing
+    }
+
+-- | A version-specific identifier for the watched resource.
+cResourceURI :: Lens' Channel (Maybe Text)
+cResourceURI
+  = lens _cResourceURI (\ s a -> s{_cResourceURI = a})
+
+-- | An opaque ID that identifies the resource being watched on this channel.
+-- Stable across different API versions.
+cResourceId :: Lens' Channel (Maybe Text)
+cResourceId
+  = lens _cResourceId (\ s a -> s{_cResourceId = a})
+
+-- | Identifies this as a notification channel used to watch for changes to a
+-- resource. Value: the fixed string \"api#channel\".
+cKind :: Lens' Channel Text
+cKind = lens _cKind (\ s a -> s{_cKind = a})
+
+-- | Date and time of notification channel expiration, expressed as a Unix
+-- timestamp, in milliseconds. Optional.
+cExpiration :: Lens' Channel (Maybe Int64)
+cExpiration
+  = lens _cExpiration (\ s a -> s{_cExpiration = a}) .
+      mapping _Coerce
+
+-- | An arbitrary string delivered to the target address with each
+-- notification delivered over this channel. Optional.
+cToken :: Lens' Channel (Maybe Text)
+cToken = lens _cToken (\ s a -> s{_cToken = a})
+
+-- | The address where notifications are delivered for this channel.
+cAddress :: Lens' Channel (Maybe Text)
+cAddress = lens _cAddress (\ s a -> s{_cAddress = a})
+
+-- | A Boolean value to indicate whether payload is wanted. Optional.
+cPayload :: Lens' Channel (Maybe Bool)
+cPayload = lens _cPayload (\ s a -> s{_cPayload = a})
+
+-- | Additional parameters controlling delivery channel behavior. Optional.
+cParams :: Lens' Channel (Maybe ChannelParams)
+cParams = lens _cParams (\ s a -> s{_cParams = a})
+
+-- | A UUID or similar unique string that identifies this channel.
+cId :: Lens' Channel (Maybe Text)
+cId = lens _cId (\ s a -> s{_cId = a})
+
+-- | The type of delivery mechanism used for this channel.
+cType :: Lens' Channel (Maybe Text)
+cType = lens _cType (\ s a -> s{_cType = a})
+
+instance FromJSON Channel where
+        parseJSON
+          = withObject "Channel"
+              (\ o ->
+                 Channel' <$>
+                   (o .:? "resourceUri") <*> (o .:? "resourceId") <*>
+                     (o .:? "kind" .!= "api#channel")
+                     <*> (o .:? "expiration")
+                     <*> (o .:? "token")
+                     <*> (o .:? "address")
+                     <*> (o .:? "payload")
+                     <*> (o .:? "params")
+                     <*> (o .:? "id")
+                     <*> (o .:? "type"))
+
+instance ToJSON Channel where
+        toJSON Channel'{..}
+          = object
+              (catMaybes
+                 [("resourceUri" .=) <$> _cResourceURI,
+                  ("resourceId" .=) <$> _cResourceId,
+                  Just ("kind" .= _cKind),
+                  ("expiration" .=) <$> _cExpiration,
+                  ("token" .=) <$> _cToken,
+                  ("address" .=) <$> _cAddress,
+                  ("payload" .=) <$> _cPayload,
+                  ("params" .=) <$> _cParams, ("id" .=) <$> _cId,
+                  ("type" .=) <$> _cType])
+
+-- | JSON response template for List Mobile Devices operation in Directory
+-- API.
+--
+-- /See:/ 'mobileDevices' smart constructor.
+data MobileDevices = MobileDevices'
+    { _mdEtag          :: !(Maybe Text)
+    , _mdNextPageToken :: !(Maybe Text)
+    , _mdKind          :: !Text
+    , _mdMobileDevices :: !(Maybe [MobileDevice])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MobileDevices' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mdEtag'
+--
+-- * 'mdNextPageToken'
+--
+-- * 'mdKind'
+--
+-- * 'mdMobileDevices'
+mobileDevices
+    :: MobileDevices
+mobileDevices =
+    MobileDevices'
+    { _mdEtag = Nothing
+    , _mdNextPageToken = Nothing
+    , _mdKind = "admin#directory#mobiledevices"
+    , _mdMobileDevices = Nothing
+    }
+
+-- | ETag of the resource.
+mdEtag :: Lens' MobileDevices (Maybe Text)
+mdEtag = lens _mdEtag (\ s a -> s{_mdEtag = a})
+
+-- | Token used to access next page of this result.
+mdNextPageToken :: Lens' MobileDevices (Maybe Text)
+mdNextPageToken
+  = lens _mdNextPageToken
+      (\ s a -> s{_mdNextPageToken = a})
+
+-- | Kind of resource this is.
+mdKind :: Lens' MobileDevices Text
+mdKind = lens _mdKind (\ s a -> s{_mdKind = a})
+
+-- | List of Mobile Device objects.
+mdMobileDevices :: Lens' MobileDevices [MobileDevice]
+mdMobileDevices
+  = lens _mdMobileDevices
+      (\ s a -> s{_mdMobileDevices = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON MobileDevices where
+        parseJSON
+          = withObject "MobileDevices"
+              (\ o ->
+                 MobileDevices' <$>
+                   (o .:? "etag") <*> (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "admin#directory#mobiledevices")
+                     <*> (o .:? "mobiledevices" .!= mempty))
+
+instance ToJSON MobileDevices where
+        toJSON MobileDevices'{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _mdEtag,
+                  ("nextPageToken" .=) <$> _mdNextPageToken,
+                  Just ("kind" .= _mdKind),
+                  ("mobiledevices" .=) <$> _mdMobileDevices])
+
+-- | JSON template for token resource in Directory API.
+--
+-- /See:/ 'token' smart constructor.
+data Token = Token'
+    { _tokClientId    :: !(Maybe Text)
+    , _tokEtag        :: !(Maybe Text)
+    , _tokDisplayText :: !(Maybe Text)
+    , _tokKind        :: !Text
+    , _tokScopes      :: !(Maybe [Text])
+    , _tokNATiveApp   :: !(Maybe Bool)
+    , _tokAnonymous   :: !(Maybe Bool)
+    , _tokUserKey     :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Token' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tokClientId'
+--
+-- * 'tokEtag'
+--
+-- * 'tokDisplayText'
+--
+-- * 'tokKind'
+--
+-- * 'tokScopes'
+--
+-- * 'tokNATiveApp'
+--
+-- * 'tokAnonymous'
+--
+-- * 'tokUserKey'
+token
+    :: Token
+token =
+    Token'
+    { _tokClientId = Nothing
+    , _tokEtag = Nothing
+    , _tokDisplayText = Nothing
+    , _tokKind = "admin#directory#token"
+    , _tokScopes = Nothing
+    , _tokNATiveApp = Nothing
+    , _tokAnonymous = Nothing
+    , _tokUserKey = Nothing
+    }
+
+-- | The Client ID of the application the token is issued to.
+tokClientId :: Lens' Token (Maybe Text)
+tokClientId
+  = lens _tokClientId (\ s a -> s{_tokClientId = a})
+
+-- | ETag of the resource.
+tokEtag :: Lens' Token (Maybe Text)
+tokEtag = lens _tokEtag (\ s a -> s{_tokEtag = a})
+
+-- | The displayable name of the application the token is issued to.
+tokDisplayText :: Lens' Token (Maybe Text)
+tokDisplayText
+  = lens _tokDisplayText
+      (\ s a -> s{_tokDisplayText = a})
+
+-- | The type of the API resource. This is always admin#directory#token.
+tokKind :: Lens' Token Text
+tokKind = lens _tokKind (\ s a -> s{_tokKind = a})
+
+-- | A list of authorization scopes the application is granted.
+tokScopes :: Lens' Token [Text]
+tokScopes
+  = lens _tokScopes (\ s a -> s{_tokScopes = a}) .
+      _Default
+      . _Coerce
+
+-- | Whether the token is issued to an installed application. The value is
+-- true if the application is installed to a desktop or mobile device.
+tokNATiveApp :: Lens' Token (Maybe Bool)
+tokNATiveApp
+  = lens _tokNATiveApp (\ s a -> s{_tokNATiveApp = a})
+
+-- | Whether the application is registered with Google. The value is true if
+-- the application has an anonymous Client ID.
+tokAnonymous :: Lens' Token (Maybe Bool)
+tokAnonymous
+  = lens _tokAnonymous (\ s a -> s{_tokAnonymous = a})
+
+-- | The unique ID of the user that issued the token.
+tokUserKey :: Lens' Token (Maybe Text)
+tokUserKey
+  = lens _tokUserKey (\ s a -> s{_tokUserKey = a})
+
+instance FromJSON Token where
+        parseJSON
+          = withObject "Token"
+              (\ o ->
+                 Token' <$>
+                   (o .:? "clientId") <*> (o .:? "etag") <*>
+                     (o .:? "displayText")
+                     <*> (o .:? "kind" .!= "admin#directory#token")
+                     <*> (o .:? "scopes" .!= mempty)
+                     <*> (o .:? "nativeApp")
+                     <*> (o .:? "anonymous")
+                     <*> (o .:? "userKey"))
+
+instance ToJSON Token where
+        toJSON Token'{..}
+          = object
+              (catMaybes
+                 [("clientId" .=) <$> _tokClientId,
+                  ("etag" .=) <$> _tokEtag,
+                  ("displayText" .=) <$> _tokDisplayText,
+                  Just ("kind" .= _tokKind),
+                  ("scopes" .=) <$> _tokScopes,
+                  ("nativeApp" .=) <$> _tokNATiveApp,
+                  ("anonymous" .=) <$> _tokAnonymous,
+                  ("userKey" .=) <$> _tokUserKey])
+
+-- | JSON template for name of a user in Directory API.
+--
+-- /See:/ 'userName' smart constructor.
+data UserName = UserName'
+    { _unGivenName  :: !(Maybe Text)
+    , _unFullName   :: !(Maybe Text)
+    , _unFamilyName :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UserName' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'unGivenName'
+--
+-- * 'unFullName'
+--
+-- * 'unFamilyName'
+userName
+    :: UserName
+userName =
+    UserName'
+    { _unGivenName = Nothing
+    , _unFullName = Nothing
+    , _unFamilyName = Nothing
+    }
+
+-- | First Name
+unGivenName :: Lens' UserName (Maybe Text)
+unGivenName
+  = lens _unGivenName (\ s a -> s{_unGivenName = a})
+
+-- | Full Name
+unFullName :: Lens' UserName (Maybe Text)
+unFullName
+  = lens _unFullName (\ s a -> s{_unFullName = a})
+
+-- | Last Name
+unFamilyName :: Lens' UserName (Maybe Text)
+unFamilyName
+  = lens _unFamilyName (\ s a -> s{_unFamilyName = a})
+
+instance FromJSON UserName where
+        parseJSON
+          = withObject "UserName"
+              (\ o ->
+                 UserName' <$>
+                   (o .:? "givenName") <*> (o .:? "fullName") <*>
+                     (o .:? "familyName"))
+
+instance ToJSON UserName where
+        toJSON UserName'{..}
+          = object
+              (catMaybes
+                 [("givenName" .=) <$> _unGivenName,
+                  ("fullName" .=) <$> _unFullName,
+                  ("familyName" .=) <$> _unFamilyName])
+
+-- | JSON template for Building object in Directory API.
+--
+-- /See:/ 'building' smart constructor.
+data Building = Building'
+    { _buiEtags        :: !(Maybe Text)
+    , _buiKind         :: !Text
+    , _buiBuildingId   :: !(Maybe Text)
+    , _buiCoordinates  :: !(Maybe BuildingCoordinates)
+    , _buiBuildingName :: !(Maybe Text)
+    , _buiFloorNames   :: !(Maybe [Text])
+    , _buiDescription  :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Building' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'buiEtags'
+--
+-- * 'buiKind'
+--
+-- * 'buiBuildingId'
+--
+-- * 'buiCoordinates'
+--
+-- * 'buiBuildingName'
+--
+-- * 'buiFloorNames'
+--
+-- * 'buiDescription'
+building
+    :: Building
+building =
+    Building'
+    { _buiEtags = Nothing
+    , _buiKind = "admin#directory#resources#buildings#Building"
+    , _buiBuildingId = Nothing
+    , _buiCoordinates = Nothing
+    , _buiBuildingName = Nothing
+    , _buiFloorNames = Nothing
+    , _buiDescription = Nothing
+    }
+
+-- | ETag of the resource.
+buiEtags :: Lens' Building (Maybe Text)
+buiEtags = lens _buiEtags (\ s a -> s{_buiEtags = a})
+
+-- | Kind of resource this is.
+buiKind :: Lens' Building Text
+buiKind = lens _buiKind (\ s a -> s{_buiKind = a})
+
+-- | Unique identifier for the building. The maximum length is 100
+-- characters.
+buiBuildingId :: Lens' Building (Maybe Text)
+buiBuildingId
+  = lens _buiBuildingId
+      (\ s a -> s{_buiBuildingId = a})
+
+-- | The geographic coordinates of the center of the building, expressed as
+-- latitude and longitude in decimal degrees.
+buiCoordinates :: Lens' Building (Maybe BuildingCoordinates)
+buiCoordinates
+  = lens _buiCoordinates
+      (\ s a -> s{_buiCoordinates = a})
+
+-- | The building name as seen by users in Calendar. Must be unique for the
+-- customer. For example, \"NYC-CHEL\". The maximum length is 100
+-- characters.
+buiBuildingName :: Lens' Building (Maybe Text)
+buiBuildingName
+  = lens _buiBuildingName
+      (\ s a -> s{_buiBuildingName = a})
+
+-- | The display names for all floors in this building. The floors are
+-- expected to be sorted in ascending order, from lowest floor to highest
+-- floor. For example, [\"B2\", \"B1\", \"L\", \"1\", \"2\", \"2M\", \"3\",
+-- \"PH\"] Must contain at least one entry.
+buiFloorNames :: Lens' Building [Text]
+buiFloorNames
+  = lens _buiFloorNames
+      (\ s a -> s{_buiFloorNames = a})
+      . _Default
+      . _Coerce
+
+-- | A brief description of the building. For example, \"Chelsea Market\".
+buiDescription :: Lens' Building (Maybe Text)
+buiDescription
+  = lens _buiDescription
+      (\ s a -> s{_buiDescription = a})
+
+instance FromJSON Building where
+        parseJSON
+          = withObject "Building"
+              (\ o ->
+                 Building' <$>
+                   (o .:? "etags") <*>
+                     (o .:? "kind" .!=
+                        "admin#directory#resources#buildings#Building")
+                     <*> (o .:? "buildingId")
+                     <*> (o .:? "coordinates")
+                     <*> (o .:? "buildingName")
+                     <*> (o .:? "floorNames" .!= mempty)
+                     <*> (o .:? "description"))
+
+instance ToJSON Building where
+        toJSON Building'{..}
+          = object
+              (catMaybes
+                 [("etags" .=) <$> _buiEtags,
+                  Just ("kind" .= _buiKind),
+                  ("buildingId" .=) <$> _buiBuildingId,
+                  ("coordinates" .=) <$> _buiCoordinates,
+                  ("buildingName" .=) <$> _buiBuildingName,
+                  ("floorNames" .=) <$> _buiFloorNames,
+                  ("description" .=) <$> _buiDescription])
+
+--
+-- /See:/ 'chromeOSDeviceRecentUsersItem' smart constructor.
+data ChromeOSDeviceRecentUsersItem = ChromeOSDeviceRecentUsersItem'
+    { _codruiEmail :: !(Maybe Text)
+    , _codruiType  :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ChromeOSDeviceRecentUsersItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'codruiEmail'
+--
+-- * 'codruiType'
+chromeOSDeviceRecentUsersItem
+    :: ChromeOSDeviceRecentUsersItem
+chromeOSDeviceRecentUsersItem =
+    ChromeOSDeviceRecentUsersItem'
+    { _codruiEmail = Nothing
+    , _codruiType = Nothing
+    }
+
+-- | Email address of the user. Present only if the user type is managed
+codruiEmail :: Lens' ChromeOSDeviceRecentUsersItem (Maybe Text)
+codruiEmail
+  = lens _codruiEmail (\ s a -> s{_codruiEmail = a})
+
+-- | The type of the user
+codruiType :: Lens' ChromeOSDeviceRecentUsersItem (Maybe Text)
+codruiType
+  = lens _codruiType (\ s a -> s{_codruiType = a})
+
+instance FromJSON ChromeOSDeviceRecentUsersItem where
+        parseJSON
+          = withObject "ChromeOSDeviceRecentUsersItem"
+              (\ o ->
+                 ChromeOSDeviceRecentUsersItem' <$>
+                   (o .:? "email") <*> (o .:? "type"))
+
+instance ToJSON ChromeOSDeviceRecentUsersItem where
+        toJSON ChromeOSDeviceRecentUsersItem'{..}
+          = object
+              (catMaybes
+                 [("email" .=) <$> _codruiEmail,
+                  ("type" .=) <$> _codruiType])
+
+-- | JSON template for Domain Alias object in Directory API.
+--
+-- /See:/ 'domainAlias' smart constructor.
+data DomainAlias = DomainAlias'
+    { _dCreationTime     :: !(Maybe (Textual Int64))
+    , _dEtag             :: !(Maybe Text)
+    , _dKind             :: !Text
+    , _dVerified         :: !(Maybe Bool)
+    , _dDomainAliasName  :: !(Maybe Text)
+    , _dParentDomainName :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DomainAlias' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dCreationTime'
+--
+-- * 'dEtag'
+--
+-- * 'dKind'
+--
+-- * 'dVerified'
+--
+-- * 'dDomainAliasName'
+--
+-- * 'dParentDomainName'
+domainAlias
+    :: DomainAlias
+domainAlias =
+    DomainAlias'
+    { _dCreationTime = Nothing
+    , _dEtag = Nothing
+    , _dKind = "admin#directory#domainAlias"
+    , _dVerified = Nothing
+    , _dDomainAliasName = Nothing
+    , _dParentDomainName = Nothing
+    }
+
+-- | The creation time of the domain alias. (Read-only).
+dCreationTime :: Lens' DomainAlias (Maybe Int64)
+dCreationTime
+  = lens _dCreationTime
+      (\ s a -> s{_dCreationTime = a})
+      . mapping _Coerce
+
+-- | ETag of the resource.
+dEtag :: Lens' DomainAlias (Maybe Text)
+dEtag = lens _dEtag (\ s a -> s{_dEtag = a})
+
+-- | Kind of resource this is.
+dKind :: Lens' DomainAlias Text
+dKind = lens _dKind (\ s a -> s{_dKind = a})
+
+-- | Indicates the verification state of a domain alias. (Read-only)
+dVerified :: Lens' DomainAlias (Maybe Bool)
+dVerified
+  = lens _dVerified (\ s a -> s{_dVerified = a})
+
+-- | The domain alias name.
+dDomainAliasName :: Lens' DomainAlias (Maybe Text)
+dDomainAliasName
+  = lens _dDomainAliasName
+      (\ s a -> s{_dDomainAliasName = a})
+
+-- | The parent domain name that the domain alias is associated with. This
+-- can either be a primary or secondary domain name within a customer.
+dParentDomainName :: Lens' DomainAlias (Maybe Text)
+dParentDomainName
+  = lens _dParentDomainName
+      (\ s a -> s{_dParentDomainName = a})
+
+instance FromJSON DomainAlias where
+        parseJSON
+          = withObject "DomainAlias"
+              (\ o ->
+                 DomainAlias' <$>
+                   (o .:? "creationTime") <*> (o .:? "etag") <*>
+                     (o .:? "kind" .!= "admin#directory#domainAlias")
+                     <*> (o .:? "verified")
+                     <*> (o .:? "domainAliasName")
+                     <*> (o .:? "parentDomainName"))
+
+instance ToJSON DomainAlias where
+        toJSON DomainAlias'{..}
+          = object
+              (catMaybes
+                 [("creationTime" .=) <$> _dCreationTime,
+                  ("etag" .=) <$> _dEtag, Just ("kind" .= _dKind),
+                  ("verified" .=) <$> _dVerified,
+                  ("domainAliasName" .=) <$> _dDomainAliasName,
+                  ("parentDomainName" .=) <$> _dParentDomainName])
+
+--
+-- /See:/ 'userGender' smart constructor.
+data UserGender = UserGender'
+    { _ugAddressMeAs  :: !(Maybe Text)
+    , _ugCustomGender :: !(Maybe Text)
+    , _ugType         :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UserGender' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ugAddressMeAs'
+--
+-- * 'ugCustomGender'
+--
+-- * 'ugType'
+userGender
+    :: UserGender
+userGender =
+    UserGender'
+    { _ugAddressMeAs = Nothing
+    , _ugCustomGender = Nothing
+    , _ugType = Nothing
+    }
+
+-- | AddressMeAs. A human-readable string containing the proper way to refer
+-- to the profile owner by humans, for example \"he\/him\/his\" or
+-- \"they\/them\/their\".
+ugAddressMeAs :: Lens' UserGender (Maybe Text)
+ugAddressMeAs
+  = lens _ugAddressMeAs
+      (\ s a -> s{_ugAddressMeAs = a})
+
+-- | Custom gender.
+ugCustomGender :: Lens' UserGender (Maybe Text)
+ugCustomGender
+  = lens _ugCustomGender
+      (\ s a -> s{_ugCustomGender = a})
+
+-- | Gender.
+ugType :: Lens' UserGender (Maybe Text)
+ugType = lens _ugType (\ s a -> s{_ugType = a})
+
+instance FromJSON UserGender where
+        parseJSON
+          = withObject "UserGender"
+              (\ o ->
+                 UserGender' <$>
+                   (o .:? "addressMeAs") <*> (o .:? "customGender") <*>
+                     (o .:? "type"))
+
+instance ToJSON UserGender where
+        toJSON UserGender'{..}
+          = object
+              (catMaybes
+                 [("addressMeAs" .=) <$> _ugAddressMeAs,
+                  ("customGender" .=) <$> _ugCustomGender,
+                  ("type" .=) <$> _ugType])
+
+-- | JSON template for Alias object in Directory API.
+--
+-- /See:/ 'alias' smart constructor.
+data Alias = Alias'
+    { _aaEtag         :: !(Maybe Text)
+    , _aaKind         :: !Text
+    , _aaAlias        :: !(Maybe Text)
+    , _aaId           :: !(Maybe Text)
+    , _aaPrimaryEmail :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Alias' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aaEtag'
+--
+-- * 'aaKind'
+--
+-- * 'aaAlias'
+--
+-- * 'aaId'
+--
+-- * 'aaPrimaryEmail'
+alias
+    :: Alias
+alias =
+    Alias'
+    { _aaEtag = Nothing
+    , _aaKind = "admin#directory#alias"
+    , _aaAlias = Nothing
+    , _aaId = Nothing
+    , _aaPrimaryEmail = Nothing
+    }
+
+-- | ETag of the resource.
+aaEtag :: Lens' Alias (Maybe Text)
+aaEtag = lens _aaEtag (\ s a -> s{_aaEtag = a})
+
+-- | Kind of resource this is.
+aaKind :: Lens' Alias Text
+aaKind = lens _aaKind (\ s a -> s{_aaKind = a})
+
+-- | A alias email
+aaAlias :: Lens' Alias (Maybe Text)
+aaAlias = lens _aaAlias (\ s a -> s{_aaAlias = a})
+
+-- | Unique id of the group (Read-only) Unique id of the user (Read-only)
+aaId :: Lens' Alias (Maybe Text)
+aaId = lens _aaId (\ s a -> s{_aaId = a})
+
+-- | Group\'s primary email (Read-only) User\'s primary email (Read-only)
+aaPrimaryEmail :: Lens' Alias (Maybe Text)
+aaPrimaryEmail
+  = lens _aaPrimaryEmail
+      (\ s a -> s{_aaPrimaryEmail = a})
+
+instance FromJSON Alias where
+        parseJSON
+          = withObject "Alias"
+              (\ o ->
+                 Alias' <$>
+                   (o .:? "etag") <*>
+                     (o .:? "kind" .!= "admin#directory#alias")
+                     <*> (o .:? "alias")
+                     <*> (o .:? "id")
+                     <*> (o .:? "primaryEmail"))
+
+instance ToJSON Alias where
+        toJSON Alias'{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _aaEtag, Just ("kind" .= _aaKind),
+                  ("alias" .=) <$> _aaAlias, ("id" .=) <$> _aaId,
+                  ("primaryEmail" .=) <$> _aaPrimaryEmail])
+
+-- | JSON template for Schema resource in Directory API.
+--
+-- /See:/ 'schema' smart constructor.
+data Schema = Schema'
+    { _schEtag        :: !(Maybe Text)
+    , _schKind        :: !Text
+    , _schSchemaName  :: !(Maybe Text)
+    , _schSchemaId    :: !(Maybe Text)
+    , _schDisplayName :: !(Maybe Text)
+    , _schFields      :: !(Maybe [SchemaFieldSpec])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Schema' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'schEtag'
+--
+-- * 'schKind'
+--
+-- * 'schSchemaName'
+--
+-- * 'schSchemaId'
+--
+-- * 'schDisplayName'
+--
+-- * 'schFields'
+schema
+    :: Schema
+schema =
+    Schema'
+    { _schEtag = Nothing
+    , _schKind = "admin#directory#schema"
+    , _schSchemaName = Nothing
+    , _schSchemaId = Nothing
+    , _schDisplayName = Nothing
+    , _schFields = Nothing
+    }
+
+-- | ETag of the resource.
+schEtag :: Lens' Schema (Maybe Text)
+schEtag = lens _schEtag (\ s a -> s{_schEtag = a})
+
+-- | Kind of resource this is.
+schKind :: Lens' Schema Text
+schKind = lens _schKind (\ s a -> s{_schKind = a})
+
+-- | Schema name
+schSchemaName :: Lens' Schema (Maybe Text)
+schSchemaName
+  = lens _schSchemaName
+      (\ s a -> s{_schSchemaName = a})
+
+-- | Unique identifier of Schema (Read-only)
+schSchemaId :: Lens' Schema (Maybe Text)
+schSchemaId
+  = lens _schSchemaId (\ s a -> s{_schSchemaId = a})
+
+-- | Display name for the schema.
+schDisplayName :: Lens' Schema (Maybe Text)
+schDisplayName
+  = lens _schDisplayName
+      (\ s a -> s{_schDisplayName = a})
+
+-- | Fields of Schema
+schFields :: Lens' Schema [SchemaFieldSpec]
+schFields
+  = lens _schFields (\ s a -> s{_schFields = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON Schema where
+        parseJSON
+          = withObject "Schema"
+              (\ o ->
+                 Schema' <$>
+                   (o .:? "etag") <*>
+                     (o .:? "kind" .!= "admin#directory#schema")
+                     <*> (o .:? "schemaName")
+                     <*> (o .:? "schemaId")
+                     <*> (o .:? "displayName")
+                     <*> (o .:? "fields" .!= mempty))
+
+instance ToJSON Schema where
+        toJSON Schema'{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _schEtag, Just ("kind" .= _schKind),
+                  ("schemaName" .=) <$> _schSchemaName,
+                  ("schemaId" .=) <$> _schSchemaId,
+                  ("displayName" .=) <$> _schDisplayName,
+                  ("fields" .=) <$> _schFields])
+
+-- | JSON request template for moving ChromeOs Device to given OU in
+-- Directory Devices API.
+--
+-- /See:/ 'chromeOSMoveDevicesToOu' smart constructor.
+newtype ChromeOSMoveDevicesToOu = ChromeOSMoveDevicesToOu'
+    { _comdtoDeviceIds :: Maybe [Text]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ChromeOSMoveDevicesToOu' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'comdtoDeviceIds'
+chromeOSMoveDevicesToOu
+    :: ChromeOSMoveDevicesToOu
+chromeOSMoveDevicesToOu =
+    ChromeOSMoveDevicesToOu'
+    { _comdtoDeviceIds = Nothing
+    }
+
+-- | ChromeOs Devices to be moved to OU
+comdtoDeviceIds :: Lens' ChromeOSMoveDevicesToOu [Text]
+comdtoDeviceIds
+  = lens _comdtoDeviceIds
+      (\ s a -> s{_comdtoDeviceIds = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON ChromeOSMoveDevicesToOu where
+        parseJSON
+          = withObject "ChromeOSMoveDevicesToOu"
+              (\ o ->
+                 ChromeOSMoveDevicesToOu' <$>
+                   (o .:? "deviceIds" .!= mempty))
+
+instance ToJSON ChromeOSMoveDevicesToOu where
+        toJSON ChromeOSMoveDevicesToOu'{..}
+          = object
+              (catMaybes [("deviceIds" .=) <$> _comdtoDeviceIds])
+
+-- | JSON template for User object in Directory API.
+--
+-- /See:/ 'user' smart constructor.
+data User = User'
+    { _useCreationTime               :: !(Maybe DateTime')
+    , _useLastLoginTime              :: !(Maybe DateTime')
+    , _useThumbnailPhotoEtag         :: !(Maybe Text)
+    , _useEtag                       :: !(Maybe Text)
+    , _usePosixAccounts              :: !(Maybe JSONValue)
+    , _useIPWhiteListed              :: !(Maybe Bool)
+    , _useRelations                  :: !(Maybe JSONValue)
+    , _useSSHPublicKeys              :: !(Maybe JSONValue)
+    , _useHashFunction               :: !(Maybe Text)
+    , _useKind                       :: !Text
+    , _useChangePasswordAtNextLogin  :: !(Maybe Bool)
+    , _useWebsites                   :: !(Maybe JSONValue)
+    , _useAddresses                  :: !(Maybe JSONValue)
+    , _useAliases                    :: !(Maybe [Text])
+    , _useThumbnailPhotoURL          :: !(Maybe Text)
+    , _useExternalIds                :: !(Maybe JSONValue)
+    , _useSuspended                  :: !(Maybe Bool)
+    , _useAgreedToTerms              :: !(Maybe Bool)
+    , _useDeletionTime               :: !(Maybe DateTime')
+    , _useNonEditableAliases         :: !(Maybe [Text])
+    , _useOrgUnitPath                :: !(Maybe Text)
+    , _useCustomerId                 :: !(Maybe Text)
+    , _useLanguages                  :: !(Maybe JSONValue)
+    , _useIncludeInGlobalAddressList :: !(Maybe Bool)
+    , _useGender                     :: !(Maybe JSONValue)
+    , _usePhones                     :: !(Maybe JSONValue)
+    , _useName                       :: !(Maybe UserName)
+    , _usePassword                   :: !(Maybe Text)
+    , _useEmails                     :: !(Maybe JSONValue)
+    , _useIms                        :: !(Maybe JSONValue)
+    , _useKeywords                   :: !(Maybe JSONValue)
+    , _useIsAdmin                    :: !(Maybe Bool)
+    , _useIsEnrolledIn2Sv            :: !(Maybe Bool)
+    , _useId                         :: !(Maybe Text)
+    , _useOrganizations              :: !(Maybe JSONValue)
+    , _usePrimaryEmail               :: !(Maybe Text)
+    , _useIsEnforcedIn2Sv            :: !(Maybe Bool)
+    , _useNotes                      :: !(Maybe JSONValue)
+    , _useIsDelegatedAdmin           :: !(Maybe Bool)
+    , _useLocations                  :: !(Maybe JSONValue)
+    , _useArchived                   :: !(Maybe Bool)
+    , _useIsMailboxSetup             :: !(Maybe Bool)
+    , _useCustomSchemas              :: !(Maybe UserCustomSchemas)
+    , _useSuspensionReason           :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'User' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'useCreationTime'
+--
+-- * 'useLastLoginTime'
+--
+-- * 'useThumbnailPhotoEtag'
+--
+-- * 'useEtag'
+--
+-- * 'usePosixAccounts'
+--
+-- * 'useIPWhiteListed'
+--
+-- * 'useRelations'
+--
+-- * 'useSSHPublicKeys'
+--
+-- * 'useHashFunction'
+--
+-- * 'useKind'
+--
+-- * 'useChangePasswordAtNextLogin'
+--
+-- * 'useWebsites'
+--
+-- * 'useAddresses'
+--
+-- * 'useAliases'
+--
+-- * 'useThumbnailPhotoURL'
+--
+-- * 'useExternalIds'
+--
+-- * 'useSuspended'
+--
+-- * 'useAgreedToTerms'
+--
+-- * 'useDeletionTime'
+--
+-- * 'useNonEditableAliases'
+--
+-- * 'useOrgUnitPath'
+--
+-- * 'useCustomerId'
+--
+-- * 'useLanguages'
+--
+-- * 'useIncludeInGlobalAddressList'
+--
+-- * 'useGender'
+--
+-- * 'usePhones'
+--
+-- * 'useName'
+--
+-- * 'usePassword'
+--
+-- * 'useEmails'
+--
+-- * 'useIms'
+--
+-- * 'useKeywords'
+--
+-- * 'useIsAdmin'
+--
+-- * 'useIsEnrolledIn2Sv'
+--
+-- * 'useId'
+--
+-- * 'useOrganizations'
+--
+-- * 'usePrimaryEmail'
+--
+-- * 'useIsEnforcedIn2Sv'
+--
+-- * 'useNotes'
+--
+-- * 'useIsDelegatedAdmin'
+--
+-- * 'useLocations'
+--
+-- * 'useArchived'
+--
+-- * 'useIsMailboxSetup'
+--
+-- * 'useCustomSchemas'
+--
+-- * 'useSuspensionReason'
+user
+    :: User
+user =
+    User'
+    { _useCreationTime = Nothing
+    , _useLastLoginTime = Nothing
+    , _useThumbnailPhotoEtag = Nothing
+    , _useEtag = Nothing
+    , _usePosixAccounts = Nothing
+    , _useIPWhiteListed = Nothing
+    , _useRelations = Nothing
+    , _useSSHPublicKeys = Nothing
+    , _useHashFunction = Nothing
+    , _useKind = "admin#directory#user"
+    , _useChangePasswordAtNextLogin = Nothing
+    , _useWebsites = Nothing
+    , _useAddresses = Nothing
+    , _useAliases = Nothing
+    , _useThumbnailPhotoURL = Nothing
+    , _useExternalIds = Nothing
+    , _useSuspended = Nothing
+    , _useAgreedToTerms = Nothing
+    , _useDeletionTime = Nothing
+    , _useNonEditableAliases = Nothing
+    , _useOrgUnitPath = Nothing
+    , _useCustomerId = Nothing
+    , _useLanguages = Nothing
+    , _useIncludeInGlobalAddressList = Nothing
+    , _useGender = Nothing
+    , _usePhones = Nothing
+    , _useName = Nothing
+    , _usePassword = Nothing
+    , _useEmails = Nothing
+    , _useIms = Nothing
+    , _useKeywords = Nothing
+    , _useIsAdmin = Nothing
+    , _useIsEnrolledIn2Sv = Nothing
+    , _useId = Nothing
+    , _useOrganizations = Nothing
+    , _usePrimaryEmail = Nothing
+    , _useIsEnforcedIn2Sv = Nothing
+    , _useNotes = Nothing
+    , _useIsDelegatedAdmin = Nothing
+    , _useLocations = Nothing
+    , _useArchived = Nothing
+    , _useIsMailboxSetup = Nothing
+    , _useCustomSchemas = Nothing
+    , _useSuspensionReason = Nothing
+    }
+
+-- | User\'s G Suite account creation time. (Read-only)
+useCreationTime :: Lens' User (Maybe UTCTime)
+useCreationTime
+  = lens _useCreationTime
+      (\ s a -> s{_useCreationTime = a})
+      . mapping _DateTime
+
+-- | User\'s last login time. (Read-only)
+useLastLoginTime :: Lens' User (Maybe UTCTime)
+useLastLoginTime
+  = lens _useLastLoginTime
+      (\ s a -> s{_useLastLoginTime = a})
+      . mapping _DateTime
+
+-- | ETag of the user\'s photo (Read-only)
+useThumbnailPhotoEtag :: Lens' User (Maybe Text)
+useThumbnailPhotoEtag
+  = lens _useThumbnailPhotoEtag
+      (\ s a -> s{_useThumbnailPhotoEtag = a})
+
+-- | ETag of the resource.
+useEtag :: Lens' User (Maybe Text)
+useEtag = lens _useEtag (\ s a -> s{_useEtag = a})
+
+usePosixAccounts :: Lens' User (Maybe JSONValue)
+usePosixAccounts
+  = lens _usePosixAccounts
+      (\ s a -> s{_usePosixAccounts = a})
+
+-- | Boolean indicating if ip is whitelisted
+useIPWhiteListed :: Lens' User (Maybe Bool)
+useIPWhiteListed
+  = lens _useIPWhiteListed
+      (\ s a -> s{_useIPWhiteListed = a})
+
+useRelations :: Lens' User (Maybe JSONValue)
+useRelations
+  = lens _useRelations (\ s a -> s{_useRelations = a})
+
+useSSHPublicKeys :: Lens' User (Maybe JSONValue)
+useSSHPublicKeys
+  = lens _useSSHPublicKeys
+      (\ s a -> s{_useSSHPublicKeys = a})
+
+-- | Hash function name for password. Supported are MD5, SHA-1 and crypt
+useHashFunction :: Lens' User (Maybe Text)
+useHashFunction
+  = lens _useHashFunction
+      (\ s a -> s{_useHashFunction = a})
+
+-- | Kind of resource this is.
+useKind :: Lens' User Text
+useKind = lens _useKind (\ s a -> s{_useKind = a})
+
+-- | Boolean indicating if the user should change password in next login
+useChangePasswordAtNextLogin :: Lens' User (Maybe Bool)
+useChangePasswordAtNextLogin
+  = lens _useChangePasswordAtNextLogin
+      (\ s a -> s{_useChangePasswordAtNextLogin = a})
+
+useWebsites :: Lens' User (Maybe JSONValue)
+useWebsites
+  = lens _useWebsites (\ s a -> s{_useWebsites = a})
+
+useAddresses :: Lens' User (Maybe JSONValue)
+useAddresses
+  = lens _useAddresses (\ s a -> s{_useAddresses = a})
+
+-- | List of aliases (Read-only)
+useAliases :: Lens' User [Text]
+useAliases
+  = lens _useAliases (\ s a -> s{_useAliases = a}) .
+      _Default
+      . _Coerce
+
+-- | Photo Url of the user (Read-only)
+useThumbnailPhotoURL :: Lens' User (Maybe Text)
+useThumbnailPhotoURL
+  = lens _useThumbnailPhotoURL
+      (\ s a -> s{_useThumbnailPhotoURL = a})
+
+useExternalIds :: Lens' User (Maybe JSONValue)
+useExternalIds
+  = lens _useExternalIds
+      (\ s a -> s{_useExternalIds = a})
+
+-- | Indicates if user is suspended.
+useSuspended :: Lens' User (Maybe Bool)
+useSuspended
+  = lens _useSuspended (\ s a -> s{_useSuspended = a})
+
+-- | Indicates if user has agreed to terms (Read-only)
+useAgreedToTerms :: Lens' User (Maybe Bool)
+useAgreedToTerms
+  = lens _useAgreedToTerms
+      (\ s a -> s{_useAgreedToTerms = a})
+
+useDeletionTime :: Lens' User (Maybe UTCTime)
+useDeletionTime
+  = lens _useDeletionTime
+      (\ s a -> s{_useDeletionTime = a})
+      . mapping _DateTime
+
+-- | List of non editable aliases (Read-only)
+useNonEditableAliases :: Lens' User [Text]
+useNonEditableAliases
+  = lens _useNonEditableAliases
+      (\ s a -> s{_useNonEditableAliases = a})
+      . _Default
+      . _Coerce
+
+-- | OrgUnit of User
+useOrgUnitPath :: Lens' User (Maybe Text)
+useOrgUnitPath
+  = lens _useOrgUnitPath
+      (\ s a -> s{_useOrgUnitPath = a})
+
+-- | CustomerId of User (Read-only)
+useCustomerId :: Lens' User (Maybe Text)
+useCustomerId
+  = lens _useCustomerId
+      (\ s a -> s{_useCustomerId = a})
+
+useLanguages :: Lens' User (Maybe JSONValue)
+useLanguages
+  = lens _useLanguages (\ s a -> s{_useLanguages = a})
+
+-- | Boolean indicating if user is included in Global Address List
+useIncludeInGlobalAddressList :: Lens' User (Maybe Bool)
+useIncludeInGlobalAddressList
+  = lens _useIncludeInGlobalAddressList
+      (\ s a -> s{_useIncludeInGlobalAddressList = a})
+
+useGender :: Lens' User (Maybe JSONValue)
+useGender
+  = lens _useGender (\ s a -> s{_useGender = a})
+
+usePhones :: Lens' User (Maybe JSONValue)
+usePhones
+  = lens _usePhones (\ s a -> s{_usePhones = a})
+
+-- | User\'s name
+useName :: Lens' User (Maybe UserName)
+useName = lens _useName (\ s a -> s{_useName = a})
+
+-- | User\'s password
+usePassword :: Lens' User (Maybe Text)
+usePassword
+  = lens _usePassword (\ s a -> s{_usePassword = a})
+
+useEmails :: Lens' User (Maybe JSONValue)
+useEmails
+  = lens _useEmails (\ s a -> s{_useEmails = a})
+
+useIms :: Lens' User (Maybe JSONValue)
+useIms = lens _useIms (\ s a -> s{_useIms = a})
+
+useKeywords :: Lens' User (Maybe JSONValue)
+useKeywords
+  = lens _useKeywords (\ s a -> s{_useKeywords = a})
+
+-- | Boolean indicating if the user is admin (Read-only)
+useIsAdmin :: Lens' User (Maybe Bool)
+useIsAdmin
+  = lens _useIsAdmin (\ s a -> s{_useIsAdmin = a})
+
+-- | Is enrolled in 2-step verification (Read-only)
+useIsEnrolledIn2Sv :: Lens' User (Maybe Bool)
+useIsEnrolledIn2Sv
+  = lens _useIsEnrolledIn2Sv
+      (\ s a -> s{_useIsEnrolledIn2Sv = a})
+
+-- | Unique identifier of User (Read-only)
+useId :: Lens' User (Maybe Text)
+useId = lens _useId (\ s a -> s{_useId = a})
+
+useOrganizations :: Lens' User (Maybe JSONValue)
+useOrganizations
+  = lens _useOrganizations
+      (\ s a -> s{_useOrganizations = a})
+
+-- | username of User
+usePrimaryEmail :: Lens' User (Maybe Text)
+usePrimaryEmail
+  = lens _usePrimaryEmail
+      (\ s a -> s{_usePrimaryEmail = a})
+
+-- | Is 2-step verification enforced (Read-only)
+useIsEnforcedIn2Sv :: Lens' User (Maybe Bool)
+useIsEnforcedIn2Sv
+  = lens _useIsEnforcedIn2Sv
+      (\ s a -> s{_useIsEnforcedIn2Sv = a})
+
+useNotes :: Lens' User (Maybe JSONValue)
+useNotes = lens _useNotes (\ s a -> s{_useNotes = a})
+
+-- | Boolean indicating if the user is delegated admin (Read-only)
+useIsDelegatedAdmin :: Lens' User (Maybe Bool)
+useIsDelegatedAdmin
+  = lens _useIsDelegatedAdmin
+      (\ s a -> s{_useIsDelegatedAdmin = a})
+
+useLocations :: Lens' User (Maybe JSONValue)
+useLocations
+  = lens _useLocations (\ s a -> s{_useLocations = a})
+
+-- | Indicates if user is archived.
+useArchived :: Lens' User (Maybe Bool)
+useArchived
+  = lens _useArchived (\ s a -> s{_useArchived = a})
+
+-- | Is mailbox setup (Read-only)
+useIsMailboxSetup :: Lens' User (Maybe Bool)
+useIsMailboxSetup
+  = lens _useIsMailboxSetup
+      (\ s a -> s{_useIsMailboxSetup = a})
+
+-- | Custom fields of the user.
+useCustomSchemas :: Lens' User (Maybe UserCustomSchemas)
+useCustomSchemas
+  = lens _useCustomSchemas
+      (\ s a -> s{_useCustomSchemas = a})
+
+-- | Suspension reason if user is suspended (Read-only)
+useSuspensionReason :: Lens' User (Maybe Text)
+useSuspensionReason
+  = lens _useSuspensionReason
+      (\ s a -> s{_useSuspensionReason = a})
+
+instance FromJSON User where
+        parseJSON
+          = withObject "User"
+              (\ o ->
+                 User' <$>
+                   (o .:? "creationTime") <*> (o .:? "lastLoginTime")
+                     <*> (o .:? "thumbnailPhotoEtag")
+                     <*> (o .:? "etag")
+                     <*> (o .:? "posixAccounts")
+                     <*> (o .:? "ipWhitelisted")
+                     <*> (o .:? "relations")
+                     <*> (o .:? "sshPublicKeys")
+                     <*> (o .:? "hashFunction")
+                     <*> (o .:? "kind" .!= "admin#directory#user")
+                     <*> (o .:? "changePasswordAtNextLogin")
+                     <*> (o .:? "websites")
+                     <*> (o .:? "addresses")
+                     <*> (o .:? "aliases" .!= mempty)
+                     <*> (o .:? "thumbnailPhotoUrl")
+                     <*> (o .:? "externalIds")
+                     <*> (o .:? "suspended")
+                     <*> (o .:? "agreedToTerms")
+                     <*> (o .:? "deletionTime")
+                     <*> (o .:? "nonEditableAliases" .!= mempty)
+                     <*> (o .:? "orgUnitPath")
+                     <*> (o .:? "customerId")
+                     <*> (o .:? "languages")
+                     <*> (o .:? "includeInGlobalAddressList")
+                     <*> (o .:? "gender")
+                     <*> (o .:? "phones")
+                     <*> (o .:? "name")
+                     <*> (o .:? "password")
+                     <*> (o .:? "emails")
+                     <*> (o .:? "ims")
+                     <*> (o .:? "keywords")
+                     <*> (o .:? "isAdmin")
+                     <*> (o .:? "isEnrolledIn2Sv")
+                     <*> (o .:? "id")
+                     <*> (o .:? "organizations")
+                     <*> (o .:? "primaryEmail")
+                     <*> (o .:? "isEnforcedIn2Sv")
+                     <*> (o .:? "notes")
+                     <*> (o .:? "isDelegatedAdmin")
+                     <*> (o .:? "locations")
+                     <*> (o .:? "archived")
+                     <*> (o .:? "isMailboxSetup")
+                     <*> (o .:? "customSchemas")
+                     <*> (o .:? "suspensionReason"))
+
+instance ToJSON User where
+        toJSON User'{..}
+          = object
+              (catMaybes
+                 [("creationTime" .=) <$> _useCreationTime,
+                  ("lastLoginTime" .=) <$> _useLastLoginTime,
+                  ("thumbnailPhotoEtag" .=) <$> _useThumbnailPhotoEtag,
+                  ("etag" .=) <$> _useEtag,
+                  ("posixAccounts" .=) <$> _usePosixAccounts,
+                  ("ipWhitelisted" .=) <$> _useIPWhiteListed,
+                  ("relations" .=) <$> _useRelations,
+                  ("sshPublicKeys" .=) <$> _useSSHPublicKeys,
+                  ("hashFunction" .=) <$> _useHashFunction,
+                  Just ("kind" .= _useKind),
+                  ("changePasswordAtNextLogin" .=) <$>
+                    _useChangePasswordAtNextLogin,
+                  ("websites" .=) <$> _useWebsites,
+                  ("addresses" .=) <$> _useAddresses,
+                  ("aliases" .=) <$> _useAliases,
+                  ("thumbnailPhotoUrl" .=) <$> _useThumbnailPhotoURL,
+                  ("externalIds" .=) <$> _useExternalIds,
+                  ("suspended" .=) <$> _useSuspended,
+                  ("agreedToTerms" .=) <$> _useAgreedToTerms,
+                  ("deletionTime" .=) <$> _useDeletionTime,
+                  ("nonEditableAliases" .=) <$> _useNonEditableAliases,
+                  ("orgUnitPath" .=) <$> _useOrgUnitPath,
+                  ("customerId" .=) <$> _useCustomerId,
+                  ("languages" .=) <$> _useLanguages,
+                  ("includeInGlobalAddressList" .=) <$>
+                    _useIncludeInGlobalAddressList,
+                  ("gender" .=) <$> _useGender,
+                  ("phones" .=) <$> _usePhones,
+                  ("name" .=) <$> _useName,
+                  ("password" .=) <$> _usePassword,
+                  ("emails" .=) <$> _useEmails, ("ims" .=) <$> _useIms,
+                  ("keywords" .=) <$> _useKeywords,
+                  ("isAdmin" .=) <$> _useIsAdmin,
+                  ("isEnrolledIn2Sv" .=) <$> _useIsEnrolledIn2Sv,
+                  ("id" .=) <$> _useId,
+                  ("organizations" .=) <$> _useOrganizations,
+                  ("primaryEmail" .=) <$> _usePrimaryEmail,
+                  ("isEnforcedIn2Sv" .=) <$> _useIsEnforcedIn2Sv,
+                  ("notes" .=) <$> _useNotes,
+                  ("isDelegatedAdmin" .=) <$> _useIsDelegatedAdmin,
+                  ("locations" .=) <$> _useLocations,
+                  ("archived" .=) <$> _useArchived,
+                  ("isMailboxSetup" .=) <$> _useIsMailboxSetup,
+                  ("customSchemas" .=) <$> _useCustomSchemas,
+                  ("suspensionReason" .=) <$> _useSuspensionReason])
+
+-- | JSON request template for firing actions on ChromeOs Device in Directory
+-- Devices API.
+--
+-- /See:/ 'chromeOSDeviceAction' smart constructor.
+data ChromeOSDeviceAction = ChromeOSDeviceAction'
+    { _codaAction            :: !(Maybe Text)
+    , _codaDeprovisionReason :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ChromeOSDeviceAction' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'codaAction'
+--
+-- * 'codaDeprovisionReason'
+chromeOSDeviceAction
+    :: ChromeOSDeviceAction
+chromeOSDeviceAction =
+    ChromeOSDeviceAction'
+    { _codaAction = Nothing
+    , _codaDeprovisionReason = Nothing
+    }
+
+-- | Action to be taken on the ChromeOs Device
+codaAction :: Lens' ChromeOSDeviceAction (Maybe Text)
+codaAction
+  = lens _codaAction (\ s a -> s{_codaAction = a})
+
+codaDeprovisionReason :: Lens' ChromeOSDeviceAction (Maybe Text)
+codaDeprovisionReason
+  = lens _codaDeprovisionReason
+      (\ s a -> s{_codaDeprovisionReason = a})
+
+instance FromJSON ChromeOSDeviceAction where
+        parseJSON
+          = withObject "ChromeOSDeviceAction"
+              (\ o ->
+                 ChromeOSDeviceAction' <$>
+                   (o .:? "action") <*> (o .:? "deprovisionReason"))
+
+instance ToJSON ChromeOSDeviceAction where
+        toJSON ChromeOSDeviceAction'{..}
+          = object
+              (catMaybes
+                 [("action" .=) <$> _codaAction,
+                  ("deprovisionReason" .=) <$> _codaDeprovisionReason])
+
+-- | JSON request template for renaming a feature.
+--
+-- /See:/ 'featureRename' smart constructor.
+newtype FeatureRename = FeatureRename'
+    { _frNewName :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FeatureRename' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'frNewName'
+featureRename
+    :: FeatureRename
+featureRename =
+    FeatureRename'
+    { _frNewName = Nothing
+    }
+
+-- | New name of the feature.
+frNewName :: Lens' FeatureRename (Maybe Text)
+frNewName
+  = lens _frNewName (\ s a -> s{_frNewName = a})
+
+instance FromJSON FeatureRename where
+        parseJSON
+          = withObject "FeatureRename"
+              (\ o -> FeatureRename' <$> (o .:? "newName"))
+
+instance ToJSON FeatureRename where
+        toJSON FeatureRename'{..}
+          = object (catMaybes [("newName" .=) <$> _frNewName])
+
+-- | JSON template for role resource in Directory API.
+--
+-- /See:/ 'role'' smart constructor.
+data Role = Role'
+    { _rrEtag             :: !(Maybe Text)
+    , _rrKind             :: !Text
+    , _rrRoleName         :: !(Maybe Text)
+    , _rrIsSystemRole     :: !(Maybe Bool)
+    , _rrRoleId           :: !(Maybe (Textual Int64))
+    , _rrRoleDescription  :: !(Maybe Text)
+    , _rrIsSuperAdminRole :: !(Maybe Bool)
+    , _rrRolePrivileges   :: !(Maybe [RoleRolePrivilegesItem])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Role' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rrEtag'
+--
+-- * 'rrKind'
+--
+-- * 'rrRoleName'
+--
+-- * 'rrIsSystemRole'
+--
+-- * 'rrRoleId'
+--
+-- * 'rrRoleDescription'
+--
+-- * 'rrIsSuperAdminRole'
+--
+-- * 'rrRolePrivileges'
+role'
+    :: Role
+role' =
+    Role'
+    { _rrEtag = Nothing
+    , _rrKind = "admin#directory#role"
+    , _rrRoleName = Nothing
+    , _rrIsSystemRole = Nothing
+    , _rrRoleId = Nothing
+    , _rrRoleDescription = Nothing
+    , _rrIsSuperAdminRole = Nothing
+    , _rrRolePrivileges = Nothing
+    }
+
+-- | ETag of the resource.
+rrEtag :: Lens' Role (Maybe Text)
+rrEtag = lens _rrEtag (\ s a -> s{_rrEtag = a})
+
+-- | The type of the API resource. This is always admin#directory#role.
+rrKind :: Lens' Role Text
+rrKind = lens _rrKind (\ s a -> s{_rrKind = a})
+
+-- | Name of the role.
+rrRoleName :: Lens' Role (Maybe Text)
+rrRoleName
+  = lens _rrRoleName (\ s a -> s{_rrRoleName = a})
+
+-- | Returns true if this is a pre-defined system role.
+rrIsSystemRole :: Lens' Role (Maybe Bool)
+rrIsSystemRole
+  = lens _rrIsSystemRole
+      (\ s a -> s{_rrIsSystemRole = a})
+
+-- | ID of the role.
+rrRoleId :: Lens' Role (Maybe Int64)
+rrRoleId
+  = lens _rrRoleId (\ s a -> s{_rrRoleId = a}) .
+      mapping _Coerce
+
+-- | A short description of the role.
+rrRoleDescription :: Lens' Role (Maybe Text)
+rrRoleDescription
+  = lens _rrRoleDescription
+      (\ s a -> s{_rrRoleDescription = a})
+
+-- | Returns true if the role is a super admin role.
+rrIsSuperAdminRole :: Lens' Role (Maybe Bool)
+rrIsSuperAdminRole
+  = lens _rrIsSuperAdminRole
+      (\ s a -> s{_rrIsSuperAdminRole = a})
+
+-- | The set of privileges that are granted to this role.
+rrRolePrivileges :: Lens' Role [RoleRolePrivilegesItem]
+rrRolePrivileges
+  = lens _rrRolePrivileges
+      (\ s a -> s{_rrRolePrivileges = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON Role where
+        parseJSON
+          = withObject "Role"
+              (\ o ->
+                 Role' <$>
+                   (o .:? "etag") <*>
+                     (o .:? "kind" .!= "admin#directory#role")
+                     <*> (o .:? "roleName")
+                     <*> (o .:? "isSystemRole")
+                     <*> (o .:? "roleId")
+                     <*> (o .:? "roleDescription")
+                     <*> (o .:? "isSuperAdminRole")
+                     <*> (o .:? "rolePrivileges" .!= mempty))
+
+instance ToJSON Role where
+        toJSON Role'{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _rrEtag, Just ("kind" .= _rrKind),
+                  ("roleName" .=) <$> _rrRoleName,
+                  ("isSystemRole" .=) <$> _rrIsSystemRole,
+                  ("roleId" .=) <$> _rrRoleId,
+                  ("roleDescription" .=) <$> _rrRoleDescription,
+                  ("isSuperAdminRole" .=) <$> _rrIsSuperAdminRole,
+                  ("rolePrivileges" .=) <$> _rrRolePrivileges])
+
+-- | JSON template for Customer Resource object in Directory API.
+--
+-- /See:/ 'customer' smart constructor.
+data Customer = Customer'
+    { _cusEtag                 :: !(Maybe Text)
+    , _cusKind                 :: !Text
+    , _cusAlternateEmail       :: !(Maybe Text)
+    , _cusCustomerDomain       :: !(Maybe Text)
+    , _cusPhoneNumber          :: !(Maybe Text)
+    , _cusLanguage             :: !(Maybe Text)
+    , _cusId                   :: !(Maybe Text)
+    , _cusCustomerCreationTime :: !(Maybe DateTime')
+    , _cusPostalAddress        :: !(Maybe CustomerPostalAddress)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Customer' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cusEtag'
+--
+-- * 'cusKind'
+--
+-- * 'cusAlternateEmail'
+--
+-- * 'cusCustomerDomain'
+--
+-- * 'cusPhoneNumber'
+--
+-- * 'cusLanguage'
+--
+-- * 'cusId'
+--
+-- * 'cusCustomerCreationTime'
+--
+-- * 'cusPostalAddress'
+customer
+    :: Customer
+customer =
+    Customer'
+    { _cusEtag = Nothing
+    , _cusKind = "admin#directory#customer"
+    , _cusAlternateEmail = Nothing
+    , _cusCustomerDomain = Nothing
+    , _cusPhoneNumber = Nothing
+    , _cusLanguage = Nothing
+    , _cusId = Nothing
+    , _cusCustomerCreationTime = Nothing
+    , _cusPostalAddress = Nothing
+    }
+
+-- | ETag of the resource.
+cusEtag :: Lens' Customer (Maybe Text)
+cusEtag = lens _cusEtag (\ s a -> s{_cusEtag = a})
+
+-- | Identifies the resource as a customer. Value: admin#directory#customer
+cusKind :: Lens' Customer Text
+cusKind = lens _cusKind (\ s a -> s{_cusKind = a})
+
+-- | The customer\'s secondary contact email address. This email address
+-- cannot be on the same domain as the customerDomain
+cusAlternateEmail :: Lens' Customer (Maybe Text)
+cusAlternateEmail
+  = lens _cusAlternateEmail
+      (\ s a -> s{_cusAlternateEmail = a})
+
+-- | The customer\'s primary domain name string. Do not include the www
+-- prefix when creating a new customer.
+cusCustomerDomain :: Lens' Customer (Maybe Text)
+cusCustomerDomain
+  = lens _cusCustomerDomain
+      (\ s a -> s{_cusCustomerDomain = a})
+
+-- | The customer\'s contact phone number in E.164 format.
+cusPhoneNumber :: Lens' Customer (Maybe Text)
+cusPhoneNumber
+  = lens _cusPhoneNumber
+      (\ s a -> s{_cusPhoneNumber = a})
+
+-- | The customer\'s ISO 639-2 language code. The default value is en-US
+cusLanguage :: Lens' Customer (Maybe Text)
+cusLanguage
+  = lens _cusLanguage (\ s a -> s{_cusLanguage = a})
+
+-- | The unique ID for the customer\'s G Suite account. (Readonly)
+cusId :: Lens' Customer (Maybe Text)
+cusId = lens _cusId (\ s a -> s{_cusId = a})
+
+-- | The customer\'s creation time (Readonly)
+cusCustomerCreationTime :: Lens' Customer (Maybe UTCTime)
+cusCustomerCreationTime
+  = lens _cusCustomerCreationTime
+      (\ s a -> s{_cusCustomerCreationTime = a})
+      . mapping _DateTime
+
+-- | The customer\'s postal address information.
+cusPostalAddress :: Lens' Customer (Maybe CustomerPostalAddress)
+cusPostalAddress
+  = lens _cusPostalAddress
+      (\ s a -> s{_cusPostalAddress = a})
+
+instance FromJSON Customer where
+        parseJSON
+          = withObject "Customer"
+              (\ o ->
+                 Customer' <$>
+                   (o .:? "etag") <*>
+                     (o .:? "kind" .!= "admin#directory#customer")
+                     <*> (o .:? "alternateEmail")
+                     <*> (o .:? "customerDomain")
+                     <*> (o .:? "phoneNumber")
+                     <*> (o .:? "language")
+                     <*> (o .:? "id")
+                     <*> (o .:? "customerCreationTime")
+                     <*> (o .:? "postalAddress"))
+
+instance ToJSON Customer where
+        toJSON Customer'{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _cusEtag, Just ("kind" .= _cusKind),
+                  ("alternateEmail" .=) <$> _cusAlternateEmail,
+                  ("customerDomain" .=) <$> _cusCustomerDomain,
+                  ("phoneNumber" .=) <$> _cusPhoneNumber,
+                  ("language" .=) <$> _cusLanguage,
+                  ("id" .=) <$> _cusId,
+                  ("customerCreationTime" .=) <$>
+                    _cusCustomerCreationTime,
+                  ("postalAddress" .=) <$> _cusPostalAddress])
+
+--
+-- /See:/ 'mobileDeviceApplicationsItem' smart constructor.
+data MobileDeviceApplicationsItem = MobileDeviceApplicationsItem'
+    { _mdaiVersionCode :: !(Maybe (Textual Int32))
+    , _mdaiVersionName :: !(Maybe Text)
+    , _mdaiPackageName :: !(Maybe Text)
+    , _mdaiDisplayName :: !(Maybe Text)
+    , _mdaiPermission  :: !(Maybe [Text])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MobileDeviceApplicationsItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mdaiVersionCode'
+--
+-- * 'mdaiVersionName'
+--
+-- * 'mdaiPackageName'
+--
+-- * 'mdaiDisplayName'
+--
+-- * 'mdaiPermission'
+mobileDeviceApplicationsItem
+    :: MobileDeviceApplicationsItem
+mobileDeviceApplicationsItem =
+    MobileDeviceApplicationsItem'
+    { _mdaiVersionCode = Nothing
+    , _mdaiVersionName = Nothing
+    , _mdaiPackageName = Nothing
+    , _mdaiDisplayName = Nothing
+    , _mdaiPermission = Nothing
+    }
+
+-- | Version code of application
+mdaiVersionCode :: Lens' MobileDeviceApplicationsItem (Maybe Int32)
+mdaiVersionCode
+  = lens _mdaiVersionCode
+      (\ s a -> s{_mdaiVersionCode = a})
+      . mapping _Coerce
+
+-- | Version name of application
+mdaiVersionName :: Lens' MobileDeviceApplicationsItem (Maybe Text)
+mdaiVersionName
+  = lens _mdaiVersionName
+      (\ s a -> s{_mdaiVersionName = a})
+
+-- | Package name of application
+mdaiPackageName :: Lens' MobileDeviceApplicationsItem (Maybe Text)
+mdaiPackageName
+  = lens _mdaiPackageName
+      (\ s a -> s{_mdaiPackageName = a})
+
+-- | Display name of application
+mdaiDisplayName :: Lens' MobileDeviceApplicationsItem (Maybe Text)
+mdaiDisplayName
+  = lens _mdaiDisplayName
+      (\ s a -> s{_mdaiDisplayName = a})
+
+-- | List of Permissions for application
+mdaiPermission :: Lens' MobileDeviceApplicationsItem [Text]
+mdaiPermission
+  = lens _mdaiPermission
+      (\ s a -> s{_mdaiPermission = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON MobileDeviceApplicationsItem where
+        parseJSON
+          = withObject "MobileDeviceApplicationsItem"
+              (\ o ->
+                 MobileDeviceApplicationsItem' <$>
+                   (o .:? "versionCode") <*> (o .:? "versionName") <*>
+                     (o .:? "packageName")
+                     <*> (o .:? "displayName")
+                     <*> (o .:? "permission" .!= mempty))
+
+instance ToJSON MobileDeviceApplicationsItem where
+        toJSON MobileDeviceApplicationsItem'{..}
+          = object
+              (catMaybes
+                 [("versionCode" .=) <$> _mdaiVersionCode,
+                  ("versionName" .=) <$> _mdaiVersionName,
+                  ("packageName" .=) <$> _mdaiPackageName,
+                  ("displayName" .=) <$> _mdaiDisplayName,
+                  ("permission" .=) <$> _mdaiPermission])
+
+--
+-- /See:/ 'chromeOSDeviceDiskVolumeReportsItemVolumeInfoItem' smart constructor.
+data ChromeOSDeviceDiskVolumeReportsItemVolumeInfoItem = ChromeOSDeviceDiskVolumeReportsItemVolumeInfoItem'
+    { _coddvriviiStorageFree  :: !(Maybe (Textual Int64))
+    , _coddvriviiStorageTotal :: !(Maybe (Textual Int64))
+    , _coddvriviiVolumeId     :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ChromeOSDeviceDiskVolumeReportsItemVolumeInfoItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'coddvriviiStorageFree'
+--
+-- * 'coddvriviiStorageTotal'
+--
+-- * 'coddvriviiVolumeId'
+chromeOSDeviceDiskVolumeReportsItemVolumeInfoItem
+    :: ChromeOSDeviceDiskVolumeReportsItemVolumeInfoItem
+chromeOSDeviceDiskVolumeReportsItemVolumeInfoItem =
+    ChromeOSDeviceDiskVolumeReportsItemVolumeInfoItem'
+    { _coddvriviiStorageFree = Nothing
+    , _coddvriviiStorageTotal = Nothing
+    , _coddvriviiVolumeId = Nothing
+    }
+
+-- | Free disk space [in bytes]
+coddvriviiStorageFree :: Lens' ChromeOSDeviceDiskVolumeReportsItemVolumeInfoItem (Maybe Int64)
+coddvriviiStorageFree
+  = lens _coddvriviiStorageFree
+      (\ s a -> s{_coddvriviiStorageFree = a})
+      . mapping _Coerce
+
+-- | Total disk space [in bytes]
+coddvriviiStorageTotal :: Lens' ChromeOSDeviceDiskVolumeReportsItemVolumeInfoItem (Maybe Int64)
+coddvriviiStorageTotal
+  = lens _coddvriviiStorageTotal
+      (\ s a -> s{_coddvriviiStorageTotal = a})
+      . mapping _Coerce
+
+-- | Volume id
+coddvriviiVolumeId :: Lens' ChromeOSDeviceDiskVolumeReportsItemVolumeInfoItem (Maybe Text)
+coddvriviiVolumeId
+  = lens _coddvriviiVolumeId
+      (\ s a -> s{_coddvriviiVolumeId = a})
+
+instance FromJSON
+         ChromeOSDeviceDiskVolumeReportsItemVolumeInfoItem
+         where
+        parseJSON
+          = withObject
+              "ChromeOSDeviceDiskVolumeReportsItemVolumeInfoItem"
+              (\ o ->
+                 ChromeOSDeviceDiskVolumeReportsItemVolumeInfoItem'
+                   <$>
+                   (o .:? "storageFree") <*> (o .:? "storageTotal") <*>
+                     (o .:? "volumeId"))
+
+instance ToJSON
+         ChromeOSDeviceDiskVolumeReportsItemVolumeInfoItem
+         where
+        toJSON
+          ChromeOSDeviceDiskVolumeReportsItemVolumeInfoItem'{..}
+          = object
+              (catMaybes
+                 [("storageFree" .=) <$> _coddvriviiStorageFree,
+                  ("storageTotal" .=) <$> _coddvriviiStorageTotal,
+                  ("volumeId" .=) <$> _coddvriviiVolumeId])
+
+-- | JSON response template for List Organization Units operation in
+-- Directory API.
+--
+-- /See:/ 'orgUnits' smart constructor.
+data OrgUnits = OrgUnits'
+    { _oEtag              :: !(Maybe Text)
+    , _oKind              :: !Text
+    , _oOrganizationUnits :: !(Maybe [OrgUnit])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'OrgUnits' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'oEtag'
+--
+-- * 'oKind'
+--
+-- * 'oOrganizationUnits'
+orgUnits
+    :: OrgUnits
+orgUnits =
+    OrgUnits'
+    { _oEtag = Nothing
+    , _oKind = "admin#directory#orgUnits"
+    , _oOrganizationUnits = Nothing
+    }
+
+-- | ETag of the resource.
+oEtag :: Lens' OrgUnits (Maybe Text)
+oEtag = lens _oEtag (\ s a -> s{_oEtag = a})
+
+-- | Kind of resource this is.
+oKind :: Lens' OrgUnits Text
+oKind = lens _oKind (\ s a -> s{_oKind = a})
+
+-- | List of user objects.
+oOrganizationUnits :: Lens' OrgUnits [OrgUnit]
+oOrganizationUnits
+  = lens _oOrganizationUnits
+      (\ s a -> s{_oOrganizationUnits = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON OrgUnits where
+        parseJSON
+          = withObject "OrgUnits"
+              (\ o ->
+                 OrgUnits' <$>
+                   (o .:? "etag") <*>
+                     (o .:? "kind" .!= "admin#directory#orgUnits")
+                     <*> (o .:? "organizationUnits" .!= mempty))
+
+instance ToJSON OrgUnits where
+        toJSON OrgUnits'{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _oEtag, Just ("kind" .= _oKind),
+                  ("organizationUnits" .=) <$> _oOrganizationUnits])
+
+-- | JSON template for a POSIX account entry.
+--
+-- /See:/ 'userSSHPublicKey' smart constructor.
+data UserSSHPublicKey = UserSSHPublicKey'
+    { _uspkFingerprint        :: !(Maybe Text)
+    , _uspkKey                :: !(Maybe Text)
+    , _uspkExpirationTimeUsec :: !(Maybe (Textual Int64))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UserSSHPublicKey' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uspkFingerprint'
+--
+-- * 'uspkKey'
+--
+-- * 'uspkExpirationTimeUsec'
+userSSHPublicKey
+    :: UserSSHPublicKey
+userSSHPublicKey =
+    UserSSHPublicKey'
+    { _uspkFingerprint = Nothing
+    , _uspkKey = Nothing
+    , _uspkExpirationTimeUsec = Nothing
+    }
+
+-- | A SHA-256 fingerprint of the SSH public key. (Read-only)
+uspkFingerprint :: Lens' UserSSHPublicKey (Maybe Text)
+uspkFingerprint
+  = lens _uspkFingerprint
+      (\ s a -> s{_uspkFingerprint = a})
+
+-- | An SSH public key.
+uspkKey :: Lens' UserSSHPublicKey (Maybe Text)
+uspkKey = lens _uspkKey (\ s a -> s{_uspkKey = a})
+
+-- | An expiration time in microseconds since epoch.
+uspkExpirationTimeUsec :: Lens' UserSSHPublicKey (Maybe Int64)
+uspkExpirationTimeUsec
+  = lens _uspkExpirationTimeUsec
+      (\ s a -> s{_uspkExpirationTimeUsec = a})
+      . mapping _Coerce
+
+instance FromJSON UserSSHPublicKey where
+        parseJSON
+          = withObject "UserSSHPublicKey"
+              (\ o ->
+                 UserSSHPublicKey' <$>
+                   (o .:? "fingerprint") <*> (o .:? "key") <*>
+                     (o .:? "expirationTimeUsec"))
+
+instance ToJSON UserSSHPublicKey where
+        toJSON UserSSHPublicKey'{..}
+          = object
+              (catMaybes
+                 [("fingerprint" .=) <$> _uspkFingerprint,
+                  ("key" .=) <$> _uspkKey,
+                  ("expirationTimeUsec" .=) <$>
+                    _uspkExpirationTimeUsec])
+
+-- | JSON response template for List verification codes operation in
+-- Directory API.
+--
+-- /See:/ 'verificationCodes' smart constructor.
+data VerificationCodes = VerificationCodes'
+    { _vEtag  :: !(Maybe Text)
+    , _vKind  :: !Text
+    , _vItems :: !(Maybe [VerificationCode])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VerificationCodes' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vEtag'
+--
+-- * 'vKind'
+--
+-- * 'vItems'
+verificationCodes
+    :: VerificationCodes
+verificationCodes =
+    VerificationCodes'
+    { _vEtag = Nothing
+    , _vKind = "admin#directory#verificationCodesList"
+    , _vItems = Nothing
+    }
+
+-- | ETag of the resource.
+vEtag :: Lens' VerificationCodes (Maybe Text)
+vEtag = lens _vEtag (\ s a -> s{_vEtag = a})
+
+-- | The type of the resource. This is always
+-- admin#directory#verificationCodesList.
+vKind :: Lens' VerificationCodes Text
+vKind = lens _vKind (\ s a -> s{_vKind = a})
+
+-- | A list of verification code resources.
+vItems :: Lens' VerificationCodes [VerificationCode]
+vItems
+  = lens _vItems (\ s a -> s{_vItems = a}) . _Default .
+      _Coerce
+
+instance FromJSON VerificationCodes where
+        parseJSON
+          = withObject "VerificationCodes"
+              (\ o ->
+                 VerificationCodes' <$>
+                   (o .:? "etag") <*>
+                     (o .:? "kind" .!=
+                        "admin#directory#verificationCodesList")
+                     <*> (o .:? "items" .!= mempty))
+
+instance ToJSON VerificationCodes where
+        toJSON VerificationCodes'{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _vEtag, Just ("kind" .= _vKind),
+                  ("items" .=) <$> _vItems])
+
+-- | JSON template for coordinates of a building in Directory API.
+--
+-- /See:/ 'buildingCoordinates' smart constructor.
+data BuildingCoordinates = BuildingCoordinates'
+    { _bcLatitude  :: !(Maybe (Textual Double))
+    , _bcLongitude :: !(Maybe (Textual Double))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BuildingCoordinates' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bcLatitude'
+--
+-- * 'bcLongitude'
+buildingCoordinates
+    :: BuildingCoordinates
+buildingCoordinates =
+    BuildingCoordinates'
+    { _bcLatitude = Nothing
+    , _bcLongitude = Nothing
+    }
+
+-- | Latitude in decimal degrees.
+bcLatitude :: Lens' BuildingCoordinates (Maybe Double)
+bcLatitude
+  = lens _bcLatitude (\ s a -> s{_bcLatitude = a}) .
+      mapping _Coerce
+
+-- | Longitude in decimal degrees.
+bcLongitude :: Lens' BuildingCoordinates (Maybe Double)
+bcLongitude
+  = lens _bcLongitude (\ s a -> s{_bcLongitude = a}) .
+      mapping _Coerce
+
+instance FromJSON BuildingCoordinates where
+        parseJSON
+          = withObject "BuildingCoordinates"
+              (\ o ->
+                 BuildingCoordinates' <$>
+                   (o .:? "latitude") <*> (o .:? "longitude"))
+
+instance ToJSON BuildingCoordinates where
+        toJSON BuildingCoordinates'{..}
+          = object
+              (catMaybes
+                 [("latitude" .=) <$> _bcLatitude,
+                  ("longitude" .=) <$> _bcLongitude])
+
+-- | JSON template for a relation entry.
+--
+-- /See:/ 'userRelation' smart constructor.
+data UserRelation = UserRelation'
+    { _urValue      :: !(Maybe Text)
+    , _urType       :: !(Maybe Text)
+    , _urCustomType :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UserRelation' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'urValue'
+--
+-- * 'urType'
+--
+-- * 'urCustomType'
+userRelation
+    :: UserRelation
+userRelation =
+    UserRelation'
+    { _urValue = Nothing
+    , _urType = Nothing
+    , _urCustomType = Nothing
+    }
+
+-- | The name of the relation.
+urValue :: Lens' UserRelation (Maybe Text)
+urValue = lens _urValue (\ s a -> s{_urValue = a})
+
+-- | The relation of the user. Some of the possible values are mother,
+-- father, sister, brother, manager, assistant, partner.
+urType :: Lens' UserRelation (Maybe Text)
+urType = lens _urType (\ s a -> s{_urType = a})
+
+-- | Custom Type.
+urCustomType :: Lens' UserRelation (Maybe Text)
+urCustomType
+  = lens _urCustomType (\ s a -> s{_urCustomType = a})
+
+instance FromJSON UserRelation where
+        parseJSON
+          = withObject "UserRelation"
+              (\ o ->
+                 UserRelation' <$>
+                   (o .:? "value") <*> (o .:? "type") <*>
+                     (o .:? "customType"))
+
+instance ToJSON UserRelation where
+        toJSON UserRelation'{..}
+          = object
+              (catMaybes
+                 [("value" .=) <$> _urValue, ("type" .=) <$> _urType,
+                  ("customType" .=) <$> _urCustomType])
+
+-- | JSON template for Trusted Apps response object of a user in Directory
+-- API.
+--
+-- /See:/ 'trustedApps' smart constructor.
+data TrustedApps = TrustedApps'
+    { _taEtag          :: !(Maybe Text)
+    , _taNextPageToken :: !(Maybe Text)
+    , _taKind          :: !Text
+    , _taTrustedApps   :: !(Maybe [TrustedAppId])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TrustedApps' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'taEtag'
+--
+-- * 'taNextPageToken'
+--
+-- * 'taKind'
+--
+-- * 'taTrustedApps'
+trustedApps
+    :: TrustedApps
+trustedApps =
+    TrustedApps'
+    { _taEtag = Nothing
+    , _taNextPageToken = Nothing
+    , _taKind = "admin#directory#trustedapplist"
+    , _taTrustedApps = Nothing
+    }
+
+-- | ETag of the resource.
+taEtag :: Lens' TrustedApps (Maybe Text)
+taEtag = lens _taEtag (\ s a -> s{_taEtag = a})
+
+taNextPageToken :: Lens' TrustedApps (Maybe Text)
+taNextPageToken
+  = lens _taNextPageToken
+      (\ s a -> s{_taNextPageToken = a})
+
+-- | Identifies the resource as trusted apps response.
+taKind :: Lens' TrustedApps Text
+taKind = lens _taKind (\ s a -> s{_taKind = a})
+
+-- | Trusted Apps list.
+taTrustedApps :: Lens' TrustedApps [TrustedAppId]
+taTrustedApps
+  = lens _taTrustedApps
+      (\ s a -> s{_taTrustedApps = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON TrustedApps where
+        parseJSON
+          = withObject "TrustedApps"
+              (\ o ->
+                 TrustedApps' <$>
+                   (o .:? "etag") <*> (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "admin#directory#trustedapplist")
+                     <*> (o .:? "trustedApps" .!= mempty))
+
+instance ToJSON TrustedApps where
+        toJSON TrustedApps'{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _taEtag,
+                  ("nextPageToken" .=) <$> _taNextPageToken,
+                  Just ("kind" .= _taKind),
+                  ("trustedApps" .=) <$> _taTrustedApps])
+
+-- | JSON template for Feature List Response object in Directory API.
+--
+-- /See:/ 'features' smart constructor.
+data Features = Features'
+    { _feaEtag          :: !(Maybe Text)
+    , _feaNextPageToken :: !(Maybe Text)
+    , _feaKind          :: !Text
+    , _feaFeatures      :: !(Maybe [Feature])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Features' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'feaEtag'
+--
+-- * 'feaNextPageToken'
+--
+-- * 'feaKind'
+--
+-- * 'feaFeatures'
+features
+    :: Features
+features =
+    Features'
+    { _feaEtag = Nothing
+    , _feaNextPageToken = Nothing
+    , _feaKind = "admin#directory#resources#features#featuresList"
+    , _feaFeatures = Nothing
+    }
+
+-- | ETag of the resource.
+feaEtag :: Lens' Features (Maybe Text)
+feaEtag = lens _feaEtag (\ s a -> s{_feaEtag = a})
+
+-- | The continuation token, used to page through large result sets. Provide
+-- this value in a subsequent request to return the next page of results.
+feaNextPageToken :: Lens' Features (Maybe Text)
+feaNextPageToken
+  = lens _feaNextPageToken
+      (\ s a -> s{_feaNextPageToken = a})
+
+-- | Kind of resource this is.
+feaKind :: Lens' Features Text
+feaKind = lens _feaKind (\ s a -> s{_feaKind = a})
+
+-- | The Features in this page of results.
+feaFeatures :: Lens' Features [Feature]
+feaFeatures
+  = lens _feaFeatures (\ s a -> s{_feaFeatures = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON Features where
+        parseJSON
+          = withObject "Features"
+              (\ o ->
+                 Features' <$>
+                   (o .:? "etag") <*> (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!=
+                        "admin#directory#resources#features#featuresList")
+                     <*> (o .:? "features" .!= mempty))
+
+instance ToJSON Features where
+        toJSON Features'{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _feaEtag,
+                  ("nextPageToken" .=) <$> _feaNextPageToken,
+                  Just ("kind" .= _feaKind),
+                  ("features" .=) <$> _feaFeatures])
+
+-- | 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
+
+-- | Trusted Platform Module (TPM) (Read-only)
+--
+-- /See:/ 'chromeOSDeviceTpmVersionInfo' smart constructor.
+data ChromeOSDeviceTpmVersionInfo = ChromeOSDeviceTpmVersionInfo'
+    { _codtviVendorSpecific  :: !(Maybe Text)
+    , _codtviManufacturer    :: !(Maybe Text)
+    , _codtviSpecLevel       :: !(Maybe Text)
+    , _codtviTpmModel        :: !(Maybe Text)
+    , _codtviFamily          :: !(Maybe Text)
+    , _codtviFirmwareVersion :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ChromeOSDeviceTpmVersionInfo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'codtviVendorSpecific'
+--
+-- * 'codtviManufacturer'
+--
+-- * 'codtviSpecLevel'
+--
+-- * 'codtviTpmModel'
+--
+-- * 'codtviFamily'
+--
+-- * 'codtviFirmwareVersion'
+chromeOSDeviceTpmVersionInfo
+    :: ChromeOSDeviceTpmVersionInfo
+chromeOSDeviceTpmVersionInfo =
+    ChromeOSDeviceTpmVersionInfo'
+    { _codtviVendorSpecific = Nothing
+    , _codtviManufacturer = Nothing
+    , _codtviSpecLevel = Nothing
+    , _codtviTpmModel = Nothing
+    , _codtviFamily = Nothing
+    , _codtviFirmwareVersion = Nothing
+    }
+
+-- | Vendor-specific information such as Vendor ID.
+codtviVendorSpecific :: Lens' ChromeOSDeviceTpmVersionInfo (Maybe Text)
+codtviVendorSpecific
+  = lens _codtviVendorSpecific
+      (\ s a -> s{_codtviVendorSpecific = a})
+
+-- | TPM manufacturer code.
+codtviManufacturer :: Lens' ChromeOSDeviceTpmVersionInfo (Maybe Text)
+codtviManufacturer
+  = lens _codtviManufacturer
+      (\ s a -> s{_codtviManufacturer = a})
+
+-- | TPM specification level.
+codtviSpecLevel :: Lens' ChromeOSDeviceTpmVersionInfo (Maybe Text)
+codtviSpecLevel
+  = lens _codtviSpecLevel
+      (\ s a -> s{_codtviSpecLevel = a})
+
+-- | TPM model number.
+codtviTpmModel :: Lens' ChromeOSDeviceTpmVersionInfo (Maybe Text)
+codtviTpmModel
+  = lens _codtviTpmModel
+      (\ s a -> s{_codtviTpmModel = a})
+
+-- | TPM family.
+codtviFamily :: Lens' ChromeOSDeviceTpmVersionInfo (Maybe Text)
+codtviFamily
+  = lens _codtviFamily (\ s a -> s{_codtviFamily = a})
+
+-- | TPM firmware version.
+codtviFirmwareVersion :: Lens' ChromeOSDeviceTpmVersionInfo (Maybe Text)
+codtviFirmwareVersion
+  = lens _codtviFirmwareVersion
+      (\ s a -> s{_codtviFirmwareVersion = a})
+
+instance FromJSON ChromeOSDeviceTpmVersionInfo where
+        parseJSON
+          = withObject "ChromeOSDeviceTpmVersionInfo"
+              (\ o ->
+                 ChromeOSDeviceTpmVersionInfo' <$>
+                   (o .:? "vendorSpecific") <*> (o .:? "manufacturer")
+                     <*> (o .:? "specLevel")
+                     <*> (o .:? "tpmModel")
+                     <*> (o .:? "family")
+                     <*> (o .:? "firmwareVersion"))
+
+instance ToJSON ChromeOSDeviceTpmVersionInfo where
+        toJSON ChromeOSDeviceTpmVersionInfo'{..}
+          = object
+              (catMaybes
+                 [("vendorSpecific" .=) <$> _codtviVendorSpecific,
+                  ("manufacturer" .=) <$> _codtviManufacturer,
+                  ("specLevel" .=) <$> _codtviSpecLevel,
+                  ("tpmModel" .=) <$> _codtviTpmModel,
+                  ("family" .=) <$> _codtviFamily,
+                  ("firmwareVersion" .=) <$> _codtviFirmwareVersion])
+
+-- | JSON template for an organization entry.
+--
+-- /See:/ 'userOrganization' smart constructor.
+data UserOrganization = UserOrganization'
+    { _uoDePartment         :: !(Maybe Text)
+    , _uoLocation           :: !(Maybe Text)
+    , _uoCostCenter         :: !(Maybe Text)
+    , _uoDomain             :: !(Maybe Text)
+    , _uoSymbol             :: !(Maybe Text)
+    , _uoPrimary            :: !(Maybe Bool)
+    , _uoName               :: !(Maybe Text)
+    , _uoFullTimeEquivalent :: !(Maybe (Textual Int32))
+    , _uoTitle              :: !(Maybe Text)
+    , _uoType               :: !(Maybe Text)
+    , _uoCustomType         :: !(Maybe Text)
+    , _uoDescription        :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UserOrganization' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uoDePartment'
+--
+-- * 'uoLocation'
+--
+-- * 'uoCostCenter'
+--
+-- * 'uoDomain'
+--
+-- * 'uoSymbol'
+--
+-- * 'uoPrimary'
+--
+-- * 'uoName'
+--
+-- * 'uoFullTimeEquivalent'
+--
+-- * 'uoTitle'
+--
+-- * 'uoType'
+--
+-- * 'uoCustomType'
+--
+-- * 'uoDescription'
+userOrganization
+    :: UserOrganization
+userOrganization =
+    UserOrganization'
+    { _uoDePartment = Nothing
+    , _uoLocation = Nothing
+    , _uoCostCenter = Nothing
+    , _uoDomain = Nothing
+    , _uoSymbol = Nothing
+    , _uoPrimary = Nothing
+    , _uoName = Nothing
+    , _uoFullTimeEquivalent = Nothing
+    , _uoTitle = Nothing
+    , _uoType = Nothing
+    , _uoCustomType = Nothing
+    , _uoDescription = Nothing
+    }
+
+-- | Department within the organization.
+uoDePartment :: Lens' UserOrganization (Maybe Text)
+uoDePartment
+  = lens _uoDePartment (\ s a -> s{_uoDePartment = a})
+
+-- | Location of the organization. This need not be fully qualified address.
+uoLocation :: Lens' UserOrganization (Maybe Text)
+uoLocation
+  = lens _uoLocation (\ s a -> s{_uoLocation = a})
+
+-- | The cost center of the users department.
+uoCostCenter :: Lens' UserOrganization (Maybe Text)
+uoCostCenter
+  = lens _uoCostCenter (\ s a -> s{_uoCostCenter = a})
+
+-- | The domain to which the organization belongs to.
+uoDomain :: Lens' UserOrganization (Maybe Text)
+uoDomain = lens _uoDomain (\ s a -> s{_uoDomain = a})
+
+-- | Symbol of the organization.
+uoSymbol :: Lens' UserOrganization (Maybe Text)
+uoSymbol = lens _uoSymbol (\ s a -> s{_uoSymbol = a})
+
+-- | If it user\'s primary organization.
+uoPrimary :: Lens' UserOrganization (Maybe Bool)
+uoPrimary
+  = lens _uoPrimary (\ s a -> s{_uoPrimary = a})
+
+-- | Name of the organization
+uoName :: Lens' UserOrganization (Maybe Text)
+uoName = lens _uoName (\ s a -> s{_uoName = a})
+
+-- | The full-time equivalent percent within the organization (100000 =
+-- 100%).
+uoFullTimeEquivalent :: Lens' UserOrganization (Maybe Int32)
+uoFullTimeEquivalent
+  = lens _uoFullTimeEquivalent
+      (\ s a -> s{_uoFullTimeEquivalent = a})
+      . mapping _Coerce
+
+-- | Title (designation) of the user in the organization.
+uoTitle :: Lens' UserOrganization (Maybe Text)
+uoTitle = lens _uoTitle (\ s a -> s{_uoTitle = a})
+
+-- | Each entry can have a type which indicates standard types of that entry.
+-- For example organization could be of school, work etc. In addition to
+-- the standard type, an entry can have a custom type and can give it any
+-- name. Such types should have the CUSTOM value as type and also have a
+-- CustomType value.
+uoType :: Lens' UserOrganization (Maybe Text)
+uoType = lens _uoType (\ s a -> s{_uoType = a})
+
+-- | Custom type.
+uoCustomType :: Lens' UserOrganization (Maybe Text)
+uoCustomType
+  = lens _uoCustomType (\ s a -> s{_uoCustomType = a})
+
+-- | Description of the organization.
+uoDescription :: Lens' UserOrganization (Maybe Text)
+uoDescription
+  = lens _uoDescription
+      (\ s a -> s{_uoDescription = a})
+
+instance FromJSON UserOrganization where
+        parseJSON
+          = withObject "UserOrganization"
+              (\ o ->
+                 UserOrganization' <$>
+                   (o .:? "department") <*> (o .:? "location") <*>
+                     (o .:? "costCenter")
+                     <*> (o .:? "domain")
+                     <*> (o .:? "symbol")
+                     <*> (o .:? "primary")
+                     <*> (o .:? "name")
+                     <*> (o .:? "fullTimeEquivalent")
+                     <*> (o .:? "title")
+                     <*> (o .:? "type")
+                     <*> (o .:? "customType")
+                     <*> (o .:? "description"))
+
+instance ToJSON UserOrganization where
+        toJSON UserOrganization'{..}
+          = object
+              (catMaybes
+                 [("department" .=) <$> _uoDePartment,
+                  ("location" .=) <$> _uoLocation,
+                  ("costCenter" .=) <$> _uoCostCenter,
+                  ("domain" .=) <$> _uoDomain,
+                  ("symbol" .=) <$> _uoSymbol,
+                  ("primary" .=) <$> _uoPrimary,
+                  ("name" .=) <$> _uoName,
+                  ("fullTimeEquivalent" .=) <$> _uoFullTimeEquivalent,
+                  ("title" .=) <$> _uoTitle, ("type" .=) <$> _uoType,
+                  ("customType" .=) <$> _uoCustomType,
+                  ("description" .=) <$> _uoDescription])
+
+-- | JSON template for a website entry.
+--
+-- /See:/ 'userWebsite' smart constructor.
+data UserWebsite = UserWebsite'
+    { _uwValue      :: !(Maybe Text)
+    , _uwPrimary    :: !(Maybe Bool)
+    , _uwType       :: !(Maybe Text)
+    , _uwCustomType :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UserWebsite' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uwValue'
+--
+-- * 'uwPrimary'
+--
+-- * 'uwType'
+--
+-- * 'uwCustomType'
+userWebsite
+    :: UserWebsite
+userWebsite =
+    UserWebsite'
+    { _uwValue = Nothing
+    , _uwPrimary = Nothing
+    , _uwType = Nothing
+    , _uwCustomType = Nothing
+    }
+
+-- | Website.
+uwValue :: Lens' UserWebsite (Maybe Text)
+uwValue = lens _uwValue (\ s a -> s{_uwValue = a})
+
+-- | If this is user\'s primary website or not.
+uwPrimary :: Lens' UserWebsite (Maybe Bool)
+uwPrimary
+  = lens _uwPrimary (\ s a -> s{_uwPrimary = a})
+
+-- | Each entry can have a type which indicates standard types of that entry.
+-- For example website could be of home, work, blog etc. In addition to the
+-- standard type, an entry can have a custom type and can give it any name.
+-- Such types should have the CUSTOM value as type and also have a
+-- customType value.
+uwType :: Lens' UserWebsite (Maybe Text)
+uwType = lens _uwType (\ s a -> s{_uwType = a})
+
+-- | Custom Type.
+uwCustomType :: Lens' UserWebsite (Maybe Text)
+uwCustomType
+  = lens _uwCustomType (\ s a -> s{_uwCustomType = a})
+
+instance FromJSON UserWebsite where
+        parseJSON
+          = withObject "UserWebsite"
+              (\ o ->
+                 UserWebsite' <$>
+                   (o .:? "value") <*> (o .:? "primary") <*>
+                     (o .:? "type")
+                     <*> (o .:? "customType"))
+
+instance ToJSON UserWebsite where
+        toJSON UserWebsite'{..}
+          = object
+              (catMaybes
+                 [("value" .=) <$> _uwValue,
+                  ("primary" .=) <$> _uwPrimary,
+                  ("type" .=) <$> _uwType,
+                  ("customType" .=) <$> _uwCustomType])
+
+--
+-- /See:/ 'chromeOSDeviceActiveTimeRangesItem' smart constructor.
+data ChromeOSDeviceActiveTimeRangesItem = ChromeOSDeviceActiveTimeRangesItem'
+    { _codatriDate       :: !(Maybe Date')
+    , _codatriActiveTime :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ChromeOSDeviceActiveTimeRangesItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'codatriDate'
+--
+-- * 'codatriActiveTime'
+chromeOSDeviceActiveTimeRangesItem
+    :: ChromeOSDeviceActiveTimeRangesItem
+chromeOSDeviceActiveTimeRangesItem =
+    ChromeOSDeviceActiveTimeRangesItem'
+    { _codatriDate = Nothing
+    , _codatriActiveTime = Nothing
+    }
+
+-- | Date of usage
+codatriDate :: Lens' ChromeOSDeviceActiveTimeRangesItem (Maybe Day)
+codatriDate
+  = lens _codatriDate (\ s a -> s{_codatriDate = a}) .
+      mapping _Date
+
+-- | Duration in milliseconds
+codatriActiveTime :: Lens' ChromeOSDeviceActiveTimeRangesItem (Maybe Int32)
+codatriActiveTime
+  = lens _codatriActiveTime
+      (\ s a -> s{_codatriActiveTime = a})
+      . mapping _Coerce
+
+instance FromJSON ChromeOSDeviceActiveTimeRangesItem
+         where
+        parseJSON
+          = withObject "ChromeOSDeviceActiveTimeRangesItem"
+              (\ o ->
+                 ChromeOSDeviceActiveTimeRangesItem' <$>
+                   (o .:? "date") <*> (o .:? "activeTime"))
+
+instance ToJSON ChromeOSDeviceActiveTimeRangesItem
+         where
+        toJSON ChromeOSDeviceActiveTimeRangesItem'{..}
+          = object
+              (catMaybes
+                 [("date" .=) <$> _codatriDate,
+                  ("activeTime" .=) <$> _codatriActiveTime])
+
+-- | JSON template for an email.
+--
+-- /See:/ 'userEmail' smart constructor.
+data UserEmail = UserEmail'
+    { _ueAddress    :: !(Maybe Text)
+    , _uePrimary    :: !(Maybe Bool)
+    , _ueType       :: !(Maybe Text)
+    , _ueCustomType :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UserEmail' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ueAddress'
+--
+-- * 'uePrimary'
+--
+-- * 'ueType'
+--
+-- * 'ueCustomType'
+userEmail
+    :: UserEmail
+userEmail =
+    UserEmail'
+    { _ueAddress = Nothing
+    , _uePrimary = Nothing
+    , _ueType = Nothing
+    , _ueCustomType = Nothing
+    }
+
+-- | Email id of the user.
+ueAddress :: Lens' UserEmail (Maybe Text)
+ueAddress
+  = lens _ueAddress (\ s a -> s{_ueAddress = a})
+
+-- | If this is user\'s primary email. Only one entry could be marked as
+-- primary.
+uePrimary :: Lens' UserEmail (Maybe Bool)
+uePrimary
+  = lens _uePrimary (\ s a -> s{_uePrimary = a})
+
+-- | Each entry can have a type which indicates standard types of that entry.
+-- For example email could be of home, work etc. In addition to the
+-- standard type, an entry can have a custom type and can take any value
+-- Such types should have the CUSTOM value as type and also have a
+-- customType value.
+ueType :: Lens' UserEmail (Maybe Text)
+ueType = lens _ueType (\ s a -> s{_ueType = a})
+
+-- | Custom Type.
+ueCustomType :: Lens' UserEmail (Maybe Text)
+ueCustomType
+  = lens _ueCustomType (\ s a -> s{_ueCustomType = a})
+
+instance FromJSON UserEmail where
+        parseJSON
+          = withObject "UserEmail"
+              (\ o ->
+                 UserEmail' <$>
+                   (o .:? "address") <*> (o .:? "primary") <*>
+                     (o .:? "type")
+                     <*> (o .:? "customType"))
+
+instance ToJSON UserEmail where
+        toJSON UserEmail'{..}
+          = object
+              (catMaybes
+                 [("address" .=) <$> _ueAddress,
+                  ("primary" .=) <$> _uePrimary,
+                  ("type" .=) <$> _ueType,
+                  ("customType" .=) <$> _ueCustomType])
+
+-- | JSON template for a phone entry.
+--
+-- /See:/ 'userPhone' smart constructor.
+data UserPhone = UserPhone'
+    { _upValue      :: !(Maybe Text)
+    , _upPrimary    :: !(Maybe Bool)
+    , _upType       :: !(Maybe Text)
+    , _upCustomType :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UserPhone' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'upValue'
+--
+-- * 'upPrimary'
+--
+-- * 'upType'
+--
+-- * 'upCustomType'
+userPhone
+    :: UserPhone
+userPhone =
+    UserPhone'
+    { _upValue = Nothing
+    , _upPrimary = Nothing
+    , _upType = Nothing
+    , _upCustomType = Nothing
+    }
+
+-- | Phone number.
+upValue :: Lens' UserPhone (Maybe Text)
+upValue = lens _upValue (\ s a -> s{_upValue = a})
+
+-- | If this is user\'s primary phone or not.
+upPrimary :: Lens' UserPhone (Maybe Bool)
+upPrimary
+  = lens _upPrimary (\ s a -> s{_upPrimary = a})
+
+-- | Each entry can have a type which indicates standard types of that entry.
+-- For example phone could be of home_fax, work, mobile etc. In addition to
+-- the standard type, an entry can have a custom type and can give it any
+-- name. Such types should have the CUSTOM value as type and also have a
+-- customType value.
+upType :: Lens' UserPhone (Maybe Text)
+upType = lens _upType (\ s a -> s{_upType = a})
+
+-- | Custom Type.
+upCustomType :: Lens' UserPhone (Maybe Text)
+upCustomType
+  = lens _upCustomType (\ s a -> s{_upCustomType = a})
+
+instance FromJSON UserPhone where
+        parseJSON
+          = withObject "UserPhone"
+              (\ o ->
+                 UserPhone' <$>
+                   (o .:? "value") <*> (o .:? "primary") <*>
+                     (o .:? "type")
+                     <*> (o .:? "customType"))
+
+instance ToJSON UserPhone where
+        toJSON UserPhone'{..}
+          = object
+              (catMaybes
+                 [("value" .=) <$> _upValue,
+                  ("primary" .=) <$> _upPrimary,
+                  ("type" .=) <$> _upType,
+                  ("customType" .=) <$> _upCustomType])
+
+-- | JSON template for Photo object in Directory API.
+--
+-- /See:/ 'userPhoto' smart constructor.
+data UserPhoto = UserPhoto'
+    { _upPhotoData    :: !(Maybe Bytes)
+    , _upEtag         :: !(Maybe Text)
+    , _upHeight       :: !(Maybe (Textual Int32))
+    , _upKind         :: !Text
+    , _upWidth        :: !(Maybe (Textual Int32))
+    , _upMimeType     :: !(Maybe Text)
+    , _upId           :: !(Maybe Text)
+    , _upPrimaryEmail :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UserPhoto' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'upPhotoData'
+--
+-- * 'upEtag'
+--
+-- * 'upHeight'
+--
+-- * 'upKind'
+--
+-- * 'upWidth'
+--
+-- * 'upMimeType'
+--
+-- * 'upId'
+--
+-- * 'upPrimaryEmail'
+userPhoto
+    :: UserPhoto
+userPhoto =
+    UserPhoto'
+    { _upPhotoData = Nothing
+    , _upEtag = Nothing
+    , _upHeight = Nothing
+    , _upKind = "admin#directory#user#photo"
+    , _upWidth = Nothing
+    , _upMimeType = Nothing
+    , _upId = Nothing
+    , _upPrimaryEmail = Nothing
+    }
+
+-- | Base64 encoded photo data
+upPhotoData :: Lens' UserPhoto (Maybe ByteString)
+upPhotoData
+  = lens _upPhotoData (\ s a -> s{_upPhotoData = a}) .
+      mapping _Bytes
+
+-- | ETag of the resource.
+upEtag :: Lens' UserPhoto (Maybe Text)
+upEtag = lens _upEtag (\ s a -> s{_upEtag = a})
+
+-- | Height in pixels of the photo
+upHeight :: Lens' UserPhoto (Maybe Int32)
+upHeight
+  = lens _upHeight (\ s a -> s{_upHeight = a}) .
+      mapping _Coerce
+
+-- | Kind of resource this is.
+upKind :: Lens' UserPhoto Text
+upKind = lens _upKind (\ s a -> s{_upKind = a})
+
+-- | Width in pixels of the photo
+upWidth :: Lens' UserPhoto (Maybe Int32)
+upWidth
+  = lens _upWidth (\ s a -> s{_upWidth = a}) .
+      mapping _Coerce
+
+-- | Mime Type of the photo
+upMimeType :: Lens' UserPhoto (Maybe Text)
+upMimeType
+  = lens _upMimeType (\ s a -> s{_upMimeType = a})
+
+-- | Unique identifier of User (Read-only)
+upId :: Lens' UserPhoto (Maybe Text)
+upId = lens _upId (\ s a -> s{_upId = a})
+
+-- | Primary email of User (Read-only)
+upPrimaryEmail :: Lens' UserPhoto (Maybe Text)
+upPrimaryEmail
+  = lens _upPrimaryEmail
+      (\ s a -> s{_upPrimaryEmail = a})
+
+instance FromJSON UserPhoto where
+        parseJSON
+          = withObject "UserPhoto"
+              (\ o ->
+                 UserPhoto' <$>
+                   (o .:? "photoData") <*> (o .:? "etag") <*>
+                     (o .:? "height")
+                     <*> (o .:? "kind" .!= "admin#directory#user#photo")
+                     <*> (o .:? "width")
+                     <*> (o .:? "mimeType")
+                     <*> (o .:? "id")
+                     <*> (o .:? "primaryEmail"))
+
+instance ToJSON UserPhoto where
+        toJSON UserPhoto'{..}
+          = object
+              (catMaybes
+                 [("photoData" .=) <$> _upPhotoData,
+                  ("etag" .=) <$> _upEtag, ("height" .=) <$> _upHeight,
+                  Just ("kind" .= _upKind), ("width" .=) <$> _upWidth,
+                  ("mimeType" .=) <$> _upMimeType, ("id" .=) <$> _upId,
+                  ("primaryEmail" .=) <$> _upPrimaryEmail])
+
+--
+-- /See:/ 'chromeOSDeviceSystemRamFreeReportsItem' smart constructor.
+data ChromeOSDeviceSystemRamFreeReportsItem = ChromeOSDeviceSystemRamFreeReportsItem'
+    { _codsrfriReportTime        :: !(Maybe DateTime')
+    , _codsrfriSystemRamFreeInfo :: !(Maybe [Textual Int64])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ChromeOSDeviceSystemRamFreeReportsItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'codsrfriReportTime'
+--
+-- * 'codsrfriSystemRamFreeInfo'
+chromeOSDeviceSystemRamFreeReportsItem
+    :: ChromeOSDeviceSystemRamFreeReportsItem
+chromeOSDeviceSystemRamFreeReportsItem =
+    ChromeOSDeviceSystemRamFreeReportsItem'
+    { _codsrfriReportTime = Nothing
+    , _codsrfriSystemRamFreeInfo = Nothing
+    }
+
+-- | Date and time the report was received.
+codsrfriReportTime :: Lens' ChromeOSDeviceSystemRamFreeReportsItem (Maybe UTCTime)
+codsrfriReportTime
+  = lens _codsrfriReportTime
+      (\ s a -> s{_codsrfriReportTime = a})
+      . mapping _DateTime
+
+codsrfriSystemRamFreeInfo :: Lens' ChromeOSDeviceSystemRamFreeReportsItem [Int64]
+codsrfriSystemRamFreeInfo
+  = lens _codsrfriSystemRamFreeInfo
+      (\ s a -> s{_codsrfriSystemRamFreeInfo = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON
+         ChromeOSDeviceSystemRamFreeReportsItem where
+        parseJSON
+          = withObject "ChromeOSDeviceSystemRamFreeReportsItem"
+              (\ o ->
+                 ChromeOSDeviceSystemRamFreeReportsItem' <$>
+                   (o .:? "reportTime") <*>
+                     (o .:? "systemRamFreeInfo" .!= mempty))
+
+instance ToJSON
+         ChromeOSDeviceSystemRamFreeReportsItem where
+        toJSON ChromeOSDeviceSystemRamFreeReportsItem'{..}
+          = object
+              (catMaybes
+                 [("reportTime" .=) <$> _codsrfriReportTime,
+                  ("systemRamFreeInfo" .=) <$>
+                    _codsrfriSystemRamFreeInfo])
+
+-- | JSON template for a POSIX account entry. Description of the field
+-- family: go\/fbs-posix.
+--
+-- /See:/ 'userPosixAccount' smart constructor.
+data UserPosixAccount = UserPosixAccount'
+    { _upaGecos               :: !(Maybe Text)
+    , _upaUid                 :: !(Maybe (Textual Word64))
+    , _upaUsername            :: !(Maybe Text)
+    , _upaShell               :: !(Maybe Text)
+    , _upaPrimary             :: !(Maybe Bool)
+    , _upaAccountId           :: !(Maybe Text)
+    , _upaGid                 :: !(Maybe (Textual Word64))
+    , _upaOperatingSystemType :: !(Maybe Text)
+    , _upaSystemId            :: !(Maybe Text)
+    , _upaHomeDirectory       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UserPosixAccount' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'upaGecos'
+--
+-- * 'upaUid'
+--
+-- * 'upaUsername'
+--
+-- * 'upaShell'
+--
+-- * 'upaPrimary'
+--
+-- * 'upaAccountId'
+--
+-- * 'upaGid'
+--
+-- * 'upaOperatingSystemType'
+--
+-- * 'upaSystemId'
+--
+-- * 'upaHomeDirectory'
+userPosixAccount
+    :: UserPosixAccount
+userPosixAccount =
+    UserPosixAccount'
+    { _upaGecos = Nothing
+    , _upaUid = Nothing
+    , _upaUsername = Nothing
+    , _upaShell = Nothing
+    , _upaPrimary = Nothing
+    , _upaAccountId = Nothing
+    , _upaGid = Nothing
+    , _upaOperatingSystemType = Nothing
+    , _upaSystemId = Nothing
+    , _upaHomeDirectory = Nothing
+    }
+
+-- | The GECOS (user information) for this account.
+upaGecos :: Lens' UserPosixAccount (Maybe Text)
+upaGecos = lens _upaGecos (\ s a -> s{_upaGecos = a})
+
+-- | The POSIX compliant user ID.
+upaUid :: Lens' UserPosixAccount (Maybe Word64)
+upaUid
+  = lens _upaUid (\ s a -> s{_upaUid = a}) .
+      mapping _Coerce
+
+-- | The username of the account.
+upaUsername :: Lens' UserPosixAccount (Maybe Text)
+upaUsername
+  = lens _upaUsername (\ s a -> s{_upaUsername = a})
+
+-- | The path to the login shell for this account.
+upaShell :: Lens' UserPosixAccount (Maybe Text)
+upaShell = lens _upaShell (\ s a -> s{_upaShell = a})
+
+-- | If this is user\'s primary account within the SystemId.
+upaPrimary :: Lens' UserPosixAccount (Maybe Bool)
+upaPrimary
+  = lens _upaPrimary (\ s a -> s{_upaPrimary = a})
+
+-- | A POSIX account field identifier. (Read-only)
+upaAccountId :: Lens' UserPosixAccount (Maybe Text)
+upaAccountId
+  = lens _upaAccountId (\ s a -> s{_upaAccountId = a})
+
+-- | The default group ID.
+upaGid :: Lens' UserPosixAccount (Maybe Word64)
+upaGid
+  = lens _upaGid (\ s a -> s{_upaGid = a}) .
+      mapping _Coerce
+
+-- | The operating system type for this account.
+upaOperatingSystemType :: Lens' UserPosixAccount (Maybe Text)
+upaOperatingSystemType
+  = lens _upaOperatingSystemType
+      (\ s a -> s{_upaOperatingSystemType = a})
+
+-- | System identifier for which account Username or Uid apply to.
+upaSystemId :: Lens' UserPosixAccount (Maybe Text)
+upaSystemId
+  = lens _upaSystemId (\ s a -> s{_upaSystemId = a})
+
+-- | The path to the home directory for this account.
+upaHomeDirectory :: Lens' UserPosixAccount (Maybe Text)
+upaHomeDirectory
+  = lens _upaHomeDirectory
+      (\ s a -> s{_upaHomeDirectory = a})
+
+instance FromJSON UserPosixAccount where
+        parseJSON
+          = withObject "UserPosixAccount"
+              (\ o ->
+                 UserPosixAccount' <$>
+                   (o .:? "gecos") <*> (o .:? "uid") <*>
+                     (o .:? "username")
+                     <*> (o .:? "shell")
+                     <*> (o .:? "primary")
+                     <*> (o .:? "accountId")
+                     <*> (o .:? "gid")
+                     <*> (o .:? "operatingSystemType")
+                     <*> (o .:? "systemId")
+                     <*> (o .:? "homeDirectory"))
+
+instance ToJSON UserPosixAccount where
+        toJSON UserPosixAccount'{..}
+          = object
+              (catMaybes
+                 [("gecos" .=) <$> _upaGecos, ("uid" .=) <$> _upaUid,
+                  ("username" .=) <$> _upaUsername,
+                  ("shell" .=) <$> _upaShell,
+                  ("primary" .=) <$> _upaPrimary,
+                  ("accountId" .=) <$> _upaAccountId,
+                  ("gid" .=) <$> _upaGid,
+                  ("operatingSystemType" .=) <$>
+                    _upaOperatingSystemType,
+                  ("systemId" .=) <$> _upaSystemId,
+                  ("homeDirectory" .=) <$> _upaHomeDirectory])
+
+-- | JSON template for a \"feature instance\".
+--
+-- /See:/ 'featureInstance' smart constructor.
+newtype FeatureInstance = FeatureInstance'
+    { _fiFeature :: Maybe Feature
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FeatureInstance' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fiFeature'
+featureInstance
+    :: FeatureInstance
+featureInstance =
+    FeatureInstance'
+    { _fiFeature = Nothing
+    }
+
+-- | The feature that this is an instance of. A calendar resource may have
+-- multiple instances of a feature.
+fiFeature :: Lens' FeatureInstance (Maybe Feature)
+fiFeature
+  = lens _fiFeature (\ s a -> s{_fiFeature = a})
+
+instance FromJSON FeatureInstance where
+        parseJSON
+          = withObject "FeatureInstance"
+              (\ o -> FeatureInstance' <$> (o .:? "feature"))
+
+instance ToJSON FeatureInstance where
+        toJSON FeatureInstance'{..}
+          = object (catMaybes [("feature" .=) <$> _fiFeature])
+
+-- | JSON template for Mobile Device resource in Directory API.
+--
+-- /See:/ 'mobileDevice' smart constructor.
+data MobileDevice = MobileDevice'
+    { _mobEmail                          :: !(Maybe [Text])
+    , _mobStatus                         :: !(Maybe Text)
+    , _mobPrivilege                      :: !(Maybe Text)
+    , _mobEtag                           :: !(Maybe Text)
+    , _mobResourceId                     :: !(Maybe Text)
+    , _mobManufacturer                   :: !(Maybe Text)
+    , _mobBuildNumber                    :: !(Maybe Text)
+    , _mobManagedAccountIsOnOwnerProFile :: !(Maybe Bool)
+    , _mobLastSync                       :: !(Maybe DateTime')
+    , _mobOtherAccountsInfo              :: !(Maybe [Text])
+    , _mobKind                           :: !Text
+    , _mobAdbStatus                      :: !(Maybe Bool)
+    , _mobReleaseVersion                 :: !(Maybe Text)
+    , _mobBrand                          :: !(Maybe Text)
+    , _mobSecurityPatchLevel             :: !(Maybe (Textual Int64))
+    , _mobNetworkOperator                :: !(Maybe Text)
+    , _mobKernelVersion                  :: !(Maybe Text)
+    , _mobOS                             :: !(Maybe Text)
+    , _mobName                           :: !(Maybe [Text])
+    , _mobModel                          :: !(Maybe Text)
+    , _mobDeveloperOptionsStatus         :: !(Maybe Bool)
+    , _mobUnknownSourcesStatus           :: !(Maybe Bool)
+    , _mobMeid                           :: !(Maybe Text)
+    , _mobBootLoaderVersion              :: !(Maybe Text)
+    , _mobDeviceId                       :: !(Maybe Text)
+    , _mobFirstSync                      :: !(Maybe DateTime')
+    , _mobUserAgent                      :: !(Maybe Text)
+    , _mobImei                           :: !(Maybe Text)
+    , _mobType                           :: !(Maybe Text)
+    , _mobWifiMACAddress                 :: !(Maybe Text)
+    , _mobEncryptionStatus               :: !(Maybe Text)
+    , _mobSerialNumber                   :: !(Maybe Text)
+    , _mobDevicePasswordStatus           :: !(Maybe Text)
+    , _mobHardwareId                     :: !(Maybe Text)
+    , _mobBasebandVersion                :: !(Maybe Text)
+    , _mobSupportsWorkProFile            :: !(Maybe Bool)
+    , _mobHardware                       :: !(Maybe Text)
+    , _mobDeviceCompromisedStatus        :: !(Maybe Text)
+    , _mobApplications                   :: !(Maybe [MobileDeviceApplicationsItem])
+    , _mobDefaultLanguage                :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MobileDevice' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mobEmail'
+--
+-- * 'mobStatus'
+--
+-- * 'mobPrivilege'
+--
+-- * 'mobEtag'
+--
+-- * 'mobResourceId'
+--
+-- * 'mobManufacturer'
+--
+-- * 'mobBuildNumber'
+--
+-- * 'mobManagedAccountIsOnOwnerProFile'
+--
+-- * 'mobLastSync'
+--
+-- * 'mobOtherAccountsInfo'
+--
+-- * 'mobKind'
+--
+-- * 'mobAdbStatus'
+--
+-- * 'mobReleaseVersion'
+--
+-- * 'mobBrand'
+--
+-- * 'mobSecurityPatchLevel'
+--
+-- * 'mobNetworkOperator'
+--
+-- * 'mobKernelVersion'
+--
+-- * 'mobOS'
+--
+-- * 'mobName'
+--
+-- * 'mobModel'
+--
+-- * 'mobDeveloperOptionsStatus'
+--
+-- * 'mobUnknownSourcesStatus'
+--
+-- * 'mobMeid'
+--
+-- * 'mobBootLoaderVersion'
+--
+-- * 'mobDeviceId'
+--
+-- * 'mobFirstSync'
+--
+-- * 'mobUserAgent'
+--
+-- * 'mobImei'
+--
+-- * 'mobType'
+--
+-- * 'mobWifiMACAddress'
+--
+-- * 'mobEncryptionStatus'
+--
+-- * 'mobSerialNumber'
+--
+-- * 'mobDevicePasswordStatus'
+--
+-- * 'mobHardwareId'
+--
+-- * 'mobBasebandVersion'
+--
+-- * 'mobSupportsWorkProFile'
+--
+-- * 'mobHardware'
+--
+-- * 'mobDeviceCompromisedStatus'
+--
+-- * 'mobApplications'
+--
+-- * 'mobDefaultLanguage'
+mobileDevice
+    :: MobileDevice
+mobileDevice =
+    MobileDevice'
+    { _mobEmail = Nothing
+    , _mobStatus = Nothing
+    , _mobPrivilege = Nothing
+    , _mobEtag = Nothing
+    , _mobResourceId = Nothing
+    , _mobManufacturer = Nothing
+    , _mobBuildNumber = Nothing
+    , _mobManagedAccountIsOnOwnerProFile = Nothing
+    , _mobLastSync = Nothing
+    , _mobOtherAccountsInfo = Nothing
+    , _mobKind = "admin#directory#mobiledevice"
+    , _mobAdbStatus = Nothing
+    , _mobReleaseVersion = Nothing
+    , _mobBrand = Nothing
+    , _mobSecurityPatchLevel = Nothing
+    , _mobNetworkOperator = Nothing
+    , _mobKernelVersion = Nothing
+    , _mobOS = Nothing
+    , _mobName = Nothing
+    , _mobModel = Nothing
+    , _mobDeveloperOptionsStatus = Nothing
+    , _mobUnknownSourcesStatus = Nothing
+    , _mobMeid = Nothing
+    , _mobBootLoaderVersion = Nothing
+    , _mobDeviceId = Nothing
+    , _mobFirstSync = Nothing
+    , _mobUserAgent = Nothing
+    , _mobImei = Nothing
+    , _mobType = Nothing
+    , _mobWifiMACAddress = Nothing
+    , _mobEncryptionStatus = Nothing
+    , _mobSerialNumber = Nothing
+    , _mobDevicePasswordStatus = Nothing
+    , _mobHardwareId = Nothing
+    , _mobBasebandVersion = Nothing
+    , _mobSupportsWorkProFile = Nothing
+    , _mobHardware = Nothing
+    , _mobDeviceCompromisedStatus = Nothing
+    , _mobApplications = Nothing
+    , _mobDefaultLanguage = Nothing
+    }
+
+-- | List of owner user\'s email addresses (Read-only)
+mobEmail :: Lens' MobileDevice [Text]
+mobEmail
+  = lens _mobEmail (\ s a -> s{_mobEmail = a}) .
+      _Default
+      . _Coerce
+
+-- | Status of the device (Read-only)
+mobStatus :: Lens' MobileDevice (Maybe Text)
+mobStatus
+  = lens _mobStatus (\ s a -> s{_mobStatus = a})
+
+-- | DMAgentPermission (Read-only)
+mobPrivilege :: Lens' MobileDevice (Maybe Text)
+mobPrivilege
+  = lens _mobPrivilege (\ s a -> s{_mobPrivilege = a})
+
+-- | ETag of the resource.
+mobEtag :: Lens' MobileDevice (Maybe Text)
+mobEtag = lens _mobEtag (\ s a -> s{_mobEtag = a})
+
+-- | Unique identifier of Mobile Device (Read-only)
+mobResourceId :: Lens' MobileDevice (Maybe Text)
+mobResourceId
+  = lens _mobResourceId
+      (\ s a -> s{_mobResourceId = a})
+
+-- | Mobile Device manufacturer (Read-only)
+mobManufacturer :: Lens' MobileDevice (Maybe Text)
+mobManufacturer
+  = lens _mobManufacturer
+      (\ s a -> s{_mobManufacturer = a})
+
+-- | Mobile Device Build number (Read-only)
+mobBuildNumber :: Lens' MobileDevice (Maybe Text)
+mobBuildNumber
+  = lens _mobBuildNumber
+      (\ s a -> s{_mobBuildNumber = a})
+
+-- | Boolean indicating if this account is on owner\/primary profile or not
+-- (Read-only)
+mobManagedAccountIsOnOwnerProFile :: Lens' MobileDevice (Maybe Bool)
+mobManagedAccountIsOnOwnerProFile
+  = lens _mobManagedAccountIsOnOwnerProFile
+      (\ s a -> s{_mobManagedAccountIsOnOwnerProFile = a})
+
+-- | Date and time the device was last synchronized with the policy settings
+-- in the G Suite administrator control panel (Read-only)
+mobLastSync :: Lens' MobileDevice (Maybe UTCTime)
+mobLastSync
+  = lens _mobLastSync (\ s a -> s{_mobLastSync = a}) .
+      mapping _DateTime
+
+-- | List of accounts added on device (Read-only)
+mobOtherAccountsInfo :: Lens' MobileDevice [Text]
+mobOtherAccountsInfo
+  = lens _mobOtherAccountsInfo
+      (\ s a -> s{_mobOtherAccountsInfo = a})
+      . _Default
+      . _Coerce
+
+-- | Kind of resource this is.
+mobKind :: Lens' MobileDevice Text
+mobKind = lens _mobKind (\ s a -> s{_mobKind = a})
+
+-- | Adb (USB debugging) enabled or disabled on device (Read-only)
+mobAdbStatus :: Lens' MobileDevice (Maybe Bool)
+mobAdbStatus
+  = lens _mobAdbStatus (\ s a -> s{_mobAdbStatus = a})
+
+-- | Mobile Device release version version (Read-only)
+mobReleaseVersion :: Lens' MobileDevice (Maybe Text)
+mobReleaseVersion
+  = lens _mobReleaseVersion
+      (\ s a -> s{_mobReleaseVersion = a})
+
+-- | Mobile Device Brand (Read-only)
+mobBrand :: Lens' MobileDevice (Maybe Text)
+mobBrand = lens _mobBrand (\ s a -> s{_mobBrand = a})
+
+-- | Mobile Device Security patch level (Read-only)
+mobSecurityPatchLevel :: Lens' MobileDevice (Maybe Int64)
+mobSecurityPatchLevel
+  = lens _mobSecurityPatchLevel
+      (\ s a -> s{_mobSecurityPatchLevel = a})
+      . mapping _Coerce
+
+-- | Mobile Device mobile or network operator (if available) (Read-only)
+mobNetworkOperator :: Lens' MobileDevice (Maybe Text)
+mobNetworkOperator
+  = lens _mobNetworkOperator
+      (\ s a -> s{_mobNetworkOperator = a})
+
+-- | Mobile Device Kernel version (Read-only)
+mobKernelVersion :: Lens' MobileDevice (Maybe Text)
+mobKernelVersion
+  = lens _mobKernelVersion
+      (\ s a -> s{_mobKernelVersion = a})
+
+-- | Name of the mobile operating system
+mobOS :: Lens' MobileDevice (Maybe Text)
+mobOS = lens _mobOS (\ s a -> s{_mobOS = a})
+
+-- | List of owner user\'s names (Read-only)
+mobName :: Lens' MobileDevice [Text]
+mobName
+  = lens _mobName (\ s a -> s{_mobName = a}) . _Default
+      . _Coerce
+
+-- | Name of the model of the device
+mobModel :: Lens' MobileDevice (Maybe Text)
+mobModel = lens _mobModel (\ s a -> s{_mobModel = a})
+
+-- | Developer options enabled or disabled on device (Read-only)
+mobDeveloperOptionsStatus :: Lens' MobileDevice (Maybe Bool)
+mobDeveloperOptionsStatus
+  = lens _mobDeveloperOptionsStatus
+      (\ s a -> s{_mobDeveloperOptionsStatus = a})
+
+-- | Unknown sources enabled or disabled on device (Read-only)
+mobUnknownSourcesStatus :: Lens' MobileDevice (Maybe Bool)
+mobUnknownSourcesStatus
+  = lens _mobUnknownSourcesStatus
+      (\ s a -> s{_mobUnknownSourcesStatus = a})
+
+-- | Mobile Device MEID number (Read-only)
+mobMeid :: Lens' MobileDevice (Maybe Text)
+mobMeid = lens _mobMeid (\ s a -> s{_mobMeid = a})
+
+-- | Mobile Device Bootloader version (Read-only)
+mobBootLoaderVersion :: Lens' MobileDevice (Maybe Text)
+mobBootLoaderVersion
+  = lens _mobBootLoaderVersion
+      (\ s a -> s{_mobBootLoaderVersion = a})
+
+-- | Mobile Device serial number (Read-only)
+mobDeviceId :: Lens' MobileDevice (Maybe Text)
+mobDeviceId
+  = lens _mobDeviceId (\ s a -> s{_mobDeviceId = a})
+
+-- | Date and time the device was first synchronized with the policy settings
+-- in the G Suite administrator control panel (Read-only)
+mobFirstSync :: Lens' MobileDevice (Maybe UTCTime)
+mobFirstSync
+  = lens _mobFirstSync (\ s a -> s{_mobFirstSync = a})
+      . mapping _DateTime
+
+-- | Mobile Device user agent
+mobUserAgent :: Lens' MobileDevice (Maybe Text)
+mobUserAgent
+  = lens _mobUserAgent (\ s a -> s{_mobUserAgent = a})
+
+-- | Mobile Device IMEI number (Read-only)
+mobImei :: Lens' MobileDevice (Maybe Text)
+mobImei = lens _mobImei (\ s a -> s{_mobImei = a})
+
+-- | The type of device (Read-only)
+mobType :: Lens' MobileDevice (Maybe Text)
+mobType = lens _mobType (\ s a -> s{_mobType = a})
+
+-- | Mobile Device WiFi MAC address (Read-only)
+mobWifiMACAddress :: Lens' MobileDevice (Maybe Text)
+mobWifiMACAddress
+  = lens _mobWifiMACAddress
+      (\ s a -> s{_mobWifiMACAddress = a})
+
+-- | Mobile Device Encryption Status (Read-only)
+mobEncryptionStatus :: Lens' MobileDevice (Maybe Text)
+mobEncryptionStatus
+  = lens _mobEncryptionStatus
+      (\ s a -> s{_mobEncryptionStatus = a})
+
+-- | Mobile Device SSN or Serial Number (Read-only)
+mobSerialNumber :: Lens' MobileDevice (Maybe Text)
+mobSerialNumber
+  = lens _mobSerialNumber
+      (\ s a -> s{_mobSerialNumber = a})
+
+-- | DevicePasswordStatus (Read-only)
+mobDevicePasswordStatus :: Lens' MobileDevice (Maybe Text)
+mobDevicePasswordStatus
+  = lens _mobDevicePasswordStatus
+      (\ s a -> s{_mobDevicePasswordStatus = a})
+
+-- | Mobile Device Hardware Id (Read-only)
+mobHardwareId :: Lens' MobileDevice (Maybe Text)
+mobHardwareId
+  = lens _mobHardwareId
+      (\ s a -> s{_mobHardwareId = a})
+
+-- | Mobile Device Baseband version (Read-only)
+mobBasebandVersion :: Lens' MobileDevice (Maybe Text)
+mobBasebandVersion
+  = lens _mobBasebandVersion
+      (\ s a -> s{_mobBasebandVersion = a})
+
+-- | Work profile supported on device (Read-only)
+mobSupportsWorkProFile :: Lens' MobileDevice (Maybe Bool)
+mobSupportsWorkProFile
+  = lens _mobSupportsWorkProFile
+      (\ s a -> s{_mobSupportsWorkProFile = a})
+
+-- | Mobile Device Hardware (Read-only)
+mobHardware :: Lens' MobileDevice (Maybe Text)
+mobHardware
+  = lens _mobHardware (\ s a -> s{_mobHardware = a})
+
+-- | Mobile Device compromised status (Read-only)
+mobDeviceCompromisedStatus :: Lens' MobileDevice (Maybe Text)
+mobDeviceCompromisedStatus
+  = lens _mobDeviceCompromisedStatus
+      (\ s a -> s{_mobDeviceCompromisedStatus = a})
+
+-- | List of applications installed on Mobile Device
+mobApplications :: Lens' MobileDevice [MobileDeviceApplicationsItem]
+mobApplications
+  = lens _mobApplications
+      (\ s a -> s{_mobApplications = a})
+      . _Default
+      . _Coerce
+
+-- | The default locale used on the Mobile Device (Read-only)
+mobDefaultLanguage :: Lens' MobileDevice (Maybe Text)
+mobDefaultLanguage
+  = lens _mobDefaultLanguage
+      (\ s a -> s{_mobDefaultLanguage = a})
+
+instance FromJSON MobileDevice where
+        parseJSON
+          = withObject "MobileDevice"
+              (\ o ->
+                 MobileDevice' <$>
+                   (o .:? "email" .!= mempty) <*> (o .:? "status") <*>
+                     (o .:? "privilege")
+                     <*> (o .:? "etag")
+                     <*> (o .:? "resourceId")
+                     <*> (o .:? "manufacturer")
+                     <*> (o .:? "buildNumber")
+                     <*> (o .:? "managedAccountIsOnOwnerProfile")
+                     <*> (o .:? "lastSync")
+                     <*> (o .:? "otherAccountsInfo" .!= mempty)
+                     <*> (o .:? "kind" .!= "admin#directory#mobiledevice")
+                     <*> (o .:? "adbStatus")
+                     <*> (o .:? "releaseVersion")
+                     <*> (o .:? "brand")
+                     <*> (o .:? "securityPatchLevel")
+                     <*> (o .:? "networkOperator")
+                     <*> (o .:? "kernelVersion")
+                     <*> (o .:? "os")
+                     <*> (o .:? "name" .!= mempty)
+                     <*> (o .:? "model")
+                     <*> (o .:? "developerOptionsStatus")
+                     <*> (o .:? "unknownSourcesStatus")
+                     <*> (o .:? "meid")
+                     <*> (o .:? "bootloaderVersion")
+                     <*> (o .:? "deviceId")
+                     <*> (o .:? "firstSync")
+                     <*> (o .:? "userAgent")
+                     <*> (o .:? "imei")
+                     <*> (o .:? "type")
+                     <*> (o .:? "wifiMacAddress")
+                     <*> (o .:? "encryptionStatus")
+                     <*> (o .:? "serialNumber")
+                     <*> (o .:? "devicePasswordStatus")
+                     <*> (o .:? "hardwareId")
+                     <*> (o .:? "basebandVersion")
+                     <*> (o .:? "supportsWorkProfile")
+                     <*> (o .:? "hardware")
+                     <*> (o .:? "deviceCompromisedStatus")
+                     <*> (o .:? "applications" .!= mempty)
+                     <*> (o .:? "defaultLanguage"))
+
+instance ToJSON MobileDevice where
+        toJSON MobileDevice'{..}
+          = object
+              (catMaybes
+                 [("email" .=) <$> _mobEmail,
+                  ("status" .=) <$> _mobStatus,
+                  ("privilege" .=) <$> _mobPrivilege,
+                  ("etag" .=) <$> _mobEtag,
+                  ("resourceId" .=) <$> _mobResourceId,
+                  ("manufacturer" .=) <$> _mobManufacturer,
+                  ("buildNumber" .=) <$> _mobBuildNumber,
+                  ("managedAccountIsOnOwnerProfile" .=) <$>
+                    _mobManagedAccountIsOnOwnerProFile,
+                  ("lastSync" .=) <$> _mobLastSync,
+                  ("otherAccountsInfo" .=) <$> _mobOtherAccountsInfo,
+                  Just ("kind" .= _mobKind),
+                  ("adbStatus" .=) <$> _mobAdbStatus,
+                  ("releaseVersion" .=) <$> _mobReleaseVersion,
+                  ("brand" .=) <$> _mobBrand,
+                  ("securityPatchLevel" .=) <$> _mobSecurityPatchLevel,
+                  ("networkOperator" .=) <$> _mobNetworkOperator,
+                  ("kernelVersion" .=) <$> _mobKernelVersion,
+                  ("os" .=) <$> _mobOS, ("name" .=) <$> _mobName,
+                  ("model" .=) <$> _mobModel,
+                  ("developerOptionsStatus" .=) <$>
+                    _mobDeveloperOptionsStatus,
+                  ("unknownSourcesStatus" .=) <$>
+                    _mobUnknownSourcesStatus,
+                  ("meid" .=) <$> _mobMeid,
+                  ("bootloaderVersion" .=) <$> _mobBootLoaderVersion,
+                  ("deviceId" .=) <$> _mobDeviceId,
+                  ("firstSync" .=) <$> _mobFirstSync,
+                  ("userAgent" .=) <$> _mobUserAgent,
+                  ("imei" .=) <$> _mobImei, ("type" .=) <$> _mobType,
+                  ("wifiMacAddress" .=) <$> _mobWifiMACAddress,
+                  ("encryptionStatus" .=) <$> _mobEncryptionStatus,
+                  ("serialNumber" .=) <$> _mobSerialNumber,
+                  ("devicePasswordStatus" .=) <$>
+                    _mobDevicePasswordStatus,
+                  ("hardwareId" .=) <$> _mobHardwareId,
+                  ("basebandVersion" .=) <$> _mobBasebandVersion,
+                  ("supportsWorkProfile" .=) <$>
+                    _mobSupportsWorkProFile,
+                  ("hardware" .=) <$> _mobHardware,
+                  ("deviceCompromisedStatus" .=) <$>
+                    _mobDeviceCompromisedStatus,
+                  ("applications" .=) <$> _mobApplications,
+                  ("defaultLanguage" .=) <$> _mobDefaultLanguage])
+
+--
+-- /See:/ 'chromeOSDeviceCPUStatusReportsItem' smart constructor.
+data ChromeOSDeviceCPUStatusReportsItem = ChromeOSDeviceCPUStatusReportsItem'
+    { _codcsriCPUUtilizationPercentageInfo :: !(Maybe [Textual Int32])
+    , _codcsriCPUTemperatureInfo           :: !(Maybe [ChromeOSDeviceCPUStatusReportsItemCPUTemperatureInfoItem])
+    , _codcsriReportTime                   :: !(Maybe DateTime')
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ChromeOSDeviceCPUStatusReportsItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'codcsriCPUUtilizationPercentageInfo'
+--
+-- * 'codcsriCPUTemperatureInfo'
+--
+-- * 'codcsriReportTime'
+chromeOSDeviceCPUStatusReportsItem
+    :: ChromeOSDeviceCPUStatusReportsItem
+chromeOSDeviceCPUStatusReportsItem =
+    ChromeOSDeviceCPUStatusReportsItem'
+    { _codcsriCPUUtilizationPercentageInfo = Nothing
+    , _codcsriCPUTemperatureInfo = Nothing
+    , _codcsriReportTime = Nothing
+    }
+
+codcsriCPUUtilizationPercentageInfo :: Lens' ChromeOSDeviceCPUStatusReportsItem [Int32]
+codcsriCPUUtilizationPercentageInfo
+  = lens _codcsriCPUUtilizationPercentageInfo
+      (\ s a ->
+         s{_codcsriCPUUtilizationPercentageInfo = a})
+      . _Default
+      . _Coerce
+
+-- | List of CPU temperature samples.
+codcsriCPUTemperatureInfo :: Lens' ChromeOSDeviceCPUStatusReportsItem [ChromeOSDeviceCPUStatusReportsItemCPUTemperatureInfoItem]
+codcsriCPUTemperatureInfo
+  = lens _codcsriCPUTemperatureInfo
+      (\ s a -> s{_codcsriCPUTemperatureInfo = a})
+      . _Default
+      . _Coerce
+
+-- | Date and time the report was received.
+codcsriReportTime :: Lens' ChromeOSDeviceCPUStatusReportsItem (Maybe UTCTime)
+codcsriReportTime
+  = lens _codcsriReportTime
+      (\ s a -> s{_codcsriReportTime = a})
+      . mapping _DateTime
+
+instance FromJSON ChromeOSDeviceCPUStatusReportsItem
+         where
+        parseJSON
+          = withObject "ChromeOSDeviceCPUStatusReportsItem"
+              (\ o ->
+                 ChromeOSDeviceCPUStatusReportsItem' <$>
+                   (o .:? "cpuUtilizationPercentageInfo" .!= mempty) <*>
+                     (o .:? "cpuTemperatureInfo" .!= mempty)
+                     <*> (o .:? "reportTime"))
+
+instance ToJSON ChromeOSDeviceCPUStatusReportsItem
+         where
+        toJSON ChromeOSDeviceCPUStatusReportsItem'{..}
+          = object
+              (catMaybes
+                 [("cpuUtilizationPercentageInfo" .=) <$>
+                    _codcsriCPUUtilizationPercentageInfo,
+                  ("cpuTemperatureInfo" .=) <$>
+                    _codcsriCPUTemperatureInfo,
+                  ("reportTime" .=) <$> _codcsriReportTime])
+
+-- | JSON template for Member resource in Directory API.
+--
+-- /See:/ 'member' smart constructor.
+data Member = Member'
+    { _memEmail            :: !(Maybe Text)
+    , _memStatus           :: !(Maybe Text)
+    , _memEtag             :: !(Maybe Text)
+    , _memKind             :: !Text
+    , _memDeliverySettings :: !(Maybe Text)
+    , _memRole             :: !(Maybe Text)
+    , _memId               :: !(Maybe Text)
+    , _memType             :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Member' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'memEmail'
+--
+-- * 'memStatus'
+--
+-- * 'memEtag'
+--
+-- * 'memKind'
+--
+-- * 'memDeliverySettings'
+--
+-- * 'memRole'
+--
+-- * 'memId'
+--
+-- * 'memType'
+member
+    :: Member
+member =
+    Member'
+    { _memEmail = Nothing
+    , _memStatus = Nothing
+    , _memEtag = Nothing
+    , _memKind = "admin#directory#member"
+    , _memDeliverySettings = Nothing
+    , _memRole = Nothing
+    , _memId = Nothing
+    , _memType = Nothing
+    }
+
+-- | Email of member (Read-only)
+memEmail :: Lens' Member (Maybe Text)
+memEmail = lens _memEmail (\ s a -> s{_memEmail = a})
+
+-- | Status of member (Immutable)
+memStatus :: Lens' Member (Maybe Text)
+memStatus
+  = lens _memStatus (\ s a -> s{_memStatus = a})
+
+-- | ETag of the resource.
+memEtag :: Lens' Member (Maybe Text)
+memEtag = lens _memEtag (\ s a -> s{_memEtag = a})
+
+-- | Kind of resource this is.
+memKind :: Lens' Member Text
+memKind = lens _memKind (\ s a -> s{_memKind = a})
+
+-- | Delivery settings of member
+memDeliverySettings :: Lens' Member (Maybe Text)
+memDeliverySettings
+  = lens _memDeliverySettings
+      (\ s a -> s{_memDeliverySettings = a})
+
+-- | Role of member
+memRole :: Lens' Member (Maybe Text)
+memRole = lens _memRole (\ s a -> s{_memRole = a})
+
+-- | Unique identifier of customer member (Read-only) Unique identifier of
+-- group (Read-only) Unique identifier of member (Read-only)
+memId :: Lens' Member (Maybe Text)
+memId = lens _memId (\ s a -> s{_memId = a})
+
+-- | Type of member (Immutable)
+memType :: Lens' Member (Maybe Text)
+memType = lens _memType (\ s a -> s{_memType = a})
+
+instance FromJSON Member where
+        parseJSON
+          = withObject "Member"
+              (\ o ->
+                 Member' <$>
+                   (o .:? "email") <*> (o .:? "status") <*>
+                     (o .:? "etag")
+                     <*> (o .:? "kind" .!= "admin#directory#member")
+                     <*> (o .:? "delivery_settings")
+                     <*> (o .:? "role")
+                     <*> (o .:? "id")
+                     <*> (o .:? "type"))
+
+instance ToJSON Member where
+        toJSON Member'{..}
+          = object
+              (catMaybes
+                 [("email" .=) <$> _memEmail,
+                  ("status" .=) <$> _memStatus,
+                  ("etag" .=) <$> _memEtag, Just ("kind" .= _memKind),
+                  ("delivery_settings" .=) <$> _memDeliverySettings,
+                  ("role" .=) <$> _memRole, ("id" .=) <$> _memId,
+                  ("type" .=) <$> _memType])
+
+-- | JSON template for App Access Collections Resource object in Directory
+-- API.
+--
+-- /See:/ 'appAccessCollections' smart constructor.
+data AppAccessCollections = AppAccessCollections'
+    { _aacEtag                           :: !(Maybe Text)
+    , _aacResourceId                     :: !(Maybe (Textual Int64))
+    , _aacEnforceSettingsForAndroidDrive :: !(Maybe Bool)
+    , _aacResourceName                   :: !(Maybe Text)
+    , _aacKind                           :: !Text
+    , _aacTrustDomainOwnedApps           :: !(Maybe Bool)
+    , _aacBlockedAPIAccessBuckets        :: !(Maybe [Text])
+    , _aacErrorMessage                   :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AppAccessCollections' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aacEtag'
+--
+-- * 'aacResourceId'
+--
+-- * 'aacEnforceSettingsForAndroidDrive'
+--
+-- * 'aacResourceName'
+--
+-- * 'aacKind'
+--
+-- * 'aacTrustDomainOwnedApps'
+--
+-- * 'aacBlockedAPIAccessBuckets'
+--
+-- * 'aacErrorMessage'
+appAccessCollections
+    :: AppAccessCollections
+appAccessCollections =
+    AppAccessCollections'
+    { _aacEtag = Nothing
+    , _aacResourceId = Nothing
+    , _aacEnforceSettingsForAndroidDrive = Nothing
+    , _aacResourceName = Nothing
+    , _aacKind = "admin#directory#appaccesscollection"
+    , _aacTrustDomainOwnedApps = Nothing
+    , _aacBlockedAPIAccessBuckets = Nothing
+    , _aacErrorMessage = Nothing
+    }
+
+-- | ETag of the resource.
+aacEtag :: Lens' AppAccessCollections (Maybe Text)
+aacEtag = lens _aacEtag (\ s a -> s{_aacEtag = a})
+
+-- | Unique ID of app access collection. (Readonly)
+aacResourceId :: Lens' AppAccessCollections (Maybe Int64)
+aacResourceId
+  = lens _aacResourceId
+      (\ s a -> s{_aacResourceId = a})
+      . mapping _Coerce
+
+-- | Boolean to indicate whether to enforce app access settings on Android
+-- Drive or not.
+aacEnforceSettingsForAndroidDrive :: Lens' AppAccessCollections (Maybe Bool)
+aacEnforceSettingsForAndroidDrive
+  = lens _aacEnforceSettingsForAndroidDrive
+      (\ s a -> s{_aacEnforceSettingsForAndroidDrive = a})
+
+-- | Resource name given by the customer while creating\/updating. Should be
+-- unique under given customer.
+aacResourceName :: Lens' AppAccessCollections (Maybe Text)
+aacResourceName
+  = lens _aacResourceName
+      (\ s a -> s{_aacResourceName = a})
+
+-- | Identifies the resource as an app access collection. Value:
+-- admin#directory#appaccesscollection
+aacKind :: Lens' AppAccessCollections Text
+aacKind = lens _aacKind (\ s a -> s{_aacKind = a})
+
+-- | Boolean that indicates whether to trust domain owned apps.
+aacTrustDomainOwnedApps :: Lens' AppAccessCollections (Maybe Bool)
+aacTrustDomainOwnedApps
+  = lens _aacTrustDomainOwnedApps
+      (\ s a -> s{_aacTrustDomainOwnedApps = a})
+
+-- | List of blocked api access buckets.
+aacBlockedAPIAccessBuckets :: Lens' AppAccessCollections [Text]
+aacBlockedAPIAccessBuckets
+  = lens _aacBlockedAPIAccessBuckets
+      (\ s a -> s{_aacBlockedAPIAccessBuckets = a})
+      . _Default
+      . _Coerce
+
+-- | Error message provided by the Admin that will be shown to the user when
+-- an app is blocked.
+aacErrorMessage :: Lens' AppAccessCollections (Maybe Text)
+aacErrorMessage
+  = lens _aacErrorMessage
+      (\ s a -> s{_aacErrorMessage = a})
+
+instance FromJSON AppAccessCollections where
+        parseJSON
+          = withObject "AppAccessCollections"
+              (\ o ->
+                 AppAccessCollections' <$>
+                   (o .:? "etag") <*> (o .:? "resourceId") <*>
+                     (o .:? "enforceSettingsForAndroidDrive")
+                     <*> (o .:? "resourceName")
+                     <*>
+                     (o .:? "kind" .!=
+                        "admin#directory#appaccesscollection")
+                     <*> (o .:? "trustDomainOwnedApps")
+                     <*> (o .:? "blockedApiAccessBuckets" .!= mempty)
+                     <*> (o .:? "errorMessage"))
+
+instance ToJSON AppAccessCollections where
+        toJSON AppAccessCollections'{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _aacEtag,
+                  ("resourceId" .=) <$> _aacResourceId,
+                  ("enforceSettingsForAndroidDrive" .=) <$>
+                    _aacEnforceSettingsForAndroidDrive,
+                  ("resourceName" .=) <$> _aacResourceName,
+                  Just ("kind" .= _aacKind),
+                  ("trustDomainOwnedApps" .=) <$>
+                    _aacTrustDomainOwnedApps,
+                  ("blockedApiAccessBuckets" .=) <$>
+                    _aacBlockedAPIAccessBuckets,
+                  ("errorMessage" .=) <$> _aacErrorMessage])
+
+-- | JSON template for a set of custom properties (i.e. all fields in a
+-- particular schema)
+--
+-- /See:/ 'userCustomProperties' smart constructor.
+newtype UserCustomProperties = UserCustomProperties'
+    { _ucpAddtional :: HashMap Text JSONValue
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UserCustomProperties' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ucpAddtional'
+userCustomProperties
+    :: HashMap Text JSONValue -- ^ 'ucpAddtional'
+    -> UserCustomProperties
+userCustomProperties pUcpAddtional_ =
+    UserCustomProperties'
+    { _ucpAddtional = _Coerce # pUcpAddtional_
+    }
+
+ucpAddtional :: Lens' UserCustomProperties (HashMap Text JSONValue)
+ucpAddtional
+  = lens _ucpAddtional (\ s a -> s{_ucpAddtional = a})
+      . _Coerce
+
+instance FromJSON UserCustomProperties where
+        parseJSON
+          = withObject "UserCustomProperties"
+              (\ o ->
+                 UserCustomProperties' <$> (parseJSONObject o))
+
+instance ToJSON UserCustomProperties where
+        toJSON = toJSON . _ucpAddtional
+
+-- | JSON template for a language entry.
+--
+-- /See:/ 'userLanguage' smart constructor.
+data UserLanguage = UserLanguage'
+    { _ulLanguageCode   :: !(Maybe Text)
+    , _ulCustomLanguage :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UserLanguage' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ulLanguageCode'
+--
+-- * 'ulCustomLanguage'
+userLanguage
+    :: UserLanguage
+userLanguage =
+    UserLanguage'
+    { _ulLanguageCode = Nothing
+    , _ulCustomLanguage = Nothing
+    }
+
+-- | Language Code. Should be used for storing Google III LanguageCode string
+-- representation for language. Illegal values cause SchemaException.
+ulLanguageCode :: Lens' UserLanguage (Maybe Text)
+ulLanguageCode
+  = lens _ulLanguageCode
+      (\ s a -> s{_ulLanguageCode = a})
+
+-- | Other language. User can provide own language name if there is no
+-- corresponding Google III language code. If this is set LanguageCode
+-- can\'t be set
+ulCustomLanguage :: Lens' UserLanguage (Maybe Text)
+ulCustomLanguage
+  = lens _ulCustomLanguage
+      (\ s a -> s{_ulCustomLanguage = a})
+
+instance FromJSON UserLanguage where
+        parseJSON
+          = withObject "UserLanguage"
+              (\ o ->
+                 UserLanguage' <$>
+                   (o .:? "languageCode") <*> (o .:? "customLanguage"))
+
+instance ToJSON UserLanguage where
+        toJSON UserLanguage'{..}
+          = object
+              (catMaybes
+                 [("languageCode" .=) <$> _ulLanguageCode,
+                  ("customLanguage" .=) <$> _ulCustomLanguage])
+
+-- | JSON template for Domain object in Directory API.
+--
+-- /See:/ 'domains' smart constructor.
+data Domains = Domains'
+    { _domCreationTime  :: !(Maybe (Textual Int64))
+    , _domEtag          :: !(Maybe Text)
+    , _domKind          :: !Text
+    , _domDomainAliases :: !(Maybe [DomainAlias])
+    , _domVerified      :: !(Maybe Bool)
+    , _domDomainName    :: !(Maybe Text)
+    , _domIsPrimary     :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Domains' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'domCreationTime'
+--
+-- * 'domEtag'
+--
+-- * 'domKind'
+--
+-- * 'domDomainAliases'
+--
+-- * 'domVerified'
+--
+-- * 'domDomainName'
+--
+-- * 'domIsPrimary'
+domains
+    :: Domains
+domains =
+    Domains'
+    { _domCreationTime = Nothing
+    , _domEtag = Nothing
+    , _domKind = "admin#directory#domain"
+    , _domDomainAliases = Nothing
+    , _domVerified = Nothing
+    , _domDomainName = Nothing
+    , _domIsPrimary = Nothing
+    }
+
+-- | Creation time of the domain. (Read-only).
+domCreationTime :: Lens' Domains (Maybe Int64)
+domCreationTime
+  = lens _domCreationTime
+      (\ s a -> s{_domCreationTime = a})
+      . mapping _Coerce
+
+-- | ETag of the resource.
+domEtag :: Lens' Domains (Maybe Text)
+domEtag = lens _domEtag (\ s a -> s{_domEtag = a})
+
+-- | Kind of resource this is.
+domKind :: Lens' Domains Text
+domKind = lens _domKind (\ s a -> s{_domKind = a})
+
+-- | List of domain alias objects. (Read-only)
+domDomainAliases :: Lens' Domains [DomainAlias]
+domDomainAliases
+  = lens _domDomainAliases
+      (\ s a -> s{_domDomainAliases = a})
+      . _Default
+      . _Coerce
+
+-- | Indicates the verification state of a domain. (Read-only).
+domVerified :: Lens' Domains (Maybe Bool)
+domVerified
+  = lens _domVerified (\ s a -> s{_domVerified = a})
+
+-- | The domain name of the customer.
+domDomainName :: Lens' Domains (Maybe Text)
+domDomainName
+  = lens _domDomainName
+      (\ s a -> s{_domDomainName = a})
+
+-- | Indicates if the domain is a primary domain (Read-only).
+domIsPrimary :: Lens' Domains (Maybe Bool)
+domIsPrimary
+  = lens _domIsPrimary (\ s a -> s{_domIsPrimary = a})
+
+instance FromJSON Domains where
+        parseJSON
+          = withObject "Domains"
+              (\ o ->
+                 Domains' <$>
+                   (o .:? "creationTime") <*> (o .:? "etag") <*>
+                     (o .:? "kind" .!= "admin#directory#domain")
+                     <*> (o .:? "domainAliases" .!= mempty)
+                     <*> (o .:? "verified")
+                     <*> (o .:? "domainName")
+                     <*> (o .:? "isPrimary"))
+
+instance ToJSON Domains where
+        toJSON Domains'{..}
+          = object
+              (catMaybes
+                 [("creationTime" .=) <$> _domCreationTime,
+                  ("etag" .=) <$> _domEtag, Just ("kind" .= _domKind),
+                  ("domainAliases" .=) <$> _domDomainAliases,
+                  ("verified" .=) <$> _domVerified,
+                  ("domainName" .=) <$> _domDomainName,
+                  ("isPrimary" .=) <$> _domIsPrimary])
+
+-- | JSON template for Calendar Resource List Response object in Directory
+-- API.
+--
+-- /See:/ 'calendarResources' smart constructor.
+data CalendarResources = CalendarResources'
+    { _crsEtag          :: !(Maybe Text)
+    , _crsNextPageToken :: !(Maybe Text)
+    , _crsKind          :: !Text
+    , _crsItems         :: !(Maybe [CalendarResource])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CalendarResources' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'crsEtag'
+--
+-- * 'crsNextPageToken'
+--
+-- * 'crsKind'
+--
+-- * 'crsItems'
+calendarResources
+    :: CalendarResources
+calendarResources =
+    CalendarResources'
+    { _crsEtag = Nothing
+    , _crsNextPageToken = Nothing
+    , _crsKind = "admin#directory#resources#calendars#calendarResourcesList"
+    , _crsItems = Nothing
+    }
+
+-- | ETag of the resource.
+crsEtag :: Lens' CalendarResources (Maybe Text)
+crsEtag = lens _crsEtag (\ s a -> s{_crsEtag = a})
+
+-- | The continuation token, used to page through large result sets. Provide
+-- this value in a subsequent request to return the next page of results.
+crsNextPageToken :: Lens' CalendarResources (Maybe Text)
+crsNextPageToken
+  = lens _crsNextPageToken
+      (\ s a -> s{_crsNextPageToken = a})
+
+-- | Identifies this as a collection of CalendarResources. This is always
+-- admin#directory#resources#calendars#calendarResourcesList.
+crsKind :: Lens' CalendarResources Text
+crsKind = lens _crsKind (\ s a -> s{_crsKind = a})
+
+-- | The CalendarResources in this page of results.
+crsItems :: Lens' CalendarResources [CalendarResource]
+crsItems
+  = lens _crsItems (\ s a -> s{_crsItems = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON CalendarResources where
+        parseJSON
+          = withObject "CalendarResources"
+              (\ o ->
+                 CalendarResources' <$>
+                   (o .:? "etag") <*> (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!=
+                        "admin#directory#resources#calendars#calendarResourcesList")
+                     <*> (o .:? "items" .!= mempty))
+
+instance ToJSON CalendarResources where
+        toJSON CalendarResources'{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _crsEtag,
+                  ("nextPageToken" .=) <$> _crsNextPageToken,
+                  Just ("kind" .= _crsKind),
+                  ("items" .=) <$> _crsItems])
+
+-- | Template for notifications list response.
+--
+-- /See:/ 'notifications' smart constructor.
+data Notifications = Notifications'
+    { _notEtag                     :: !(Maybe Text)
+    , _notNextPageToken            :: !(Maybe Text)
+    , _notKind                     :: !Text
+    , _notItems                    :: !(Maybe [Notification])
+    , _notUnreadNotificationsCount :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Notifications' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'notEtag'
+--
+-- * 'notNextPageToken'
+--
+-- * 'notKind'
+--
+-- * 'notItems'
+--
+-- * 'notUnreadNotificationsCount'
+notifications
+    :: Notifications
+notifications =
+    Notifications'
+    { _notEtag = Nothing
+    , _notNextPageToken = Nothing
+    , _notKind = "admin#directory#notifications"
+    , _notItems = Nothing
+    , _notUnreadNotificationsCount = Nothing
+    }
+
+-- | ETag of the resource.
+notEtag :: Lens' Notifications (Maybe Text)
+notEtag = lens _notEtag (\ s a -> s{_notEtag = a})
+
+-- | Token for fetching the next page of notifications.
+notNextPageToken :: Lens' Notifications (Maybe Text)
+notNextPageToken
+  = lens _notNextPageToken
+      (\ s a -> s{_notNextPageToken = a})
+
+-- | The type of the resource.
+notKind :: Lens' Notifications Text
+notKind = lens _notKind (\ s a -> s{_notKind = a})
+
+-- | List of notifications in this page.
+notItems :: Lens' Notifications [Notification]
+notItems
+  = lens _notItems (\ s a -> s{_notItems = a}) .
+      _Default
+      . _Coerce
+
+-- | Number of unread notification for the domain.
+notUnreadNotificationsCount :: Lens' Notifications (Maybe Int32)
+notUnreadNotificationsCount
+  = lens _notUnreadNotificationsCount
+      (\ s a -> s{_notUnreadNotificationsCount = a})
+      . mapping _Coerce
+
+instance FromJSON Notifications where
+        parseJSON
+          = withObject "Notifications"
+              (\ o ->
+                 Notifications' <$>
+                   (o .:? "etag") <*> (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "admin#directory#notifications")
+                     <*> (o .:? "items" .!= mempty)
+                     <*> (o .:? "unreadNotificationsCount"))
+
+instance ToJSON Notifications where
+        toJSON Notifications'{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _notEtag,
+                  ("nextPageToken" .=) <$> _notNextPageToken,
+                  Just ("kind" .= _notKind),
+                  ("items" .=) <$> _notItems,
+                  ("unreadNotificationsCount" .=) <$>
+                    _notUnreadNotificationsCount])
+
+-- | Indexing spec for a numeric field. By default, only exact match queries
+-- will be supported for numeric fields. Setting the numericIndexingSpec
+-- allows range queries to be supported.
+--
+-- /See:/ 'schemaFieldSpecNumericIndexingSpec' smart constructor.
+data SchemaFieldSpecNumericIndexingSpec = SchemaFieldSpecNumericIndexingSpec'
+    { _sfsnisMaxValue :: !(Maybe (Textual Double))
+    , _sfsnisMinValue :: !(Maybe (Textual Double))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SchemaFieldSpecNumericIndexingSpec' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sfsnisMaxValue'
+--
+-- * 'sfsnisMinValue'
+schemaFieldSpecNumericIndexingSpec
+    :: SchemaFieldSpecNumericIndexingSpec
+schemaFieldSpecNumericIndexingSpec =
+    SchemaFieldSpecNumericIndexingSpec'
+    { _sfsnisMaxValue = Nothing
+    , _sfsnisMinValue = Nothing
+    }
+
+-- | Maximum value of this field. This is meant to be indicative rather than
+-- enforced. Values outside this range will still be indexed, but search
+-- may not be as performant.
+sfsnisMaxValue :: Lens' SchemaFieldSpecNumericIndexingSpec (Maybe Double)
+sfsnisMaxValue
+  = lens _sfsnisMaxValue
+      (\ s a -> s{_sfsnisMaxValue = a})
+      . mapping _Coerce
+
+-- | Minimum value of this field. This is meant to be indicative rather than
+-- enforced. Values outside this range will still be indexed, but search
+-- may not be as performant.
+sfsnisMinValue :: Lens' SchemaFieldSpecNumericIndexingSpec (Maybe Double)
+sfsnisMinValue
+  = lens _sfsnisMinValue
+      (\ s a -> s{_sfsnisMinValue = a})
+      . mapping _Coerce
+
+instance FromJSON SchemaFieldSpecNumericIndexingSpec
+         where
+        parseJSON
+          = withObject "SchemaFieldSpecNumericIndexingSpec"
+              (\ o ->
+                 SchemaFieldSpecNumericIndexingSpec' <$>
+                   (o .:? "maxValue") <*> (o .:? "minValue"))
+
+instance ToJSON SchemaFieldSpecNumericIndexingSpec
+         where
+        toJSON SchemaFieldSpecNumericIndexingSpec'{..}
+          = object
+              (catMaybes
+                 [("maxValue" .=) <$> _sfsnisMaxValue,
+                  ("minValue" .=) <$> _sfsnisMinValue])
+
+-- | JSON request template for firing commands on Mobile Device in Directory
+-- Devices API.
+--
+-- /See:/ 'mobileDeviceAction' smart constructor.
+newtype MobileDeviceAction = MobileDeviceAction'
+    { _mdaAction :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MobileDeviceAction' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mdaAction'
+mobileDeviceAction
+    :: MobileDeviceAction
+mobileDeviceAction =
+    MobileDeviceAction'
+    { _mdaAction = Nothing
+    }
+
+-- | Action to be taken on the Mobile Device
+mdaAction :: Lens' MobileDeviceAction (Maybe Text)
+mdaAction
+  = lens _mdaAction (\ s a -> s{_mdaAction = a})
+
+instance FromJSON MobileDeviceAction where
+        parseJSON
+          = withObject "MobileDeviceAction"
+              (\ o -> MobileDeviceAction' <$> (o .:? "action"))
+
+instance ToJSON MobileDeviceAction where
+        toJSON MobileDeviceAction'{..}
+          = object (catMaybes [("action" .=) <$> _mdaAction])
+
+-- | JSON template for FieldSpec resource for Schemas in Directory API.
+--
+-- /See:/ 'schemaFieldSpec' smart constructor.
+data SchemaFieldSpec = SchemaFieldSpec'
+    { _sfsEtag                :: !(Maybe Text)
+    , _sfsKind                :: !Text
+    , _sfsNumericIndexingSpec :: !(Maybe SchemaFieldSpecNumericIndexingSpec)
+    , _sfsReadAccessType      :: !Text
+    , _sfsFieldId             :: !(Maybe Text)
+    , _sfsIndexed             :: !Bool
+    , _sfsFieldType           :: !(Maybe Text)
+    , _sfsFieldName           :: !(Maybe Text)
+    , _sfsDisplayName         :: !(Maybe Text)
+    , _sfsMultiValued         :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SchemaFieldSpec' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sfsEtag'
+--
+-- * 'sfsKind'
+--
+-- * 'sfsNumericIndexingSpec'
+--
+-- * 'sfsReadAccessType'
+--
+-- * 'sfsFieldId'
+--
+-- * 'sfsIndexed'
+--
+-- * 'sfsFieldType'
+--
+-- * 'sfsFieldName'
+--
+-- * 'sfsDisplayName'
+--
+-- * 'sfsMultiValued'
+schemaFieldSpec
+    :: SchemaFieldSpec
+schemaFieldSpec =
+    SchemaFieldSpec'
+    { _sfsEtag = Nothing
+    , _sfsKind = "admin#directory#schema#fieldspec"
+    , _sfsNumericIndexingSpec = Nothing
+    , _sfsReadAccessType = "ALL_DOMAIN_USERS"
+    , _sfsFieldId = Nothing
+    , _sfsIndexed = True
+    , _sfsFieldType = Nothing
+    , _sfsFieldName = Nothing
+    , _sfsDisplayName = Nothing
+    , _sfsMultiValued = Nothing
+    }
+
+-- | ETag of the resource.
+sfsEtag :: Lens' SchemaFieldSpec (Maybe Text)
+sfsEtag = lens _sfsEtag (\ s a -> s{_sfsEtag = a})
+
+-- | Kind of resource this is.
+sfsKind :: Lens' SchemaFieldSpec Text
+sfsKind = lens _sfsKind (\ s a -> s{_sfsKind = a})
+
+-- | Indexing spec for a numeric field. By default, only exact match queries
+-- will be supported for numeric fields. Setting the numericIndexingSpec
+-- allows range queries to be supported.
+sfsNumericIndexingSpec :: Lens' SchemaFieldSpec (Maybe SchemaFieldSpecNumericIndexingSpec)
+sfsNumericIndexingSpec
+  = lens _sfsNumericIndexingSpec
+      (\ s a -> s{_sfsNumericIndexingSpec = a})
+
+-- | Read ACLs on the field specifying who can view values of this field.
+-- Valid values are \"ALL_DOMAIN_USERS\" and \"ADMINS_AND_SELF\".
+sfsReadAccessType :: Lens' SchemaFieldSpec Text
+sfsReadAccessType
+  = lens _sfsReadAccessType
+      (\ s a -> s{_sfsReadAccessType = a})
+
+-- | Unique identifier of Field (Read-only)
+sfsFieldId :: Lens' SchemaFieldSpec (Maybe Text)
+sfsFieldId
+  = lens _sfsFieldId (\ s a -> s{_sfsFieldId = a})
+
+-- | Boolean specifying whether the field is indexed or not.
+sfsIndexed :: Lens' SchemaFieldSpec Bool
+sfsIndexed
+  = lens _sfsIndexed (\ s a -> s{_sfsIndexed = a})
+
+-- | Type of the field.
+sfsFieldType :: Lens' SchemaFieldSpec (Maybe Text)
+sfsFieldType
+  = lens _sfsFieldType (\ s a -> s{_sfsFieldType = a})
+
+-- | Name of the field.
+sfsFieldName :: Lens' SchemaFieldSpec (Maybe Text)
+sfsFieldName
+  = lens _sfsFieldName (\ s a -> s{_sfsFieldName = a})
+
+-- | Display Name of the field.
+sfsDisplayName :: Lens' SchemaFieldSpec (Maybe Text)
+sfsDisplayName
+  = lens _sfsDisplayName
+      (\ s a -> s{_sfsDisplayName = a})
+
+-- | Boolean specifying whether this is a multi-valued field or not.
+sfsMultiValued :: Lens' SchemaFieldSpec (Maybe Bool)
+sfsMultiValued
+  = lens _sfsMultiValued
+      (\ s a -> s{_sfsMultiValued = a})
+
+instance FromJSON SchemaFieldSpec where
+        parseJSON
+          = withObject "SchemaFieldSpec"
+              (\ o ->
+                 SchemaFieldSpec' <$>
+                   (o .:? "etag") <*>
+                     (o .:? "kind" .!= "admin#directory#schema#fieldspec")
+                     <*> (o .:? "numericIndexingSpec")
+                     <*> (o .:? "readAccessType" .!= "ALL_DOMAIN_USERS")
+                     <*> (o .:? "fieldId")
+                     <*> (o .:? "indexed" .!= True)
+                     <*> (o .:? "fieldType")
+                     <*> (o .:? "fieldName")
+                     <*> (o .:? "displayName")
+                     <*> (o .:? "multiValued"))
+
+instance ToJSON SchemaFieldSpec where
+        toJSON SchemaFieldSpec'{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _sfsEtag, Just ("kind" .= _sfsKind),
+                  ("numericIndexingSpec" .=) <$>
+                    _sfsNumericIndexingSpec,
+                  Just ("readAccessType" .= _sfsReadAccessType),
+                  ("fieldId" .=) <$> _sfsFieldId,
+                  Just ("indexed" .= _sfsIndexed),
+                  ("fieldType" .=) <$> _sfsFieldType,
+                  ("fieldName" .=) <$> _sfsFieldName,
+                  ("displayName" .=) <$> _sfsDisplayName,
+                  ("multiValued" .=) <$> _sfsMultiValued])
+
+-- | JSON response template for List Chrome OS Devices operation in Directory
+-- API.
+--
+-- /See:/ 'chromeOSDevices' smart constructor.
+data ChromeOSDevices = ChromeOSDevices'
+    { _cosdEtag            :: !(Maybe Text)
+    , _cosdNextPageToken   :: !(Maybe Text)
+    , _cosdKind            :: !Text
+    , _cosdChromeosDevices :: !(Maybe [ChromeOSDevice])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ChromeOSDevices' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cosdEtag'
+--
+-- * 'cosdNextPageToken'
+--
+-- * 'cosdKind'
+--
+-- * 'cosdChromeosDevices'
+chromeOSDevices
+    :: ChromeOSDevices
+chromeOSDevices =
+    ChromeOSDevices'
+    { _cosdEtag = Nothing
+    , _cosdNextPageToken = Nothing
+    , _cosdKind = "admin#directory#chromeosdevices"
+    , _cosdChromeosDevices = Nothing
+    }
+
+-- | ETag of the resource.
+cosdEtag :: Lens' ChromeOSDevices (Maybe Text)
+cosdEtag = lens _cosdEtag (\ s a -> s{_cosdEtag = a})
+
+-- | Token used to access next page of this result.
+cosdNextPageToken :: Lens' ChromeOSDevices (Maybe Text)
+cosdNextPageToken
+  = lens _cosdNextPageToken
+      (\ s a -> s{_cosdNextPageToken = a})
+
+-- | Kind of resource this is.
+cosdKind :: Lens' ChromeOSDevices Text
+cosdKind = lens _cosdKind (\ s a -> s{_cosdKind = a})
+
+-- | List of Chrome OS Device objects.
+cosdChromeosDevices :: Lens' ChromeOSDevices [ChromeOSDevice]
+cosdChromeosDevices
+  = lens _cosdChromeosDevices
+      (\ s a -> s{_cosdChromeosDevices = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON ChromeOSDevices where
+        parseJSON
+          = withObject "ChromeOSDevices"
+              (\ o ->
+                 ChromeOSDevices' <$>
+                   (o .:? "etag") <*> (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "admin#directory#chromeosdevices")
+                     <*> (o .:? "chromeosdevices" .!= mempty))
+
+instance ToJSON ChromeOSDevices where
+        toJSON ChromeOSDevices'{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _cosdEtag,
+                  ("nextPageToken" .=) <$> _cosdNextPageToken,
+                  Just ("kind" .= _cosdKind),
+                  ("chromeosdevices" .=) <$> _cosdChromeosDevices])
+
+-- | JSON template for Has Member response in Directory API.
+--
+-- /See:/ 'membersHasMember' smart constructor.
+newtype MembersHasMember = MembersHasMember'
+    { _mhmIsMember :: Maybe Bool
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MembersHasMember' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mhmIsMember'
+membersHasMember
+    :: MembersHasMember
+membersHasMember =
+    MembersHasMember'
+    { _mhmIsMember = Nothing
+    }
+
+-- | Identifies whether the given user is a member of the group. Membership
+-- can be direct or nested.
+mhmIsMember :: Lens' MembersHasMember (Maybe Bool)
+mhmIsMember
+  = lens _mhmIsMember (\ s a -> s{_mhmIsMember = a})
+
+instance FromJSON MembersHasMember where
+        parseJSON
+          = withObject "MembersHasMember"
+              (\ o -> MembersHasMember' <$> (o .:? "isMember"))
+
+instance ToJSON MembersHasMember where
+        toJSON MembersHasMember'{..}
+          = object
+              (catMaybes [("isMember" .=) <$> _mhmIsMember])
+
+-- | JSON template for Trusted App Ids Resource object in Directory API.
+--
+-- /See:/ 'trustedAppId' smart constructor.
+data TrustedAppId = TrustedAppId'
+    { _taiCertificateHashSHA256 :: !(Maybe Text)
+    , _taiEtag                  :: !(Maybe Text)
+    , _taiKind                  :: !Text
+    , _taiCertificateHashSHA1   :: !(Maybe Text)
+    , _taiAndroidPackageName    :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TrustedAppId' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'taiCertificateHashSHA256'
+--
+-- * 'taiEtag'
+--
+-- * 'taiKind'
+--
+-- * 'taiCertificateHashSHA1'
+--
+-- * 'taiAndroidPackageName'
+trustedAppId
+    :: TrustedAppId
+trustedAppId =
+    TrustedAppId'
+    { _taiCertificateHashSHA256 = Nothing
+    , _taiEtag = Nothing
+    , _taiKind = "admin#directory#trustedappid"
+    , _taiCertificateHashSHA1 = Nothing
+    , _taiAndroidPackageName = Nothing
+    }
+
+-- | SHA256 signature of the app certificate.
+taiCertificateHashSHA256 :: Lens' TrustedAppId (Maybe Text)
+taiCertificateHashSHA256
+  = lens _taiCertificateHashSHA256
+      (\ s a -> s{_taiCertificateHashSHA256 = a})
+
+taiEtag :: Lens' TrustedAppId (Maybe Text)
+taiEtag = lens _taiEtag (\ s a -> s{_taiEtag = a})
+
+-- | Identifies the resource as a trusted AppId.
+taiKind :: Lens' TrustedAppId Text
+taiKind = lens _taiKind (\ s a -> s{_taiKind = a})
+
+-- | SHA1 signature of the app certificate.
+taiCertificateHashSHA1 :: Lens' TrustedAppId (Maybe Text)
+taiCertificateHashSHA1
+  = lens _taiCertificateHashSHA1
+      (\ s a -> s{_taiCertificateHashSHA1 = a})
+
+-- | Android package name.
+taiAndroidPackageName :: Lens' TrustedAppId (Maybe Text)
+taiAndroidPackageName
+  = lens _taiAndroidPackageName
+      (\ s a -> s{_taiAndroidPackageName = a})
+
+instance FromJSON TrustedAppId where
+        parseJSON
+          = withObject "TrustedAppId"
+              (\ o ->
+                 TrustedAppId' <$>
+                   (o .:? "certificateHashSHA256") <*> (o .:? "etag")
+                     <*> (o .:? "kind" .!= "admin#directory#trustedappid")
+                     <*> (o .:? "certificateHashSHA1")
+                     <*> (o .:? "androidPackageName"))
+
+instance ToJSON TrustedAppId where
+        toJSON TrustedAppId'{..}
+          = object
+              (catMaybes
+                 [("certificateHashSHA256" .=) <$>
+                    _taiCertificateHashSHA256,
+                  ("etag" .=) <$> _taiEtag, Just ("kind" .= _taiKind),
+                  ("certificateHashSHA1" .=) <$>
+                    _taiCertificateHashSHA1,
+                  ("androidPackageName" .=) <$>
+                    _taiAndroidPackageName])
+
+-- | JSON template for an externalId entry.
+--
+-- /See:/ 'userExternalId' smart constructor.
+data UserExternalId = UserExternalId'
+    { _ueiValue      :: !(Maybe Text)
+    , _ueiType       :: !(Maybe Text)
+    , _ueiCustomType :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UserExternalId' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ueiValue'
+--
+-- * 'ueiType'
+--
+-- * 'ueiCustomType'
+userExternalId
+    :: UserExternalId
+userExternalId =
+    UserExternalId'
+    { _ueiValue = Nothing
+    , _ueiType = Nothing
+    , _ueiCustomType = Nothing
+    }
+
+-- | The value of the id.
+ueiValue :: Lens' UserExternalId (Maybe Text)
+ueiValue = lens _ueiValue (\ s a -> s{_ueiValue = a})
+
+-- | The type of the Id.
+ueiType :: Lens' UserExternalId (Maybe Text)
+ueiType = lens _ueiType (\ s a -> s{_ueiType = a})
+
+-- | Custom type.
+ueiCustomType :: Lens' UserExternalId (Maybe Text)
+ueiCustomType
+  = lens _ueiCustomType
+      (\ s a -> s{_ueiCustomType = a})
+
+instance FromJSON UserExternalId where
+        parseJSON
+          = withObject "UserExternalId"
+              (\ o ->
+                 UserExternalId' <$>
+                   (o .:? "value") <*> (o .:? "type") <*>
+                     (o .:? "customType"))
+
+instance ToJSON UserExternalId where
+        toJSON UserExternalId'{..}
+          = object
+              (catMaybes
+                 [("value" .=) <$> _ueiValue,
+                  ("type" .=) <$> _ueiType,
+                  ("customType" .=) <$> _ueiCustomType])
+
+--
+-- /See:/ 'asps' smart constructor.
+data Asps = Asps'
+    { _aspEtag  :: !(Maybe Text)
+    , _aspKind  :: !Text
+    , _aspItems :: !(Maybe [Asp])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Asps' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aspEtag'
+--
+-- * 'aspKind'
+--
+-- * 'aspItems'
+asps
+    :: Asps
+asps =
+    Asps'
+    { _aspEtag = Nothing
+    , _aspKind = "admin#directory#aspList"
+    , _aspItems = Nothing
+    }
+
+-- | ETag of the resource.
+aspEtag :: Lens' Asps (Maybe Text)
+aspEtag = lens _aspEtag (\ s a -> s{_aspEtag = a})
+
+-- | The type of the API resource. This is always admin#directory#aspList.
+aspKind :: Lens' Asps Text
+aspKind = lens _aspKind (\ s a -> s{_aspKind = a})
+
+-- | A list of ASP resources.
+aspItems :: Lens' Asps [Asp]
+aspItems
+  = lens _aspItems (\ s a -> s{_aspItems = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON Asps where
+        parseJSON
+          = withObject "Asps"
+              (\ o ->
+                 Asps' <$>
+                   (o .:? "etag") <*>
+                     (o .:? "kind" .!= "admin#directory#aspList")
+                     <*> (o .:? "items" .!= mempty))
+
+instance ToJSON Asps where
+        toJSON Asps'{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _aspEtag, Just ("kind" .= _aspKind),
+                  ("items" .=) <$> _aspItems])
+
+--
+-- /See:/ 'chromeOSDeviceCPUStatusReportsItemCPUTemperatureInfoItem' smart constructor.
+data ChromeOSDeviceCPUStatusReportsItemCPUTemperatureInfoItem = ChromeOSDeviceCPUStatusReportsItemCPUTemperatureInfoItem'
+    { _codcsrictiiTemperature :: !(Maybe (Textual Int32))
+    , _codcsrictiiLabel       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ChromeOSDeviceCPUStatusReportsItemCPUTemperatureInfoItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'codcsrictiiTemperature'
+--
+-- * 'codcsrictiiLabel'
+chromeOSDeviceCPUStatusReportsItemCPUTemperatureInfoItem
+    :: ChromeOSDeviceCPUStatusReportsItemCPUTemperatureInfoItem
+chromeOSDeviceCPUStatusReportsItemCPUTemperatureInfoItem =
+    ChromeOSDeviceCPUStatusReportsItemCPUTemperatureInfoItem'
+    { _codcsrictiiTemperature = Nothing
+    , _codcsrictiiLabel = Nothing
+    }
+
+-- | Temperature in Celsius degrees.
+codcsrictiiTemperature :: Lens' ChromeOSDeviceCPUStatusReportsItemCPUTemperatureInfoItem (Maybe Int32)
+codcsrictiiTemperature
+  = lens _codcsrictiiTemperature
+      (\ s a -> s{_codcsrictiiTemperature = a})
+      . mapping _Coerce
+
+-- | CPU label
+codcsrictiiLabel :: Lens' ChromeOSDeviceCPUStatusReportsItemCPUTemperatureInfoItem (Maybe Text)
+codcsrictiiLabel
+  = lens _codcsrictiiLabel
+      (\ s a -> s{_codcsrictiiLabel = a})
+
+instance FromJSON
+         ChromeOSDeviceCPUStatusReportsItemCPUTemperatureInfoItem
+         where
+        parseJSON
+          = withObject
+              "ChromeOSDeviceCPUStatusReportsItemCPUTemperatureInfoItem"
+              (\ o ->
+                 ChromeOSDeviceCPUStatusReportsItemCPUTemperatureInfoItem'
+                   <$> (o .:? "temperature") <*> (o .:? "label"))
+
+instance ToJSON
+         ChromeOSDeviceCPUStatusReportsItemCPUTemperatureInfoItem
+         where
+        toJSON
+          ChromeOSDeviceCPUStatusReportsItemCPUTemperatureInfoItem'{..}
+          = object
+              (catMaybes
+                 [("temperature" .=) <$> _codcsrictiiTemperature,
+                  ("label" .=) <$> _codcsrictiiLabel])
 
 --
 -- /See:/ 'roleRolePrivilegesItem' smart constructor.
diff --git a/gen/Network/Google/Directory/Types/Sum.hs b/gen/Network/Google/Directory/Types/Sum.hs
--- a/gen/Network/Google/Directory/Types/Sum.hs
+++ b/gen/Network/Google/Directory/Types/Sum.hs
@@ -16,7 +16,7 @@
 --
 module Network.Google.Directory.Types.Sum where
 
-import           Network.Google.Prelude
+import           Network.Google.Prelude hiding (Bytes)
 
 -- | Event on which subscription is intended (if subscribing)
 data UsersListEvent
@@ -257,7 +257,7 @@
 data OrgUnitsListType
     = All
       -- ^ @all@
-      -- All sub-organization units.
+      -- All sub-organizational units.
     | Children
       -- ^ @children@
       -- Immediate children only (default).
@@ -346,6 +346,30 @@
 instance ToJSON UsersListOrderBy where
     toJSON = toJSONText
 
+-- | Column to use for sorting results
+data GroupsListOrderBy
+    = GLOBEmail
+      -- ^ @email@
+      -- Email of the group.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable GroupsListOrderBy
+
+instance FromHttpApiData GroupsListOrderBy where
+    parseQueryParam = \case
+        "email" -> Right GLOBEmail
+        x -> Left ("Unable to parse GroupsListOrderBy from: " <> x)
+
+instance ToHttpApiData GroupsListOrderBy where
+    toQueryParam = \case
+        GLOBEmail -> "email"
+
+instance FromJSON GroupsListOrderBy where
+    parseJSON = parseJSONText "GroupsListOrderBy"
+
+instance ToJSON GroupsListOrderBy where
+    toJSON = toJSONText
+
 -- | Whether to fetch the ADMIN_VIEW or DOMAIN_PUBLIC view of the user.
 data UsersWatchViewType
     = UWVTAdminView
@@ -584,6 +608,36 @@
     parseJSON = parseJSONText "UsersWatchSortOrder"
 
 instance ToJSON UsersWatchSortOrder where
+    toJSON = toJSONText
+
+-- | Whether to return results in ascending or descending order. Only of use
+-- when orderBy is also used
+data GroupsListSortOrder
+    = GLSOAscending
+      -- ^ @ASCENDING@
+      -- Ascending order.
+    | GLSODescending
+      -- ^ @DESCENDING@
+      -- Descending order.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable GroupsListSortOrder
+
+instance FromHttpApiData GroupsListSortOrder where
+    parseQueryParam = \case
+        "ASCENDING" -> Right GLSOAscending
+        "DESCENDING" -> Right GLSODescending
+        x -> Left ("Unable to parse GroupsListSortOrder from: " <> x)
+
+instance ToHttpApiData GroupsListSortOrder where
+    toQueryParam = \case
+        GLSOAscending -> "ASCENDING"
+        GLSODescending -> "DESCENDING"
+
+instance FromJSON GroupsListSortOrder where
+    parseJSON = parseJSONText "GroupsListSortOrder"
+
+instance ToJSON GroupsListSortOrder where
     toJSON = toJSONText
 
 -- | What subset of fields to fetch for this user.
diff --git a/gen/Network/Google/Resource/Directory/ChromeosDevices/Action.hs b/gen/Network/Google/Resource/Directory/ChromeosDevices/Action.hs
--- a/gen/Network/Google/Resource/Directory/ChromeosDevices/Action.hs
+++ b/gen/Network/Google/Resource/Directory/ChromeosDevices/Action.hs
@@ -87,7 +87,7 @@
     , _cdaCustomerId = pCdaCustomerId_
     }
 
--- | Immutable id of Chrome OS Device
+-- | Immutable ID of Chrome OS Device
 cdaResourceId :: Lens' ChromeosDevicesAction Text
 cdaResourceId
   = lens _cdaResourceId
@@ -98,7 +98,7 @@
 cdaPayload
   = lens _cdaPayload (\ s a -> s{_cdaPayload = a})
 
--- | Immutable id of the Google Apps account
+-- | Immutable ID of the G Suite account
 cdaCustomerId :: Lens' ChromeosDevicesAction Text
 cdaCustomerId
   = lens _cdaCustomerId
diff --git a/gen/Network/Google/Resource/Directory/ChromeosDevices/Get.hs b/gen/Network/Google/Resource/Directory/ChromeosDevices/Get.hs
--- a/gen/Network/Google/Resource/Directory/ChromeosDevices/Get.hs
+++ b/gen/Network/Google/Resource/Directory/ChromeosDevices/Get.hs
@@ -86,13 +86,13 @@
     , _cdgProjection = Nothing
     }
 
--- | Immutable id of the Google Apps account
+-- | Immutable ID of the G Suite account
 cdgCustomerId :: Lens' ChromeosDevicesGet Text
 cdgCustomerId
   = lens _cdgCustomerId
       (\ s a -> s{_cdgCustomerId = a})
 
--- | Immutable id of Chrome OS Device
+-- | Immutable ID of Chrome OS Device
 cdgDeviceId :: Lens' ChromeosDevicesGet Text
 cdgDeviceId
   = lens _cdgDeviceId (\ s a -> s{_cdgDeviceId = a})
diff --git a/gen/Network/Google/Resource/Directory/ChromeosDevices/List.hs b/gen/Network/Google/Resource/Directory/ChromeosDevices/List.hs
--- a/gen/Network/Google/Resource/Directory/ChromeosDevices/List.hs
+++ b/gen/Network/Google/Resource/Directory/ChromeosDevices/List.hs
@@ -34,6 +34,7 @@
 
     -- * Request Lenses
     , cdlOrderBy
+    , cdlOrgUnitPath
     , cdlCustomerId
     , cdlSortOrder
     , cdlQuery
@@ -56,27 +57,29 @@
                "devices" :>
                  "chromeos" :>
                    QueryParam "orderBy" ChromeosDevicesListOrderBy :>
-                     QueryParam "sortOrder" ChromeosDevicesListSortOrder
-                       :>
-                       QueryParam "query" Text :>
-                         QueryParam "projection" ChromeosDevicesListProjection
-                           :>
-                           QueryParam "pageToken" Text :>
-                             QueryParam "maxResults" (Textual Int32) :>
-                               QueryParam "alt" AltJSON :>
-                                 Get '[JSON] ChromeOSDevices
+                     QueryParam "orgUnitPath" Text :>
+                       QueryParam "sortOrder" ChromeosDevicesListSortOrder
+                         :>
+                         QueryParam "query" Text :>
+                           QueryParam "projection" ChromeosDevicesListProjection
+                             :>
+                             QueryParam "pageToken" Text :>
+                               QueryParam "maxResults" (Textual Int32) :>
+                                 QueryParam "alt" AltJSON :>
+                                   Get '[JSON] ChromeOSDevices
 
 -- | Retrieve all Chrome OS Devices of a customer (paginated)
 --
 -- /See:/ 'chromeosDevicesList' smart constructor.
 data ChromeosDevicesList = ChromeosDevicesList'
-    { _cdlOrderBy    :: !(Maybe ChromeosDevicesListOrderBy)
-    , _cdlCustomerId :: !Text
-    , _cdlSortOrder  :: !(Maybe ChromeosDevicesListSortOrder)
-    , _cdlQuery      :: !(Maybe Text)
-    , _cdlProjection :: !(Maybe ChromeosDevicesListProjection)
-    , _cdlPageToken  :: !(Maybe Text)
-    , _cdlMaxResults :: !(Maybe (Textual Int32))
+    { _cdlOrderBy     :: !(Maybe ChromeosDevicesListOrderBy)
+    , _cdlOrgUnitPath :: !(Maybe Text)
+    , _cdlCustomerId  :: !Text
+    , _cdlSortOrder   :: !(Maybe ChromeosDevicesListSortOrder)
+    , _cdlQuery       :: !(Maybe Text)
+    , _cdlProjection  :: !(Maybe ChromeosDevicesListProjection)
+    , _cdlPageToken   :: !(Maybe Text)
+    , _cdlMaxResults  :: !(Maybe (Textual Int32))
     } deriving (Eq,Show,Data,Typeable,Generic)
 
 -- | Creates a value of 'ChromeosDevicesList' with the minimum fields required to make a request.
@@ -85,6 +88,8 @@
 --
 -- * 'cdlOrderBy'
 --
+-- * 'cdlOrgUnitPath'
+--
 -- * 'cdlCustomerId'
 --
 -- * 'cdlSortOrder'
@@ -102,6 +107,7 @@
 chromeosDevicesList pCdlCustomerId_ =
     ChromeosDevicesList'
     { _cdlOrderBy = Nothing
+    , _cdlOrgUnitPath = Nothing
     , _cdlCustomerId = pCdlCustomerId_
     , _cdlSortOrder = Nothing
     , _cdlQuery = Nothing
@@ -115,7 +121,13 @@
 cdlOrderBy
   = lens _cdlOrderBy (\ s a -> s{_cdlOrderBy = a})
 
--- | Immutable id of the Google Apps account
+-- | Full path of the organizational unit or its ID
+cdlOrgUnitPath :: Lens' ChromeosDevicesList (Maybe Text)
+cdlOrgUnitPath
+  = lens _cdlOrgUnitPath
+      (\ s a -> s{_cdlOrgUnitPath = a})
+
+-- | Immutable ID of the G Suite account
 cdlCustomerId :: Lens' ChromeosDevicesList Text
 cdlCustomerId
   = lens _cdlCustomerId
@@ -128,7 +140,7 @@
   = lens _cdlSortOrder (\ s a -> s{_cdlSortOrder = a})
 
 -- | Search string in the format given at
--- http:\/\/support.google.com\/chromeos\/a\/bin\/answer.py?hl=en&answer=1698333
+-- http:\/\/support.google.com\/chromeos\/a\/bin\/answer.py?answer=1698333
 cdlQuery :: Lens' ChromeosDevicesList (Maybe Text)
 cdlQuery = lens _cdlQuery (\ s a -> s{_cdlQuery = a})
 
@@ -156,7 +168,8 @@
              '["https://www.googleapis.com/auth/admin.directory.device.chromeos",
                "https://www.googleapis.com/auth/admin.directory.device.chromeos.readonly"]
         requestClient ChromeosDevicesList'{..}
-          = go _cdlCustomerId _cdlOrderBy _cdlSortOrder
+          = go _cdlCustomerId _cdlOrderBy _cdlOrgUnitPath
+              _cdlSortOrder
               _cdlQuery
               _cdlProjection
               _cdlPageToken
diff --git a/gen/Network/Google/Resource/Directory/ChromeosDevices/MoveDevicesToOu.hs b/gen/Network/Google/Resource/Directory/ChromeosDevices/MoveDevicesToOu.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/ChromeosDevices/MoveDevicesToOu.hs
@@ -0,0 +1,122 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.ChromeosDevices.MoveDevicesToOu
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Move or insert multiple Chrome OS Devices to organizational unit
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.chromeosdevices.moveDevicesToOu@.
+module Network.Google.Resource.Directory.ChromeosDevices.MoveDevicesToOu
+    (
+    -- * REST Resource
+      ChromeosDevicesMoveDevicesToOuResource
+
+    -- * Creating a Request
+    , chromeosDevicesMoveDevicesToOu
+    , ChromeosDevicesMoveDevicesToOu
+
+    -- * Request Lenses
+    , cdmdtoPayload
+    , cdmdtoOrgUnitPath
+    , cdmdtoCustomerId
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.chromeosdevices.moveDevicesToOu@ method which the
+-- 'ChromeosDevicesMoveDevicesToOu' request conforms to.
+type ChromeosDevicesMoveDevicesToOuResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "customer" :>
+             Capture "customerId" Text :>
+               "devices" :>
+                 "chromeos" :>
+                   "moveDevicesToOu" :>
+                     QueryParam "orgUnitPath" Text :>
+                       QueryParam "alt" AltJSON :>
+                         ReqBody '[JSON] ChromeOSMoveDevicesToOu :>
+                           Post '[JSON] ()
+
+-- | Move or insert multiple Chrome OS Devices to organizational unit
+--
+-- /See:/ 'chromeosDevicesMoveDevicesToOu' smart constructor.
+data ChromeosDevicesMoveDevicesToOu = ChromeosDevicesMoveDevicesToOu'
+    { _cdmdtoPayload     :: !ChromeOSMoveDevicesToOu
+    , _cdmdtoOrgUnitPath :: !Text
+    , _cdmdtoCustomerId  :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ChromeosDevicesMoveDevicesToOu' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cdmdtoPayload'
+--
+-- * 'cdmdtoOrgUnitPath'
+--
+-- * 'cdmdtoCustomerId'
+chromeosDevicesMoveDevicesToOu
+    :: ChromeOSMoveDevicesToOu -- ^ 'cdmdtoPayload'
+    -> Text -- ^ 'cdmdtoOrgUnitPath'
+    -> Text -- ^ 'cdmdtoCustomerId'
+    -> ChromeosDevicesMoveDevicesToOu
+chromeosDevicesMoveDevicesToOu pCdmdtoPayload_ pCdmdtoOrgUnitPath_ pCdmdtoCustomerId_ =
+    ChromeosDevicesMoveDevicesToOu'
+    { _cdmdtoPayload = pCdmdtoPayload_
+    , _cdmdtoOrgUnitPath = pCdmdtoOrgUnitPath_
+    , _cdmdtoCustomerId = pCdmdtoCustomerId_
+    }
+
+-- | Multipart request metadata.
+cdmdtoPayload :: Lens' ChromeosDevicesMoveDevicesToOu ChromeOSMoveDevicesToOu
+cdmdtoPayload
+  = lens _cdmdtoPayload
+      (\ s a -> s{_cdmdtoPayload = a})
+
+-- | Full path of the target organizational unit or its ID
+cdmdtoOrgUnitPath :: Lens' ChromeosDevicesMoveDevicesToOu Text
+cdmdtoOrgUnitPath
+  = lens _cdmdtoOrgUnitPath
+      (\ s a -> s{_cdmdtoOrgUnitPath = a})
+
+-- | Immutable ID of the G Suite account
+cdmdtoCustomerId :: Lens' ChromeosDevicesMoveDevicesToOu Text
+cdmdtoCustomerId
+  = lens _cdmdtoCustomerId
+      (\ s a -> s{_cdmdtoCustomerId = a})
+
+instance GoogleRequest ChromeosDevicesMoveDevicesToOu
+         where
+        type Rs ChromeosDevicesMoveDevicesToOu = ()
+        type Scopes ChromeosDevicesMoveDevicesToOu =
+             '["https://www.googleapis.com/auth/admin.directory.device.chromeos"]
+        requestClient ChromeosDevicesMoveDevicesToOu'{..}
+          = go _cdmdtoCustomerId (Just _cdmdtoOrgUnitPath)
+              (Just AltJSON)
+              _cdmdtoPayload
+              directoryService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy ChromeosDevicesMoveDevicesToOuResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/ChromeosDevices/Patch.hs b/gen/Network/Google/Resource/Directory/ChromeosDevices/Patch.hs
--- a/gen/Network/Google/Resource/Directory/ChromeosDevices/Patch.hs
+++ b/gen/Network/Google/Resource/Directory/ChromeosDevices/Patch.hs
@@ -99,13 +99,13 @@
 cdpPayload
   = lens _cdpPayload (\ s a -> s{_cdpPayload = a})
 
--- | Immutable id of the Google Apps account
+-- | Immutable ID of the G Suite account
 cdpCustomerId :: Lens' ChromeosDevicesPatch Text
 cdpCustomerId
   = lens _cdpCustomerId
       (\ s a -> s{_cdpCustomerId = a})
 
--- | Immutable id of Chrome OS Device
+-- | Immutable ID of Chrome OS Device
 cdpDeviceId :: Lens' ChromeosDevicesPatch Text
 cdpDeviceId
   = lens _cdpDeviceId (\ s a -> s{_cdpDeviceId = a})
diff --git a/gen/Network/Google/Resource/Directory/ChromeosDevices/Update.hs b/gen/Network/Google/Resource/Directory/ChromeosDevices/Update.hs
--- a/gen/Network/Google/Resource/Directory/ChromeosDevices/Update.hs
+++ b/gen/Network/Google/Resource/Directory/ChromeosDevices/Update.hs
@@ -99,13 +99,13 @@
 cduPayload
   = lens _cduPayload (\ s a -> s{_cduPayload = a})
 
--- | Immutable id of the Google Apps account
+-- | Immutable ID of the G Suite account
 cduCustomerId :: Lens' ChromeosDevicesUpdate Text
 cduCustomerId
   = lens _cduCustomerId
       (\ s a -> s{_cduCustomerId = a})
 
--- | Immutable id of Chrome OS Device
+-- | Immutable ID of Chrome OS Device
 cduDeviceId :: Lens' ChromeosDevicesUpdate Text
 cduDeviceId
   = lens _cduDeviceId (\ s a -> s{_cduDeviceId = a})
diff --git a/gen/Network/Google/Resource/Directory/DomainAliases/Delete.hs b/gen/Network/Google/Resource/Directory/DomainAliases/Delete.hs
--- a/gen/Network/Google/Resource/Directory/DomainAliases/Delete.hs
+++ b/gen/Network/Google/Resource/Directory/DomainAliases/Delete.hs
@@ -83,7 +83,7 @@
   = lens _dadDomainAliasName
       (\ s a -> s{_dadDomainAliasName = a})
 
--- | Immutable id of the Google Apps account.
+-- | Immutable ID of the G Suite account.
 dadCustomer :: Lens' DomainAliasesDelete Text
 dadCustomer
   = lens _dadCustomer (\ s a -> s{_dadCustomer = a})
diff --git a/gen/Network/Google/Resource/Directory/DomainAliases/Get.hs b/gen/Network/Google/Resource/Directory/DomainAliases/Get.hs
--- a/gen/Network/Google/Resource/Directory/DomainAliases/Get.hs
+++ b/gen/Network/Google/Resource/Directory/DomainAliases/Get.hs
@@ -83,7 +83,7 @@
   = lens _dagDomainAliasName
       (\ s a -> s{_dagDomainAliasName = a})
 
--- | Immutable id of the Google Apps account.
+-- | Immutable ID of the G Suite account.
 dagCustomer :: Lens' DomainAliasesGet Text
 dagCustomer
   = lens _dagCustomer (\ s a -> s{_dagCustomer = a})
diff --git a/gen/Network/Google/Resource/Directory/DomainAliases/Insert.hs b/gen/Network/Google/Resource/Directory/DomainAliases/Insert.hs
--- a/gen/Network/Google/Resource/Directory/DomainAliases/Insert.hs
+++ b/gen/Network/Google/Resource/Directory/DomainAliases/Insert.hs
@@ -83,7 +83,7 @@
 daiPayload
   = lens _daiPayload (\ s a -> s{_daiPayload = a})
 
--- | Immutable id of the Google Apps account.
+-- | Immutable ID of the G Suite account.
 daiCustomer :: Lens' DomainAliasesInsert Text
 daiCustomer
   = lens _daiCustomer (\ s a -> s{_daiCustomer = a})
diff --git a/gen/Network/Google/Resource/Directory/DomainAliases/List.hs b/gen/Network/Google/Resource/Directory/DomainAliases/List.hs
--- a/gen/Network/Google/Resource/Directory/DomainAliases/List.hs
+++ b/gen/Network/Google/Resource/Directory/DomainAliases/List.hs
@@ -76,7 +76,7 @@
     , _dalParentDomainName = Nothing
     }
 
--- | Immutable id of the Google Apps account.
+-- | Immutable ID of the G Suite account.
 dalCustomer :: Lens' DomainAliasesList Text
 dalCustomer
   = lens _dalCustomer (\ s a -> s{_dalCustomer = a})
diff --git a/gen/Network/Google/Resource/Directory/Domains/Delete.hs b/gen/Network/Google/Resource/Directory/Domains/Delete.hs
--- a/gen/Network/Google/Resource/Directory/Domains/Delete.hs
+++ b/gen/Network/Google/Resource/Directory/Domains/Delete.hs
@@ -77,7 +77,7 @@
     , _ddDomainName = pDdDomainName_
     }
 
--- | Immutable id of the Google Apps account.
+-- | Immutable ID of the G Suite account.
 ddCustomer :: Lens' DomainsDelete Text
 ddCustomer
   = lens _ddCustomer (\ s a -> s{_ddCustomer = a})
diff --git a/gen/Network/Google/Resource/Directory/Domains/Get.hs b/gen/Network/Google/Resource/Directory/Domains/Get.hs
--- a/gen/Network/Google/Resource/Directory/Domains/Get.hs
+++ b/gen/Network/Google/Resource/Directory/Domains/Get.hs
@@ -77,7 +77,7 @@
     , _dgDomainName = pDgDomainName_
     }
 
--- | Immutable id of the Google Apps account.
+-- | Immutable ID of the G Suite account.
 dgCustomer :: Lens' DomainsGet Text
 dgCustomer
   = lens _dgCustomer (\ s a -> s{_dgCustomer = a})
diff --git a/gen/Network/Google/Resource/Directory/Domains/Insert.hs b/gen/Network/Google/Resource/Directory/Domains/Insert.hs
--- a/gen/Network/Google/Resource/Directory/Domains/Insert.hs
+++ b/gen/Network/Google/Resource/Directory/Domains/Insert.hs
@@ -82,7 +82,7 @@
 diPayload
   = lens _diPayload (\ s a -> s{_diPayload = a})
 
--- | Immutable id of the Google Apps account.
+-- | Immutable ID of the G Suite account.
 diCustomer :: Lens' DomainsInsert Text
 diCustomer
   = lens _diCustomer (\ s a -> s{_diCustomer = a})
diff --git a/gen/Network/Google/Resource/Directory/Domains/List.hs b/gen/Network/Google/Resource/Directory/Domains/List.hs
--- a/gen/Network/Google/Resource/Directory/Domains/List.hs
+++ b/gen/Network/Google/Resource/Directory/Domains/List.hs
@@ -70,7 +70,7 @@
     { _dlCustomer = pDlCustomer_
     }
 
--- | Immutable id of the Google Apps account.
+-- | Immutable ID of the G Suite account.
 dlCustomer :: Lens' DomainsList Text
 dlCustomer
   = lens _dlCustomer (\ s a -> s{_dlCustomer = a})
diff --git a/gen/Network/Google/Resource/Directory/Groups/Aliases/Delete.hs b/gen/Network/Google/Resource/Directory/Groups/Aliases/Delete.hs
--- a/gen/Network/Google/Resource/Directory/Groups/Aliases/Delete.hs
+++ b/gen/Network/Google/Resource/Directory/Groups/Aliases/Delete.hs
@@ -77,7 +77,7 @@
     , _gadAlias = pGadAlias_
     }
 
--- | Email or immutable Id of the group
+-- | Email or immutable ID of the group
 gadGroupKey :: Lens' GroupsAliasesDelete Text
 gadGroupKey
   = lens _gadGroupKey (\ s a -> s{_gadGroupKey = a})
diff --git a/gen/Network/Google/Resource/Directory/Groups/Aliases/Insert.hs b/gen/Network/Google/Resource/Directory/Groups/Aliases/Insert.hs
--- a/gen/Network/Google/Resource/Directory/Groups/Aliases/Insert.hs
+++ b/gen/Network/Google/Resource/Directory/Groups/Aliases/Insert.hs
@@ -77,7 +77,7 @@
     , _gaiPayload = pGaiPayload_
     }
 
--- | Email or immutable Id of the group
+-- | Email or immutable ID of the group
 gaiGroupKey :: Lens' GroupsAliasesInsert Text
 gaiGroupKey
   = lens _gaiGroupKey (\ s a -> s{_gaiGroupKey = a})
diff --git a/gen/Network/Google/Resource/Directory/Groups/Aliases/List.hs b/gen/Network/Google/Resource/Directory/Groups/Aliases/List.hs
--- a/gen/Network/Google/Resource/Directory/Groups/Aliases/List.hs
+++ b/gen/Network/Google/Resource/Directory/Groups/Aliases/List.hs
@@ -70,7 +70,7 @@
     { _galGroupKey = pGalGroupKey_
     }
 
--- | Email or immutable Id of the group
+-- | Email or immutable ID of the group
 galGroupKey :: Lens' GroupsAliasesList Text
 galGroupKey
   = lens _galGroupKey (\ s a -> s{_galGroupKey = a})
diff --git a/gen/Network/Google/Resource/Directory/Groups/Delete.hs b/gen/Network/Google/Resource/Directory/Groups/Delete.hs
--- a/gen/Network/Google/Resource/Directory/Groups/Delete.hs
+++ b/gen/Network/Google/Resource/Directory/Groups/Delete.hs
@@ -69,7 +69,7 @@
     { _gdGroupKey = pGdGroupKey_
     }
 
--- | Email or immutable Id of the group
+-- | Email or immutable ID of the group
 gdGroupKey :: Lens' GroupsDelete Text
 gdGroupKey
   = lens _gdGroupKey (\ s a -> s{_gdGroupKey = a})
diff --git a/gen/Network/Google/Resource/Directory/Groups/Get.hs b/gen/Network/Google/Resource/Directory/Groups/Get.hs
--- a/gen/Network/Google/Resource/Directory/Groups/Get.hs
+++ b/gen/Network/Google/Resource/Directory/Groups/Get.hs
@@ -69,7 +69,7 @@
     { _ggGroupKey = pGgGroupKey_
     }
 
--- | Email or immutable Id of the group
+-- | Email or immutable ID of the group
 ggGroupKey :: Lens' GroupsGet Text
 ggGroupKey
   = lens _ggGroupKey (\ s a -> s{_ggGroupKey = a})
diff --git a/gen/Network/Google/Resource/Directory/Groups/List.hs b/gen/Network/Google/Resource/Directory/Groups/List.hs
--- a/gen/Network/Google/Resource/Directory/Groups/List.hs
+++ b/gen/Network/Google/Resource/Directory/Groups/List.hs
@@ -20,7 +20,7 @@
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Retrieve all groups in a domain (paginated)
+-- Retrieve all groups of a domain or of a user given a userKey (paginated)
 --
 -- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.groups.list@.
 module Network.Google.Resource.Directory.Groups.List
@@ -33,8 +33,11 @@
     , GroupsList
 
     -- * Request Lenses
+    , glOrderBy
     , glDomain
+    , glSortOrder
     , glCustomer
+    , glQuery
     , glPageToken
     , glUserKey
     , glMaxResults
@@ -50,19 +53,25 @@
        "directory" :>
          "v1" :>
            "groups" :>
-             QueryParam "domain" Text :>
-               QueryParam "customer" Text :>
-                 QueryParam "pageToken" Text :>
-                   QueryParam "userKey" Text :>
-                     QueryParam "maxResults" (Textual Int32) :>
-                       QueryParam "alt" AltJSON :> Get '[JSON] Groups
+             QueryParam "orderBy" GroupsListOrderBy :>
+               QueryParam "domain" Text :>
+                 QueryParam "sortOrder" GroupsListSortOrder :>
+                   QueryParam "customer" Text :>
+                     QueryParam "query" Text :>
+                       QueryParam "pageToken" Text :>
+                         QueryParam "userKey" Text :>
+                           QueryParam "maxResults" (Textual Int32) :>
+                             QueryParam "alt" AltJSON :> Get '[JSON] Groups
 
--- | Retrieve all groups in a domain (paginated)
+-- | Retrieve all groups of a domain or of a user given a userKey (paginated)
 --
 -- /See:/ 'groupsList' smart constructor.
 data GroupsList = GroupsList'
-    { _glDomain     :: !(Maybe Text)
+    { _glOrderBy    :: !(Maybe GroupsListOrderBy)
+    , _glDomain     :: !(Maybe Text)
+    , _glSortOrder  :: !(Maybe GroupsListSortOrder)
     , _glCustomer   :: !(Maybe Text)
+    , _glQuery      :: !(Maybe Text)
     , _glPageToken  :: !(Maybe Text)
     , _glUserKey    :: !(Maybe Text)
     , _glMaxResults :: !(Maybe (Textual Int32))
@@ -72,10 +81,16 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
+-- * 'glOrderBy'
+--
 -- * 'glDomain'
 --
+-- * 'glSortOrder'
+--
 -- * 'glCustomer'
 --
+-- * 'glQuery'
+--
 -- * 'glPageToken'
 --
 -- * 'glUserKey'
@@ -85,24 +100,44 @@
     :: GroupsList
 groupsList =
     GroupsList'
-    { _glDomain = Nothing
+    { _glOrderBy = Nothing
+    , _glDomain = Nothing
+    , _glSortOrder = Nothing
     , _glCustomer = Nothing
+    , _glQuery = Nothing
     , _glPageToken = Nothing
     , _glUserKey = Nothing
     , _glMaxResults = Nothing
     }
 
+-- | Column to use for sorting results
+glOrderBy :: Lens' GroupsList (Maybe GroupsListOrderBy)
+glOrderBy
+  = lens _glOrderBy (\ s a -> s{_glOrderBy = a})
+
 -- | Name of the domain. Fill this field to get groups from only this domain.
 -- To return all groups in a multi-domain fill customer field instead.
 glDomain :: Lens' GroupsList (Maybe Text)
 glDomain = lens _glDomain (\ s a -> s{_glDomain = a})
 
--- | Immutable id of the Google Apps account. In case of multi-domain, to
--- fetch all groups for a customer, fill this field instead of domain.
+-- | Whether to return results in ascending or descending order. Only of use
+-- when orderBy is also used
+glSortOrder :: Lens' GroupsList (Maybe GroupsListSortOrder)
+glSortOrder
+  = lens _glSortOrder (\ s a -> s{_glSortOrder = a})
+
+-- | Immutable ID of the G Suite account. In case of multi-domain, to fetch
+-- all groups for a customer, fill this field instead of domain.
 glCustomer :: Lens' GroupsList (Maybe Text)
 glCustomer
   = lens _glCustomer (\ s a -> s{_glCustomer = a})
 
+-- | Query string search. Should be of the form \"\". Complete documentation
+-- is at
+-- https:\/\/developers.google.com\/admin-sdk\/directory\/v1\/guides\/search-groups
+glQuery :: Lens' GroupsList (Maybe Text)
+glQuery = lens _glQuery (\ s a -> s{_glQuery = a})
+
 -- | Token to specify next page in the list
 glPageToken :: Lens' GroupsList (Maybe Text)
 glPageToken
@@ -127,7 +162,10 @@
              '["https://www.googleapis.com/auth/admin.directory.group",
                "https://www.googleapis.com/auth/admin.directory.group.readonly"]
         requestClient GroupsList'{..}
-          = go _glDomain _glCustomer _glPageToken _glUserKey
+          = go _glOrderBy _glDomain _glSortOrder _glCustomer
+              _glQuery
+              _glPageToken
+              _glUserKey
               _glMaxResults
               (Just AltJSON)
               directoryService
diff --git a/gen/Network/Google/Resource/Directory/Groups/Patch.hs b/gen/Network/Google/Resource/Directory/Groups/Patch.hs
--- a/gen/Network/Google/Resource/Directory/Groups/Patch.hs
+++ b/gen/Network/Google/Resource/Directory/Groups/Patch.hs
@@ -76,7 +76,7 @@
     , _gpPayload = pGpPayload_
     }
 
--- | Email or immutable Id of the group. If Id, it should match with id of
+-- | Email or immutable ID of the group. If ID, it should match with id of
 -- group object
 gpGroupKey :: Lens' GroupsPatch Text
 gpGroupKey
diff --git a/gen/Network/Google/Resource/Directory/Groups/Update.hs b/gen/Network/Google/Resource/Directory/Groups/Update.hs
--- a/gen/Network/Google/Resource/Directory/Groups/Update.hs
+++ b/gen/Network/Google/Resource/Directory/Groups/Update.hs
@@ -76,7 +76,7 @@
     , _guPayload = pGuPayload_
     }
 
--- | Email or immutable Id of the group. If Id, it should match with id of
+-- | Email or immutable ID of the group. If ID, it should match with id of
 -- group object
 guGroupKey :: Lens' GroupsUpdate Text
 guGroupKey
diff --git a/gen/Network/Google/Resource/Directory/Members/Delete.hs b/gen/Network/Google/Resource/Directory/Members/Delete.hs
--- a/gen/Network/Google/Resource/Directory/Members/Delete.hs
+++ b/gen/Network/Google/Resource/Directory/Members/Delete.hs
@@ -77,12 +77,12 @@
     , _mdGroupKey = pMdGroupKey_
     }
 
--- | Email or immutable Id of the member
+-- | Email or immutable ID of the member
 mdMemberKey :: Lens' MembersDelete Text
 mdMemberKey
   = lens _mdMemberKey (\ s a -> s{_mdMemberKey = a})
 
--- | Email or immutable Id of the group
+-- | Email or immutable ID of the group
 mdGroupKey :: Lens' MembersDelete Text
 mdGroupKey
   = lens _mdGroupKey (\ s a -> s{_mdGroupKey = a})
diff --git a/gen/Network/Google/Resource/Directory/Members/Get.hs b/gen/Network/Google/Resource/Directory/Members/Get.hs
--- a/gen/Network/Google/Resource/Directory/Members/Get.hs
+++ b/gen/Network/Google/Resource/Directory/Members/Get.hs
@@ -77,12 +77,12 @@
     , _mgGroupKey = pMgGroupKey_
     }
 
--- | Email or immutable Id of the member
+-- | Email or immutable ID of the member
 mgMemberKey :: Lens' MembersGet Text
 mgMemberKey
   = lens _mgMemberKey (\ s a -> s{_mgMemberKey = a})
 
--- | Email or immutable Id of the group
+-- | Email or immutable ID of the group
 mgGroupKey :: Lens' MembersGet Text
 mgGroupKey
   = lens _mgGroupKey (\ s a -> s{_mgGroupKey = a})
diff --git a/gen/Network/Google/Resource/Directory/Members/HasMember.hs b/gen/Network/Google/Resource/Directory/Members/HasMember.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Members/HasMember.hs
@@ -0,0 +1,108 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.Members.HasMember
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Checks whether the given user is a member of the group. Membership can
+-- be direct or nested.
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.members.hasMember@.
+module Network.Google.Resource.Directory.Members.HasMember
+    (
+    -- * REST Resource
+      MembersHasMemberResource
+
+    -- * Creating a Request
+    , membersHasMember'
+    , MembersHasMember'
+
+    -- * Request Lenses
+    , mhmMemberKey
+    , mhmGroupKey
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.members.hasMember@ method which the
+-- 'MembersHasMember'' request conforms to.
+type MembersHasMemberResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "groups" :>
+             Capture "groupKey" Text :>
+               "hasMember" :>
+                 Capture "memberKey" Text :>
+                   QueryParam "alt" AltJSON :>
+                     Get '[JSON] MembersHasMember
+
+-- | Checks whether the given user is a member of the group. Membership can
+-- be direct or nested.
+--
+-- /See:/ 'membersHasMember'' smart constructor.
+data MembersHasMember' = MembersHasMember''
+    { _mhmMemberKey :: !Text
+    , _mhmGroupKey  :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MembersHasMember'' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mhmMemberKey'
+--
+-- * 'mhmGroupKey'
+membersHasMember'
+    :: Text -- ^ 'mhmMemberKey'
+    -> Text -- ^ 'mhmGroupKey'
+    -> MembersHasMember'
+membersHasMember' pMhmMemberKey_ pMhmGroupKey_ =
+    MembersHasMember''
+    { _mhmMemberKey = pMhmMemberKey_
+    , _mhmGroupKey = pMhmGroupKey_
+    }
+
+-- | Identifies the user member in the API request. The value can be the
+-- user\'s primary email address, alias, or unique ID.
+mhmMemberKey :: Lens' MembersHasMember' Text
+mhmMemberKey
+  = lens _mhmMemberKey (\ s a -> s{_mhmMemberKey = a})
+
+-- | Identifies the group in the API request. The value can be the group\'s
+-- email address, group alias, or the unique group ID.
+mhmGroupKey :: Lens' MembersHasMember' Text
+mhmGroupKey
+  = lens _mhmGroupKey (\ s a -> s{_mhmGroupKey = a})
+
+instance GoogleRequest MembersHasMember' where
+        type Rs MembersHasMember' = MembersHasMember
+        type Scopes MembersHasMember' =
+             '["https://www.googleapis.com/auth/admin.directory.group",
+               "https://www.googleapis.com/auth/admin.directory.group.member",
+               "https://www.googleapis.com/auth/admin.directory.group.member.readonly",
+               "https://www.googleapis.com/auth/admin.directory.group.readonly"]
+        requestClient MembersHasMember''{..}
+          = go _mhmGroupKey _mhmMemberKey (Just AltJSON)
+              directoryService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy MembersHasMemberResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Members/Insert.hs b/gen/Network/Google/Resource/Directory/Members/Insert.hs
--- a/gen/Network/Google/Resource/Directory/Members/Insert.hs
+++ b/gen/Network/Google/Resource/Directory/Members/Insert.hs
@@ -77,7 +77,7 @@
     , _miPayload = pMiPayload_
     }
 
--- | Email or immutable Id of the group
+-- | Email or immutable ID of the group
 miGroupKey :: Lens' MembersInsert Text
 miGroupKey
   = lens _miGroupKey (\ s a -> s{_miGroupKey = a})
diff --git a/gen/Network/Google/Resource/Directory/Members/List.hs b/gen/Network/Google/Resource/Directory/Members/List.hs
--- a/gen/Network/Google/Resource/Directory/Members/List.hs
+++ b/gen/Network/Google/Resource/Directory/Members/List.hs
@@ -36,6 +36,7 @@
     , mlRoles
     , mlGroupKey
     , mlPageToken
+    , mlIncludeDerivedMembership
     , mlMaxResults
     ) where
 
@@ -53,17 +54,19 @@
                "members" :>
                  QueryParam "roles" Text :>
                    QueryParam "pageToken" Text :>
-                     QueryParam "maxResults" (Textual Int32) :>
-                       QueryParam "alt" AltJSON :> Get '[JSON] Members
+                     QueryParam "includeDerivedMembership" Bool :>
+                       QueryParam "maxResults" (Textual Int32) :>
+                         QueryParam "alt" AltJSON :> Get '[JSON] Members
 
 -- | Retrieve all members in a group (paginated)
 --
 -- /See:/ 'membersList' smart constructor.
 data MembersList = MembersList'
-    { _mlRoles      :: !(Maybe Text)
-    , _mlGroupKey   :: !Text
-    , _mlPageToken  :: !(Maybe Text)
-    , _mlMaxResults :: !(Maybe (Textual Int32))
+    { _mlRoles                    :: !(Maybe Text)
+    , _mlGroupKey                 :: !Text
+    , _mlPageToken                :: !(Maybe Text)
+    , _mlIncludeDerivedMembership :: !(Maybe Bool)
+    , _mlMaxResults               :: !(Maybe (Textual Int32))
     } deriving (Eq,Show,Data,Typeable,Generic)
 
 -- | Creates a value of 'MembersList' with the minimum fields required to make a request.
@@ -76,6 +79,8 @@
 --
 -- * 'mlPageToken'
 --
+-- * 'mlIncludeDerivedMembership'
+--
 -- * 'mlMaxResults'
 membersList
     :: Text -- ^ 'mlGroupKey'
@@ -85,6 +90,7 @@
     { _mlRoles = Nothing
     , _mlGroupKey = pMlGroupKey_
     , _mlPageToken = Nothing
+    , _mlIncludeDerivedMembership = Nothing
     , _mlMaxResults = Nothing
     }
 
@@ -92,7 +98,7 @@
 mlRoles :: Lens' MembersList (Maybe Text)
 mlRoles = lens _mlRoles (\ s a -> s{_mlRoles = a})
 
--- | Email or immutable Id of the group
+-- | Email or immutable ID of the group
 mlGroupKey :: Lens' MembersList Text
 mlGroupKey
   = lens _mlGroupKey (\ s a -> s{_mlGroupKey = a})
@@ -102,6 +108,12 @@
 mlPageToken
   = lens _mlPageToken (\ s a -> s{_mlPageToken = a})
 
+-- | Whether to list indirect memberships. Default: false.
+mlIncludeDerivedMembership :: Lens' MembersList (Maybe Bool)
+mlIncludeDerivedMembership
+  = lens _mlIncludeDerivedMembership
+      (\ s a -> s{_mlIncludeDerivedMembership = a})
+
 -- | Maximum number of results to return. Default is 200
 mlMaxResults :: Lens' MembersList (Maybe Int32)
 mlMaxResults
@@ -116,7 +128,9 @@
                "https://www.googleapis.com/auth/admin.directory.group.member.readonly",
                "https://www.googleapis.com/auth/admin.directory.group.readonly"]
         requestClient MembersList'{..}
-          = go _mlGroupKey _mlRoles _mlPageToken _mlMaxResults
+          = go _mlGroupKey _mlRoles _mlPageToken
+              _mlIncludeDerivedMembership
+              _mlMaxResults
               (Just AltJSON)
               directoryService
           where go
diff --git a/gen/Network/Google/Resource/Directory/Members/Patch.hs b/gen/Network/Google/Resource/Directory/Members/Patch.hs
--- a/gen/Network/Google/Resource/Directory/Members/Patch.hs
+++ b/gen/Network/Google/Resource/Directory/Members/Patch.hs
@@ -86,13 +86,13 @@
     , _mpPayload = pMpPayload_
     }
 
--- | Email or immutable Id of the user. If Id, it should match with id of
+-- | Email or immutable ID of the user. If ID, it should match with id of
 -- member object
 mpMemberKey :: Lens' MembersPatch Text
 mpMemberKey
   = lens _mpMemberKey (\ s a -> s{_mpMemberKey = a})
 
--- | Email or immutable Id of the group. If Id, it should match with id of
+-- | Email or immutable ID of the group. If ID, it should match with id of
 -- group object
 mpGroupKey :: Lens' MembersPatch Text
 mpGroupKey
diff --git a/gen/Network/Google/Resource/Directory/Members/Update.hs b/gen/Network/Google/Resource/Directory/Members/Update.hs
--- a/gen/Network/Google/Resource/Directory/Members/Update.hs
+++ b/gen/Network/Google/Resource/Directory/Members/Update.hs
@@ -84,13 +84,13 @@
     , _muPayload = pMuPayload_
     }
 
--- | Email or immutable Id of the user. If Id, it should match with id of
+-- | Email or immutable ID of the user. If ID, it should match with id of
 -- member object
 muMemberKey :: Lens' MembersUpdate Text
 muMemberKey
   = lens _muMemberKey (\ s a -> s{_muMemberKey = a})
 
--- | Email or immutable Id of the group. If Id, it should match with id of
+-- | Email or immutable ID of the group. If ID, it should match with id of
 -- group object
 muGroupKey :: Lens' MembersUpdate Text
 muGroupKey
diff --git a/gen/Network/Google/Resource/Directory/MobileDevices/Action.hs b/gen/Network/Google/Resource/Directory/MobileDevices/Action.hs
--- a/gen/Network/Google/Resource/Directory/MobileDevices/Action.hs
+++ b/gen/Network/Google/Resource/Directory/MobileDevices/Action.hs
@@ -86,7 +86,7 @@
     , _mdaCustomerId = pMdaCustomerId_
     }
 
--- | Immutable id of Mobile Device
+-- | Immutable ID of Mobile Device
 mdaResourceId :: Lens' MobileDevicesAction Text
 mdaResourceId
   = lens _mdaResourceId
@@ -97,7 +97,7 @@
 mdaPayload
   = lens _mdaPayload (\ s a -> s{_mdaPayload = a})
 
--- | Immutable id of the Google Apps account
+-- | Immutable ID of the G Suite account
 mdaCustomerId :: Lens' MobileDevicesAction Text
 mdaCustomerId
   = lens _mdaCustomerId
diff --git a/gen/Network/Google/Resource/Directory/MobileDevices/Delete.hs b/gen/Network/Google/Resource/Directory/MobileDevices/Delete.hs
--- a/gen/Network/Google/Resource/Directory/MobileDevices/Delete.hs
+++ b/gen/Network/Google/Resource/Directory/MobileDevices/Delete.hs
@@ -78,13 +78,13 @@
     , _mddCustomerId = pMddCustomerId_
     }
 
--- | Immutable id of Mobile Device
+-- | Immutable ID of Mobile Device
 mddResourceId :: Lens' MobileDevicesDelete Text
 mddResourceId
   = lens _mddResourceId
       (\ s a -> s{_mddResourceId = a})
 
--- | Immutable id of the Google Apps account
+-- | Immutable ID of the G Suite account
 mddCustomerId :: Lens' MobileDevicesDelete Text
 mddCustomerId
   = lens _mddCustomerId
diff --git a/gen/Network/Google/Resource/Directory/MobileDevices/Get.hs b/gen/Network/Google/Resource/Directory/MobileDevices/Get.hs
--- a/gen/Network/Google/Resource/Directory/MobileDevices/Get.hs
+++ b/gen/Network/Google/Resource/Directory/MobileDevices/Get.hs
@@ -84,13 +84,13 @@
     , _mdgProjection = Nothing
     }
 
--- | Immutable id of Mobile Device
+-- | Immutable ID of Mobile Device
 mdgResourceId :: Lens' MobileDevicesGet Text
 mdgResourceId
   = lens _mdgResourceId
       (\ s a -> s{_mdgResourceId = a})
 
--- | Immutable id of the Google Apps account
+-- | Immutable ID of the G Suite account
 mdgCustomerId :: Lens' MobileDevicesGet Text
 mdgCustomerId
   = lens _mdgCustomerId
diff --git a/gen/Network/Google/Resource/Directory/MobileDevices/List.hs b/gen/Network/Google/Resource/Directory/MobileDevices/List.hs
--- a/gen/Network/Google/Resource/Directory/MobileDevices/List.hs
+++ b/gen/Network/Google/Resource/Directory/MobileDevices/List.hs
@@ -114,7 +114,7 @@
 mdlOrderBy
   = lens _mdlOrderBy (\ s a -> s{_mdlOrderBy = a})
 
--- | Immutable id of the Google Apps account
+-- | Immutable ID of the G Suite account
 mdlCustomerId :: Lens' MobileDevicesList Text
 mdlCustomerId
   = lens _mdlCustomerId
@@ -127,7 +127,7 @@
   = lens _mdlSortOrder (\ s a -> s{_mdlSortOrder = a})
 
 -- | Search string in the format given at
--- http:\/\/support.google.com\/a\/bin\/answer.py?hl=en&answer=1408863#search
+-- http:\/\/support.google.com\/a\/bin\/answer.py?answer=1408863#search
 mdlQuery :: Lens' MobileDevicesList (Maybe Text)
 mdlQuery = lens _mdlQuery (\ s a -> s{_mdlQuery = a})
 
diff --git a/gen/Network/Google/Resource/Directory/Notifications/Delete.hs b/gen/Network/Google/Resource/Directory/Notifications/Delete.hs
--- a/gen/Network/Google/Resource/Directory/Notifications/Delete.hs
+++ b/gen/Network/Google/Resource/Directory/Notifications/Delete.hs
@@ -77,8 +77,8 @@
     , _ndNotificationId = pNdNotificationId_
     }
 
--- | The unique ID for the customer\'s Google account. The customerId is also
--- returned as part of the Users resource.
+-- | The unique ID for the customer\'s G Suite account. The customerId is
+-- also returned as part of the Users resource.
 ndCustomer :: Lens' NotificationsDelete Text
 ndCustomer
   = lens _ndCustomer (\ s a -> s{_ndCustomer = a})
diff --git a/gen/Network/Google/Resource/Directory/Notifications/Get.hs b/gen/Network/Google/Resource/Directory/Notifications/Get.hs
--- a/gen/Network/Google/Resource/Directory/Notifications/Get.hs
+++ b/gen/Network/Google/Resource/Directory/Notifications/Get.hs
@@ -77,8 +77,8 @@
     , _ngNotificationId = pNgNotificationId_
     }
 
--- | The unique ID for the customer\'s Google account. The customerId is also
--- returned as part of the Users resource.
+-- | The unique ID for the customer\'s G Suite account. The customerId is
+-- also returned as part of the Users resource.
 ngCustomer :: Lens' NotificationsGet Text
 ngCustomer
   = lens _ngCustomer (\ s a -> s{_ngCustomer = a})
diff --git a/gen/Network/Google/Resource/Directory/Notifications/List.hs b/gen/Network/Google/Resource/Directory/Notifications/List.hs
--- a/gen/Network/Google/Resource/Directory/Notifications/List.hs
+++ b/gen/Network/Google/Resource/Directory/Notifications/List.hs
@@ -88,7 +88,7 @@
     , _nlMaxResults = Nothing
     }
 
--- | The unique ID for the customer\'s Google account.
+-- | The unique ID for the customer\'s G Suite account.
 nlCustomer :: Lens' NotificationsList Text
 nlCustomer
   = lens _nlCustomer (\ s a -> s{_nlCustomer = a})
diff --git a/gen/Network/Google/Resource/Directory/Notifications/Patch.hs b/gen/Network/Google/Resource/Directory/Notifications/Patch.hs
--- a/gen/Network/Google/Resource/Directory/Notifications/Patch.hs
+++ b/gen/Network/Google/Resource/Directory/Notifications/Patch.hs
@@ -90,7 +90,7 @@
 npPayload
   = lens _npPayload (\ s a -> s{_npPayload = a})
 
--- | The unique ID for the customer\'s Google account.
+-- | The unique ID for the customer\'s G Suite account.
 npCustomer :: Lens' NotificationsPatch Text
 npCustomer
   = lens _npCustomer (\ s a -> s{_npCustomer = a})
diff --git a/gen/Network/Google/Resource/Directory/Notifications/Update.hs b/gen/Network/Google/Resource/Directory/Notifications/Update.hs
--- a/gen/Network/Google/Resource/Directory/Notifications/Update.hs
+++ b/gen/Network/Google/Resource/Directory/Notifications/Update.hs
@@ -90,7 +90,7 @@
 nuPayload
   = lens _nuPayload (\ s a -> s{_nuPayload = a})
 
--- | The unique ID for the customer\'s Google account.
+-- | The unique ID for the customer\'s G Suite account.
 nuCustomer :: Lens' NotificationsUpdate Text
 nuCustomer
   = lens _nuCustomer (\ s a -> s{_nuCustomer = a})
diff --git a/gen/Network/Google/Resource/Directory/OrgUnits/Delete.hs b/gen/Network/Google/Resource/Directory/OrgUnits/Delete.hs
--- a/gen/Network/Google/Resource/Directory/OrgUnits/Delete.hs
+++ b/gen/Network/Google/Resource/Directory/OrgUnits/Delete.hs
@@ -20,7 +20,7 @@
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Remove Organization Unit
+-- Remove organizational unit
 --
 -- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.orgunits.delete@.
 module Network.Google.Resource.Directory.OrgUnits.Delete
@@ -52,7 +52,7 @@
                  Captures "orgUnitPath" Text :>
                    QueryParam "alt" AltJSON :> Delete '[JSON] ()
 
--- | Remove Organization Unit
+-- | Remove organizational unit
 --
 -- /See:/ 'orgUnitsDelete' smart constructor.
 data OrgUnitsDelete = OrgUnitsDelete'
@@ -77,14 +77,14 @@
     , _oudCustomerId = pOudCustomerId_
     }
 
--- | Full path of the organization unit or its Id
+-- | Full path of the organizational unit or its ID
 oudOrgUnitPath :: Lens' OrgUnitsDelete [Text]
 oudOrgUnitPath
   = lens _oudOrgUnitPath
       (\ s a -> s{_oudOrgUnitPath = a})
       . _Coerce
 
--- | Immutable id of the Google Apps account
+-- | Immutable ID of the G Suite account
 oudCustomerId :: Lens' OrgUnitsDelete Text
 oudCustomerId
   = lens _oudCustomerId
diff --git a/gen/Network/Google/Resource/Directory/OrgUnits/Get.hs b/gen/Network/Google/Resource/Directory/OrgUnits/Get.hs
--- a/gen/Network/Google/Resource/Directory/OrgUnits/Get.hs
+++ b/gen/Network/Google/Resource/Directory/OrgUnits/Get.hs
@@ -20,7 +20,7 @@
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Retrieve Organization Unit
+-- Retrieve organizational unit
 --
 -- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.orgunits.get@.
 module Network.Google.Resource.Directory.OrgUnits.Get
@@ -52,7 +52,7 @@
                  Captures "orgUnitPath" Text :>
                    QueryParam "alt" AltJSON :> Get '[JSON] OrgUnit
 
--- | Retrieve Organization Unit
+-- | Retrieve organizational unit
 --
 -- /See:/ 'orgUnitsGet' smart constructor.
 data OrgUnitsGet = OrgUnitsGet'
@@ -77,14 +77,14 @@
     , _ougCustomerId = pOugCustomerId_
     }
 
--- | Full path of the organization unit or its Id
+-- | Full path of the organizational unit or its ID
 ougOrgUnitPath :: Lens' OrgUnitsGet [Text]
 ougOrgUnitPath
   = lens _ougOrgUnitPath
       (\ s a -> s{_ougOrgUnitPath = a})
       . _Coerce
 
--- | Immutable id of the Google Apps account
+-- | Immutable ID of the G Suite account
 ougCustomerId :: Lens' OrgUnitsGet Text
 ougCustomerId
   = lens _ougCustomerId
diff --git a/gen/Network/Google/Resource/Directory/OrgUnits/Insert.hs b/gen/Network/Google/Resource/Directory/OrgUnits/Insert.hs
--- a/gen/Network/Google/Resource/Directory/OrgUnits/Insert.hs
+++ b/gen/Network/Google/Resource/Directory/OrgUnits/Insert.hs
@@ -20,7 +20,7 @@
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Add Organization Unit
+-- Add organizational unit
 --
 -- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.orgunits.insert@.
 module Network.Google.Resource.Directory.OrgUnits.Insert
@@ -52,7 +52,7 @@
                  QueryParam "alt" AltJSON :>
                    ReqBody '[JSON] OrgUnit :> Post '[JSON] OrgUnit
 
--- | Add Organization Unit
+-- | Add organizational unit
 --
 -- /See:/ 'orgUnitsInsert' smart constructor.
 data OrgUnitsInsert = OrgUnitsInsert'
@@ -82,7 +82,7 @@
 ouiPayload
   = lens _ouiPayload (\ s a -> s{_ouiPayload = a})
 
--- | Immutable id of the Google Apps account
+-- | Immutable ID of the G Suite account
 ouiCustomerId :: Lens' OrgUnitsInsert Text
 ouiCustomerId
   = lens _ouiCustomerId
diff --git a/gen/Network/Google/Resource/Directory/OrgUnits/List.hs b/gen/Network/Google/Resource/Directory/OrgUnits/List.hs
--- a/gen/Network/Google/Resource/Directory/OrgUnits/List.hs
+++ b/gen/Network/Google/Resource/Directory/OrgUnits/List.hs
@@ -20,7 +20,7 @@
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Retrieve all Organization Units
+-- Retrieve all organizational units
 --
 -- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.orgunits.list@.
 module Network.Google.Resource.Directory.OrgUnits.List
@@ -54,7 +54,7 @@
                    QueryParam "type" OrgUnitsListType :>
                      QueryParam "alt" AltJSON :> Get '[JSON] OrgUnits
 
--- | Retrieve all Organization Units
+-- | Retrieve all organizational units
 --
 -- /See:/ 'orgUnitsList' smart constructor.
 data OrgUnitsList = OrgUnitsList'
@@ -82,13 +82,13 @@
     , _oulType = Nothing
     }
 
--- | the URL-encoded organization unit\'s path or its Id
+-- | the URL-encoded organizational unit\'s path or its ID
 oulOrgUnitPath :: Lens' OrgUnitsList Text
 oulOrgUnitPath
   = lens _oulOrgUnitPath
       (\ s a -> s{_oulOrgUnitPath = a})
 
--- | Immutable id of the Google Apps account
+-- | Immutable ID of the G Suite account
 oulCustomerId :: Lens' OrgUnitsList Text
 oulCustomerId
   = lens _oulCustomerId
diff --git a/gen/Network/Google/Resource/Directory/OrgUnits/Patch.hs b/gen/Network/Google/Resource/Directory/OrgUnits/Patch.hs
--- a/gen/Network/Google/Resource/Directory/OrgUnits/Patch.hs
+++ b/gen/Network/Google/Resource/Directory/OrgUnits/Patch.hs
@@ -20,7 +20,7 @@
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Update Organization Unit. This method supports patch semantics.
+-- Update organizational unit. This method supports patch semantics.
 --
 -- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.orgunits.patch@.
 module Network.Google.Resource.Directory.OrgUnits.Patch
@@ -54,7 +54,7 @@
                    QueryParam "alt" AltJSON :>
                      ReqBody '[JSON] OrgUnit :> Patch '[JSON] OrgUnit
 
--- | Update Organization Unit. This method supports patch semantics.
+-- | Update organizational unit. This method supports patch semantics.
 --
 -- /See:/ 'orgUnitsPatch' smart constructor.
 data OrgUnitsPatch = OrgUnitsPatch'
@@ -89,14 +89,14 @@
 oupPayload
   = lens _oupPayload (\ s a -> s{_oupPayload = a})
 
--- | Full path of the organization unit or its Id
+-- | Full path of the organizational unit or its ID
 oupOrgUnitPath :: Lens' OrgUnitsPatch [Text]
 oupOrgUnitPath
   = lens _oupOrgUnitPath
       (\ s a -> s{_oupOrgUnitPath = a})
       . _Coerce
 
--- | Immutable id of the Google Apps account
+-- | Immutable ID of the G Suite account
 oupCustomerId :: Lens' OrgUnitsPatch Text
 oupCustomerId
   = lens _oupCustomerId
diff --git a/gen/Network/Google/Resource/Directory/OrgUnits/Update.hs b/gen/Network/Google/Resource/Directory/OrgUnits/Update.hs
--- a/gen/Network/Google/Resource/Directory/OrgUnits/Update.hs
+++ b/gen/Network/Google/Resource/Directory/OrgUnits/Update.hs
@@ -20,7 +20,7 @@
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Update Organization Unit
+-- Update organizational unit
 --
 -- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.orgunits.update@.
 module Network.Google.Resource.Directory.OrgUnits.Update
@@ -54,7 +54,7 @@
                    QueryParam "alt" AltJSON :>
                      ReqBody '[JSON] OrgUnit :> Put '[JSON] OrgUnit
 
--- | Update Organization Unit
+-- | Update organizational unit
 --
 -- /See:/ 'orgUnitsUpdate' smart constructor.
 data OrgUnitsUpdate = OrgUnitsUpdate'
@@ -89,14 +89,14 @@
 ouuPayload
   = lens _ouuPayload (\ s a -> s{_ouuPayload = a})
 
--- | Full path of the organization unit or its Id
+-- | Full path of the organizational unit or its ID
 ouuOrgUnitPath :: Lens' OrgUnitsUpdate [Text]
 ouuOrgUnitPath
   = lens _ouuOrgUnitPath
       (\ s a -> s{_ouuOrgUnitPath = a})
       . _Coerce
 
--- | Immutable id of the Google Apps account
+-- | Immutable ID of the G Suite account
 ouuCustomerId :: Lens' OrgUnitsUpdate Text
 ouuCustomerId
   = lens _ouuCustomerId
diff --git a/gen/Network/Google/Resource/Directory/Privileges/List.hs b/gen/Network/Google/Resource/Directory/Privileges/List.hs
--- a/gen/Network/Google/Resource/Directory/Privileges/List.hs
+++ b/gen/Network/Google/Resource/Directory/Privileges/List.hs
@@ -72,7 +72,7 @@
     { _plCustomer = pPlCustomer_
     }
 
--- | Immutable ID of the Google Apps account.
+-- | Immutable ID of the G Suite account.
 plCustomer :: Lens' PrivilegesList Text
 plCustomer
   = lens _plCustomer (\ s a -> s{_plCustomer = a})
diff --git a/gen/Network/Google/Resource/Directory/ResolvedAppAccessSettings/GetSettings.hs b/gen/Network/Google/Resource/Directory/ResolvedAppAccessSettings/GetSettings.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/ResolvedAppAccessSettings/GetSettings.hs
@@ -0,0 +1,75 @@
+{-# 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.Directory.ResolvedAppAccessSettings.GetSettings
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves resolved app access settings of the logged in user.
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.resolvedAppAccessSettings.GetSettings@.
+module Network.Google.Resource.Directory.ResolvedAppAccessSettings.GetSettings
+    (
+    -- * REST Resource
+      ResolvedAppAccessSettingsGetSettingsResource
+
+    -- * Creating a Request
+    , resolvedAppAccessSettingsGetSettings
+    , ResolvedAppAccessSettingsGetSettings
+
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.resolvedAppAccessSettings.GetSettings@ method which the
+-- 'ResolvedAppAccessSettingsGetSettings' request conforms to.
+type ResolvedAppAccessSettingsGetSettingsResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "resolvedappaccesssettings" :>
+             QueryParam "alt" AltJSON :>
+               Get '[JSON] AppAccessCollections
+
+-- | Retrieves resolved app access settings of the logged in user.
+--
+-- /See:/ 'resolvedAppAccessSettingsGetSettings' smart constructor.
+data ResolvedAppAccessSettingsGetSettings =
+    ResolvedAppAccessSettingsGetSettings'
+    deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ResolvedAppAccessSettingsGetSettings' with the minimum fields required to make a request.
+--
+resolvedAppAccessSettingsGetSettings
+    :: ResolvedAppAccessSettingsGetSettings
+resolvedAppAccessSettingsGetSettings = ResolvedAppAccessSettingsGetSettings'
+
+instance GoogleRequest
+         ResolvedAppAccessSettingsGetSettings where
+        type Rs ResolvedAppAccessSettingsGetSettings =
+             AppAccessCollections
+        type Scopes ResolvedAppAccessSettingsGetSettings =
+             '[]
+        requestClient ResolvedAppAccessSettingsGetSettings'{}
+          = go (Just AltJSON) directoryService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy ResolvedAppAccessSettingsGetSettingsResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/ResolvedAppAccessSettings/ListTrustedApps.hs b/gen/Network/Google/Resource/Directory/ResolvedAppAccessSettings/ListTrustedApps.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/ResolvedAppAccessSettings/ListTrustedApps.hs
@@ -0,0 +1,78 @@
+{-# 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.Directory.ResolvedAppAccessSettings.ListTrustedApps
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves the list of apps trusted by the admin of the logged in user.
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.resolvedAppAccessSettings.ListTrustedApps@.
+module Network.Google.Resource.Directory.ResolvedAppAccessSettings.ListTrustedApps
+    (
+    -- * REST Resource
+      ResolvedAppAccessSettingsListTrustedAppsResource
+
+    -- * Creating a Request
+    , resolvedAppAccessSettingsListTrustedApps
+    , ResolvedAppAccessSettingsListTrustedApps
+
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.resolvedAppAccessSettings.ListTrustedApps@ method which the
+-- 'ResolvedAppAccessSettingsListTrustedApps' request conforms to.
+type ResolvedAppAccessSettingsListTrustedAppsResource
+     =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "trustedapps" :>
+             QueryParam "alt" AltJSON :> Get '[JSON] TrustedApps
+
+-- | Retrieves the list of apps trusted by the admin of the logged in user.
+--
+-- /See:/ 'resolvedAppAccessSettingsListTrustedApps' smart constructor.
+data ResolvedAppAccessSettingsListTrustedApps =
+    ResolvedAppAccessSettingsListTrustedApps'
+    deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ResolvedAppAccessSettingsListTrustedApps' with the minimum fields required to make a request.
+--
+resolvedAppAccessSettingsListTrustedApps
+    :: ResolvedAppAccessSettingsListTrustedApps
+resolvedAppAccessSettingsListTrustedApps =
+    ResolvedAppAccessSettingsListTrustedApps'
+
+instance GoogleRequest
+         ResolvedAppAccessSettingsListTrustedApps where
+        type Rs ResolvedAppAccessSettingsListTrustedApps =
+             TrustedApps
+        type Scopes ResolvedAppAccessSettingsListTrustedApps
+             = '[]
+        requestClient
+          ResolvedAppAccessSettingsListTrustedApps'{}
+          = go (Just AltJSON) directoryService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy
+                           ResolvedAppAccessSettingsListTrustedAppsResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Resources/Buildings/Delete.hs b/gen/Network/Google/Resource/Directory/Resources/Buildings/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Resources/Buildings/Delete.hs
@@ -0,0 +1,104 @@
+{-# 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.Directory.Resources.Buildings.Delete
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a building.
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.resources.buildings.delete@.
+module Network.Google.Resource.Directory.Resources.Buildings.Delete
+    (
+    -- * REST Resource
+      ResourcesBuildingsDeleteResource
+
+    -- * Creating a Request
+    , resourcesBuildingsDelete
+    , ResourcesBuildingsDelete
+
+    -- * Request Lenses
+    , rbdBuildingId
+    , rbdCustomer
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.resources.buildings.delete@ method which the
+-- 'ResourcesBuildingsDelete' request conforms to.
+type ResourcesBuildingsDeleteResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "customer" :>
+             Capture "customer" Text :>
+               "resources" :>
+                 "buildings" :>
+                   Capture "buildingId" Text :>
+                     QueryParam "alt" AltJSON :> Delete '[JSON] ()
+
+-- | Deletes a building.
+--
+-- /See:/ 'resourcesBuildingsDelete' smart constructor.
+data ResourcesBuildingsDelete = ResourcesBuildingsDelete'
+    { _rbdBuildingId :: !Text
+    , _rbdCustomer   :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ResourcesBuildingsDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rbdBuildingId'
+--
+-- * 'rbdCustomer'
+resourcesBuildingsDelete
+    :: Text -- ^ 'rbdBuildingId'
+    -> Text -- ^ 'rbdCustomer'
+    -> ResourcesBuildingsDelete
+resourcesBuildingsDelete pRbdBuildingId_ pRbdCustomer_ =
+    ResourcesBuildingsDelete'
+    { _rbdBuildingId = pRbdBuildingId_
+    , _rbdCustomer = pRbdCustomer_
+    }
+
+-- | The ID of the building to delete.
+rbdBuildingId :: Lens' ResourcesBuildingsDelete Text
+rbdBuildingId
+  = lens _rbdBuildingId
+      (\ s a -> s{_rbdBuildingId = a})
+
+-- | The unique ID for the customer\'s G Suite account. As an account
+-- administrator, you can also use the my_customer alias to represent your
+-- account\'s customer ID.
+rbdCustomer :: Lens' ResourcesBuildingsDelete Text
+rbdCustomer
+  = lens _rbdCustomer (\ s a -> s{_rbdCustomer = a})
+
+instance GoogleRequest ResourcesBuildingsDelete where
+        type Rs ResourcesBuildingsDelete = ()
+        type Scopes ResourcesBuildingsDelete =
+             '["https://www.googleapis.com/auth/admin.directory.resource.calendar"]
+        requestClient ResourcesBuildingsDelete'{..}
+          = go _rbdCustomer _rbdBuildingId (Just AltJSON)
+              directoryService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy ResourcesBuildingsDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Resources/Buildings/Get.hs b/gen/Network/Google/Resource/Directory/Resources/Buildings/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Resources/Buildings/Get.hs
@@ -0,0 +1,105 @@
+{-# 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.Directory.Resources.Buildings.Get
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves a building.
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.resources.buildings.get@.
+module Network.Google.Resource.Directory.Resources.Buildings.Get
+    (
+    -- * REST Resource
+      ResourcesBuildingsGetResource
+
+    -- * Creating a Request
+    , resourcesBuildingsGet
+    , ResourcesBuildingsGet
+
+    -- * Request Lenses
+    , rbgBuildingId
+    , rbgCustomer
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.resources.buildings.get@ method which the
+-- 'ResourcesBuildingsGet' request conforms to.
+type ResourcesBuildingsGetResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "customer" :>
+             Capture "customer" Text :>
+               "resources" :>
+                 "buildings" :>
+                   Capture "buildingId" Text :>
+                     QueryParam "alt" AltJSON :> Get '[JSON] Building
+
+-- | Retrieves a building.
+--
+-- /See:/ 'resourcesBuildingsGet' smart constructor.
+data ResourcesBuildingsGet = ResourcesBuildingsGet'
+    { _rbgBuildingId :: !Text
+    , _rbgCustomer   :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ResourcesBuildingsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rbgBuildingId'
+--
+-- * 'rbgCustomer'
+resourcesBuildingsGet
+    :: Text -- ^ 'rbgBuildingId'
+    -> Text -- ^ 'rbgCustomer'
+    -> ResourcesBuildingsGet
+resourcesBuildingsGet pRbgBuildingId_ pRbgCustomer_ =
+    ResourcesBuildingsGet'
+    { _rbgBuildingId = pRbgBuildingId_
+    , _rbgCustomer = pRbgCustomer_
+    }
+
+-- | The unique ID of the building to retrieve.
+rbgBuildingId :: Lens' ResourcesBuildingsGet Text
+rbgBuildingId
+  = lens _rbgBuildingId
+      (\ s a -> s{_rbgBuildingId = a})
+
+-- | The unique ID for the customer\'s G Suite account. As an account
+-- administrator, you can also use the my_customer alias to represent your
+-- account\'s customer ID.
+rbgCustomer :: Lens' ResourcesBuildingsGet Text
+rbgCustomer
+  = lens _rbgCustomer (\ s a -> s{_rbgCustomer = a})
+
+instance GoogleRequest ResourcesBuildingsGet where
+        type Rs ResourcesBuildingsGet = Building
+        type Scopes ResourcesBuildingsGet =
+             '["https://www.googleapis.com/auth/admin.directory.resource.calendar",
+               "https://www.googleapis.com/auth/admin.directory.resource.calendar.readonly"]
+        requestClient ResourcesBuildingsGet'{..}
+          = go _rbgCustomer _rbgBuildingId (Just AltJSON)
+              directoryService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy ResourcesBuildingsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Resources/Buildings/Insert.hs b/gen/Network/Google/Resource/Directory/Resources/Buildings/Insert.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Resources/Buildings/Insert.hs
@@ -0,0 +1,103 @@
+{-# 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.Directory.Resources.Buildings.Insert
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Inserts a building.
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.resources.buildings.insert@.
+module Network.Google.Resource.Directory.Resources.Buildings.Insert
+    (
+    -- * REST Resource
+      ResourcesBuildingsInsertResource
+
+    -- * Creating a Request
+    , resourcesBuildingsInsert
+    , ResourcesBuildingsInsert
+
+    -- * Request Lenses
+    , rbiPayload
+    , rbiCustomer
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.resources.buildings.insert@ method which the
+-- 'ResourcesBuildingsInsert' request conforms to.
+type ResourcesBuildingsInsertResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "customer" :>
+             Capture "customer" Text :>
+               "resources" :>
+                 "buildings" :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON] Building :> Post '[JSON] Building
+
+-- | Inserts a building.
+--
+-- /See:/ 'resourcesBuildingsInsert' smart constructor.
+data ResourcesBuildingsInsert = ResourcesBuildingsInsert'
+    { _rbiPayload  :: !Building
+    , _rbiCustomer :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ResourcesBuildingsInsert' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rbiPayload'
+--
+-- * 'rbiCustomer'
+resourcesBuildingsInsert
+    :: Building -- ^ 'rbiPayload'
+    -> Text -- ^ 'rbiCustomer'
+    -> ResourcesBuildingsInsert
+resourcesBuildingsInsert pRbiPayload_ pRbiCustomer_ =
+    ResourcesBuildingsInsert'
+    { _rbiPayload = pRbiPayload_
+    , _rbiCustomer = pRbiCustomer_
+    }
+
+-- | Multipart request metadata.
+rbiPayload :: Lens' ResourcesBuildingsInsert Building
+rbiPayload
+  = lens _rbiPayload (\ s a -> s{_rbiPayload = a})
+
+-- | The unique ID for the customer\'s G Suite account. As an account
+-- administrator, you can also use the my_customer alias to represent your
+-- account\'s customer ID.
+rbiCustomer :: Lens' ResourcesBuildingsInsert Text
+rbiCustomer
+  = lens _rbiCustomer (\ s a -> s{_rbiCustomer = a})
+
+instance GoogleRequest ResourcesBuildingsInsert where
+        type Rs ResourcesBuildingsInsert = Building
+        type Scopes ResourcesBuildingsInsert =
+             '["https://www.googleapis.com/auth/admin.directory.resource.calendar"]
+        requestClient ResourcesBuildingsInsert'{..}
+          = go _rbiCustomer (Just AltJSON) _rbiPayload
+              directoryService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy ResourcesBuildingsInsertResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Resources/Buildings/List.hs b/gen/Network/Google/Resource/Directory/Resources/Buildings/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Resources/Buildings/List.hs
@@ -0,0 +1,117 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.Resources.Buildings.List
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves a list of buildings for an account.
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.resources.buildings.list@.
+module Network.Google.Resource.Directory.Resources.Buildings.List
+    (
+    -- * REST Resource
+      ResourcesBuildingsListResource
+
+    -- * Creating a Request
+    , resourcesBuildingsList
+    , ResourcesBuildingsList
+
+    -- * Request Lenses
+    , rblCustomer
+    , rblPageToken
+    , rblMaxResults
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.resources.buildings.list@ method which the
+-- 'ResourcesBuildingsList' request conforms to.
+type ResourcesBuildingsListResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "customer" :>
+             Capture "customer" Text :>
+               "resources" :>
+                 "buildings" :>
+                   QueryParam "pageToken" Text :>
+                     QueryParam "maxResults" (Textual Int32) :>
+                       QueryParam "alt" AltJSON :> Get '[JSON] Buildings
+
+-- | Retrieves a list of buildings for an account.
+--
+-- /See:/ 'resourcesBuildingsList' smart constructor.
+data ResourcesBuildingsList = ResourcesBuildingsList'
+    { _rblCustomer   :: !Text
+    , _rblPageToken  :: !(Maybe Text)
+    , _rblMaxResults :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ResourcesBuildingsList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rblCustomer'
+--
+-- * 'rblPageToken'
+--
+-- * 'rblMaxResults'
+resourcesBuildingsList
+    :: Text -- ^ 'rblCustomer'
+    -> ResourcesBuildingsList
+resourcesBuildingsList pRblCustomer_ =
+    ResourcesBuildingsList'
+    { _rblCustomer = pRblCustomer_
+    , _rblPageToken = Nothing
+    , _rblMaxResults = Nothing
+    }
+
+-- | The unique ID for the customer\'s G Suite account. As an account
+-- administrator, you can also use the my_customer alias to represent your
+-- account\'s customer ID.
+rblCustomer :: Lens' ResourcesBuildingsList Text
+rblCustomer
+  = lens _rblCustomer (\ s a -> s{_rblCustomer = a})
+
+-- | Token to specify the next page in the list.
+rblPageToken :: Lens' ResourcesBuildingsList (Maybe Text)
+rblPageToken
+  = lens _rblPageToken (\ s a -> s{_rblPageToken = a})
+
+-- | Maximum number of results to return.
+rblMaxResults :: Lens' ResourcesBuildingsList (Maybe Int32)
+rblMaxResults
+  = lens _rblMaxResults
+      (\ s a -> s{_rblMaxResults = a})
+      . mapping _Coerce
+
+instance GoogleRequest ResourcesBuildingsList where
+        type Rs ResourcesBuildingsList = Buildings
+        type Scopes ResourcesBuildingsList =
+             '["https://www.googleapis.com/auth/admin.directory.resource.calendar",
+               "https://www.googleapis.com/auth/admin.directory.resource.calendar.readonly"]
+        requestClient ResourcesBuildingsList'{..}
+          = go _rblCustomer _rblPageToken _rblMaxResults
+              (Just AltJSON)
+              directoryService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy ResourcesBuildingsListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Resources/Buildings/Patch.hs b/gen/Network/Google/Resource/Directory/Resources/Buildings/Patch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Resources/Buildings/Patch.hs
@@ -0,0 +1,117 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.Resources.Buildings.Patch
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates a building. This method supports patch semantics.
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.resources.buildings.patch@.
+module Network.Google.Resource.Directory.Resources.Buildings.Patch
+    (
+    -- * REST Resource
+      ResourcesBuildingsPatchResource
+
+    -- * Creating a Request
+    , resourcesBuildingsPatch
+    , ResourcesBuildingsPatch
+
+    -- * Request Lenses
+    , rbpBuildingId
+    , rbpPayload
+    , rbpCustomer
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.resources.buildings.patch@ method which the
+-- 'ResourcesBuildingsPatch' request conforms to.
+type ResourcesBuildingsPatchResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "customer" :>
+             Capture "customer" Text :>
+               "resources" :>
+                 "buildings" :>
+                   Capture "buildingId" Text :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON] Building :> Patch '[JSON] Building
+
+-- | Updates a building. This method supports patch semantics.
+--
+-- /See:/ 'resourcesBuildingsPatch' smart constructor.
+data ResourcesBuildingsPatch = ResourcesBuildingsPatch'
+    { _rbpBuildingId :: !Text
+    , _rbpPayload    :: !Building
+    , _rbpCustomer   :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ResourcesBuildingsPatch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rbpBuildingId'
+--
+-- * 'rbpPayload'
+--
+-- * 'rbpCustomer'
+resourcesBuildingsPatch
+    :: Text -- ^ 'rbpBuildingId'
+    -> Building -- ^ 'rbpPayload'
+    -> Text -- ^ 'rbpCustomer'
+    -> ResourcesBuildingsPatch
+resourcesBuildingsPatch pRbpBuildingId_ pRbpPayload_ pRbpCustomer_ =
+    ResourcesBuildingsPatch'
+    { _rbpBuildingId = pRbpBuildingId_
+    , _rbpPayload = pRbpPayload_
+    , _rbpCustomer = pRbpCustomer_
+    }
+
+-- | The ID of the building to update.
+rbpBuildingId :: Lens' ResourcesBuildingsPatch Text
+rbpBuildingId
+  = lens _rbpBuildingId
+      (\ s a -> s{_rbpBuildingId = a})
+
+-- | Multipart request metadata.
+rbpPayload :: Lens' ResourcesBuildingsPatch Building
+rbpPayload
+  = lens _rbpPayload (\ s a -> s{_rbpPayload = a})
+
+-- | The unique ID for the customer\'s G Suite account. As an account
+-- administrator, you can also use the my_customer alias to represent your
+-- account\'s customer ID.
+rbpCustomer :: Lens' ResourcesBuildingsPatch Text
+rbpCustomer
+  = lens _rbpCustomer (\ s a -> s{_rbpCustomer = a})
+
+instance GoogleRequest ResourcesBuildingsPatch where
+        type Rs ResourcesBuildingsPatch = Building
+        type Scopes ResourcesBuildingsPatch =
+             '["https://www.googleapis.com/auth/admin.directory.resource.calendar"]
+        requestClient ResourcesBuildingsPatch'{..}
+          = go _rbpCustomer _rbpBuildingId (Just AltJSON)
+              _rbpPayload
+              directoryService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy ResourcesBuildingsPatchResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Resources/Buildings/Update.hs b/gen/Network/Google/Resource/Directory/Resources/Buildings/Update.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Resources/Buildings/Update.hs
@@ -0,0 +1,117 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.Resources.Buildings.Update
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates a building.
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.resources.buildings.update@.
+module Network.Google.Resource.Directory.Resources.Buildings.Update
+    (
+    -- * REST Resource
+      ResourcesBuildingsUpdateResource
+
+    -- * Creating a Request
+    , resourcesBuildingsUpdate
+    , ResourcesBuildingsUpdate
+
+    -- * Request Lenses
+    , rbuBuildingId
+    , rbuPayload
+    , rbuCustomer
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.resources.buildings.update@ method which the
+-- 'ResourcesBuildingsUpdate' request conforms to.
+type ResourcesBuildingsUpdateResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "customer" :>
+             Capture "customer" Text :>
+               "resources" :>
+                 "buildings" :>
+                   Capture "buildingId" Text :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON] Building :> Put '[JSON] Building
+
+-- | Updates a building.
+--
+-- /See:/ 'resourcesBuildingsUpdate' smart constructor.
+data ResourcesBuildingsUpdate = ResourcesBuildingsUpdate'
+    { _rbuBuildingId :: !Text
+    , _rbuPayload    :: !Building
+    , _rbuCustomer   :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ResourcesBuildingsUpdate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rbuBuildingId'
+--
+-- * 'rbuPayload'
+--
+-- * 'rbuCustomer'
+resourcesBuildingsUpdate
+    :: Text -- ^ 'rbuBuildingId'
+    -> Building -- ^ 'rbuPayload'
+    -> Text -- ^ 'rbuCustomer'
+    -> ResourcesBuildingsUpdate
+resourcesBuildingsUpdate pRbuBuildingId_ pRbuPayload_ pRbuCustomer_ =
+    ResourcesBuildingsUpdate'
+    { _rbuBuildingId = pRbuBuildingId_
+    , _rbuPayload = pRbuPayload_
+    , _rbuCustomer = pRbuCustomer_
+    }
+
+-- | The ID of the building to update.
+rbuBuildingId :: Lens' ResourcesBuildingsUpdate Text
+rbuBuildingId
+  = lens _rbuBuildingId
+      (\ s a -> s{_rbuBuildingId = a})
+
+-- | Multipart request metadata.
+rbuPayload :: Lens' ResourcesBuildingsUpdate Building
+rbuPayload
+  = lens _rbuPayload (\ s a -> s{_rbuPayload = a})
+
+-- | The unique ID for the customer\'s G Suite account. As an account
+-- administrator, you can also use the my_customer alias to represent your
+-- account\'s customer ID.
+rbuCustomer :: Lens' ResourcesBuildingsUpdate Text
+rbuCustomer
+  = lens _rbuCustomer (\ s a -> s{_rbuCustomer = a})
+
+instance GoogleRequest ResourcesBuildingsUpdate where
+        type Rs ResourcesBuildingsUpdate = Building
+        type Scopes ResourcesBuildingsUpdate =
+             '["https://www.googleapis.com/auth/admin.directory.resource.calendar"]
+        requestClient ResourcesBuildingsUpdate'{..}
+          = go _rbuCustomer _rbuBuildingId (Just AltJSON)
+              _rbuPayload
+              directoryService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy ResourcesBuildingsUpdateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Resources/Calendars/Delete.hs b/gen/Network/Google/Resource/Directory/Resources/Calendars/Delete.hs
--- a/gen/Network/Google/Resource/Directory/Resources/Calendars/Delete.hs
+++ b/gen/Network/Google/Resource/Directory/Resources/Calendars/Delete.hs
@@ -78,7 +78,7 @@
     , _rcdCalendarResourceId = pRcdCalendarResourceId_
     }
 
--- | The unique ID for the customer\'s Google account. As an account
+-- | The unique ID for the customer\'s G Suite account. As an account
 -- administrator, you can also use the my_customer alias to represent your
 -- account\'s customer ID.
 rcdCustomer :: Lens' ResourcesCalendarsDelete Text
diff --git a/gen/Network/Google/Resource/Directory/Resources/Calendars/Get.hs b/gen/Network/Google/Resource/Directory/Resources/Calendars/Get.hs
--- a/gen/Network/Google/Resource/Directory/Resources/Calendars/Get.hs
+++ b/gen/Network/Google/Resource/Directory/Resources/Calendars/Get.hs
@@ -79,7 +79,7 @@
     , _rcgCalendarResourceId = pRcgCalendarResourceId_
     }
 
--- | The unique ID for the customer\'s Google account. As an account
+-- | The unique ID for the customer\'s G Suite account. As an account
 -- administrator, you can also use the my_customer alias to represent your
 -- account\'s customer ID.
 rcgCustomer :: Lens' ResourcesCalendarsGet Text
diff --git a/gen/Network/Google/Resource/Directory/Resources/Calendars/Insert.hs b/gen/Network/Google/Resource/Directory/Resources/Calendars/Insert.hs
--- a/gen/Network/Google/Resource/Directory/Resources/Calendars/Insert.hs
+++ b/gen/Network/Google/Resource/Directory/Resources/Calendars/Insert.hs
@@ -84,7 +84,7 @@
 rciPayload
   = lens _rciPayload (\ s a -> s{_rciPayload = a})
 
--- | The unique ID for the customer\'s Google account. As an account
+-- | The unique ID for the customer\'s G Suite account. As an account
 -- administrator, you can also use the my_customer alias to represent your
 -- account\'s customer ID.
 rciCustomer :: Lens' ResourcesCalendarsInsert Text
diff --git a/gen/Network/Google/Resource/Directory/Resources/Calendars/List.hs b/gen/Network/Google/Resource/Directory/Resources/Calendars/List.hs
--- a/gen/Network/Google/Resource/Directory/Resources/Calendars/List.hs
+++ b/gen/Network/Google/Resource/Directory/Resources/Calendars/List.hs
@@ -33,7 +33,9 @@
     , ResourcesCalendarsList
 
     -- * Request Lenses
+    , rclOrderBy
     , rclCustomer
+    , rclQuery
     , rclPageToken
     , rclMaxResults
     ) where
@@ -51,16 +53,20 @@
              Capture "customer" Text :>
                "resources" :>
                  "calendars" :>
-                   QueryParam "pageToken" Text :>
-                     QueryParam "maxResults" (Textual Int32) :>
-                       QueryParam "alt" AltJSON :>
-                         Get '[JSON] CalendarResources
+                   QueryParam "orderBy" Text :>
+                     QueryParam "query" Text :>
+                       QueryParam "pageToken" Text :>
+                         QueryParam "maxResults" (Textual Int32) :>
+                           QueryParam "alt" AltJSON :>
+                             Get '[JSON] CalendarResources
 
 -- | Retrieves a list of calendar resources for an account.
 --
 -- /See:/ 'resourcesCalendarsList' smart constructor.
 data ResourcesCalendarsList = ResourcesCalendarsList'
-    { _rclCustomer   :: !Text
+    { _rclOrderBy    :: !(Maybe Text)
+    , _rclCustomer   :: !Text
+    , _rclQuery      :: !(Maybe Text)
     , _rclPageToken  :: !(Maybe Text)
     , _rclMaxResults :: !(Maybe (Textual Int32))
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -69,8 +75,12 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
+-- * 'rclOrderBy'
+--
 -- * 'rclCustomer'
 --
+-- * 'rclQuery'
+--
 -- * 'rclPageToken'
 --
 -- * 'rclMaxResults'
@@ -79,18 +89,41 @@
     -> ResourcesCalendarsList
 resourcesCalendarsList pRclCustomer_ =
     ResourcesCalendarsList'
-    { _rclCustomer = pRclCustomer_
+    { _rclOrderBy = Nothing
+    , _rclCustomer = pRclCustomer_
+    , _rclQuery = Nothing
     , _rclPageToken = Nothing
     , _rclMaxResults = Nothing
     }
 
--- | The unique ID for the customer\'s Google account. As an account
+-- | Field(s) to sort results by in either ascending or descending order.
+-- Supported fields include resourceId, resourceName, capacity, buildingId,
+-- and floorName. If no order is specified, defaults to ascending. Should
+-- be of the form \"field [asc|desc], field [asc|desc], ...\". For example
+-- buildingId, capacity desc would return results sorted first by
+-- buildingId in ascending order then by capacity in descending order.
+rclOrderBy :: Lens' ResourcesCalendarsList (Maybe Text)
+rclOrderBy
+  = lens _rclOrderBy (\ s a -> s{_rclOrderBy = a})
+
+-- | The unique ID for the customer\'s G Suite account. As an account
 -- administrator, you can also use the my_customer alias to represent your
 -- account\'s customer ID.
 rclCustomer :: Lens' ResourcesCalendarsList Text
 rclCustomer
   = lens _rclCustomer (\ s a -> s{_rclCustomer = a})
 
+-- | String query used to filter results. Should be of the form \"field
+-- operator value\" where field can be any of supported fields and
+-- operators can be any of supported operations. Operators include \'=\'
+-- for exact match and \':\' for prefix match or HAS match where
+-- applicable. For prefix match, the value should always be followed by a
+-- *. Supported fields include generatedResourceName, name, buildingId,
+-- featureInstances.feature.name. For example buildingId=US-NYC-9TH AND
+-- featureInstances.feature.name:Phone.
+rclQuery :: Lens' ResourcesCalendarsList (Maybe Text)
+rclQuery = lens _rclQuery (\ s a -> s{_rclQuery = a})
+
 -- | Token to specify the next page in the list.
 rclPageToken :: Lens' ResourcesCalendarsList (Maybe Text)
 rclPageToken
@@ -109,7 +142,8 @@
              '["https://www.googleapis.com/auth/admin.directory.resource.calendar",
                "https://www.googleapis.com/auth/admin.directory.resource.calendar.readonly"]
         requestClient ResourcesCalendarsList'{..}
-          = go _rclCustomer _rclPageToken _rclMaxResults
+          = go _rclCustomer _rclOrderBy _rclQuery _rclPageToken
+              _rclMaxResults
               (Just AltJSON)
               directoryService
           where go
diff --git a/gen/Network/Google/Resource/Directory/Resources/Calendars/Patch.hs b/gen/Network/Google/Resource/Directory/Resources/Calendars/Patch.hs
--- a/gen/Network/Google/Resource/Directory/Resources/Calendars/Patch.hs
+++ b/gen/Network/Google/Resource/Directory/Resources/Calendars/Patch.hs
@@ -20,7 +20,10 @@
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Updates a calendar resource. This method supports patch semantics.
+-- Updates a calendar resource. This method supports patch semantics,
+-- meaning you only need to include the fields you wish to update. Fields
+-- that are not present in the request will be preserved. This method
+-- supports patch semantics.
 --
 -- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.resources.calendars.patch@.
 module Network.Google.Resource.Directory.Resources.Calendars.Patch
@@ -56,7 +59,10 @@
                        ReqBody '[JSON] CalendarResource :>
                          Patch '[JSON] CalendarResource
 
--- | Updates a calendar resource. This method supports patch semantics.
+-- | Updates a calendar resource. This method supports patch semantics,
+-- meaning you only need to include the fields you wish to update. Fields
+-- that are not present in the request will be preserved. This method
+-- supports patch semantics.
 --
 -- /See:/ 'resourcesCalendarsPatch' smart constructor.
 data ResourcesCalendarsPatch = ResourcesCalendarsPatch'
@@ -91,7 +97,7 @@
 rcpPayload
   = lens _rcpPayload (\ s a -> s{_rcpPayload = a})
 
--- | The unique ID for the customer\'s Google account. As an account
+-- | The unique ID for the customer\'s G Suite account. As an account
 -- administrator, you can also use the my_customer alias to represent your
 -- account\'s customer ID.
 rcpCustomer :: Lens' ResourcesCalendarsPatch Text
diff --git a/gen/Network/Google/Resource/Directory/Resources/Calendars/Update.hs b/gen/Network/Google/Resource/Directory/Resources/Calendars/Update.hs
--- a/gen/Network/Google/Resource/Directory/Resources/Calendars/Update.hs
+++ b/gen/Network/Google/Resource/Directory/Resources/Calendars/Update.hs
@@ -20,7 +20,9 @@
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Updates a calendar resource.
+-- Updates a calendar resource. This method supports patch semantics,
+-- meaning you only need to include the fields you wish to update. Fields
+-- that are not present in the request will be preserved.
 --
 -- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.resources.calendars.update@.
 module Network.Google.Resource.Directory.Resources.Calendars.Update
@@ -56,7 +58,9 @@
                        ReqBody '[JSON] CalendarResource :>
                          Put '[JSON] CalendarResource
 
--- | Updates a calendar resource.
+-- | Updates a calendar resource. This method supports patch semantics,
+-- meaning you only need to include the fields you wish to update. Fields
+-- that are not present in the request will be preserved.
 --
 -- /See:/ 'resourcesCalendarsUpdate' smart constructor.
 data ResourcesCalendarsUpdate = ResourcesCalendarsUpdate'
@@ -91,7 +95,7 @@
 rcuPayload
   = lens _rcuPayload (\ s a -> s{_rcuPayload = a})
 
--- | The unique ID for the customer\'s Google account. As an account
+-- | The unique ID for the customer\'s G Suite account. As an account
 -- administrator, you can also use the my_customer alias to represent your
 -- account\'s customer ID.
 rcuCustomer :: Lens' ResourcesCalendarsUpdate Text
diff --git a/gen/Network/Google/Resource/Directory/Resources/Features/Delete.hs b/gen/Network/Google/Resource/Directory/Resources/Features/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Resources/Features/Delete.hs
@@ -0,0 +1,104 @@
+{-# 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.Directory.Resources.Features.Delete
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a feature.
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.resources.features.delete@.
+module Network.Google.Resource.Directory.Resources.Features.Delete
+    (
+    -- * REST Resource
+      ResourcesFeaturesDeleteResource
+
+    -- * Creating a Request
+    , resourcesFeaturesDelete
+    , ResourcesFeaturesDelete
+
+    -- * Request Lenses
+    , rfdCustomer
+    , rfdFeatureKey
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.resources.features.delete@ method which the
+-- 'ResourcesFeaturesDelete' request conforms to.
+type ResourcesFeaturesDeleteResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "customer" :>
+             Capture "customer" Text :>
+               "resources" :>
+                 "features" :>
+                   Capture "featureKey" Text :>
+                     QueryParam "alt" AltJSON :> Delete '[JSON] ()
+
+-- | Deletes a feature.
+--
+-- /See:/ 'resourcesFeaturesDelete' smart constructor.
+data ResourcesFeaturesDelete = ResourcesFeaturesDelete'
+    { _rfdCustomer   :: !Text
+    , _rfdFeatureKey :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ResourcesFeaturesDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rfdCustomer'
+--
+-- * 'rfdFeatureKey'
+resourcesFeaturesDelete
+    :: Text -- ^ 'rfdCustomer'
+    -> Text -- ^ 'rfdFeatureKey'
+    -> ResourcesFeaturesDelete
+resourcesFeaturesDelete pRfdCustomer_ pRfdFeatureKey_ =
+    ResourcesFeaturesDelete'
+    { _rfdCustomer = pRfdCustomer_
+    , _rfdFeatureKey = pRfdFeatureKey_
+    }
+
+-- | The unique ID for the customer\'s G Suite account. As an account
+-- administrator, you can also use the my_customer alias to represent your
+-- account\'s customer ID.
+rfdCustomer :: Lens' ResourcesFeaturesDelete Text
+rfdCustomer
+  = lens _rfdCustomer (\ s a -> s{_rfdCustomer = a})
+
+-- | The unique ID of the feature to delete.
+rfdFeatureKey :: Lens' ResourcesFeaturesDelete Text
+rfdFeatureKey
+  = lens _rfdFeatureKey
+      (\ s a -> s{_rfdFeatureKey = a})
+
+instance GoogleRequest ResourcesFeaturesDelete where
+        type Rs ResourcesFeaturesDelete = ()
+        type Scopes ResourcesFeaturesDelete =
+             '["https://www.googleapis.com/auth/admin.directory.resource.calendar"]
+        requestClient ResourcesFeaturesDelete'{..}
+          = go _rfdCustomer _rfdFeatureKey (Just AltJSON)
+              directoryService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy ResourcesFeaturesDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Resources/Features/Get.hs b/gen/Network/Google/Resource/Directory/Resources/Features/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Resources/Features/Get.hs
@@ -0,0 +1,105 @@
+{-# 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.Directory.Resources.Features.Get
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves a feature.
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.resources.features.get@.
+module Network.Google.Resource.Directory.Resources.Features.Get
+    (
+    -- * REST Resource
+      ResourcesFeaturesGetResource
+
+    -- * Creating a Request
+    , resourcesFeaturesGet
+    , ResourcesFeaturesGet
+
+    -- * Request Lenses
+    , rfgCustomer
+    , rfgFeatureKey
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.resources.features.get@ method which the
+-- 'ResourcesFeaturesGet' request conforms to.
+type ResourcesFeaturesGetResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "customer" :>
+             Capture "customer" Text :>
+               "resources" :>
+                 "features" :>
+                   Capture "featureKey" Text :>
+                     QueryParam "alt" AltJSON :> Get '[JSON] Feature
+
+-- | Retrieves a feature.
+--
+-- /See:/ 'resourcesFeaturesGet' smart constructor.
+data ResourcesFeaturesGet = ResourcesFeaturesGet'
+    { _rfgCustomer   :: !Text
+    , _rfgFeatureKey :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ResourcesFeaturesGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rfgCustomer'
+--
+-- * 'rfgFeatureKey'
+resourcesFeaturesGet
+    :: Text -- ^ 'rfgCustomer'
+    -> Text -- ^ 'rfgFeatureKey'
+    -> ResourcesFeaturesGet
+resourcesFeaturesGet pRfgCustomer_ pRfgFeatureKey_ =
+    ResourcesFeaturesGet'
+    { _rfgCustomer = pRfgCustomer_
+    , _rfgFeatureKey = pRfgFeatureKey_
+    }
+
+-- | The unique ID for the customer\'s G Suite account. As an account
+-- administrator, you can also use the my_customer alias to represent your
+-- account\'s customer ID.
+rfgCustomer :: Lens' ResourcesFeaturesGet Text
+rfgCustomer
+  = lens _rfgCustomer (\ s a -> s{_rfgCustomer = a})
+
+-- | The unique ID of the feature to retrieve.
+rfgFeatureKey :: Lens' ResourcesFeaturesGet Text
+rfgFeatureKey
+  = lens _rfgFeatureKey
+      (\ s a -> s{_rfgFeatureKey = a})
+
+instance GoogleRequest ResourcesFeaturesGet where
+        type Rs ResourcesFeaturesGet = Feature
+        type Scopes ResourcesFeaturesGet =
+             '["https://www.googleapis.com/auth/admin.directory.resource.calendar",
+               "https://www.googleapis.com/auth/admin.directory.resource.calendar.readonly"]
+        requestClient ResourcesFeaturesGet'{..}
+          = go _rfgCustomer _rfgFeatureKey (Just AltJSON)
+              directoryService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy ResourcesFeaturesGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Resources/Features/Insert.hs b/gen/Network/Google/Resource/Directory/Resources/Features/Insert.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Resources/Features/Insert.hs
@@ -0,0 +1,103 @@
+{-# 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.Directory.Resources.Features.Insert
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Inserts a feature.
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.resources.features.insert@.
+module Network.Google.Resource.Directory.Resources.Features.Insert
+    (
+    -- * REST Resource
+      ResourcesFeaturesInsertResource
+
+    -- * Creating a Request
+    , resourcesFeaturesInsert
+    , ResourcesFeaturesInsert
+
+    -- * Request Lenses
+    , rfiPayload
+    , rfiCustomer
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.resources.features.insert@ method which the
+-- 'ResourcesFeaturesInsert' request conforms to.
+type ResourcesFeaturesInsertResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "customer" :>
+             Capture "customer" Text :>
+               "resources" :>
+                 "features" :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON] Feature :> Post '[JSON] Feature
+
+-- | Inserts a feature.
+--
+-- /See:/ 'resourcesFeaturesInsert' smart constructor.
+data ResourcesFeaturesInsert = ResourcesFeaturesInsert'
+    { _rfiPayload  :: !Feature
+    , _rfiCustomer :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ResourcesFeaturesInsert' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rfiPayload'
+--
+-- * 'rfiCustomer'
+resourcesFeaturesInsert
+    :: Feature -- ^ 'rfiPayload'
+    -> Text -- ^ 'rfiCustomer'
+    -> ResourcesFeaturesInsert
+resourcesFeaturesInsert pRfiPayload_ pRfiCustomer_ =
+    ResourcesFeaturesInsert'
+    { _rfiPayload = pRfiPayload_
+    , _rfiCustomer = pRfiCustomer_
+    }
+
+-- | Multipart request metadata.
+rfiPayload :: Lens' ResourcesFeaturesInsert Feature
+rfiPayload
+  = lens _rfiPayload (\ s a -> s{_rfiPayload = a})
+
+-- | The unique ID for the customer\'s G Suite account. As an account
+-- administrator, you can also use the my_customer alias to represent your
+-- account\'s customer ID.
+rfiCustomer :: Lens' ResourcesFeaturesInsert Text
+rfiCustomer
+  = lens _rfiCustomer (\ s a -> s{_rfiCustomer = a})
+
+instance GoogleRequest ResourcesFeaturesInsert where
+        type Rs ResourcesFeaturesInsert = Feature
+        type Scopes ResourcesFeaturesInsert =
+             '["https://www.googleapis.com/auth/admin.directory.resource.calendar"]
+        requestClient ResourcesFeaturesInsert'{..}
+          = go _rfiCustomer (Just AltJSON) _rfiPayload
+              directoryService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy ResourcesFeaturesInsertResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Resources/Features/List.hs b/gen/Network/Google/Resource/Directory/Resources/Features/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Resources/Features/List.hs
@@ -0,0 +1,117 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.Resources.Features.List
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves a list of features for an account.
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.resources.features.list@.
+module Network.Google.Resource.Directory.Resources.Features.List
+    (
+    -- * REST Resource
+      ResourcesFeaturesListResource
+
+    -- * Creating a Request
+    , resourcesFeaturesList
+    , ResourcesFeaturesList
+
+    -- * Request Lenses
+    , rflCustomer
+    , rflPageToken
+    , rflMaxResults
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.resources.features.list@ method which the
+-- 'ResourcesFeaturesList' request conforms to.
+type ResourcesFeaturesListResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "customer" :>
+             Capture "customer" Text :>
+               "resources" :>
+                 "features" :>
+                   QueryParam "pageToken" Text :>
+                     QueryParam "maxResults" (Textual Int32) :>
+                       QueryParam "alt" AltJSON :> Get '[JSON] Features
+
+-- | Retrieves a list of features for an account.
+--
+-- /See:/ 'resourcesFeaturesList' smart constructor.
+data ResourcesFeaturesList = ResourcesFeaturesList'
+    { _rflCustomer   :: !Text
+    , _rflPageToken  :: !(Maybe Text)
+    , _rflMaxResults :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ResourcesFeaturesList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rflCustomer'
+--
+-- * 'rflPageToken'
+--
+-- * 'rflMaxResults'
+resourcesFeaturesList
+    :: Text -- ^ 'rflCustomer'
+    -> ResourcesFeaturesList
+resourcesFeaturesList pRflCustomer_ =
+    ResourcesFeaturesList'
+    { _rflCustomer = pRflCustomer_
+    , _rflPageToken = Nothing
+    , _rflMaxResults = Nothing
+    }
+
+-- | The unique ID for the customer\'s G Suite account. As an account
+-- administrator, you can also use the my_customer alias to represent your
+-- account\'s customer ID.
+rflCustomer :: Lens' ResourcesFeaturesList Text
+rflCustomer
+  = lens _rflCustomer (\ s a -> s{_rflCustomer = a})
+
+-- | Token to specify the next page in the list.
+rflPageToken :: Lens' ResourcesFeaturesList (Maybe Text)
+rflPageToken
+  = lens _rflPageToken (\ s a -> s{_rflPageToken = a})
+
+-- | Maximum number of results to return.
+rflMaxResults :: Lens' ResourcesFeaturesList (Maybe Int32)
+rflMaxResults
+  = lens _rflMaxResults
+      (\ s a -> s{_rflMaxResults = a})
+      . mapping _Coerce
+
+instance GoogleRequest ResourcesFeaturesList where
+        type Rs ResourcesFeaturesList = Features
+        type Scopes ResourcesFeaturesList =
+             '["https://www.googleapis.com/auth/admin.directory.resource.calendar",
+               "https://www.googleapis.com/auth/admin.directory.resource.calendar.readonly"]
+        requestClient ResourcesFeaturesList'{..}
+          = go _rflCustomer _rflPageToken _rflMaxResults
+              (Just AltJSON)
+              directoryService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy ResourcesFeaturesListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Resources/Features/Patch.hs b/gen/Network/Google/Resource/Directory/Resources/Features/Patch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Resources/Features/Patch.hs
@@ -0,0 +1,117 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.Resources.Features.Patch
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates a feature. This method supports patch semantics.
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.resources.features.patch@.
+module Network.Google.Resource.Directory.Resources.Features.Patch
+    (
+    -- * REST Resource
+      ResourcesFeaturesPatchResource
+
+    -- * Creating a Request
+    , resourcesFeaturesPatch
+    , ResourcesFeaturesPatch
+
+    -- * Request Lenses
+    , rfpPayload
+    , rfpCustomer
+    , rfpFeatureKey
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.resources.features.patch@ method which the
+-- 'ResourcesFeaturesPatch' request conforms to.
+type ResourcesFeaturesPatchResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "customer" :>
+             Capture "customer" Text :>
+               "resources" :>
+                 "features" :>
+                   Capture "featureKey" Text :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON] Feature :> Patch '[JSON] Feature
+
+-- | Updates a feature. This method supports patch semantics.
+--
+-- /See:/ 'resourcesFeaturesPatch' smart constructor.
+data ResourcesFeaturesPatch = ResourcesFeaturesPatch'
+    { _rfpPayload    :: !Feature
+    , _rfpCustomer   :: !Text
+    , _rfpFeatureKey :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ResourcesFeaturesPatch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rfpPayload'
+--
+-- * 'rfpCustomer'
+--
+-- * 'rfpFeatureKey'
+resourcesFeaturesPatch
+    :: Feature -- ^ 'rfpPayload'
+    -> Text -- ^ 'rfpCustomer'
+    -> Text -- ^ 'rfpFeatureKey'
+    -> ResourcesFeaturesPatch
+resourcesFeaturesPatch pRfpPayload_ pRfpCustomer_ pRfpFeatureKey_ =
+    ResourcesFeaturesPatch'
+    { _rfpPayload = pRfpPayload_
+    , _rfpCustomer = pRfpCustomer_
+    , _rfpFeatureKey = pRfpFeatureKey_
+    }
+
+-- | Multipart request metadata.
+rfpPayload :: Lens' ResourcesFeaturesPatch Feature
+rfpPayload
+  = lens _rfpPayload (\ s a -> s{_rfpPayload = a})
+
+-- | The unique ID for the customer\'s G Suite account. As an account
+-- administrator, you can also use the my_customer alias to represent your
+-- account\'s customer ID.
+rfpCustomer :: Lens' ResourcesFeaturesPatch Text
+rfpCustomer
+  = lens _rfpCustomer (\ s a -> s{_rfpCustomer = a})
+
+-- | The unique ID of the feature to update.
+rfpFeatureKey :: Lens' ResourcesFeaturesPatch Text
+rfpFeatureKey
+  = lens _rfpFeatureKey
+      (\ s a -> s{_rfpFeatureKey = a})
+
+instance GoogleRequest ResourcesFeaturesPatch where
+        type Rs ResourcesFeaturesPatch = Feature
+        type Scopes ResourcesFeaturesPatch =
+             '["https://www.googleapis.com/auth/admin.directory.resource.calendar"]
+        requestClient ResourcesFeaturesPatch'{..}
+          = go _rfpCustomer _rfpFeatureKey (Just AltJSON)
+              _rfpPayload
+              directoryService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy ResourcesFeaturesPatchResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Resources/Features/Rename.hs b/gen/Network/Google/Resource/Directory/Resources/Features/Rename.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Resources/Features/Rename.hs
@@ -0,0 +1,117 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.Resources.Features.Rename
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Renames a feature.
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.resources.features.rename@.
+module Network.Google.Resource.Directory.Resources.Features.Rename
+    (
+    -- * REST Resource
+      ResourcesFeaturesRenameResource
+
+    -- * Creating a Request
+    , resourcesFeaturesRename
+    , ResourcesFeaturesRename
+
+    -- * Request Lenses
+    , rfrPayload
+    , rfrCustomer
+    , rfrOldName
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.resources.features.rename@ method which the
+-- 'ResourcesFeaturesRename' request conforms to.
+type ResourcesFeaturesRenameResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "customer" :>
+             Capture "customer" Text :>
+               "resources" :>
+                 "features" :>
+                   Capture "oldName" Text :>
+                     "rename" :>
+                       QueryParam "alt" AltJSON :>
+                         ReqBody '[JSON] FeatureRename :> Post '[JSON] ()
+
+-- | Renames a feature.
+--
+-- /See:/ 'resourcesFeaturesRename' smart constructor.
+data ResourcesFeaturesRename = ResourcesFeaturesRename'
+    { _rfrPayload  :: !FeatureRename
+    , _rfrCustomer :: !Text
+    , _rfrOldName  :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ResourcesFeaturesRename' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rfrPayload'
+--
+-- * 'rfrCustomer'
+--
+-- * 'rfrOldName'
+resourcesFeaturesRename
+    :: FeatureRename -- ^ 'rfrPayload'
+    -> Text -- ^ 'rfrCustomer'
+    -> Text -- ^ 'rfrOldName'
+    -> ResourcesFeaturesRename
+resourcesFeaturesRename pRfrPayload_ pRfrCustomer_ pRfrOldName_ =
+    ResourcesFeaturesRename'
+    { _rfrPayload = pRfrPayload_
+    , _rfrCustomer = pRfrCustomer_
+    , _rfrOldName = pRfrOldName_
+    }
+
+-- | Multipart request metadata.
+rfrPayload :: Lens' ResourcesFeaturesRename FeatureRename
+rfrPayload
+  = lens _rfrPayload (\ s a -> s{_rfrPayload = a})
+
+-- | The unique ID for the customer\'s G Suite account. As an account
+-- administrator, you can also use the my_customer alias to represent your
+-- account\'s customer ID.
+rfrCustomer :: Lens' ResourcesFeaturesRename Text
+rfrCustomer
+  = lens _rfrCustomer (\ s a -> s{_rfrCustomer = a})
+
+-- | The unique ID of the feature to rename.
+rfrOldName :: Lens' ResourcesFeaturesRename Text
+rfrOldName
+  = lens _rfrOldName (\ s a -> s{_rfrOldName = a})
+
+instance GoogleRequest ResourcesFeaturesRename where
+        type Rs ResourcesFeaturesRename = ()
+        type Scopes ResourcesFeaturesRename =
+             '["https://www.googleapis.com/auth/admin.directory.resource.calendar"]
+        requestClient ResourcesFeaturesRename'{..}
+          = go _rfrCustomer _rfrOldName (Just AltJSON)
+              _rfrPayload
+              directoryService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy ResourcesFeaturesRenameResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Resources/Features/Update.hs b/gen/Network/Google/Resource/Directory/Resources/Features/Update.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Resources/Features/Update.hs
@@ -0,0 +1,117 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.Resources.Features.Update
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates a feature.
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.resources.features.update@.
+module Network.Google.Resource.Directory.Resources.Features.Update
+    (
+    -- * REST Resource
+      ResourcesFeaturesUpdateResource
+
+    -- * Creating a Request
+    , resourcesFeaturesUpdate
+    , ResourcesFeaturesUpdate
+
+    -- * Request Lenses
+    , rfuPayload
+    , rfuCustomer
+    , rfuFeatureKey
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.resources.features.update@ method which the
+-- 'ResourcesFeaturesUpdate' request conforms to.
+type ResourcesFeaturesUpdateResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "customer" :>
+             Capture "customer" Text :>
+               "resources" :>
+                 "features" :>
+                   Capture "featureKey" Text :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON] Feature :> Put '[JSON] Feature
+
+-- | Updates a feature.
+--
+-- /See:/ 'resourcesFeaturesUpdate' smart constructor.
+data ResourcesFeaturesUpdate = ResourcesFeaturesUpdate'
+    { _rfuPayload    :: !Feature
+    , _rfuCustomer   :: !Text
+    , _rfuFeatureKey :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ResourcesFeaturesUpdate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rfuPayload'
+--
+-- * 'rfuCustomer'
+--
+-- * 'rfuFeatureKey'
+resourcesFeaturesUpdate
+    :: Feature -- ^ 'rfuPayload'
+    -> Text -- ^ 'rfuCustomer'
+    -> Text -- ^ 'rfuFeatureKey'
+    -> ResourcesFeaturesUpdate
+resourcesFeaturesUpdate pRfuPayload_ pRfuCustomer_ pRfuFeatureKey_ =
+    ResourcesFeaturesUpdate'
+    { _rfuPayload = pRfuPayload_
+    , _rfuCustomer = pRfuCustomer_
+    , _rfuFeatureKey = pRfuFeatureKey_
+    }
+
+-- | Multipart request metadata.
+rfuPayload :: Lens' ResourcesFeaturesUpdate Feature
+rfuPayload
+  = lens _rfuPayload (\ s a -> s{_rfuPayload = a})
+
+-- | The unique ID for the customer\'s G Suite account. As an account
+-- administrator, you can also use the my_customer alias to represent your
+-- account\'s customer ID.
+rfuCustomer :: Lens' ResourcesFeaturesUpdate Text
+rfuCustomer
+  = lens _rfuCustomer (\ s a -> s{_rfuCustomer = a})
+
+-- | The unique ID of the feature to update.
+rfuFeatureKey :: Lens' ResourcesFeaturesUpdate Text
+rfuFeatureKey
+  = lens _rfuFeatureKey
+      (\ s a -> s{_rfuFeatureKey = a})
+
+instance GoogleRequest ResourcesFeaturesUpdate where
+        type Rs ResourcesFeaturesUpdate = Feature
+        type Scopes ResourcesFeaturesUpdate =
+             '["https://www.googleapis.com/auth/admin.directory.resource.calendar"]
+        requestClient ResourcesFeaturesUpdate'{..}
+          = go _rfuCustomer _rfuFeatureKey (Just AltJSON)
+              _rfuPayload
+              directoryService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy ResourcesFeaturesUpdateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/RoleAssignments/Delete.hs b/gen/Network/Google/Resource/Directory/RoleAssignments/Delete.hs
--- a/gen/Network/Google/Resource/Directory/RoleAssignments/Delete.hs
+++ b/gen/Network/Google/Resource/Directory/RoleAssignments/Delete.hs
@@ -77,7 +77,7 @@
     , _radRoleAssignmentId = pRadRoleAssignmentId_
     }
 
--- | Immutable ID of the Google Apps account.
+-- | Immutable ID of the G Suite account.
 radCustomer :: Lens' RoleAssignmentsDelete Text
 radCustomer
   = lens _radCustomer (\ s a -> s{_radCustomer = a})
diff --git a/gen/Network/Google/Resource/Directory/RoleAssignments/Get.hs b/gen/Network/Google/Resource/Directory/RoleAssignments/Get.hs
--- a/gen/Network/Google/Resource/Directory/RoleAssignments/Get.hs
+++ b/gen/Network/Google/Resource/Directory/RoleAssignments/Get.hs
@@ -78,7 +78,7 @@
     , _ragRoleAssignmentId = pRagRoleAssignmentId_
     }
 
--- | Immutable ID of the Google Apps account.
+-- | Immutable ID of the G Suite account.
 ragCustomer :: Lens' RoleAssignmentsGet Text
 ragCustomer
   = lens _ragCustomer (\ s a -> s{_ragCustomer = a})
diff --git a/gen/Network/Google/Resource/Directory/RoleAssignments/Insert.hs b/gen/Network/Google/Resource/Directory/RoleAssignments/Insert.hs
--- a/gen/Network/Google/Resource/Directory/RoleAssignments/Insert.hs
+++ b/gen/Network/Google/Resource/Directory/RoleAssignments/Insert.hs
@@ -83,7 +83,7 @@
 raiPayload
   = lens _raiPayload (\ s a -> s{_raiPayload = a})
 
--- | Immutable ID of the Google Apps account.
+-- | Immutable ID of the G Suite account.
 raiCustomer :: Lens' RoleAssignmentsInsert Text
 raiCustomer
   = lens _raiCustomer (\ s a -> s{_raiCustomer = a})
diff --git a/gen/Network/Google/Resource/Directory/RoleAssignments/List.hs b/gen/Network/Google/Resource/Directory/RoleAssignments/List.hs
--- a/gen/Network/Google/Resource/Directory/RoleAssignments/List.hs
+++ b/gen/Network/Google/Resource/Directory/RoleAssignments/List.hs
@@ -101,7 +101,7 @@
 ralRoleId
   = lens _ralRoleId (\ s a -> s{_ralRoleId = a})
 
--- | Immutable ID of the Google Apps account.
+-- | Immutable ID of the G Suite account.
 ralCustomer :: Lens' RoleAssignmentsList Text
 ralCustomer
   = lens _ralCustomer (\ s a -> s{_ralCustomer = a})
diff --git a/gen/Network/Google/Resource/Directory/Roles/Delete.hs b/gen/Network/Google/Resource/Directory/Roles/Delete.hs
--- a/gen/Network/Google/Resource/Directory/Roles/Delete.hs
+++ b/gen/Network/Google/Resource/Directory/Roles/Delete.hs
@@ -81,7 +81,7 @@
 rdRoleId :: Lens' RolesDelete Text
 rdRoleId = lens _rdRoleId (\ s a -> s{_rdRoleId = a})
 
--- | Immutable ID of the Google Apps account.
+-- | Immutable ID of the G Suite account.
 rdCustomer :: Lens' RolesDelete Text
 rdCustomer
   = lens _rdCustomer (\ s a -> s{_rdCustomer = a})
diff --git a/gen/Network/Google/Resource/Directory/Roles/Get.hs b/gen/Network/Google/Resource/Directory/Roles/Get.hs
--- a/gen/Network/Google/Resource/Directory/Roles/Get.hs
+++ b/gen/Network/Google/Resource/Directory/Roles/Get.hs
@@ -81,7 +81,7 @@
 rgRoleId :: Lens' RolesGet Text
 rgRoleId = lens _rgRoleId (\ s a -> s{_rgRoleId = a})
 
--- | Immutable ID of the Google Apps account.
+-- | Immutable ID of the G Suite account.
 rgCustomer :: Lens' RolesGet Text
 rgCustomer
   = lens _rgCustomer (\ s a -> s{_rgCustomer = a})
diff --git a/gen/Network/Google/Resource/Directory/Roles/Insert.hs b/gen/Network/Google/Resource/Directory/Roles/Insert.hs
--- a/gen/Network/Google/Resource/Directory/Roles/Insert.hs
+++ b/gen/Network/Google/Resource/Directory/Roles/Insert.hs
@@ -82,7 +82,7 @@
 riPayload
   = lens _riPayload (\ s a -> s{_riPayload = a})
 
--- | Immutable ID of the Google Apps account.
+-- | Immutable ID of the G Suite account.
 riCustomer :: Lens' RolesInsert Text
 riCustomer
   = lens _riCustomer (\ s a -> s{_riCustomer = a})
diff --git a/gen/Network/Google/Resource/Directory/Roles/List.hs b/gen/Network/Google/Resource/Directory/Roles/List.hs
--- a/gen/Network/Google/Resource/Directory/Roles/List.hs
+++ b/gen/Network/Google/Resource/Directory/Roles/List.hs
@@ -82,7 +82,7 @@
     , _rlMaxResults = Nothing
     }
 
--- | Immutable id of the Google Apps account.
+-- | Immutable ID of the G Suite account.
 rlCustomer :: Lens' RolesList Text
 rlCustomer
   = lens _rlCustomer (\ s a -> s{_rlCustomer = a})
diff --git a/gen/Network/Google/Resource/Directory/Roles/Patch.hs b/gen/Network/Google/Resource/Directory/Roles/Patch.hs
--- a/gen/Network/Google/Resource/Directory/Roles/Patch.hs
+++ b/gen/Network/Google/Resource/Directory/Roles/Patch.hs
@@ -93,7 +93,7 @@
 rpRoleId :: Lens' RolesPatch Text
 rpRoleId = lens _rpRoleId (\ s a -> s{_rpRoleId = a})
 
--- | Immutable ID of the Google Apps account.
+-- | Immutable ID of the G Suite account.
 rpCustomer :: Lens' RolesPatch Text
 rpCustomer
   = lens _rpCustomer (\ s a -> s{_rpCustomer = a})
diff --git a/gen/Network/Google/Resource/Directory/Roles/Update.hs b/gen/Network/Google/Resource/Directory/Roles/Update.hs
--- a/gen/Network/Google/Resource/Directory/Roles/Update.hs
+++ b/gen/Network/Google/Resource/Directory/Roles/Update.hs
@@ -93,7 +93,7 @@
 ruRoleId :: Lens' RolesUpdate Text
 ruRoleId = lens _ruRoleId (\ s a -> s{_ruRoleId = a})
 
--- | Immutable ID of the Google Apps account.
+-- | Immutable ID of the G Suite account.
 ruCustomer :: Lens' RolesUpdate Text
 ruCustomer
   = lens _ruCustomer (\ s a -> s{_ruCustomer = a})
diff --git a/gen/Network/Google/Resource/Directory/Schemas/Delete.hs b/gen/Network/Google/Resource/Directory/Schemas/Delete.hs
--- a/gen/Network/Google/Resource/Directory/Schemas/Delete.hs
+++ b/gen/Network/Google/Resource/Directory/Schemas/Delete.hs
@@ -77,12 +77,12 @@
     , _sdSchemaKey = pSdSchemaKey_
     }
 
--- | Immutable id of the Google Apps account
+-- | Immutable ID of the G Suite account
 sdCustomerId :: Lens' SchemasDelete Text
 sdCustomerId
   = lens _sdCustomerId (\ s a -> s{_sdCustomerId = a})
 
--- | Name or immutable Id of the schema
+-- | Name or immutable ID of the schema
 sdSchemaKey :: Lens' SchemasDelete Text
 sdSchemaKey
   = lens _sdSchemaKey (\ s a -> s{_sdSchemaKey = a})
diff --git a/gen/Network/Google/Resource/Directory/Schemas/Get.hs b/gen/Network/Google/Resource/Directory/Schemas/Get.hs
--- a/gen/Network/Google/Resource/Directory/Schemas/Get.hs
+++ b/gen/Network/Google/Resource/Directory/Schemas/Get.hs
@@ -77,12 +77,12 @@
     , _sgSchemaKey = pSgSchemaKey_
     }
 
--- | Immutable id of the Google Apps account
+-- | Immutable ID of the G Suite account
 sgCustomerId :: Lens' SchemasGet Text
 sgCustomerId
   = lens _sgCustomerId (\ s a -> s{_sgCustomerId = a})
 
--- | Name or immutable Id of the schema
+-- | Name or immutable ID of the schema
 sgSchemaKey :: Lens' SchemasGet Text
 sgSchemaKey
   = lens _sgSchemaKey (\ s a -> s{_sgSchemaKey = a})
diff --git a/gen/Network/Google/Resource/Directory/Schemas/Insert.hs b/gen/Network/Google/Resource/Directory/Schemas/Insert.hs
--- a/gen/Network/Google/Resource/Directory/Schemas/Insert.hs
+++ b/gen/Network/Google/Resource/Directory/Schemas/Insert.hs
@@ -82,7 +82,7 @@
 siPayload
   = lens _siPayload (\ s a -> s{_siPayload = a})
 
--- | Immutable id of the Google Apps account
+-- | Immutable ID of the G Suite account
 siCustomerId :: Lens' SchemasInsert Text
 siCustomerId
   = lens _siCustomerId (\ s a -> s{_siCustomerId = a})
diff --git a/gen/Network/Google/Resource/Directory/Schemas/List.hs b/gen/Network/Google/Resource/Directory/Schemas/List.hs
--- a/gen/Network/Google/Resource/Directory/Schemas/List.hs
+++ b/gen/Network/Google/Resource/Directory/Schemas/List.hs
@@ -70,7 +70,7 @@
     { _slCustomerId = pSlCustomerId_
     }
 
--- | Immutable id of the Google Apps account
+-- | Immutable ID of the G Suite account
 slCustomerId :: Lens' SchemasList Text
 slCustomerId
   = lens _slCustomerId (\ s a -> s{_slCustomerId = a})
diff --git a/gen/Network/Google/Resource/Directory/Schemas/Patch.hs b/gen/Network/Google/Resource/Directory/Schemas/Patch.hs
--- a/gen/Network/Google/Resource/Directory/Schemas/Patch.hs
+++ b/gen/Network/Google/Resource/Directory/Schemas/Patch.hs
@@ -89,12 +89,12 @@
 spPayload
   = lens _spPayload (\ s a -> s{_spPayload = a})
 
--- | Immutable id of the Google Apps account
+-- | Immutable ID of the G Suite account
 spCustomerId :: Lens' SchemasPatch Text
 spCustomerId
   = lens _spCustomerId (\ s a -> s{_spCustomerId = a})
 
--- | Name or immutable Id of the schema.
+-- | Name or immutable ID of the schema.
 spSchemaKey :: Lens' SchemasPatch Text
 spSchemaKey
   = lens _spSchemaKey (\ s a -> s{_spSchemaKey = a})
diff --git a/gen/Network/Google/Resource/Directory/Schemas/Update.hs b/gen/Network/Google/Resource/Directory/Schemas/Update.hs
--- a/gen/Network/Google/Resource/Directory/Schemas/Update.hs
+++ b/gen/Network/Google/Resource/Directory/Schemas/Update.hs
@@ -89,12 +89,12 @@
 suPayload
   = lens _suPayload (\ s a -> s{_suPayload = a})
 
--- | Immutable id of the Google Apps account
+-- | Immutable ID of the G Suite account
 suCustomerId :: Lens' SchemasUpdate Text
 suCustomerId
   = lens _suCustomerId (\ s a -> s{_suCustomerId = a})
 
--- | Name or immutable Id of the schema.
+-- | Name or immutable ID of the schema.
 suSchemaKey :: Lens' SchemasUpdate Text
 suSchemaKey
   = lens _suSchemaKey (\ s a -> s{_suSchemaKey = a})
diff --git a/gen/Network/Google/Resource/Directory/Users/Aliases/Delete.hs b/gen/Network/Google/Resource/Directory/Users/Aliases/Delete.hs
--- a/gen/Network/Google/Resource/Directory/Users/Aliases/Delete.hs
+++ b/gen/Network/Google/Resource/Directory/Users/Aliases/Delete.hs
@@ -81,7 +81,7 @@
 uadAlias :: Lens' UsersAliasesDelete Text
 uadAlias = lens _uadAlias (\ s a -> s{_uadAlias = a})
 
--- | Email or immutable Id of the user
+-- | Email or immutable ID of the user
 uadUserKey :: Lens' UsersAliasesDelete Text
 uadUserKey
   = lens _uadUserKey (\ s a -> s{_uadUserKey = a})
diff --git a/gen/Network/Google/Resource/Directory/Users/Aliases/Insert.hs b/gen/Network/Google/Resource/Directory/Users/Aliases/Insert.hs
--- a/gen/Network/Google/Resource/Directory/Users/Aliases/Insert.hs
+++ b/gen/Network/Google/Resource/Directory/Users/Aliases/Insert.hs
@@ -82,7 +82,7 @@
 uaiPayload
   = lens _uaiPayload (\ s a -> s{_uaiPayload = a})
 
--- | Email or immutable Id of the user
+-- | Email or immutable ID of the user
 uaiUserKey :: Lens' UsersAliasesInsert Text
 uaiUserKey
   = lens _uaiUserKey (\ s a -> s{_uaiUserKey = a})
diff --git a/gen/Network/Google/Resource/Directory/Users/Aliases/List.hs b/gen/Network/Google/Resource/Directory/Users/Aliases/List.hs
--- a/gen/Network/Google/Resource/Directory/Users/Aliases/List.hs
+++ b/gen/Network/Google/Resource/Directory/Users/Aliases/List.hs
@@ -80,7 +80,7 @@
 ualEvent :: Lens' UsersAliasesList (Maybe UsersAliasesListEvent)
 ualEvent = lens _ualEvent (\ s a -> s{_ualEvent = a})
 
--- | Email or immutable Id of the user
+-- | Email or immutable ID of the user
 ualUserKey :: Lens' UsersAliasesList Text
 ualUserKey
   = lens _ualUserKey (\ s a -> s{_ualUserKey = a})
diff --git a/gen/Network/Google/Resource/Directory/Users/Aliases/Watch.hs b/gen/Network/Google/Resource/Directory/Users/Aliases/Watch.hs
--- a/gen/Network/Google/Resource/Directory/Users/Aliases/Watch.hs
+++ b/gen/Network/Google/Resource/Directory/Users/Aliases/Watch.hs
@@ -93,7 +93,7 @@
 uawPayload
   = lens _uawPayload (\ s a -> s{_uawPayload = a})
 
--- | Email or immutable Id of the user
+-- | Email or immutable ID of the user
 uawUserKey :: Lens' UsersAliasesWatch Text
 uawUserKey
   = lens _uawUserKey (\ s a -> s{_uawUserKey = a})
diff --git a/gen/Network/Google/Resource/Directory/Users/Delete.hs b/gen/Network/Google/Resource/Directory/Users/Delete.hs
--- a/gen/Network/Google/Resource/Directory/Users/Delete.hs
+++ b/gen/Network/Google/Resource/Directory/Users/Delete.hs
@@ -69,7 +69,7 @@
     { _udUserKey = pUdUserKey_
     }
 
--- | Email or immutable Id of the user
+-- | Email or immutable ID of the user
 udUserKey :: Lens' UsersDelete Text
 udUserKey
   = lens _udUserKey (\ s a -> s{_udUserKey = a})
diff --git a/gen/Network/Google/Resource/Directory/Users/Get.hs b/gen/Network/Google/Resource/Directory/Users/Get.hs
--- a/gen/Network/Google/Resource/Directory/Users/Get.hs
+++ b/gen/Network/Google/Resource/Directory/Users/Get.hs
@@ -104,7 +104,7 @@
 ugProjection
   = lens _ugProjection (\ s a -> s{_ugProjection = a})
 
--- | Email or immutable Id of the user
+-- | Email or immutable ID of the user
 ugUserKey :: Lens' UsersGet Text
 ugUserKey
   = lens _ugUserKey (\ s a -> s{_ugUserKey = a})
diff --git a/gen/Network/Google/Resource/Directory/Users/List.hs b/gen/Network/Google/Resource/Directory/Users/List.hs
--- a/gen/Network/Google/Resource/Directory/Users/List.hs
+++ b/gen/Network/Google/Resource/Directory/Users/List.hs
@@ -172,8 +172,8 @@
 ulSortOrder
   = lens _ulSortOrder (\ s a -> s{_ulSortOrder = a})
 
--- | Immutable id of the Google Apps account. In case of multi-domain, to
--- fetch all users for a customer, fill this field instead of domain.
+-- | Immutable ID of the G Suite account. In case of multi-domain, to fetch
+-- all users for a customer, fill this field instead of domain.
 ulCustomer :: Lens' UsersList (Maybe Text)
 ulCustomer
   = lens _ulCustomer (\ s a -> s{_ulCustomer = a})
diff --git a/gen/Network/Google/Resource/Directory/Users/MakeAdmin.hs b/gen/Network/Google/Resource/Directory/Users/MakeAdmin.hs
--- a/gen/Network/Google/Resource/Directory/Users/MakeAdmin.hs
+++ b/gen/Network/Google/Resource/Directory/Users/MakeAdmin.hs
@@ -82,7 +82,7 @@
 umaPayload
   = lens _umaPayload (\ s a -> s{_umaPayload = a})
 
--- | Email or immutable Id of the user as admin
+-- | Email or immutable ID of the user as admin
 umaUserKey :: Lens' UsersMakeAdmin Text
 umaUserKey
   = lens _umaUserKey (\ s a -> s{_umaUserKey = a})
diff --git a/gen/Network/Google/Resource/Directory/Users/Patch.hs b/gen/Network/Google/Resource/Directory/Users/Patch.hs
--- a/gen/Network/Google/Resource/Directory/Users/Patch.hs
+++ b/gen/Network/Google/Resource/Directory/Users/Patch.hs
@@ -81,7 +81,7 @@
 upPayload
   = lens _upPayload (\ s a -> s{_upPayload = a})
 
--- | Email or immutable Id of the user. If Id, it should match with id of
+-- | Email or immutable ID of the user. If ID, it should match with id of
 -- user object
 upUserKey :: Lens' UsersPatch Text
 upUserKey
diff --git a/gen/Network/Google/Resource/Directory/Users/Photos/Delete.hs b/gen/Network/Google/Resource/Directory/Users/Photos/Delete.hs
--- a/gen/Network/Google/Resource/Directory/Users/Photos/Delete.hs
+++ b/gen/Network/Google/Resource/Directory/Users/Photos/Delete.hs
@@ -71,7 +71,7 @@
     { _updUserKey = pUpdUserKey_
     }
 
--- | Email or immutable Id of the user
+-- | Email or immutable ID of the user
 updUserKey :: Lens' UsersPhotosDelete Text
 updUserKey
   = lens _updUserKey (\ s a -> s{_updUserKey = a})
diff --git a/gen/Network/Google/Resource/Directory/Users/Photos/Get.hs b/gen/Network/Google/Resource/Directory/Users/Photos/Get.hs
--- a/gen/Network/Google/Resource/Directory/Users/Photos/Get.hs
+++ b/gen/Network/Google/Resource/Directory/Users/Photos/Get.hs
@@ -71,7 +71,7 @@
     { _upgUserKey = pUpgUserKey_
     }
 
--- | Email or immutable Id of the user
+-- | Email or immutable ID of the user
 upgUserKey :: Lens' UsersPhotosGet Text
 upgUserKey
   = lens _upgUserKey (\ s a -> s{_upgUserKey = a})
diff --git a/gen/Network/Google/Resource/Directory/Users/Photos/Patch.hs b/gen/Network/Google/Resource/Directory/Users/Photos/Patch.hs
--- a/gen/Network/Google/Resource/Directory/Users/Photos/Patch.hs
+++ b/gen/Network/Google/Resource/Directory/Users/Photos/Patch.hs
@@ -83,7 +83,7 @@
 uppPayload
   = lens _uppPayload (\ s a -> s{_uppPayload = a})
 
--- | Email or immutable Id of the user
+-- | Email or immutable ID of the user
 uppUserKey :: Lens' UsersPhotosPatch Text
 uppUserKey
   = lens _uppUserKey (\ s a -> s{_uppUserKey = a})
diff --git a/gen/Network/Google/Resource/Directory/Users/Photos/Update.hs b/gen/Network/Google/Resource/Directory/Users/Photos/Update.hs
--- a/gen/Network/Google/Resource/Directory/Users/Photos/Update.hs
+++ b/gen/Network/Google/Resource/Directory/Users/Photos/Update.hs
@@ -83,7 +83,7 @@
 upuPayload
   = lens _upuPayload (\ s a -> s{_upuPayload = a})
 
--- | Email or immutable Id of the user
+-- | Email or immutable ID of the user
 upuUserKey :: Lens' UsersPhotosUpdate Text
 upuUserKey
   = lens _upuUserKey (\ s a -> s{_upuUserKey = a})
diff --git a/gen/Network/Google/Resource/Directory/Users/Update.hs b/gen/Network/Google/Resource/Directory/Users/Update.hs
--- a/gen/Network/Google/Resource/Directory/Users/Update.hs
+++ b/gen/Network/Google/Resource/Directory/Users/Update.hs
@@ -80,7 +80,7 @@
 uPayload :: Lens' UsersUpdate User
 uPayload = lens _uPayload (\ s a -> s{_uPayload = a})
 
--- | Email or immutable Id of the user. If Id, it should match with id of
+-- | Email or immutable ID of the user. If ID, it should match with id of
 -- user object
 uUserKey :: Lens' UsersUpdate Text
 uUserKey = lens _uUserKey (\ s a -> s{_uUserKey = a})
diff --git a/gen/Network/Google/Resource/Directory/Users/Watch.hs b/gen/Network/Google/Resource/Directory/Users/Watch.hs
--- a/gen/Network/Google/Resource/Directory/Users/Watch.hs
+++ b/gen/Network/Google/Resource/Directory/Users/Watch.hs
@@ -185,8 +185,8 @@
 uwSortOrder
   = lens _uwSortOrder (\ s a -> s{_uwSortOrder = a})
 
--- | Immutable id of the Google Apps account. In case of multi-domain, to
--- fetch all users for a customer, fill this field instead of domain.
+-- | Immutable ID of the G Suite account. In case of multi-domain, to fetch
+-- all users for a customer, fill this field instead of domain.
 uwCustomer :: Lens' UsersWatch (Maybe Text)
 uwCustomer
   = lens _uwCustomer (\ s a -> s{_uwCustomer = a})
diff --git a/gen/Network/Google/Resource/Directory/VerificationCodes/Generate.hs b/gen/Network/Google/Resource/Directory/VerificationCodes/Generate.hs
--- a/gen/Network/Google/Resource/Directory/VerificationCodes/Generate.hs
+++ b/gen/Network/Google/Resource/Directory/VerificationCodes/Generate.hs
@@ -71,7 +71,7 @@
     { _vcgUserKey = pVcgUserKey_
     }
 
--- | Email or immutable Id of the user
+-- | Email or immutable ID of the user
 vcgUserKey :: Lens' VerificationCodesGenerate Text
 vcgUserKey
   = lens _vcgUserKey (\ s a -> s{_vcgUserKey = a})
diff --git a/gen/Network/Google/Resource/Directory/VerificationCodes/Invalidate.hs b/gen/Network/Google/Resource/Directory/VerificationCodes/Invalidate.hs
--- a/gen/Network/Google/Resource/Directory/VerificationCodes/Invalidate.hs
+++ b/gen/Network/Google/Resource/Directory/VerificationCodes/Invalidate.hs
@@ -71,7 +71,7 @@
     { _vciUserKey = pVciUserKey_
     }
 
--- | Email or immutable Id of the user
+-- | Email or immutable ID of the user
 vciUserKey :: Lens' VerificationCodesInvalidate Text
 vciUserKey
   = lens _vciUserKey (\ s a -> s{_vciUserKey = a})
diff --git a/gogol-admin-directory.cabal b/gogol-admin-directory.cabal
--- a/gogol-admin-directory.cabal
+++ b/gogol-admin-directory.cabal
@@ -1,5 +1,5 @@
 name:                  gogol-admin-directory
-version:               0.3.0
+version:               0.4.0
 synopsis:              Google Admin Directory SDK.
 homepage:              https://github.com/brendanhay/gogol
 bug-reports:           https://github.com/brendanhay/gogol/issues
@@ -14,9 +14,8 @@
 extra-source-files:    README.md src/.gitkeep
 
 description:
-    The Admin SDK Directory API lets you view and manage enterprise
-    resources such as users and groups, administrative notifications,
-    security features, and more.
+    Manages enterprise resources such as users and groups, administrative
+    notifications, security features, and more.
     .
     /Warning:/ This is an experimental prototype/preview release which is still
     under exploratory development and not intended for public use, caveat emptor!
@@ -44,6 +43,7 @@
         , Network.Google.Resource.Directory.ChromeosDevices.Action
         , Network.Google.Resource.Directory.ChromeosDevices.Get
         , Network.Google.Resource.Directory.ChromeosDevices.List
+        , Network.Google.Resource.Directory.ChromeosDevices.MoveDevicesToOu
         , Network.Google.Resource.Directory.ChromeosDevices.Patch
         , Network.Google.Resource.Directory.ChromeosDevices.Update
         , Network.Google.Resource.Directory.Customers.Get
@@ -68,6 +68,7 @@
         , Network.Google.Resource.Directory.Groups.Update
         , Network.Google.Resource.Directory.Members.Delete
         , Network.Google.Resource.Directory.Members.Get
+        , Network.Google.Resource.Directory.Members.HasMember
         , Network.Google.Resource.Directory.Members.Insert
         , Network.Google.Resource.Directory.Members.List
         , Network.Google.Resource.Directory.Members.Patch
@@ -88,12 +89,27 @@
         , Network.Google.Resource.Directory.OrgUnits.Patch
         , Network.Google.Resource.Directory.OrgUnits.Update
         , Network.Google.Resource.Directory.Privileges.List
+        , Network.Google.Resource.Directory.ResolvedAppAccessSettings.GetSettings
+        , Network.Google.Resource.Directory.ResolvedAppAccessSettings.ListTrustedApps
+        , Network.Google.Resource.Directory.Resources.Buildings.Delete
+        , Network.Google.Resource.Directory.Resources.Buildings.Get
+        , Network.Google.Resource.Directory.Resources.Buildings.Insert
+        , Network.Google.Resource.Directory.Resources.Buildings.List
+        , Network.Google.Resource.Directory.Resources.Buildings.Patch
+        , Network.Google.Resource.Directory.Resources.Buildings.Update
         , Network.Google.Resource.Directory.Resources.Calendars.Delete
         , Network.Google.Resource.Directory.Resources.Calendars.Get
         , Network.Google.Resource.Directory.Resources.Calendars.Insert
         , Network.Google.Resource.Directory.Resources.Calendars.List
         , Network.Google.Resource.Directory.Resources.Calendars.Patch
         , Network.Google.Resource.Directory.Resources.Calendars.Update
+        , Network.Google.Resource.Directory.Resources.Features.Delete
+        , Network.Google.Resource.Directory.Resources.Features.Get
+        , Network.Google.Resource.Directory.Resources.Features.Insert
+        , Network.Google.Resource.Directory.Resources.Features.List
+        , Network.Google.Resource.Directory.Resources.Features.Patch
+        , Network.Google.Resource.Directory.Resources.Features.Rename
+        , Network.Google.Resource.Directory.Resources.Features.Update
         , Network.Google.Resource.Directory.RoleAssignments.Delete
         , Network.Google.Resource.Directory.RoleAssignments.Get
         , Network.Google.Resource.Directory.RoleAssignments.Insert
@@ -139,5 +155,5 @@
         , Network.Google.Directory.Types.Sum
 
     build-depends:
-          gogol-core == 0.3.0.*
+          gogol-core == 0.4.0.*
         , base       >= 4.7 && < 5
