diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,367 @@
+Mozilla Public License Version 2.0
+==================================
+
+1. Definitions
+--------------
+
+1.1. "Contributor"
+    means each individual or legal entity that creates, contributes to
+    the creation of, or owns Covered Software.
+
+1.2. "Contributor Version"
+    means the combination of the Contributions of others (if any) used
+    by a Contributor and that particular Contributor's Contribution.
+
+1.3. "Contribution"
+    means Covered Software of a particular Contributor.
+
+1.4. "Covered Software"
+    means Source Code Form to which the initial Contributor has attached
+    the notice in Exhibit A, the Executable Form of such Source Code
+    Form, and Modifications of such Source Code Form, in each case
+    including portions thereof.
+
+1.5. "Incompatible With Secondary Licenses"
+    means
+
+    (a) that the initial Contributor has attached the notice described
+        in Exhibit B to the Covered Software; or
+
+    (b) that the Covered Software was made available under the terms of
+        version 1.1 or earlier of the License, but not also under the
+        terms of a Secondary License.
+
+1.6. "Executable Form"
+    means any form of the work other than Source Code Form.
+
+1.7. "Larger Work"
+    means a work that combines Covered Software with other material, in
+    a separate file or files, that is not Covered Software.
+
+1.8. "License"
+    means this document.
+
+1.9. "Licensable"
+    means having the right to grant, to the maximum extent possible,
+    whether at the time of the initial grant or subsequently, any and
+    all of the rights conveyed by this License.
+
+1.10. "Modifications"
+    means any of the following:
+
+    (a) any file in Source Code Form that results from an addition to,
+        deletion from, or modification of the contents of Covered
+        Software; or
+
+    (b) any new file in Source Code Form that contains any Covered
+        Software.
+
+1.11. "Patent Claims" of a Contributor
+    means any patent claim(s), including without limitation, method,
+    process, and apparatus claims, in any patent Licensable by such
+    Contributor that would be infringed, but for the grant of the
+    License, by the making, using, selling, offering for sale, having
+    made, import, or transfer of either its Contributions or its
+    Contributor Version.
+
+1.12. "Secondary License"
+    means either the GNU General Public License, Version 2.0, the GNU
+    Lesser General Public License, Version 2.1, the GNU Affero General
+    Public License, Version 3.0, or any later versions of those
+    licenses.
+
+1.13. "Source Code Form"
+    means the form of the work preferred for making modifications.
+
+1.14. "You" (or "Your")
+    means an individual or a legal entity exercising rights under this
+    License. For legal entities, "You" includes any entity that
+    controls, is controlled by, or is under common control with You. For
+    purposes of this definition, "control" means (a) the power, direct
+    or indirect, to cause the direction or management of such entity,
+    whether by contract or otherwise, or (b) ownership of more than
+    fifty percent (50%) of the outstanding shares or beneficial
+    ownership of such entity.
+
+2. License Grants and Conditions
+--------------------------------
+
+2.1. Grants
+
+Each Contributor hereby grants You a world-wide, royalty-free,
+non-exclusive license:
+
+(a) under intellectual property rights (other than patent or trademark)
+    Licensable by such Contributor to use, reproduce, make available,
+    modify, display, perform, distribute, and otherwise exploit its
+    Contributions, either on an unmodified basis, with Modifications, or
+    as part of a Larger Work; and
+
+(b) under Patent Claims of such Contributor to make, use, sell, offer
+    for sale, have made, import, and otherwise transfer either its
+    Contributions or its Contributor Version.
+
+2.2. Effective Date
+
+The licenses granted in Section 2.1 with respect to any Contribution
+become effective for each Contribution on the date the Contributor first
+distributes such Contribution.
+
+2.3. Limitations on Grant Scope
+
+The licenses granted in this Section 2 are the only rights granted under
+this License. No additional rights or licenses will be implied from the
+distribution or licensing of Covered Software under this License.
+Notwithstanding Section 2.1(b) above, no patent license is granted by a
+Contributor:
+
+(a) for any code that a Contributor has removed from Covered Software;
+    or
+
+(b) for infringements caused by: (i) Your and any other third party's
+    modifications of Covered Software, or (ii) the combination of its
+    Contributions with other software (except as part of its Contributor
+    Version); or
+
+(c) under Patent Claims infringed by Covered Software in the absence of
+    its Contributions.
+
+This License does not grant any rights in the trademarks, service marks,
+or logos of any Contributor (except as may be necessary to comply with
+the notice requirements in Section 3.4).
+
+2.4. Subsequent Licenses
+
+No Contributor makes additional grants as a result of Your choice to
+distribute the Covered Software under a subsequent version of this
+License (see Section 10.2) or under the terms of a Secondary License (if
+permitted under the terms of Section 3.3).
+
+2.5. Representation
+
+Each Contributor represents that the Contributor believes its
+Contributions are its original creation(s) or it has sufficient rights
+to grant the rights to its Contributions conveyed by this License.
+
+2.6. Fair Use
+
+This License is not intended to limit any rights You have under
+applicable copyright doctrines of fair use, fair dealing, or other
+equivalents.
+
+2.7. Conditions
+
+Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
+in Section 2.1.
+
+3. Responsibilities
+-------------------
+
+3.1. Distribution of Source Form
+
+All distribution of Covered Software in Source Code Form, including any
+Modifications that You create or to which You contribute, must be under
+the terms of this License. You must inform recipients that the Source
+Code Form of the Covered Software is governed by the terms of this
+License, and how they can obtain a copy of this License. You may not
+attempt to alter or restrict the recipients' rights in the Source Code
+Form.
+
+3.2. Distribution of Executable Form
+
+If You distribute Covered Software in Executable Form then:
+
+(a) such Covered Software must also be made available in Source Code
+    Form, as described in Section 3.1, and You must inform recipients of
+    the Executable Form how they can obtain a copy of such Source Code
+    Form by reasonable means in a timely manner, at a charge no more
+    than the cost of distribution to the recipient; and
+
+(b) You may distribute such Executable Form under the terms of this
+    License, or sublicense it under different terms, provided that the
+    license for the Executable Form does not attempt to limit or alter
+    the recipients' rights in the Source Code Form under this License.
+
+3.3. Distribution of a Larger Work
+
+You may create and distribute a Larger Work under terms of Your choice,
+provided that You also comply with the requirements of this License for
+the Covered Software. If the Larger Work is a combination of Covered
+Software with a work governed by one or more Secondary Licenses, and the
+Covered Software is not Incompatible With Secondary Licenses, this
+License permits You to additionally distribute such Covered Software
+under the terms of such Secondary License(s), so that the recipient of
+the Larger Work may, at their option, further distribute the Covered
+Software under the terms of either this License or such Secondary
+License(s).
+
+3.4. Notices
+
+You may not remove or alter the substance of any license notices
+(including copyright notices, patent notices, disclaimers of warranty,
+or limitations of liability) contained within the Source Code Form of
+the Covered Software, except that You may alter any license notices to
+the extent required to remedy known factual inaccuracies.
+
+3.5. Application of Additional Terms
+
+You may choose to offer, and to charge a fee for, warranty, support,
+indemnity or liability obligations to one or more recipients of Covered
+Software. However, You may do so only on Your own behalf, and not on
+behalf of any Contributor. You must make it absolutely clear that any
+such warranty, support, indemnity, or liability obligation is offered by
+You alone, and You hereby agree to indemnify every Contributor for any
+liability incurred by such Contributor as a result of warranty, support,
+indemnity or liability terms You offer. You may include additional
+disclaimers of warranty and limitations of liability specific to any
+jurisdiction.
+
+4. Inability to Comply Due to Statute or Regulation
+---------------------------------------------------
+
+If it is impossible for You to comply with any of the terms of this
+License with respect to some or all of the Covered Software due to
+statute, judicial order, or regulation then You must: (a) comply with
+the terms of this License to the maximum extent possible; and (b)
+describe the limitations and the code they affect. Such description must
+be placed in a text file included with all distributions of the Covered
+Software under this License. Except to the extent prohibited by statute
+or regulation, such description must be sufficiently detailed for a
+recipient of ordinary skill to be able to understand it.
+
+5. Termination
+--------------
+
+5.1. The rights granted under this License will terminate automatically
+if You fail to comply with any of its terms. However, if You become
+compliant, then the rights granted under this License from a particular
+Contributor are reinstated (a) provisionally, unless and until such
+Contributor explicitly and finally terminates Your grants, and (b) on an
+ongoing basis, if such Contributor fails to notify You of the
+non-compliance by some reasonable means prior to 60 days after You have
+come back into compliance. Moreover, Your grants from a particular
+Contributor are reinstated on an ongoing basis if such Contributor
+notifies You of the non-compliance by some reasonable means, this is the
+first time You have received notice of non-compliance with this License
+from such Contributor, and You become compliant prior to 30 days after
+Your receipt of the notice.
+
+5.2. If You initiate litigation against any entity by asserting a patent
+infringement claim (excluding declaratory judgment actions,
+counter-claims, and cross-claims) alleging that a Contributor Version
+directly or indirectly infringes any patent, then the rights granted to
+You by any and all Contributors for the Covered Software under Section
+2.1 of this License shall terminate.
+
+5.3. In the event of termination under Sections 5.1 or 5.2 above, all
+end user license agreements (excluding distributors and resellers) which
+have been validly granted by You or Your distributors under this License
+prior to termination shall survive termination.
+
+************************************************************************
+*                                                                      *
+*  6. Disclaimer of Warranty                                           *
+*  -------------------------                                           *
+*                                                                      *
+*  Covered Software is provided under this License on an "as is"       *
+*  basis, without warranty of any kind, either expressed, implied, or  *
+*  statutory, including, without limitation, warranties that the       *
+*  Covered Software is free of defects, merchantable, fit for a        *
+*  particular purpose or non-infringing. The entire risk as to the     *
+*  quality and performance of the Covered Software is with You.        *
+*  Should any Covered Software prove defective in any respect, You     *
+*  (not any Contributor) assume the cost of any necessary servicing,   *
+*  repair, or correction. This disclaimer of warranty constitutes an   *
+*  essential part of this License. No use of any Covered Software is   *
+*  authorized under this License except under this disclaimer.         *
+*                                                                      *
+************************************************************************
+
+************************************************************************
+*                                                                      *
+*  7. Limitation of Liability                                          *
+*  --------------------------                                          *
+*                                                                      *
+*  Under no circumstances and under no legal theory, whether tort      *
+*  (including negligence), contract, or otherwise, shall any           *
+*  Contributor, or anyone who distributes Covered Software as          *
+*  permitted above, be liable to You for any direct, indirect,         *
+*  special, incidental, or consequential damages of any character      *
+*  including, without limitation, damages for lost profits, loss of    *
+*  goodwill, work stoppage, computer failure or malfunction, or any    *
+*  and all other commercial damages or losses, even if such party      *
+*  shall have been informed of the possibility of such damages. This   *
+*  limitation of liability shall not apply to liability for death or   *
+*  personal injury resulting from such party's negligence to the       *
+*  extent applicable law prohibits such limitation. Some               *
+*  jurisdictions do not allow the exclusion or limitation of           *
+*  incidental or consequential damages, so this exclusion and          *
+*  limitation may not apply to You.                                    *
+*                                                                      *
+************************************************************************
+
+8. Litigation
+-------------
+
+Any litigation relating to this License may be brought only in the
+courts of a jurisdiction where the defendant maintains its principal
+place of business and such litigation shall be governed by laws of that
+jurisdiction, without reference to its conflict-of-law provisions.
+Nothing in this Section shall prevent a party's ability to bring
+cross-claims or counter-claims.
+
+9. Miscellaneous
+----------------
+
+This License represents the complete agreement concerning the subject
+matter hereof. If any provision of this License is held to be
+unenforceable, such provision shall be reformed only to the extent
+necessary to make it enforceable. Any law or regulation which provides
+that the language of a contract shall be construed against the drafter
+shall not be used to construe this License against a Contributor.
+
+10. Versions of the License
+---------------------------
+
+10.1. New Versions
+
+Mozilla Foundation is the license steward. Except as provided in Section
+10.3, no one other than the license steward has the right to modify or
+publish new versions of this License. Each version will be given a
+distinguishing version number.
+
+10.2. Effect of New Versions
+
+You may distribute the Covered Software under the terms of the version
+of the License under which You originally received the Covered Software,
+or under the terms of any subsequent version published by the license
+steward.
+
+10.3. Modified Versions
+
+If you create software not governed by this License, and you want to
+create a new license for such software, you may create and use a
+modified version of this License if you rename the license and remove
+any references to the name of the license steward (except to note that
+such modified license differs from this License).
+
+10.4. Distributing Source Code Form that is Incompatible With Secondary
+Licenses
+
+If You choose to distribute Source Code Form that is Incompatible With
+Secondary Licenses under the terms of this version of the License, the
+notice described in Exhibit B of this License must be attached.
+
+Exhibit A - Source Code Form License Notice
+-------------------------------------------
+
+  This Source Code Form is subject to the terms of the Mozilla Public
+  License, v. 2.0. If a copy of the MPL was not distributed with this
+  file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+If it is not possible or desirable to put the notice in a particular
+file, then You may include the notice in a location (such as a LICENSE
+file in a relevant directory) where a recipient would be likely to look
+for such a notice.
+
+You may add additional accurate notices of copyright ownership.
diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
@@ -0,0 +1,28 @@
+# gogol-androidmanagement
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+
+`0.3.0`
+
+
+## Description
+
+A client library for the Google Android Management.
+
+
+## Contribute
+
+For any problems, comments, or feedback please create an issue [here on GitHub](https://github.com/brendanhay/gogol/issues).
+
+> _Note:_ this library is an auto-generated Haskell package. Please see `gogol-gen` for more information.
+
+
+## Licence
+
+`gogol-androidmanagement` is released under the [Mozilla Public License Version 2.0](http://www.mozilla.org/MPL/).
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,2 @@
+import           Distribution.Simple
+main = defaultMain
diff --git a/gen/Network/Google/AndroidManagement.hs b/gen/Network/Google/AndroidManagement.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/AndroidManagement.hs
@@ -0,0 +1,768 @@
+{-# LANGUAGE DataKinds         #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE TypeOperators     #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+
+-- |
+-- Module      : Network.Google.AndroidManagement
+-- 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)
+--
+-- The Android Management API provides remote enterprise management of
+-- Android devices and apps.
+--
+-- /See:/ <https://developers.google.com/android/management Android Management API Reference>
+module Network.Google.AndroidManagement
+    (
+    -- * Service Configuration
+      androidManagementService
+
+    -- * OAuth Scopes
+    , androidManagementScope
+
+    -- * API Declaration
+    , AndroidManagementAPI
+
+    -- * Resources
+
+    -- ** androidmanagement.enterprises.applications.get
+    , module Network.Google.Resource.AndroidManagement.Enterprises.Applications.Get
+
+    -- ** androidmanagement.enterprises.create
+    , module Network.Google.Resource.AndroidManagement.Enterprises.Create
+
+    -- ** androidmanagement.enterprises.devices.delete
+    , module Network.Google.Resource.AndroidManagement.Enterprises.Devices.Delete
+
+    -- ** androidmanagement.enterprises.devices.get
+    , module Network.Google.Resource.AndroidManagement.Enterprises.Devices.Get
+
+    -- ** androidmanagement.enterprises.devices.issueCommand
+    , module Network.Google.Resource.AndroidManagement.Enterprises.Devices.IssueCommand
+
+    -- ** androidmanagement.enterprises.devices.list
+    , module Network.Google.Resource.AndroidManagement.Enterprises.Devices.List
+
+    -- ** androidmanagement.enterprises.devices.operations.cancel
+    , module Network.Google.Resource.AndroidManagement.Enterprises.Devices.Operations.Cancel
+
+    -- ** androidmanagement.enterprises.devices.operations.delete
+    , module Network.Google.Resource.AndroidManagement.Enterprises.Devices.Operations.Delete
+
+    -- ** androidmanagement.enterprises.devices.operations.get
+    , module Network.Google.Resource.AndroidManagement.Enterprises.Devices.Operations.Get
+
+    -- ** androidmanagement.enterprises.devices.operations.list
+    , module Network.Google.Resource.AndroidManagement.Enterprises.Devices.Operations.List
+
+    -- ** androidmanagement.enterprises.devices.patch
+    , module Network.Google.Resource.AndroidManagement.Enterprises.Devices.Patch
+
+    -- ** androidmanagement.enterprises.enrollmentTokens.create
+    , module Network.Google.Resource.AndroidManagement.Enterprises.EnrollmentTokens.Create
+
+    -- ** androidmanagement.enterprises.enrollmentTokens.delete
+    , module Network.Google.Resource.AndroidManagement.Enterprises.EnrollmentTokens.Delete
+
+    -- ** androidmanagement.enterprises.get
+    , module Network.Google.Resource.AndroidManagement.Enterprises.Get
+
+    -- ** androidmanagement.enterprises.patch
+    , module Network.Google.Resource.AndroidManagement.Enterprises.Patch
+
+    -- ** androidmanagement.enterprises.policies.delete
+    , module Network.Google.Resource.AndroidManagement.Enterprises.Policies.Delete
+
+    -- ** androidmanagement.enterprises.policies.get
+    , module Network.Google.Resource.AndroidManagement.Enterprises.Policies.Get
+
+    -- ** androidmanagement.enterprises.policies.list
+    , module Network.Google.Resource.AndroidManagement.Enterprises.Policies.List
+
+    -- ** androidmanagement.enterprises.policies.patch
+    , module Network.Google.Resource.AndroidManagement.Enterprises.Policies.Patch
+
+    -- ** androidmanagement.enterprises.webTokens.create
+    , module Network.Google.Resource.AndroidManagement.Enterprises.WebTokens.Create
+
+    -- ** androidmanagement.signupUrls.create
+    , module Network.Google.Resource.AndroidManagement.SignupURLs.Create
+
+    -- * Types
+
+    -- ** PowerManagementEventEventType
+    , PowerManagementEventEventType (..)
+
+    -- ** Status
+    , Status
+    , status
+    , sDetails
+    , sCode
+    , sMessage
+
+    -- ** SystemUpdateType
+    , SystemUpdateType (..)
+
+    -- ** ListPoliciesResponse
+    , ListPoliciesResponse
+    , listPoliciesResponse
+    , lprNextPageToken
+    , lprPolicies
+
+    -- ** MemoryInfo
+    , MemoryInfo
+    , memoryInfo
+    , miTotalInternalStorage
+    , miTotalRam
+
+    -- ** DeviceState
+    , DeviceState (..)
+
+    -- ** PackageNameList
+    , PackageNameList
+    , packageNameList
+    , pnlPackageNames
+
+    -- ** Command
+    , Command
+    , command
+    , cResetPasswordFlags
+    , cNewPassword
+    , cUserName
+    , cErrorCode
+    , cType
+    , cDuration
+    , cCreateTime
+
+    -- ** ListOperationsResponse
+    , ListOperationsResponse
+    , listOperationsResponse
+    , lorNextPageToken
+    , lorOperations
+
+    -- ** Display
+    , Display
+    , display
+    , dHeight
+    , dState
+    , dWidth
+    , dName
+    , dRefreshRate
+    , dDisplayId
+    , dDensity
+
+    -- ** AlwaysOnVPNPackage
+    , AlwaysOnVPNPackage
+    , alwaysOnVPNPackage
+    , aovpLockdownEnabled
+    , aovpPackageName
+
+    -- ** PolicyOpenNetworkConfiguration
+    , PolicyOpenNetworkConfiguration
+    , policyOpenNetworkConfiguration
+    , poncAddtional
+
+    -- ** CommandErrorCode
+    , CommandErrorCode (..)
+
+    -- ** HardwareStatus
+    , HardwareStatus
+    , hardwareStatus
+    , hsCPUTemperatures
+    , hsBatteryTemperatures
+    , hsGpuTemperatures
+    , hsFanSpeeds
+    , hsSkinTemperatures
+    , hsCPUUsages
+    , hsCreateTime
+
+    -- ** Application
+    , Application
+    , application
+    , aManagedProperties
+    , aName
+    , aPermissions
+    , aTitle
+
+    -- ** ManagedProperty
+    , ManagedProperty
+    , managedProperty
+    , mpEntries
+    , mpNestedProperties
+    , mpKey
+    , mpDefaultValue
+    , mpTitle
+    , mpType
+    , mpDescription
+
+    -- ** ProxyInfo
+    , ProxyInfo
+    , proxyInfo
+    , piPacURI
+    , piHost
+    , piExcludedHosts
+    , piPort
+
+    -- ** PermissionGrantPolicy
+    , PermissionGrantPolicy (..)
+
+    -- ** PersistentPreferredActivity
+    , PersistentPreferredActivity
+    , persistentPreferredActivity
+    , ppaActions
+    , ppaCategories
+    , ppaReceiverActivity
+
+    -- ** Operation
+    , Operation
+    , operation
+    , oDone
+    , oError
+    , oResponse
+    , oName
+    , oMetadata
+
+    -- ** Empty
+    , Empty
+    , empty
+
+    -- ** ExternalData
+    , ExternalData
+    , externalData
+    , edURL
+    , edSha256Hash
+
+    -- ** DisplayState
+    , DisplayState (..)
+
+    -- ** APILevelCondition
+    , APILevelCondition
+    , apiLevelCondition
+    , alcMinAPILevel
+
+    -- ** DeviceSettings
+    , DeviceSettings
+    , deviceSettings
+    , dsIsEncrypted
+    , dsAdbEnabled
+    , dsIsDeviceSecure
+    , dsVerifyAppsEnabled
+    , dsDevelopmentSettingsEnabled
+    , dsEncryptionStatus
+    , dsUnknownSourcesEnabled
+
+    -- ** PolicyPlayStoreMode
+    , PolicyPlayStoreMode (..)
+
+    -- ** ManagedConfigurationTemplateConfigurationVariables
+    , ManagedConfigurationTemplateConfigurationVariables
+    , managedConfigurationTemplateConfigurationVariables
+    , mctcvAddtional
+
+    -- ** DeviceManagementMode
+    , DeviceManagementMode (..)
+
+    -- ** HardwareInfo
+    , HardwareInfo
+    , hardwareInfo
+    , hiCPUThrottlingTemperatures
+    , hiManufacturer
+    , hiBrand
+    , hiCPUShutdownTemperatures
+    , hiBatteryThrottlingTemperatures
+    , hiModel
+    , hiBatteryShutdownTemperatures
+    , hiSkinThrottlingTemperatures
+    , hiGpuShutdownTemperatures
+    , hiGpuThrottlingTemperatures
+    , hiSkinShutdownTemperatures
+    , hiSerialNumber
+    , hiDeviceBasebandVersion
+    , hiHardware
+
+    -- ** Device
+    , Device
+    , device
+    , devMemoryInfo
+    , devPolicyCompliant
+    , devApplicationReports
+    , devPolicyName
+    , devState
+    , devAppliedPolicyName
+    , devLastStatusReportTime
+    , devDeviceSettings
+    , devEnrollmentTokenName
+    , devManagementMode
+    , devHardwareInfo
+    , devPowerManagementEvents
+    , devUserName
+    , devMemoryEvents
+    , devAPILevel
+    , devUser
+    , devDisabledReason
+    , devLastPolicyComplianceReportTime
+    , devEnrollmentTokenData
+    , devName
+    , devAppliedPolicyVersion
+    , devHardwareStatusSamples
+    , devAppliedState
+    , devPreviousDeviceNames
+    , devLastPolicySyncTime
+    , devNetworkInfo
+    , devNonComplianceDetails
+    , devSoftwareInfo
+    , devEnrollmentTime
+    , devDisplays
+
+    -- ** ApplicationReportApplicationSource
+    , ApplicationReportApplicationSource (..)
+
+    -- ** StatusDetailsItem
+    , StatusDetailsItem
+    , statusDetailsItem
+    , sdiAddtional
+
+    -- ** ApplicationPolicyInstallType
+    , ApplicationPolicyInstallType (..)
+
+    -- ** NonComplianceDetailInstallationFailureReason
+    , NonComplianceDetailInstallationFailureReason (..)
+
+    -- ** PasswordRequirementsPasswordScope
+    , PasswordRequirementsPasswordScope (..)
+
+    -- ** ManagedPropertyEntry
+    , ManagedPropertyEntry
+    , managedPropertyEntry
+    , mpeValue
+    , mpeName
+
+    -- ** DeviceSettingsEncryptionStatus
+    , DeviceSettingsEncryptionStatus (..)
+
+    -- ** PolicyLocationMode
+    , PolicyLocationMode (..)
+
+    -- ** ChoosePrivateKeyRule
+    , ChoosePrivateKeyRule
+    , choosePrivateKeyRule
+    , cpkrPrivateKeyAlias
+    , cpkrURLPattern
+    , cpkrPackageNames
+
+    -- ** UserFacingMessageLocalizedMessages
+    , UserFacingMessageLocalizedMessages
+    , userFacingMessageLocalizedMessages
+    , ufmlmAddtional
+
+    -- ** User
+    , User
+    , user
+    , uAccountIdentifier
+
+    -- ** SystemUpdate
+    , SystemUpdate
+    , systemUpdate
+    , suEndMinutes
+    , suStartMinutes
+    , suType
+
+    -- ** ApplicationReport
+    , ApplicationReport
+    , applicationReport
+    , arVersionCode
+    , arSigningKeyCertFingerprints
+    , arState
+    , arVersionName
+    , arPackageName
+    , arPackageSha256Hash
+    , arApplicationSource
+    , arEvents
+    , arDisplayName
+    , arInstallerPackageName
+
+    -- ** PolicyAppAutoUpdatePolicy
+    , PolicyAppAutoUpdatePolicy (..)
+
+    -- ** EnrollmentToken
+    , EnrollmentToken
+    , enrollmentToken
+    , etPolicyName
+    , etValue
+    , etQrCode
+    , etAdditionalData
+    , etUser
+    , etName
+    , etOneTimeOnly
+    , etExpirationTimestamp
+    , etDuration
+
+    -- ** ApplicationPolicyManagedConfiguration
+    , ApplicationPolicyManagedConfiguration
+    , applicationPolicyManagedConfiguration
+    , apmcAddtional
+
+    -- ** PolicyEncryptionPolicy
+    , PolicyEncryptionPolicy (..)
+
+    -- ** StatusReportingSettings
+    , StatusReportingSettings
+    , statusReportingSettings
+    , srsSoftwareInfoEnabled
+    , srsHardwareStatusEnabled
+    , srsPowerManagementEventsEnabled
+    , srsDisplayInfoEnabled
+    , srsApplicationReportsEnabled
+    , srsMemoryInfoEnabled
+    , srsNetworkInfoEnabled
+    , srsDeviceSettingsEnabled
+
+    -- ** CommandType
+    , CommandType (..)
+
+    -- ** ApplicationPolicyDefaultPermissionPolicy
+    , ApplicationPolicyDefaultPermissionPolicy (..)
+
+    -- ** Xgafv
+    , Xgafv (..)
+
+    -- ** ApplicationPolicy
+    , ApplicationPolicy
+    , applicationPolicy
+    , apDelegatedScopes
+    , apPackageName
+    , apManagedConfiguration
+    , apDefaultPermissionPolicy
+    , apDisabled
+    , apLockTaskAllowed
+    , apPermissionGrants
+    , apManagedConfigurationTemplate
+    , apMinimumVersionCode
+    , apInstallType
+
+    -- ** ManagedPropertyType
+    , ManagedPropertyType (..)
+
+    -- ** DeviceAppliedState
+    , DeviceAppliedState (..)
+
+    -- ** ApplicationEventEventType
+    , ApplicationEventEventType (..)
+
+    -- ** ListDevicesResponse
+    , ListDevicesResponse
+    , listDevicesResponse
+    , ldrNextPageToken
+    , ldrDevices
+
+    -- ** ManagedConfigurationTemplate
+    , ManagedConfigurationTemplate
+    , managedConfigurationTemplate
+    , mctTemplateId
+    , mctConfigurationVariables
+
+    -- ** NonComplianceDetailNonComplianceReason
+    , NonComplianceDetailNonComplianceReason (..)
+
+    -- ** Enterprise
+    , Enterprise
+    , enterprise
+    , eAppAutoApprovalEnabled
+    , eEnabledNotificationTypes
+    , eSigninDetails
+    , eName
+    , ePubsubTopic
+    , eEnterpriseDisplayName
+    , eLogo
+    , eTermsAndConditions
+    , ePrimaryColor
+
+    -- ** MemoryEvent
+    , MemoryEvent
+    , memoryEvent
+    , meByteCount
+    , meEventType
+    , meCreateTime
+
+    -- ** PermissionGrant
+    , PermissionGrant
+    , permissionGrant
+    , pgPolicy
+    , pgPermission
+
+    -- ** SigninDetail
+    , SigninDetail
+    , signinDetail
+    , sdSigninURL
+    , sdQrCode
+    , sdSigninEnrollmentToken
+
+    -- ** SignupURL
+    , SignupURL
+    , signupURL
+    , suURL
+    , suName
+
+    -- ** PolicyDefaultPermissionPolicy
+    , PolicyDefaultPermissionPolicy (..)
+
+    -- ** NetworkInfo
+    , NetworkInfo
+    , networkInfo
+    , niNetworkOperatorName
+    , niMeid
+    , niImei
+    , niWifiMACAddress
+
+    -- ** PowerManagementEvent
+    , PowerManagementEvent
+    , powerManagementEvent
+    , pmeBatteryLevel
+    , pmeEventType
+    , pmeCreateTime
+
+    -- ** Policy
+    , Policy
+    , policy
+    , pBluetoothConfigDisabled
+    , pUnmuteMicrophoneDisabled
+    , pMountPhysicalMediaDisabled
+    , pFrpAdminEmails
+    , pAppAutoUpdatePolicy
+    , pEncryptionPolicy
+    , pAndroidDevicePolicyTracks
+    , pSafeBootDisabled
+    , pAlwaysOnVPNPackage
+    , pChoosePrivateKeyRules
+    , pCredentialsConfigDisabled
+    , pRecommendedGlobalProxy
+    , pKeyguardDisabled
+    , pSkipFirstUseHintsEnabled
+    , pAdjustVolumeDisabled
+    , pDefaultPermissionPolicy
+    , pUninstallAppsDisabled
+    , pSetUserIconDisabled
+    , pPermittedInputMethods
+    , pScreenCaptureDisabled
+    , pAddUserDisabled
+    , pShareLocationDisabled
+    , pAutoTimeRequired
+    , pInstallAppsDisabled
+    , pCreateWindowsDisabled
+    , pNetworkResetDisabled
+    , pBluetoothContactSharingDisabled
+    , pPermissionGrants
+    , pShortSupportMessage
+    , pStayOnPluggedModes
+    , pDataRoamingDisabled
+    , pDebuggingFeaturesAllowed
+    , pKioskCustomLauncherEnabled
+    , pWifiConfigsLockdownEnabled
+    , pUsbMassStorageEnabled
+    , pNetworkEscapeHatchEnabled
+    , pSystemUpdate
+    , pInstallUnknownSourcesAllowed
+    , pName
+    , pPrivateKeySelectionEnabled
+    , pOutgoingCallsDisabled
+    , pStatusReportingSettings
+    , pRemoveUserDisabled
+    , pMobileNetworksConfigDisabled
+    , pVersion
+    , pEnsureVerifyAppsEnabled
+    , pSetWallpaperDisabled
+    , pVPNConfigDisabled
+    , pOpenNetworkConfiguration
+    , pModifyAccountsDisabled
+    , pBlockApplicationsEnabled
+    , pKeyguardDisabledFeatures
+    , pFunDisabled
+    , pSmsDisabled
+    , pMaximumTimeToLock
+    , pOutgoingBeamDisabled
+    , pStatusBarDisabled
+    , pCellBroadcastsConfigDisabled
+    , pDeviceOwnerLockScreenInfo
+    , pPlayStoreMode
+    , pComplianceRules
+    , pTetheringConfigDisabled
+    , pAccountTypesWithManagementDisabled
+    , pWifiConfigDisabled
+    , pPersistentPreferredActivities
+    , pPasswordRequirements
+    , pLongSupportMessage
+    , pLocationMode
+    , pBluetoothDisabled
+    , pUsbFileTransferDisabled
+    , pCameraDisabled
+    , pApplications
+    , pPasswordPolicies
+    , pFactoryResetDisabled
+
+    -- ** NonComplianceDetailCondition
+    , NonComplianceDetailCondition
+    , nonComplianceDetailCondition
+    , ncdcPackageName
+    , ncdcNonComplianceReason
+    , ncdcSettingName
+
+    -- ** OperationMetadata
+    , OperationMetadata
+    , operationMetadata
+    , omAddtional
+
+    -- ** WebToken
+    , WebToken
+    , webToken
+    , wtParentFrameURL
+    , wtValue
+    , wtName
+    , wtPermissions
+
+    -- ** ComplianceRule
+    , ComplianceRule
+    , complianceRule
+    , crAPILevelCondition
+    , crDisableApps
+    , crPackageNamesToDisable
+    , crNonComplianceDetailCondition
+
+    -- ** PasswordRequirements
+    , PasswordRequirements
+    , passwordRequirements
+    , prPasswordMinimumSymbols
+    , prMaximumFailedPasswordsForWipe
+    , prPasswordExpirationTimeout
+    , prPasswordMinimumNonLetter
+    , prPasswordHistoryLength
+    , prPasswordMinimumLetters
+    , prPasswordMinimumUpperCase
+    , prPasswordMinimumNumeric
+    , prPasswordQuality
+    , prPasswordMinimumLength
+    , prPasswordScope
+    , prPasswordMinimumLowerCase
+
+    -- ** ApplicationReportState
+    , ApplicationReportState (..)
+
+    -- ** NonComplianceDetail
+    , NonComplianceDetail
+    , nonComplianceDetail
+    , ncdFieldPath
+    , ncdPackageName
+    , ncdInstallationFailureReason
+    , ncdNonComplianceReason
+    , ncdSettingName
+    , ncdCurrentValue
+
+    -- ** NonComplianceDetailConditionNonComplianceReason
+    , NonComplianceDetailConditionNonComplianceReason (..)
+
+    -- ** ApplicationEvent
+    , ApplicationEvent
+    , applicationEvent
+    , aeEventType
+    , aeCreateTime
+
+    -- ** TermsAndConditions
+    , TermsAndConditions
+    , termsAndConditions
+    , tacContent
+    , tacHeader
+
+    -- ** OperationResponse
+    , OperationResponse
+    , operationResponse
+    , orAddtional
+
+    -- ** UserFacingMessage
+    , UserFacingMessage
+    , userFacingMessage
+    , ufmLocalizedMessages
+    , ufmDefaultMessage
+
+    -- ** SoftwareInfo
+    , SoftwareInfo
+    , softwareInfo
+    , siSecurityPatchLevel
+    , siAndroidDevicePolicyVersionName
+    , siDeviceKernelVersion
+    , siAndroidDevicePolicyVersionCode
+    , siDeviceBuildSignature
+    , siBootLoaderVersion
+    , siAndroidBuildTime
+    , siPrimaryLanguageCode
+    , siAndroidBuildNumber
+    , siAndroidVersion
+
+    -- ** MemoryEventEventType
+    , MemoryEventEventType (..)
+
+    -- ** ApplicationPermission
+    , ApplicationPermission
+    , applicationPermission
+    , apName
+    , apDescription
+    , apPermissionId
+
+    -- ** PasswordRequirementsPasswordQuality
+    , PasswordRequirementsPasswordQuality (..)
+    ) where
+
+import           Network.Google.AndroidManagement.Types
+import           Network.Google.Prelude
+import           Network.Google.Resource.AndroidManagement.Enterprises.Applications.Get
+import           Network.Google.Resource.AndroidManagement.Enterprises.Create
+import           Network.Google.Resource.AndroidManagement.Enterprises.Devices.Delete
+import           Network.Google.Resource.AndroidManagement.Enterprises.Devices.Get
+import           Network.Google.Resource.AndroidManagement.Enterprises.Devices.IssueCommand
+import           Network.Google.Resource.AndroidManagement.Enterprises.Devices.List
+import           Network.Google.Resource.AndroidManagement.Enterprises.Devices.Operations.Cancel
+import           Network.Google.Resource.AndroidManagement.Enterprises.Devices.Operations.Delete
+import           Network.Google.Resource.AndroidManagement.Enterprises.Devices.Operations.Get
+import           Network.Google.Resource.AndroidManagement.Enterprises.Devices.Operations.List
+import           Network.Google.Resource.AndroidManagement.Enterprises.Devices.Patch
+import           Network.Google.Resource.AndroidManagement.Enterprises.EnrollmentTokens.Create
+import           Network.Google.Resource.AndroidManagement.Enterprises.EnrollmentTokens.Delete
+import           Network.Google.Resource.AndroidManagement.Enterprises.Get
+import           Network.Google.Resource.AndroidManagement.Enterprises.Patch
+import           Network.Google.Resource.AndroidManagement.Enterprises.Policies.Delete
+import           Network.Google.Resource.AndroidManagement.Enterprises.Policies.Get
+import           Network.Google.Resource.AndroidManagement.Enterprises.Policies.List
+import           Network.Google.Resource.AndroidManagement.Enterprises.Policies.Patch
+import           Network.Google.Resource.AndroidManagement.Enterprises.WebTokens.Create
+import           Network.Google.Resource.AndroidManagement.SignupURLs.Create
+
+{- $resources
+TODO
+-}
+
+-- | Represents the entirety of the methods and resources available for the Android Management API service.
+type AndroidManagementAPI =
+     EnterprisesEnrollmentTokensCreateResource :<|>
+       EnterprisesEnrollmentTokensDeleteResource
+       :<|> EnterprisesWebTokensCreateResource
+       :<|> EnterprisesDevicesOperationsListResource
+       :<|> EnterprisesDevicesOperationsGetResource
+       :<|> EnterprisesDevicesOperationsCancelResource
+       :<|> EnterprisesDevicesOperationsDeleteResource
+       :<|> EnterprisesDevicesListResource
+       :<|> EnterprisesDevicesPatchResource
+       :<|> EnterprisesDevicesGetResource
+       :<|> EnterprisesDevicesIssueCommandResource
+       :<|> EnterprisesDevicesDeleteResource
+       :<|> EnterprisesPoliciesListResource
+       :<|> EnterprisesPoliciesPatchResource
+       :<|> EnterprisesPoliciesGetResource
+       :<|> EnterprisesPoliciesDeleteResource
+       :<|> EnterprisesApplicationsGetResource
+       :<|> EnterprisesPatchResource
+       :<|> EnterprisesGetResource
+       :<|> EnterprisesCreateResource
+       :<|> SignupURLsCreateResource
diff --git a/gen/Network/Google/AndroidManagement/Types.hs b/gen/Network/Google/AndroidManagement/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/AndroidManagement/Types.hs
@@ -0,0 +1,657 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Network.Google.AndroidManagement.Types
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.Google.AndroidManagement.Types
+    (
+    -- * Service Configuration
+      androidManagementService
+
+    -- * OAuth Scopes
+    , androidManagementScope
+
+    -- * PowerManagementEventEventType
+    , PowerManagementEventEventType (..)
+
+    -- * Status
+    , Status
+    , status
+    , sDetails
+    , sCode
+    , sMessage
+
+    -- * SystemUpdateType
+    , SystemUpdateType (..)
+
+    -- * ListPoliciesResponse
+    , ListPoliciesResponse
+    , listPoliciesResponse
+    , lprNextPageToken
+    , lprPolicies
+
+    -- * MemoryInfo
+    , MemoryInfo
+    , memoryInfo
+    , miTotalInternalStorage
+    , miTotalRam
+
+    -- * DeviceState
+    , DeviceState (..)
+
+    -- * PackageNameList
+    , PackageNameList
+    , packageNameList
+    , pnlPackageNames
+
+    -- * Command
+    , Command
+    , command
+    , cResetPasswordFlags
+    , cNewPassword
+    , cUserName
+    , cErrorCode
+    , cType
+    , cDuration
+    , cCreateTime
+
+    -- * ListOperationsResponse
+    , ListOperationsResponse
+    , listOperationsResponse
+    , lorNextPageToken
+    , lorOperations
+
+    -- * Display
+    , Display
+    , display
+    , dHeight
+    , dState
+    , dWidth
+    , dName
+    , dRefreshRate
+    , dDisplayId
+    , dDensity
+
+    -- * AlwaysOnVPNPackage
+    , AlwaysOnVPNPackage
+    , alwaysOnVPNPackage
+    , aovpLockdownEnabled
+    , aovpPackageName
+
+    -- * PolicyOpenNetworkConfiguration
+    , PolicyOpenNetworkConfiguration
+    , policyOpenNetworkConfiguration
+    , poncAddtional
+
+    -- * CommandErrorCode
+    , CommandErrorCode (..)
+
+    -- * HardwareStatus
+    , HardwareStatus
+    , hardwareStatus
+    , hsCPUTemperatures
+    , hsBatteryTemperatures
+    , hsGpuTemperatures
+    , hsFanSpeeds
+    , hsSkinTemperatures
+    , hsCPUUsages
+    , hsCreateTime
+
+    -- * Application
+    , Application
+    , application
+    , aManagedProperties
+    , aName
+    , aPermissions
+    , aTitle
+
+    -- * ManagedProperty
+    , ManagedProperty
+    , managedProperty
+    , mpEntries
+    , mpNestedProperties
+    , mpKey
+    , mpDefaultValue
+    , mpTitle
+    , mpType
+    , mpDescription
+
+    -- * ProxyInfo
+    , ProxyInfo
+    , proxyInfo
+    , piPacURI
+    , piHost
+    , piExcludedHosts
+    , piPort
+
+    -- * PermissionGrantPolicy
+    , PermissionGrantPolicy (..)
+
+    -- * PersistentPreferredActivity
+    , PersistentPreferredActivity
+    , persistentPreferredActivity
+    , ppaActions
+    , ppaCategories
+    , ppaReceiverActivity
+
+    -- * Operation
+    , Operation
+    , operation
+    , oDone
+    , oError
+    , oResponse
+    , oName
+    , oMetadata
+
+    -- * Empty
+    , Empty
+    , empty
+
+    -- * ExternalData
+    , ExternalData
+    , externalData
+    , edURL
+    , edSha256Hash
+
+    -- * DisplayState
+    , DisplayState (..)
+
+    -- * APILevelCondition
+    , APILevelCondition
+    , apiLevelCondition
+    , alcMinAPILevel
+
+    -- * DeviceSettings
+    , DeviceSettings
+    , deviceSettings
+    , dsIsEncrypted
+    , dsAdbEnabled
+    , dsIsDeviceSecure
+    , dsVerifyAppsEnabled
+    , dsDevelopmentSettingsEnabled
+    , dsEncryptionStatus
+    , dsUnknownSourcesEnabled
+
+    -- * PolicyPlayStoreMode
+    , PolicyPlayStoreMode (..)
+
+    -- * ManagedConfigurationTemplateConfigurationVariables
+    , ManagedConfigurationTemplateConfigurationVariables
+    , managedConfigurationTemplateConfigurationVariables
+    , mctcvAddtional
+
+    -- * DeviceManagementMode
+    , DeviceManagementMode (..)
+
+    -- * HardwareInfo
+    , HardwareInfo
+    , hardwareInfo
+    , hiCPUThrottlingTemperatures
+    , hiManufacturer
+    , hiBrand
+    , hiCPUShutdownTemperatures
+    , hiBatteryThrottlingTemperatures
+    , hiModel
+    , hiBatteryShutdownTemperatures
+    , hiSkinThrottlingTemperatures
+    , hiGpuShutdownTemperatures
+    , hiGpuThrottlingTemperatures
+    , hiSkinShutdownTemperatures
+    , hiSerialNumber
+    , hiDeviceBasebandVersion
+    , hiHardware
+
+    -- * Device
+    , Device
+    , device
+    , devMemoryInfo
+    , devPolicyCompliant
+    , devApplicationReports
+    , devPolicyName
+    , devState
+    , devAppliedPolicyName
+    , devLastStatusReportTime
+    , devDeviceSettings
+    , devEnrollmentTokenName
+    , devManagementMode
+    , devHardwareInfo
+    , devPowerManagementEvents
+    , devUserName
+    , devMemoryEvents
+    , devAPILevel
+    , devUser
+    , devDisabledReason
+    , devLastPolicyComplianceReportTime
+    , devEnrollmentTokenData
+    , devName
+    , devAppliedPolicyVersion
+    , devHardwareStatusSamples
+    , devAppliedState
+    , devPreviousDeviceNames
+    , devLastPolicySyncTime
+    , devNetworkInfo
+    , devNonComplianceDetails
+    , devSoftwareInfo
+    , devEnrollmentTime
+    , devDisplays
+
+    -- * ApplicationReportApplicationSource
+    , ApplicationReportApplicationSource (..)
+
+    -- * StatusDetailsItem
+    , StatusDetailsItem
+    , statusDetailsItem
+    , sdiAddtional
+
+    -- * ApplicationPolicyInstallType
+    , ApplicationPolicyInstallType (..)
+
+    -- * NonComplianceDetailInstallationFailureReason
+    , NonComplianceDetailInstallationFailureReason (..)
+
+    -- * PasswordRequirementsPasswordScope
+    , PasswordRequirementsPasswordScope (..)
+
+    -- * ManagedPropertyEntry
+    , ManagedPropertyEntry
+    , managedPropertyEntry
+    , mpeValue
+    , mpeName
+
+    -- * DeviceSettingsEncryptionStatus
+    , DeviceSettingsEncryptionStatus (..)
+
+    -- * PolicyLocationMode
+    , PolicyLocationMode (..)
+
+    -- * ChoosePrivateKeyRule
+    , ChoosePrivateKeyRule
+    , choosePrivateKeyRule
+    , cpkrPrivateKeyAlias
+    , cpkrURLPattern
+    , cpkrPackageNames
+
+    -- * UserFacingMessageLocalizedMessages
+    , UserFacingMessageLocalizedMessages
+    , userFacingMessageLocalizedMessages
+    , ufmlmAddtional
+
+    -- * User
+    , User
+    , user
+    , uAccountIdentifier
+
+    -- * SystemUpdate
+    , SystemUpdate
+    , systemUpdate
+    , suEndMinutes
+    , suStartMinutes
+    , suType
+
+    -- * ApplicationReport
+    , ApplicationReport
+    , applicationReport
+    , arVersionCode
+    , arSigningKeyCertFingerprints
+    , arState
+    , arVersionName
+    , arPackageName
+    , arPackageSha256Hash
+    , arApplicationSource
+    , arEvents
+    , arDisplayName
+    , arInstallerPackageName
+
+    -- * PolicyAppAutoUpdatePolicy
+    , PolicyAppAutoUpdatePolicy (..)
+
+    -- * EnrollmentToken
+    , EnrollmentToken
+    , enrollmentToken
+    , etPolicyName
+    , etValue
+    , etQrCode
+    , etAdditionalData
+    , etUser
+    , etName
+    , etOneTimeOnly
+    , etExpirationTimestamp
+    , etDuration
+
+    -- * ApplicationPolicyManagedConfiguration
+    , ApplicationPolicyManagedConfiguration
+    , applicationPolicyManagedConfiguration
+    , apmcAddtional
+
+    -- * PolicyEncryptionPolicy
+    , PolicyEncryptionPolicy (..)
+
+    -- * StatusReportingSettings
+    , StatusReportingSettings
+    , statusReportingSettings
+    , srsSoftwareInfoEnabled
+    , srsHardwareStatusEnabled
+    , srsPowerManagementEventsEnabled
+    , srsDisplayInfoEnabled
+    , srsApplicationReportsEnabled
+    , srsMemoryInfoEnabled
+    , srsNetworkInfoEnabled
+    , srsDeviceSettingsEnabled
+
+    -- * CommandType
+    , CommandType (..)
+
+    -- * ApplicationPolicyDefaultPermissionPolicy
+    , ApplicationPolicyDefaultPermissionPolicy (..)
+
+    -- * Xgafv
+    , Xgafv (..)
+
+    -- * ApplicationPolicy
+    , ApplicationPolicy
+    , applicationPolicy
+    , apDelegatedScopes
+    , apPackageName
+    , apManagedConfiguration
+    , apDefaultPermissionPolicy
+    , apDisabled
+    , apLockTaskAllowed
+    , apPermissionGrants
+    , apManagedConfigurationTemplate
+    , apMinimumVersionCode
+    , apInstallType
+
+    -- * ManagedPropertyType
+    , ManagedPropertyType (..)
+
+    -- * DeviceAppliedState
+    , DeviceAppliedState (..)
+
+    -- * ApplicationEventEventType
+    , ApplicationEventEventType (..)
+
+    -- * ListDevicesResponse
+    , ListDevicesResponse
+    , listDevicesResponse
+    , ldrNextPageToken
+    , ldrDevices
+
+    -- * ManagedConfigurationTemplate
+    , ManagedConfigurationTemplate
+    , managedConfigurationTemplate
+    , mctTemplateId
+    , mctConfigurationVariables
+
+    -- * NonComplianceDetailNonComplianceReason
+    , NonComplianceDetailNonComplianceReason (..)
+
+    -- * Enterprise
+    , Enterprise
+    , enterprise
+    , eAppAutoApprovalEnabled
+    , eEnabledNotificationTypes
+    , eSigninDetails
+    , eName
+    , ePubsubTopic
+    , eEnterpriseDisplayName
+    , eLogo
+    , eTermsAndConditions
+    , ePrimaryColor
+
+    -- * MemoryEvent
+    , MemoryEvent
+    , memoryEvent
+    , meByteCount
+    , meEventType
+    , meCreateTime
+
+    -- * PermissionGrant
+    , PermissionGrant
+    , permissionGrant
+    , pgPolicy
+    , pgPermission
+
+    -- * SigninDetail
+    , SigninDetail
+    , signinDetail
+    , sdSigninURL
+    , sdQrCode
+    , sdSigninEnrollmentToken
+
+    -- * SignupURL
+    , SignupURL
+    , signupURL
+    , suURL
+    , suName
+
+    -- * PolicyDefaultPermissionPolicy
+    , PolicyDefaultPermissionPolicy (..)
+
+    -- * NetworkInfo
+    , NetworkInfo
+    , networkInfo
+    , niNetworkOperatorName
+    , niMeid
+    , niImei
+    , niWifiMACAddress
+
+    -- * PowerManagementEvent
+    , PowerManagementEvent
+    , powerManagementEvent
+    , pmeBatteryLevel
+    , pmeEventType
+    , pmeCreateTime
+
+    -- * Policy
+    , Policy
+    , policy
+    , pBluetoothConfigDisabled
+    , pUnmuteMicrophoneDisabled
+    , pMountPhysicalMediaDisabled
+    , pFrpAdminEmails
+    , pAppAutoUpdatePolicy
+    , pEncryptionPolicy
+    , pAndroidDevicePolicyTracks
+    , pSafeBootDisabled
+    , pAlwaysOnVPNPackage
+    , pChoosePrivateKeyRules
+    , pCredentialsConfigDisabled
+    , pRecommendedGlobalProxy
+    , pKeyguardDisabled
+    , pSkipFirstUseHintsEnabled
+    , pAdjustVolumeDisabled
+    , pDefaultPermissionPolicy
+    , pUninstallAppsDisabled
+    , pSetUserIconDisabled
+    , pPermittedInputMethods
+    , pScreenCaptureDisabled
+    , pAddUserDisabled
+    , pShareLocationDisabled
+    , pAutoTimeRequired
+    , pInstallAppsDisabled
+    , pCreateWindowsDisabled
+    , pNetworkResetDisabled
+    , pBluetoothContactSharingDisabled
+    , pPermissionGrants
+    , pShortSupportMessage
+    , pStayOnPluggedModes
+    , pDataRoamingDisabled
+    , pDebuggingFeaturesAllowed
+    , pKioskCustomLauncherEnabled
+    , pWifiConfigsLockdownEnabled
+    , pUsbMassStorageEnabled
+    , pNetworkEscapeHatchEnabled
+    , pSystemUpdate
+    , pInstallUnknownSourcesAllowed
+    , pName
+    , pPrivateKeySelectionEnabled
+    , pOutgoingCallsDisabled
+    , pStatusReportingSettings
+    , pRemoveUserDisabled
+    , pMobileNetworksConfigDisabled
+    , pVersion
+    , pEnsureVerifyAppsEnabled
+    , pSetWallpaperDisabled
+    , pVPNConfigDisabled
+    , pOpenNetworkConfiguration
+    , pModifyAccountsDisabled
+    , pBlockApplicationsEnabled
+    , pKeyguardDisabledFeatures
+    , pFunDisabled
+    , pSmsDisabled
+    , pMaximumTimeToLock
+    , pOutgoingBeamDisabled
+    , pStatusBarDisabled
+    , pCellBroadcastsConfigDisabled
+    , pDeviceOwnerLockScreenInfo
+    , pPlayStoreMode
+    , pComplianceRules
+    , pTetheringConfigDisabled
+    , pAccountTypesWithManagementDisabled
+    , pWifiConfigDisabled
+    , pPersistentPreferredActivities
+    , pPasswordRequirements
+    , pLongSupportMessage
+    , pLocationMode
+    , pBluetoothDisabled
+    , pUsbFileTransferDisabled
+    , pCameraDisabled
+    , pApplications
+    , pPasswordPolicies
+    , pFactoryResetDisabled
+
+    -- * NonComplianceDetailCondition
+    , NonComplianceDetailCondition
+    , nonComplianceDetailCondition
+    , ncdcPackageName
+    , ncdcNonComplianceReason
+    , ncdcSettingName
+
+    -- * OperationMetadata
+    , OperationMetadata
+    , operationMetadata
+    , omAddtional
+
+    -- * WebToken
+    , WebToken
+    , webToken
+    , wtParentFrameURL
+    , wtValue
+    , wtName
+    , wtPermissions
+
+    -- * ComplianceRule
+    , ComplianceRule
+    , complianceRule
+    , crAPILevelCondition
+    , crDisableApps
+    , crPackageNamesToDisable
+    , crNonComplianceDetailCondition
+
+    -- * PasswordRequirements
+    , PasswordRequirements
+    , passwordRequirements
+    , prPasswordMinimumSymbols
+    , prMaximumFailedPasswordsForWipe
+    , prPasswordExpirationTimeout
+    , prPasswordMinimumNonLetter
+    , prPasswordHistoryLength
+    , prPasswordMinimumLetters
+    , prPasswordMinimumUpperCase
+    , prPasswordMinimumNumeric
+    , prPasswordQuality
+    , prPasswordMinimumLength
+    , prPasswordScope
+    , prPasswordMinimumLowerCase
+
+    -- * ApplicationReportState
+    , ApplicationReportState (..)
+
+    -- * NonComplianceDetail
+    , NonComplianceDetail
+    , nonComplianceDetail
+    , ncdFieldPath
+    , ncdPackageName
+    , ncdInstallationFailureReason
+    , ncdNonComplianceReason
+    , ncdSettingName
+    , ncdCurrentValue
+
+    -- * NonComplianceDetailConditionNonComplianceReason
+    , NonComplianceDetailConditionNonComplianceReason (..)
+
+    -- * ApplicationEvent
+    , ApplicationEvent
+    , applicationEvent
+    , aeEventType
+    , aeCreateTime
+
+    -- * TermsAndConditions
+    , TermsAndConditions
+    , termsAndConditions
+    , tacContent
+    , tacHeader
+
+    -- * OperationResponse
+    , OperationResponse
+    , operationResponse
+    , orAddtional
+
+    -- * UserFacingMessage
+    , UserFacingMessage
+    , userFacingMessage
+    , ufmLocalizedMessages
+    , ufmDefaultMessage
+
+    -- * SoftwareInfo
+    , SoftwareInfo
+    , softwareInfo
+    , siSecurityPatchLevel
+    , siAndroidDevicePolicyVersionName
+    , siDeviceKernelVersion
+    , siAndroidDevicePolicyVersionCode
+    , siDeviceBuildSignature
+    , siBootLoaderVersion
+    , siAndroidBuildTime
+    , siPrimaryLanguageCode
+    , siAndroidBuildNumber
+    , siAndroidVersion
+
+    -- * MemoryEventEventType
+    , MemoryEventEventType (..)
+
+    -- * ApplicationPermission
+    , ApplicationPermission
+    , applicationPermission
+    , apName
+    , apDescription
+    , apPermissionId
+
+    -- * PasswordRequirementsPasswordQuality
+    , PasswordRequirementsPasswordQuality (..)
+    ) where
+
+import           Network.Google.AndroidManagement.Types.Product
+import           Network.Google.AndroidManagement.Types.Sum
+import           Network.Google.Prelude
+
+-- | Default request referring to version 'v1' of the Android Management API. This contains the host and root path used as a starting point for constructing service requests.
+androidManagementService :: ServiceConfig
+androidManagementService
+  = defaultService (ServiceId "androidmanagement:v1")
+      "androidmanagement.googleapis.com"
+
+-- | Manage Android devices and apps for your customers
+androidManagementScope :: Proxy '["https://www.googleapis.com/auth/androidmanagement"]
+androidManagementScope = Proxy;
diff --git a/gen/Network/Google/AndroidManagement/Types/Product.hs b/gen/Network/Google/AndroidManagement/Types/Product.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/AndroidManagement/Types/Product.hs
@@ -0,0 +1,5707 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Network.Google.AndroidManagement.Types.Product
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.Google.AndroidManagement.Types.Product where
+
+import           Network.Google.AndroidManagement.Types.Sum
+import           Network.Google.Prelude
+
+-- | The Status type defines a logical error model that is suitable for
+-- different programming environments, including REST APIs and RPC APIs. It
+-- is used by gRPC (https:\/\/github.com\/grpc). The error model is
+-- designed to be: Simple to use and understand for most users Flexible
+-- enough to meet unexpected needsOverviewThe Status message contains three
+-- pieces of data: error code, error message, and error details. The error
+-- code should be an enum value of google.rpc.Code, but it may accept
+-- additional error codes if needed. The error message should be a
+-- developer-facing English message that helps developers understand and
+-- resolve the error. If a localized user-facing error message is needed,
+-- put the localized message in the error details or localize it in the
+-- client. The optional error details may contain arbitrary information
+-- about the error. There is a predefined set of error detail types in the
+-- package google.rpc that can be used for common error conditions.Language
+-- mappingThe Status message is the logical representation of the error
+-- model, but it is not necessarily the actual wire format. When the Status
+-- message is exposed in different client libraries and different wire
+-- protocols, it can be mapped differently. For example, it will likely be
+-- mapped to some exceptions in Java, but more likely mapped to some error
+-- codes in C.Other usesThe error model and the Status message can be used
+-- in a variety of environments, either with or without APIs, to provide a
+-- consistent developer experience across different environments.Example
+-- uses of this error model include: Partial errors. If a service needs to
+-- return partial errors to the client, it may embed the Status in the
+-- normal response to indicate the partial errors. Workflow errors. A
+-- typical workflow has multiple steps. Each step may have a Status message
+-- for error reporting. Batch operations. If a client uses batch request
+-- and batch response, the Status message should be used directly inside
+-- batch response, one for each error sub-response. Asynchronous
+-- operations. If an API call embeds asynchronous operation results in its
+-- response, the status of those operations should be represented directly
+-- using the Status message. Logging. If some API errors are stored in
+-- logs, the message Status could be used directly after any stripping
+-- needed for security\/privacy reasons.
+--
+-- /See:/ 'status' smart constructor.
+data Status = Status'
+    { _sDetails :: !(Maybe [StatusDetailsItem])
+    , _sCode    :: !(Maybe (Textual Int32))
+    , _sMessage :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Status' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sDetails'
+--
+-- * 'sCode'
+--
+-- * 'sMessage'
+status
+    :: Status
+status =
+    Status'
+    { _sDetails = Nothing
+    , _sCode = Nothing
+    , _sMessage = Nothing
+    }
+
+-- | A list of messages that carry the error details. There is a common set
+-- of message types for APIs to use.
+sDetails :: Lens' Status [StatusDetailsItem]
+sDetails
+  = lens _sDetails (\ s a -> s{_sDetails = a}) .
+      _Default
+      . _Coerce
+
+-- | The status code, which should be an enum value of google.rpc.Code.
+sCode :: Lens' Status (Maybe Int32)
+sCode
+  = lens _sCode (\ s a -> s{_sCode = a}) .
+      mapping _Coerce
+
+-- | A developer-facing error message, which should be in English. Any
+-- user-facing error message should be localized and sent in the
+-- google.rpc.Status.details field, or localized by the client.
+sMessage :: Lens' Status (Maybe Text)
+sMessage = lens _sMessage (\ s a -> s{_sMessage = a})
+
+instance FromJSON Status where
+        parseJSON
+          = withObject "Status"
+              (\ o ->
+                 Status' <$>
+                   (o .:? "details" .!= mempty) <*> (o .:? "code") <*>
+                     (o .:? "message"))
+
+instance ToJSON Status where
+        toJSON Status'{..}
+          = object
+              (catMaybes
+                 [("details" .=) <$> _sDetails,
+                  ("code" .=) <$> _sCode,
+                  ("message" .=) <$> _sMessage])
+
+-- | Response to a request to list policies for a given enterprise.
+--
+-- /See:/ 'listPoliciesResponse' smart constructor.
+data ListPoliciesResponse = ListPoliciesResponse'
+    { _lprNextPageToken :: !(Maybe Text)
+    , _lprPolicies      :: !(Maybe [Policy])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListPoliciesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lprNextPageToken'
+--
+-- * 'lprPolicies'
+listPoliciesResponse
+    :: ListPoliciesResponse
+listPoliciesResponse =
+    ListPoliciesResponse'
+    { _lprNextPageToken = Nothing
+    , _lprPolicies = Nothing
+    }
+
+-- | If there are more results, a token to retrieve next page of results.
+lprNextPageToken :: Lens' ListPoliciesResponse (Maybe Text)
+lprNextPageToken
+  = lens _lprNextPageToken
+      (\ s a -> s{_lprNextPageToken = a})
+
+-- | The list of policies.
+lprPolicies :: Lens' ListPoliciesResponse [Policy]
+lprPolicies
+  = lens _lprPolicies (\ s a -> s{_lprPolicies = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON ListPoliciesResponse where
+        parseJSON
+          = withObject "ListPoliciesResponse"
+              (\ o ->
+                 ListPoliciesResponse' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "policies" .!= mempty))
+
+instance ToJSON ListPoliciesResponse where
+        toJSON ListPoliciesResponse'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _lprNextPageToken,
+                  ("policies" .=) <$> _lprPolicies])
+
+-- | Information about device memory and storage.
+--
+-- /See:/ 'memoryInfo' smart constructor.
+data MemoryInfo = MemoryInfo'
+    { _miTotalInternalStorage :: !(Maybe (Textual Int64))
+    , _miTotalRam             :: !(Maybe (Textual Int64))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MemoryInfo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'miTotalInternalStorage'
+--
+-- * 'miTotalRam'
+memoryInfo
+    :: MemoryInfo
+memoryInfo =
+    MemoryInfo'
+    { _miTotalInternalStorage = Nothing
+    , _miTotalRam = Nothing
+    }
+
+-- | Total internal storage on device in bytes.
+miTotalInternalStorage :: Lens' MemoryInfo (Maybe Int64)
+miTotalInternalStorage
+  = lens _miTotalInternalStorage
+      (\ s a -> s{_miTotalInternalStorage = a})
+      . mapping _Coerce
+
+-- | Total RAM on device in bytes.
+miTotalRam :: Lens' MemoryInfo (Maybe Int64)
+miTotalRam
+  = lens _miTotalRam (\ s a -> s{_miTotalRam = a}) .
+      mapping _Coerce
+
+instance FromJSON MemoryInfo where
+        parseJSON
+          = withObject "MemoryInfo"
+              (\ o ->
+                 MemoryInfo' <$>
+                   (o .:? "totalInternalStorage") <*>
+                     (o .:? "totalRam"))
+
+instance ToJSON MemoryInfo where
+        toJSON MemoryInfo'{..}
+          = object
+              (catMaybes
+                 [("totalInternalStorage" .=) <$>
+                    _miTotalInternalStorage,
+                  ("totalRam" .=) <$> _miTotalRam])
+
+-- | A list of package names.
+--
+-- /See:/ 'packageNameList' smart constructor.
+newtype PackageNameList = PackageNameList'
+    { _pnlPackageNames :: Maybe [Text]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PackageNameList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pnlPackageNames'
+packageNameList
+    :: PackageNameList
+packageNameList =
+    PackageNameList'
+    { _pnlPackageNames = Nothing
+    }
+
+-- | A list of package names.
+pnlPackageNames :: Lens' PackageNameList [Text]
+pnlPackageNames
+  = lens _pnlPackageNames
+      (\ s a -> s{_pnlPackageNames = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON PackageNameList where
+        parseJSON
+          = withObject "PackageNameList"
+              (\ o ->
+                 PackageNameList' <$>
+                   (o .:? "packageNames" .!= mempty))
+
+instance ToJSON PackageNameList where
+        toJSON PackageNameList'{..}
+          = object
+              (catMaybes
+                 [("packageNames" .=) <$> _pnlPackageNames])
+
+-- | A command.
+--
+-- /See:/ 'command' smart constructor.
+data Command = Command'
+    { _cResetPasswordFlags :: !(Maybe [Text])
+    , _cNewPassword        :: !(Maybe Text)
+    , _cUserName           :: !(Maybe Text)
+    , _cErrorCode          :: !(Maybe CommandErrorCode)
+    , _cType               :: !(Maybe CommandType)
+    , _cDuration           :: !(Maybe GDuration)
+    , _cCreateTime         :: !(Maybe DateTime')
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Command' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cResetPasswordFlags'
+--
+-- * 'cNewPassword'
+--
+-- * 'cUserName'
+--
+-- * 'cErrorCode'
+--
+-- * 'cType'
+--
+-- * 'cDuration'
+--
+-- * 'cCreateTime'
+command
+    :: Command
+command =
+    Command'
+    { _cResetPasswordFlags = Nothing
+    , _cNewPassword = Nothing
+    , _cUserName = Nothing
+    , _cErrorCode = Nothing
+    , _cType = Nothing
+    , _cDuration = Nothing
+    , _cCreateTime = Nothing
+    }
+
+-- | For commands of type RESET_PASSWORD, optionally specifies flags.
+cResetPasswordFlags :: Lens' Command [Text]
+cResetPasswordFlags
+  = lens _cResetPasswordFlags
+      (\ s a -> s{_cResetPasswordFlags = a})
+      . _Default
+      . _Coerce
+
+-- | For commands of type RESET_PASSWORD, optionally specifies the new
+-- password.
+cNewPassword :: Lens' Command (Maybe Text)
+cNewPassword
+  = lens _cNewPassword (\ s a -> s{_cNewPassword = a})
+
+-- | The resource name of the user that owns the device in the form
+-- enterprises\/{enterpriseId}\/users\/{userId}. This is automatically
+-- generated by the server based on the device the command is sent to.
+cUserName :: Lens' Command (Maybe Text)
+cUserName
+  = lens _cUserName (\ s a -> s{_cUserName = a})
+
+-- | If the command failed, an error code explaining the failure. This is not
+-- set when the command is cancelled by the caller.
+cErrorCode :: Lens' Command (Maybe CommandErrorCode)
+cErrorCode
+  = lens _cErrorCode (\ s a -> s{_cErrorCode = a})
+
+-- | The type of the command.
+cType :: Lens' Command (Maybe CommandType)
+cType = lens _cType (\ s a -> s{_cType = a})
+
+-- | The duration for which the command is valid. The command will expire if
+-- not executed by the device during this time. The default duration if
+-- unspecified is ten minutes. There is no maximum duration.
+cDuration :: Lens' Command (Maybe Scientific)
+cDuration
+  = lens _cDuration (\ s a -> s{_cDuration = a}) .
+      mapping _GDuration
+
+-- | The timestamp at which the command was created. The timestamp is
+-- automatically generated by the server.
+cCreateTime :: Lens' Command (Maybe UTCTime)
+cCreateTime
+  = lens _cCreateTime (\ s a -> s{_cCreateTime = a}) .
+      mapping _DateTime
+
+instance FromJSON Command where
+        parseJSON
+          = withObject "Command"
+              (\ o ->
+                 Command' <$>
+                   (o .:? "resetPasswordFlags" .!= mempty) <*>
+                     (o .:? "newPassword")
+                     <*> (o .:? "userName")
+                     <*> (o .:? "errorCode")
+                     <*> (o .:? "type")
+                     <*> (o .:? "duration")
+                     <*> (o .:? "createTime"))
+
+instance ToJSON Command where
+        toJSON Command'{..}
+          = object
+              (catMaybes
+                 [("resetPasswordFlags" .=) <$> _cResetPasswordFlags,
+                  ("newPassword" .=) <$> _cNewPassword,
+                  ("userName" .=) <$> _cUserName,
+                  ("errorCode" .=) <$> _cErrorCode,
+                  ("type" .=) <$> _cType,
+                  ("duration" .=) <$> _cDuration,
+                  ("createTime" .=) <$> _cCreateTime])
+
+-- | The response message for Operations.ListOperations.
+--
+-- /See:/ 'listOperationsResponse' smart constructor.
+data ListOperationsResponse = ListOperationsResponse'
+    { _lorNextPageToken :: !(Maybe Text)
+    , _lorOperations    :: !(Maybe [Operation])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListOperationsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lorNextPageToken'
+--
+-- * 'lorOperations'
+listOperationsResponse
+    :: ListOperationsResponse
+listOperationsResponse =
+    ListOperationsResponse'
+    { _lorNextPageToken = Nothing
+    , _lorOperations = Nothing
+    }
+
+-- | The standard List next-page token.
+lorNextPageToken :: Lens' ListOperationsResponse (Maybe Text)
+lorNextPageToken
+  = lens _lorNextPageToken
+      (\ s a -> s{_lorNextPageToken = a})
+
+-- | A list of operations that matches the specified filter in the request.
+lorOperations :: Lens' ListOperationsResponse [Operation]
+lorOperations
+  = lens _lorOperations
+      (\ s a -> s{_lorOperations = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON ListOperationsResponse where
+        parseJSON
+          = withObject "ListOperationsResponse"
+              (\ o ->
+                 ListOperationsResponse' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "operations" .!= mempty))
+
+instance ToJSON ListOperationsResponse where
+        toJSON ListOperationsResponse'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _lorNextPageToken,
+                  ("operations" .=) <$> _lorOperations])
+
+-- | Device display information.
+--
+-- /See:/ 'display' smart constructor.
+data Display = Display'
+    { _dHeight      :: !(Maybe (Textual Int32))
+    , _dState       :: !(Maybe DisplayState)
+    , _dWidth       :: !(Maybe (Textual Int32))
+    , _dName        :: !(Maybe Text)
+    , _dRefreshRate :: !(Maybe (Textual Int32))
+    , _dDisplayId   :: !(Maybe (Textual Int32))
+    , _dDensity     :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Display' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dHeight'
+--
+-- * 'dState'
+--
+-- * 'dWidth'
+--
+-- * 'dName'
+--
+-- * 'dRefreshRate'
+--
+-- * 'dDisplayId'
+--
+-- * 'dDensity'
+display
+    :: Display
+display =
+    Display'
+    { _dHeight = Nothing
+    , _dState = Nothing
+    , _dWidth = Nothing
+    , _dName = Nothing
+    , _dRefreshRate = Nothing
+    , _dDisplayId = Nothing
+    , _dDensity = Nothing
+    }
+
+-- | Display height in pixels.
+dHeight :: Lens' Display (Maybe Int32)
+dHeight
+  = lens _dHeight (\ s a -> s{_dHeight = a}) .
+      mapping _Coerce
+
+-- | State of the display.
+dState :: Lens' Display (Maybe DisplayState)
+dState = lens _dState (\ s a -> s{_dState = a})
+
+-- | Display width in pixels.
+dWidth :: Lens' Display (Maybe Int32)
+dWidth
+  = lens _dWidth (\ s a -> s{_dWidth = a}) .
+      mapping _Coerce
+
+-- | Name of the display.
+dName :: Lens' Display (Maybe Text)
+dName = lens _dName (\ s a -> s{_dName = a})
+
+-- | Refresh rate of the display in frames per second.
+dRefreshRate :: Lens' Display (Maybe Int32)
+dRefreshRate
+  = lens _dRefreshRate (\ s a -> s{_dRefreshRate = a})
+      . mapping _Coerce
+
+-- | Unique display id.
+dDisplayId :: Lens' Display (Maybe Int32)
+dDisplayId
+  = lens _dDisplayId (\ s a -> s{_dDisplayId = a}) .
+      mapping _Coerce
+
+-- | Display density expressed as dots-per-inch.
+dDensity :: Lens' Display (Maybe Int32)
+dDensity
+  = lens _dDensity (\ s a -> s{_dDensity = a}) .
+      mapping _Coerce
+
+instance FromJSON Display where
+        parseJSON
+          = withObject "Display"
+              (\ o ->
+                 Display' <$>
+                   (o .:? "height") <*> (o .:? "state") <*>
+                     (o .:? "width")
+                     <*> (o .:? "name")
+                     <*> (o .:? "refreshRate")
+                     <*> (o .:? "displayId")
+                     <*> (o .:? "density"))
+
+instance ToJSON Display where
+        toJSON Display'{..}
+          = object
+              (catMaybes
+                 [("height" .=) <$> _dHeight,
+                  ("state" .=) <$> _dState, ("width" .=) <$> _dWidth,
+                  ("name" .=) <$> _dName,
+                  ("refreshRate" .=) <$> _dRefreshRate,
+                  ("displayId" .=) <$> _dDisplayId,
+                  ("density" .=) <$> _dDensity])
+
+-- | Configuration for an always-on VPN connection.
+--
+-- /See:/ 'alwaysOnVPNPackage' smart constructor.
+data AlwaysOnVPNPackage = AlwaysOnVPNPackage'
+    { _aovpLockdownEnabled :: !(Maybe Bool)
+    , _aovpPackageName     :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AlwaysOnVPNPackage' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aovpLockdownEnabled'
+--
+-- * 'aovpPackageName'
+alwaysOnVPNPackage
+    :: AlwaysOnVPNPackage
+alwaysOnVPNPackage =
+    AlwaysOnVPNPackage'
+    { _aovpLockdownEnabled = Nothing
+    , _aovpPackageName = Nothing
+    }
+
+-- | Disallows networking when the VPN is not connected.
+aovpLockdownEnabled :: Lens' AlwaysOnVPNPackage (Maybe Bool)
+aovpLockdownEnabled
+  = lens _aovpLockdownEnabled
+      (\ s a -> s{_aovpLockdownEnabled = a})
+
+-- | The package name of the VPN app.
+aovpPackageName :: Lens' AlwaysOnVPNPackage (Maybe Text)
+aovpPackageName
+  = lens _aovpPackageName
+      (\ s a -> s{_aovpPackageName = a})
+
+instance FromJSON AlwaysOnVPNPackage where
+        parseJSON
+          = withObject "AlwaysOnVPNPackage"
+              (\ o ->
+                 AlwaysOnVPNPackage' <$>
+                   (o .:? "lockdownEnabled") <*> (o .:? "packageName"))
+
+instance ToJSON AlwaysOnVPNPackage where
+        toJSON AlwaysOnVPNPackage'{..}
+          = object
+              (catMaybes
+                 [("lockdownEnabled" .=) <$> _aovpLockdownEnabled,
+                  ("packageName" .=) <$> _aovpPackageName])
+
+-- | Network configuration for the device. See configure networks for more
+-- information.
+--
+-- /See:/ 'policyOpenNetworkConfiguration' smart constructor.
+newtype PolicyOpenNetworkConfiguration = PolicyOpenNetworkConfiguration'
+    { _poncAddtional :: HashMap Text JSONValue
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PolicyOpenNetworkConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'poncAddtional'
+policyOpenNetworkConfiguration
+    :: HashMap Text JSONValue -- ^ 'poncAddtional'
+    -> PolicyOpenNetworkConfiguration
+policyOpenNetworkConfiguration pPoncAddtional_ =
+    PolicyOpenNetworkConfiguration'
+    { _poncAddtional = _Coerce # pPoncAddtional_
+    }
+
+-- | Properties of the object.
+poncAddtional :: Lens' PolicyOpenNetworkConfiguration (HashMap Text JSONValue)
+poncAddtional
+  = lens _poncAddtional
+      (\ s a -> s{_poncAddtional = a})
+      . _Coerce
+
+instance FromJSON PolicyOpenNetworkConfiguration
+         where
+        parseJSON
+          = withObject "PolicyOpenNetworkConfiguration"
+              (\ o ->
+                 PolicyOpenNetworkConfiguration' <$>
+                   (parseJSONObject o))
+
+instance ToJSON PolicyOpenNetworkConfiguration where
+        toJSON = toJSON . _poncAddtional
+
+-- | Hardware status. Temperatures may be compared to the temperature
+-- thresholds available in hardwareInfo to determine hardware health.
+--
+-- /See:/ 'hardwareStatus' smart constructor.
+data HardwareStatus = HardwareStatus'
+    { _hsCPUTemperatures     :: !(Maybe [Textual Double])
+    , _hsBatteryTemperatures :: !(Maybe [Textual Double])
+    , _hsGpuTemperatures     :: !(Maybe [Textual Double])
+    , _hsFanSpeeds           :: !(Maybe [Textual Double])
+    , _hsSkinTemperatures    :: !(Maybe [Textual Double])
+    , _hsCPUUsages           :: !(Maybe [Textual Double])
+    , _hsCreateTime          :: !(Maybe DateTime')
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'HardwareStatus' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'hsCPUTemperatures'
+--
+-- * 'hsBatteryTemperatures'
+--
+-- * 'hsGpuTemperatures'
+--
+-- * 'hsFanSpeeds'
+--
+-- * 'hsSkinTemperatures'
+--
+-- * 'hsCPUUsages'
+--
+-- * 'hsCreateTime'
+hardwareStatus
+    :: HardwareStatus
+hardwareStatus =
+    HardwareStatus'
+    { _hsCPUTemperatures = Nothing
+    , _hsBatteryTemperatures = Nothing
+    , _hsGpuTemperatures = Nothing
+    , _hsFanSpeeds = Nothing
+    , _hsSkinTemperatures = Nothing
+    , _hsCPUUsages = Nothing
+    , _hsCreateTime = Nothing
+    }
+
+-- | Current CPU temperatures in Celsius for each CPU on the device.
+hsCPUTemperatures :: Lens' HardwareStatus [Double]
+hsCPUTemperatures
+  = lens _hsCPUTemperatures
+      (\ s a -> s{_hsCPUTemperatures = a})
+      . _Default
+      . _Coerce
+
+-- | Current battery temperatures in Celsius for each battery on the device.
+hsBatteryTemperatures :: Lens' HardwareStatus [Double]
+hsBatteryTemperatures
+  = lens _hsBatteryTemperatures
+      (\ s a -> s{_hsBatteryTemperatures = a})
+      . _Default
+      . _Coerce
+
+-- | Current GPU temperatures in Celsius for each GPU on the device.
+hsGpuTemperatures :: Lens' HardwareStatus [Double]
+hsGpuTemperatures
+  = lens _hsGpuTemperatures
+      (\ s a -> s{_hsGpuTemperatures = a})
+      . _Default
+      . _Coerce
+
+-- | Fan speeds in RPM for each fan on the device. Empty array means that
+-- there are no fans or fan speed is not supported on the system.
+hsFanSpeeds :: Lens' HardwareStatus [Double]
+hsFanSpeeds
+  = lens _hsFanSpeeds (\ s a -> s{_hsFanSpeeds = a}) .
+      _Default
+      . _Coerce
+
+-- | Current device skin temperatures in Celsius.
+hsSkinTemperatures :: Lens' HardwareStatus [Double]
+hsSkinTemperatures
+  = lens _hsSkinTemperatures
+      (\ s a -> s{_hsSkinTemperatures = a})
+      . _Default
+      . _Coerce
+
+-- | CPU usages in percentage for each core available on the device. Usage is
+-- 0 for each unplugged core. Empty array implies that CPU usage is not
+-- supported in the system.
+hsCPUUsages :: Lens' HardwareStatus [Double]
+hsCPUUsages
+  = lens _hsCPUUsages (\ s a -> s{_hsCPUUsages = a}) .
+      _Default
+      . _Coerce
+
+-- | The time the measurements were taken.
+hsCreateTime :: Lens' HardwareStatus (Maybe UTCTime)
+hsCreateTime
+  = lens _hsCreateTime (\ s a -> s{_hsCreateTime = a})
+      . mapping _DateTime
+
+instance FromJSON HardwareStatus where
+        parseJSON
+          = withObject "HardwareStatus"
+              (\ o ->
+                 HardwareStatus' <$>
+                   (o .:? "cpuTemperatures" .!= mempty) <*>
+                     (o .:? "batteryTemperatures" .!= mempty)
+                     <*> (o .:? "gpuTemperatures" .!= mempty)
+                     <*> (o .:? "fanSpeeds" .!= mempty)
+                     <*> (o .:? "skinTemperatures" .!= mempty)
+                     <*> (o .:? "cpuUsages" .!= mempty)
+                     <*> (o .:? "createTime"))
+
+instance ToJSON HardwareStatus where
+        toJSON HardwareStatus'{..}
+          = object
+              (catMaybes
+                 [("cpuTemperatures" .=) <$> _hsCPUTemperatures,
+                  ("batteryTemperatures" .=) <$>
+                    _hsBatteryTemperatures,
+                  ("gpuTemperatures" .=) <$> _hsGpuTemperatures,
+                  ("fanSpeeds" .=) <$> _hsFanSpeeds,
+                  ("skinTemperatures" .=) <$> _hsSkinTemperatures,
+                  ("cpuUsages" .=) <$> _hsCPUUsages,
+                  ("createTime" .=) <$> _hsCreateTime])
+
+-- | Information about an app.
+--
+-- /See:/ 'application' smart constructor.
+data Application = Application'
+    { _aManagedProperties :: !(Maybe [ManagedProperty])
+    , _aName              :: !(Maybe Text)
+    , _aPermissions       :: !(Maybe [ApplicationPermission])
+    , _aTitle             :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Application' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aManagedProperties'
+--
+-- * 'aName'
+--
+-- * 'aPermissions'
+--
+-- * 'aTitle'
+application
+    :: Application
+application =
+    Application'
+    { _aManagedProperties = Nothing
+    , _aName = Nothing
+    , _aPermissions = Nothing
+    , _aTitle = Nothing
+    }
+
+-- | The set of managed properties available to be pre-configured for the
+-- app.
+aManagedProperties :: Lens' Application [ManagedProperty]
+aManagedProperties
+  = lens _aManagedProperties
+      (\ s a -> s{_aManagedProperties = a})
+      . _Default
+      . _Coerce
+
+-- | The name of the app in the form
+-- enterprises\/{enterpriseId}\/applications\/{package_name}.
+aName :: Lens' Application (Maybe Text)
+aName = lens _aName (\ s a -> s{_aName = a})
+
+-- | The permissions required by the app.
+aPermissions :: Lens' Application [ApplicationPermission]
+aPermissions
+  = lens _aPermissions (\ s a -> s{_aPermissions = a})
+      . _Default
+      . _Coerce
+
+-- | The title of the app. Localized.
+aTitle :: Lens' Application (Maybe Text)
+aTitle = lens _aTitle (\ s a -> s{_aTitle = a})
+
+instance FromJSON Application where
+        parseJSON
+          = withObject "Application"
+              (\ o ->
+                 Application' <$>
+                   (o .:? "managedProperties" .!= mempty) <*>
+                     (o .:? "name")
+                     <*> (o .:? "permissions" .!= mempty)
+                     <*> (o .:? "title"))
+
+instance ToJSON Application where
+        toJSON Application'{..}
+          = object
+              (catMaybes
+                 [("managedProperties" .=) <$> _aManagedProperties,
+                  ("name" .=) <$> _aName,
+                  ("permissions" .=) <$> _aPermissions,
+                  ("title" .=) <$> _aTitle])
+
+-- | Managed property.
+--
+-- /See:/ 'managedProperty' smart constructor.
+data ManagedProperty = ManagedProperty'
+    { _mpEntries          :: !(Maybe [ManagedPropertyEntry])
+    , _mpNestedProperties :: !(Maybe [ManagedProperty])
+    , _mpKey              :: !(Maybe Text)
+    , _mpDefaultValue     :: !(Maybe JSONValue)
+    , _mpTitle            :: !(Maybe Text)
+    , _mpType             :: !(Maybe ManagedPropertyType)
+    , _mpDescription      :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ManagedProperty' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mpEntries'
+--
+-- * 'mpNestedProperties'
+--
+-- * 'mpKey'
+--
+-- * 'mpDefaultValue'
+--
+-- * 'mpTitle'
+--
+-- * 'mpType'
+--
+-- * 'mpDescription'
+managedProperty
+    :: ManagedProperty
+managedProperty =
+    ManagedProperty'
+    { _mpEntries = Nothing
+    , _mpNestedProperties = Nothing
+    , _mpKey = Nothing
+    , _mpDefaultValue = Nothing
+    , _mpTitle = Nothing
+    , _mpType = Nothing
+    , _mpDescription = Nothing
+    }
+
+-- | For CHOICE or MULTISELECT properties, the list of possible entries.
+mpEntries :: Lens' ManagedProperty [ManagedPropertyEntry]
+mpEntries
+  = lens _mpEntries (\ s a -> s{_mpEntries = a}) .
+      _Default
+      . _Coerce
+
+-- | For BUNDLE_ARRAY properties, the list of nested properties. A
+-- BUNDLE_ARRAY property is at most two levels deep.
+mpNestedProperties :: Lens' ManagedProperty [ManagedProperty]
+mpNestedProperties
+  = lens _mpNestedProperties
+      (\ s a -> s{_mpNestedProperties = a})
+      . _Default
+      . _Coerce
+
+-- | The unique key that the app uses to identify the property, e.g.
+-- \"com.google.android.gm.fieldname\".
+mpKey :: Lens' ManagedProperty (Maybe Text)
+mpKey = lens _mpKey (\ s a -> s{_mpKey = a})
+
+-- | The default value of the property. BUNDLE_ARRAY properties don\'t have a
+-- default value.
+mpDefaultValue :: Lens' ManagedProperty (Maybe JSONValue)
+mpDefaultValue
+  = lens _mpDefaultValue
+      (\ s a -> s{_mpDefaultValue = a})
+
+-- | The name of the property. Localized.
+mpTitle :: Lens' ManagedProperty (Maybe Text)
+mpTitle = lens _mpTitle (\ s a -> s{_mpTitle = a})
+
+-- | The type of the property.
+mpType :: Lens' ManagedProperty (Maybe ManagedPropertyType)
+mpType = lens _mpType (\ s a -> s{_mpType = a})
+
+-- | A longer description of the property, providing more detail of what it
+-- affects. Localized.
+mpDescription :: Lens' ManagedProperty (Maybe Text)
+mpDescription
+  = lens _mpDescription
+      (\ s a -> s{_mpDescription = a})
+
+instance FromJSON ManagedProperty where
+        parseJSON
+          = withObject "ManagedProperty"
+              (\ o ->
+                 ManagedProperty' <$>
+                   (o .:? "entries" .!= mempty) <*>
+                     (o .:? "nestedProperties" .!= mempty)
+                     <*> (o .:? "key")
+                     <*> (o .:? "defaultValue")
+                     <*> (o .:? "title")
+                     <*> (o .:? "type")
+                     <*> (o .:? "description"))
+
+instance ToJSON ManagedProperty where
+        toJSON ManagedProperty'{..}
+          = object
+              (catMaybes
+                 [("entries" .=) <$> _mpEntries,
+                  ("nestedProperties" .=) <$> _mpNestedProperties,
+                  ("key" .=) <$> _mpKey,
+                  ("defaultValue" .=) <$> _mpDefaultValue,
+                  ("title" .=) <$> _mpTitle, ("type" .=) <$> _mpType,
+                  ("description" .=) <$> _mpDescription])
+
+-- | Configuration info for an HTTP proxy. For a direct proxy, set the host,
+-- port, and excluded_hosts fields. For a PAC script proxy, set the pac_uri
+-- field.
+--
+-- /See:/ 'proxyInfo' smart constructor.
+data ProxyInfo = ProxyInfo'
+    { _piPacURI        :: !(Maybe Text)
+    , _piHost          :: !(Maybe Text)
+    , _piExcludedHosts :: !(Maybe [Text])
+    , _piPort          :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProxyInfo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'piPacURI'
+--
+-- * 'piHost'
+--
+-- * 'piExcludedHosts'
+--
+-- * 'piPort'
+proxyInfo
+    :: ProxyInfo
+proxyInfo =
+    ProxyInfo'
+    { _piPacURI = Nothing
+    , _piHost = Nothing
+    , _piExcludedHosts = Nothing
+    , _piPort = Nothing
+    }
+
+-- | The URI of the PAC script used to configure the proxy.
+piPacURI :: Lens' ProxyInfo (Maybe Text)
+piPacURI = lens _piPacURI (\ s a -> s{_piPacURI = a})
+
+-- | The host of the direct proxy.
+piHost :: Lens' ProxyInfo (Maybe Text)
+piHost = lens _piHost (\ s a -> s{_piHost = a})
+
+-- | For a direct proxy, the hosts for which the proxy is bypassed. The host
+-- names may contain wildcards such as *.example.com.
+piExcludedHosts :: Lens' ProxyInfo [Text]
+piExcludedHosts
+  = lens _piExcludedHosts
+      (\ s a -> s{_piExcludedHosts = a})
+      . _Default
+      . _Coerce
+
+-- | The port of the direct proxy.
+piPort :: Lens' ProxyInfo (Maybe Int32)
+piPort
+  = lens _piPort (\ s a -> s{_piPort = a}) .
+      mapping _Coerce
+
+instance FromJSON ProxyInfo where
+        parseJSON
+          = withObject "ProxyInfo"
+              (\ o ->
+                 ProxyInfo' <$>
+                   (o .:? "pacUri") <*> (o .:? "host") <*>
+                     (o .:? "excludedHosts" .!= mempty)
+                     <*> (o .:? "port"))
+
+instance ToJSON ProxyInfo where
+        toJSON ProxyInfo'{..}
+          = object
+              (catMaybes
+                 [("pacUri" .=) <$> _piPacURI,
+                  ("host" .=) <$> _piHost,
+                  ("excludedHosts" .=) <$> _piExcludedHosts,
+                  ("port" .=) <$> _piPort])
+
+-- | A default activity for handling intents that match a particular intent
+-- filter.
+--
+-- /See:/ 'persistentPreferredActivity' smart constructor.
+data PersistentPreferredActivity = PersistentPreferredActivity'
+    { _ppaActions          :: !(Maybe [Text])
+    , _ppaCategories       :: !(Maybe [Text])
+    , _ppaReceiverActivity :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PersistentPreferredActivity' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ppaActions'
+--
+-- * 'ppaCategories'
+--
+-- * 'ppaReceiverActivity'
+persistentPreferredActivity
+    :: PersistentPreferredActivity
+persistentPreferredActivity =
+    PersistentPreferredActivity'
+    { _ppaActions = Nothing
+    , _ppaCategories = Nothing
+    , _ppaReceiverActivity = Nothing
+    }
+
+-- | The intent actions to match in the filter. If any actions are included
+-- in the filter, then an intent\'s action must be one of those values for
+-- it to match. If no actions are included, the intent action is ignored.
+ppaActions :: Lens' PersistentPreferredActivity [Text]
+ppaActions
+  = lens _ppaActions (\ s a -> s{_ppaActions = a}) .
+      _Default
+      . _Coerce
+
+-- | The intent categories to match in the filter. An intent includes the
+-- categories that it requires, all of which must be included in the filter
+-- in order to match. In other words, adding a category to the filter has
+-- no impact on matching unless that category is specified in the intent.
+ppaCategories :: Lens' PersistentPreferredActivity [Text]
+ppaCategories
+  = lens _ppaCategories
+      (\ s a -> s{_ppaCategories = a})
+      . _Default
+      . _Coerce
+
+-- | The activity that should be the default intent handler. This should be
+-- an Android component name, e.g.
+-- com.android.enterprise.app\/.MainActivity. Alternatively, the value may
+-- be the package name of an app, which causes Android Device Policy to
+-- choose an appropriate activity from the app to handle the intent.
+ppaReceiverActivity :: Lens' PersistentPreferredActivity (Maybe Text)
+ppaReceiverActivity
+  = lens _ppaReceiverActivity
+      (\ s a -> s{_ppaReceiverActivity = a})
+
+instance FromJSON PersistentPreferredActivity where
+        parseJSON
+          = withObject "PersistentPreferredActivity"
+              (\ o ->
+                 PersistentPreferredActivity' <$>
+                   (o .:? "actions" .!= mempty) <*>
+                     (o .:? "categories" .!= mempty)
+                     <*> (o .:? "receiverActivity"))
+
+instance ToJSON PersistentPreferredActivity where
+        toJSON PersistentPreferredActivity'{..}
+          = object
+              (catMaybes
+                 [("actions" .=) <$> _ppaActions,
+                  ("categories" .=) <$> _ppaCategories,
+                  ("receiverActivity" .=) <$> _ppaReceiverActivity])
+
+-- | This resource represents a long-running operation that is the result of
+-- a network API call.
+--
+-- /See:/ 'operation' smart constructor.
+data Operation = Operation'
+    { _oDone     :: !(Maybe Bool)
+    , _oError    :: !(Maybe Status)
+    , _oResponse :: !(Maybe OperationResponse)
+    , _oName     :: !(Maybe Text)
+    , _oMetadata :: !(Maybe OperationMetadata)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Operation' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'oDone'
+--
+-- * 'oError'
+--
+-- * 'oResponse'
+--
+-- * 'oName'
+--
+-- * 'oMetadata'
+operation
+    :: Operation
+operation =
+    Operation'
+    { _oDone = Nothing
+    , _oError = Nothing
+    , _oResponse = Nothing
+    , _oName = Nothing
+    , _oMetadata = Nothing
+    }
+
+-- | If the value is false, it means the operation is still in progress. If
+-- true, the operation is completed, and either error or response is
+-- available.
+oDone :: Lens' Operation (Maybe Bool)
+oDone = lens _oDone (\ s a -> s{_oDone = a})
+
+-- | The error result of the operation in case of failure or cancellation.
+oError :: Lens' Operation (Maybe Status)
+oError = lens _oError (\ s a -> s{_oError = a})
+
+-- | The normal response of the operation in case of success. If the original
+-- method returns no data on success, such as Delete, the response is
+-- google.protobuf.Empty. If the original method is standard
+-- Get\/Create\/Update, the response should be the resource. For other
+-- methods, the response should have the type XxxResponse, where Xxx is the
+-- original method name. For example, if the original method name is
+-- TakeSnapshot(), the inferred response type is TakeSnapshotResponse.
+oResponse :: Lens' Operation (Maybe OperationResponse)
+oResponse
+  = lens _oResponse (\ s a -> s{_oResponse = a})
+
+-- | The server-assigned name, which is only unique within the same service
+-- that originally returns it. If you use the default HTTP mapping, the
+-- name should have the format of operations\/some\/unique\/name.
+oName :: Lens' Operation (Maybe Text)
+oName = lens _oName (\ s a -> s{_oName = a})
+
+-- | Service-specific metadata associated with the operation. It typically
+-- contains progress information and common metadata such as create time.
+-- Some services might not provide such metadata. Any method that returns a
+-- long-running operation should document the metadata type, if any.
+oMetadata :: Lens' Operation (Maybe OperationMetadata)
+oMetadata
+  = lens _oMetadata (\ s a -> s{_oMetadata = a})
+
+instance FromJSON Operation where
+        parseJSON
+          = withObject "Operation"
+              (\ o ->
+                 Operation' <$>
+                   (o .:? "done") <*> (o .:? "error") <*>
+                     (o .:? "response")
+                     <*> (o .:? "name")
+                     <*> (o .:? "metadata"))
+
+instance ToJSON Operation where
+        toJSON Operation'{..}
+          = object
+              (catMaybes
+                 [("done" .=) <$> _oDone, ("error" .=) <$> _oError,
+                  ("response" .=) <$> _oResponse,
+                  ("name" .=) <$> _oName,
+                  ("metadata" .=) <$> _oMetadata])
+
+-- | A generic empty message that you can re-use to avoid defining duplicated
+-- empty messages in your APIs. A typical example is to use it as the
+-- request or the response type of an API method. For instance: service Foo
+-- { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The
+-- JSON representation for Empty is empty JSON object {}.
+--
+-- /See:/ 'empty' smart constructor.
+data Empty =
+    Empty'
+    deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Empty' with the minimum fields required to make a request.
+--
+empty
+    :: Empty
+empty = Empty'
+
+instance FromJSON Empty where
+        parseJSON = withObject "Empty" (\ o -> pure Empty')
+
+instance ToJSON Empty where
+        toJSON = const emptyObject
+
+-- | Data hosted at an external location. The data is to be downloaded by
+-- Android Device Policy and verified against the hash.
+--
+-- /See:/ 'externalData' smart constructor.
+data ExternalData = ExternalData'
+    { _edURL        :: !(Maybe Text)
+    , _edSha256Hash :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ExternalData' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'edURL'
+--
+-- * 'edSha256Hash'
+externalData
+    :: ExternalData
+externalData =
+    ExternalData'
+    { _edURL = Nothing
+    , _edSha256Hash = Nothing
+    }
+
+-- | The absolute URL to the data, which must use either the http or https
+-- scheme. Android Device Policy doesn\'t provide any credentials in the
+-- GET request, so the URL must be publicly accessible. Including a long,
+-- random component in the URL may be used to prevent attackers from
+-- discovering the URL.
+edURL :: Lens' ExternalData (Maybe Text)
+edURL = lens _edURL (\ s a -> s{_edURL = a})
+
+-- | The base-64 encoded SHA-256 hash of the content hosted at url. If the
+-- content doesn\'t match this hash, Android Device Policy won\'t use the
+-- data.
+edSha256Hash :: Lens' ExternalData (Maybe Text)
+edSha256Hash
+  = lens _edSha256Hash (\ s a -> s{_edSha256Hash = a})
+
+instance FromJSON ExternalData where
+        parseJSON
+          = withObject "ExternalData"
+              (\ o ->
+                 ExternalData' <$>
+                   (o .:? "url") <*> (o .:? "sha256Hash"))
+
+instance ToJSON ExternalData where
+        toJSON ExternalData'{..}
+          = object
+              (catMaybes
+                 [("url" .=) <$> _edURL,
+                  ("sha256Hash" .=) <$> _edSha256Hash])
+
+-- | A compliance rule condition which is satisfied if the Android Framework
+-- API level on the device doesn\'t meet a minimum requirement. There can
+-- only be one rule with this type of condition per policy.
+--
+-- /See:/ 'apiLevelCondition' smart constructor.
+newtype APILevelCondition = APILevelCondition'
+    { _alcMinAPILevel :: Maybe (Textual Int32)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'APILevelCondition' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'alcMinAPILevel'
+apiLevelCondition
+    :: APILevelCondition
+apiLevelCondition =
+    APILevelCondition'
+    { _alcMinAPILevel = Nothing
+    }
+
+-- | The minimum desired Android Framework API level. If the device doesn\'t
+-- meet the minimum requirement, this condition is satisfied. Must be
+-- greater than zero.
+alcMinAPILevel :: Lens' APILevelCondition (Maybe Int32)
+alcMinAPILevel
+  = lens _alcMinAPILevel
+      (\ s a -> s{_alcMinAPILevel = a})
+      . mapping _Coerce
+
+instance FromJSON APILevelCondition where
+        parseJSON
+          = withObject "APILevelCondition"
+              (\ o -> APILevelCondition' <$> (o .:? "minApiLevel"))
+
+instance ToJSON APILevelCondition where
+        toJSON APILevelCondition'{..}
+          = object
+              (catMaybes [("minApiLevel" .=) <$> _alcMinAPILevel])
+
+-- | Information about security related device settings on device.
+--
+-- /See:/ 'deviceSettings' smart constructor.
+data DeviceSettings = DeviceSettings'
+    { _dsIsEncrypted                :: !(Maybe Bool)
+    , _dsAdbEnabled                 :: !(Maybe Bool)
+    , _dsIsDeviceSecure             :: !(Maybe Bool)
+    , _dsVerifyAppsEnabled          :: !(Maybe Bool)
+    , _dsDevelopmentSettingsEnabled :: !(Maybe Bool)
+    , _dsEncryptionStatus           :: !(Maybe DeviceSettingsEncryptionStatus)
+    , _dsUnknownSourcesEnabled      :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeviceSettings' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dsIsEncrypted'
+--
+-- * 'dsAdbEnabled'
+--
+-- * 'dsIsDeviceSecure'
+--
+-- * 'dsVerifyAppsEnabled'
+--
+-- * 'dsDevelopmentSettingsEnabled'
+--
+-- * 'dsEncryptionStatus'
+--
+-- * 'dsUnknownSourcesEnabled'
+deviceSettings
+    :: DeviceSettings
+deviceSettings =
+    DeviceSettings'
+    { _dsIsEncrypted = Nothing
+    , _dsAdbEnabled = Nothing
+    , _dsIsDeviceSecure = Nothing
+    , _dsVerifyAppsEnabled = Nothing
+    , _dsDevelopmentSettingsEnabled = Nothing
+    , _dsEncryptionStatus = Nothing
+    , _dsUnknownSourcesEnabled = Nothing
+    }
+
+-- | Whether the storage encryption is enabled.
+dsIsEncrypted :: Lens' DeviceSettings (Maybe Bool)
+dsIsEncrypted
+  = lens _dsIsEncrypted
+      (\ s a -> s{_dsIsEncrypted = a})
+
+-- | Whether ADB
+-- (https:\/\/developer.android.com\/studio\/command-line\/adb.html) is
+-- enabled on the device.
+dsAdbEnabled :: Lens' DeviceSettings (Maybe Bool)
+dsAdbEnabled
+  = lens _dsAdbEnabled (\ s a -> s{_dsAdbEnabled = a})
+
+-- | Whether the device is secured with PIN\/password.
+dsIsDeviceSecure :: Lens' DeviceSettings (Maybe Bool)
+dsIsDeviceSecure
+  = lens _dsIsDeviceSecure
+      (\ s a -> s{_dsIsDeviceSecure = a})
+
+-- | Whether Verify Apps (Google Play Protect
+-- (https:\/\/support.google.com\/googleplay\/answer\/2812853)) is enabled
+-- on the device.
+dsVerifyAppsEnabled :: Lens' DeviceSettings (Maybe Bool)
+dsVerifyAppsEnabled
+  = lens _dsVerifyAppsEnabled
+      (\ s a -> s{_dsVerifyAppsEnabled = a})
+
+-- | Whether developer mode is enabled on the device.
+dsDevelopmentSettingsEnabled :: Lens' DeviceSettings (Maybe Bool)
+dsDevelopmentSettingsEnabled
+  = lens _dsDevelopmentSettingsEnabled
+      (\ s a -> s{_dsDevelopmentSettingsEnabled = a})
+
+-- | Encryption status from DevicePolicyManager.
+dsEncryptionStatus :: Lens' DeviceSettings (Maybe DeviceSettingsEncryptionStatus)
+dsEncryptionStatus
+  = lens _dsEncryptionStatus
+      (\ s a -> s{_dsEncryptionStatus = a})
+
+-- | Whether installing apps from unknown sources is enabled.
+dsUnknownSourcesEnabled :: Lens' DeviceSettings (Maybe Bool)
+dsUnknownSourcesEnabled
+  = lens _dsUnknownSourcesEnabled
+      (\ s a -> s{_dsUnknownSourcesEnabled = a})
+
+instance FromJSON DeviceSettings where
+        parseJSON
+          = withObject "DeviceSettings"
+              (\ o ->
+                 DeviceSettings' <$>
+                   (o .:? "isEncrypted") <*> (o .:? "adbEnabled") <*>
+                     (o .:? "isDeviceSecure")
+                     <*> (o .:? "verifyAppsEnabled")
+                     <*> (o .:? "developmentSettingsEnabled")
+                     <*> (o .:? "encryptionStatus")
+                     <*> (o .:? "unknownSourcesEnabled"))
+
+instance ToJSON DeviceSettings where
+        toJSON DeviceSettings'{..}
+          = object
+              (catMaybes
+                 [("isEncrypted" .=) <$> _dsIsEncrypted,
+                  ("adbEnabled" .=) <$> _dsAdbEnabled,
+                  ("isDeviceSecure" .=) <$> _dsIsDeviceSecure,
+                  ("verifyAppsEnabled" .=) <$> _dsVerifyAppsEnabled,
+                  ("developmentSettingsEnabled" .=) <$>
+                    _dsDevelopmentSettingsEnabled,
+                  ("encryptionStatus" .=) <$> _dsEncryptionStatus,
+                  ("unknownSourcesEnabled" .=) <$>
+                    _dsUnknownSourcesEnabled])
+
+-- | Optional, a map containing configuration variables defined for the
+-- configuration.
+--
+-- /See:/ 'managedConfigurationTemplateConfigurationVariables' smart constructor.
+newtype ManagedConfigurationTemplateConfigurationVariables = ManagedConfigurationTemplateConfigurationVariables'
+    { _mctcvAddtional :: HashMap Text Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ManagedConfigurationTemplateConfigurationVariables' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mctcvAddtional'
+managedConfigurationTemplateConfigurationVariables
+    :: HashMap Text Text -- ^ 'mctcvAddtional'
+    -> ManagedConfigurationTemplateConfigurationVariables
+managedConfigurationTemplateConfigurationVariables pMctcvAddtional_ =
+    ManagedConfigurationTemplateConfigurationVariables'
+    { _mctcvAddtional = _Coerce # pMctcvAddtional_
+    }
+
+mctcvAddtional :: Lens' ManagedConfigurationTemplateConfigurationVariables (HashMap Text Text)
+mctcvAddtional
+  = lens _mctcvAddtional
+      (\ s a -> s{_mctcvAddtional = a})
+      . _Coerce
+
+instance FromJSON
+         ManagedConfigurationTemplateConfigurationVariables
+         where
+        parseJSON
+          = withObject
+              "ManagedConfigurationTemplateConfigurationVariables"
+              (\ o ->
+                 ManagedConfigurationTemplateConfigurationVariables'
+                   <$> (parseJSONObject o))
+
+instance ToJSON
+         ManagedConfigurationTemplateConfigurationVariables
+         where
+        toJSON = toJSON . _mctcvAddtional
+
+-- | Information about device hardware. The fields related to temperature
+-- thresholds are only available if hardwareStatusEnabled is true in the
+-- device\'s policy.
+--
+-- /See:/ 'hardwareInfo' smart constructor.
+data HardwareInfo = HardwareInfo'
+    { _hiCPUThrottlingTemperatures     :: !(Maybe [Textual Double])
+    , _hiManufacturer                  :: !(Maybe Text)
+    , _hiBrand                         :: !(Maybe Text)
+    , _hiCPUShutdownTemperatures       :: !(Maybe [Textual Double])
+    , _hiBatteryThrottlingTemperatures :: !(Maybe [Textual Double])
+    , _hiModel                         :: !(Maybe Text)
+    , _hiBatteryShutdownTemperatures   :: !(Maybe [Textual Double])
+    , _hiSkinThrottlingTemperatures    :: !(Maybe [Textual Double])
+    , _hiGpuShutdownTemperatures       :: !(Maybe [Textual Double])
+    , _hiGpuThrottlingTemperatures     :: !(Maybe [Textual Double])
+    , _hiSkinShutdownTemperatures      :: !(Maybe [Textual Double])
+    , _hiSerialNumber                  :: !(Maybe Text)
+    , _hiDeviceBasebandVersion         :: !(Maybe Text)
+    , _hiHardware                      :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'HardwareInfo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'hiCPUThrottlingTemperatures'
+--
+-- * 'hiManufacturer'
+--
+-- * 'hiBrand'
+--
+-- * 'hiCPUShutdownTemperatures'
+--
+-- * 'hiBatteryThrottlingTemperatures'
+--
+-- * 'hiModel'
+--
+-- * 'hiBatteryShutdownTemperatures'
+--
+-- * 'hiSkinThrottlingTemperatures'
+--
+-- * 'hiGpuShutdownTemperatures'
+--
+-- * 'hiGpuThrottlingTemperatures'
+--
+-- * 'hiSkinShutdownTemperatures'
+--
+-- * 'hiSerialNumber'
+--
+-- * 'hiDeviceBasebandVersion'
+--
+-- * 'hiHardware'
+hardwareInfo
+    :: HardwareInfo
+hardwareInfo =
+    HardwareInfo'
+    { _hiCPUThrottlingTemperatures = Nothing
+    , _hiManufacturer = Nothing
+    , _hiBrand = Nothing
+    , _hiCPUShutdownTemperatures = Nothing
+    , _hiBatteryThrottlingTemperatures = Nothing
+    , _hiModel = Nothing
+    , _hiBatteryShutdownTemperatures = Nothing
+    , _hiSkinThrottlingTemperatures = Nothing
+    , _hiGpuShutdownTemperatures = Nothing
+    , _hiGpuThrottlingTemperatures = Nothing
+    , _hiSkinShutdownTemperatures = Nothing
+    , _hiSerialNumber = Nothing
+    , _hiDeviceBasebandVersion = Nothing
+    , _hiHardware = Nothing
+    }
+
+-- | CPU throttling temperature thresholds in Celsius for each CPU on the
+-- device.
+hiCPUThrottlingTemperatures :: Lens' HardwareInfo [Double]
+hiCPUThrottlingTemperatures
+  = lens _hiCPUThrottlingTemperatures
+      (\ s a -> s{_hiCPUThrottlingTemperatures = a})
+      . _Default
+      . _Coerce
+
+-- | Manufacturer. For example, Motorola.
+hiManufacturer :: Lens' HardwareInfo (Maybe Text)
+hiManufacturer
+  = lens _hiManufacturer
+      (\ s a -> s{_hiManufacturer = a})
+
+-- | Brand of the device. For example, Google.
+hiBrand :: Lens' HardwareInfo (Maybe Text)
+hiBrand = lens _hiBrand (\ s a -> s{_hiBrand = a})
+
+-- | CPU shutdown temperature thresholds in Celsius for each CPU on the
+-- device.
+hiCPUShutdownTemperatures :: Lens' HardwareInfo [Double]
+hiCPUShutdownTemperatures
+  = lens _hiCPUShutdownTemperatures
+      (\ s a -> s{_hiCPUShutdownTemperatures = a})
+      . _Default
+      . _Coerce
+
+-- | Battery throttling temperature thresholds in Celsius for each battery on
+-- the device.
+hiBatteryThrottlingTemperatures :: Lens' HardwareInfo [Double]
+hiBatteryThrottlingTemperatures
+  = lens _hiBatteryThrottlingTemperatures
+      (\ s a -> s{_hiBatteryThrottlingTemperatures = a})
+      . _Default
+      . _Coerce
+
+-- | The model of the device. For example, Asus Nexus 7.
+hiModel :: Lens' HardwareInfo (Maybe Text)
+hiModel = lens _hiModel (\ s a -> s{_hiModel = a})
+
+-- | Battery shutdown temperature thresholds in Celsius for each battery on
+-- the device.
+hiBatteryShutdownTemperatures :: Lens' HardwareInfo [Double]
+hiBatteryShutdownTemperatures
+  = lens _hiBatteryShutdownTemperatures
+      (\ s a -> s{_hiBatteryShutdownTemperatures = a})
+      . _Default
+      . _Coerce
+
+-- | Device skin throttling temperature thresholds in Celsius.
+hiSkinThrottlingTemperatures :: Lens' HardwareInfo [Double]
+hiSkinThrottlingTemperatures
+  = lens _hiSkinThrottlingTemperatures
+      (\ s a -> s{_hiSkinThrottlingTemperatures = a})
+      . _Default
+      . _Coerce
+
+-- | GPU shutdown temperature thresholds in Celsius for each GPU on the
+-- device.
+hiGpuShutdownTemperatures :: Lens' HardwareInfo [Double]
+hiGpuShutdownTemperatures
+  = lens _hiGpuShutdownTemperatures
+      (\ s a -> s{_hiGpuShutdownTemperatures = a})
+      . _Default
+      . _Coerce
+
+-- | GPU throttling temperature thresholds in Celsius for each GPU on the
+-- device.
+hiGpuThrottlingTemperatures :: Lens' HardwareInfo [Double]
+hiGpuThrottlingTemperatures
+  = lens _hiGpuThrottlingTemperatures
+      (\ s a -> s{_hiGpuThrottlingTemperatures = a})
+      . _Default
+      . _Coerce
+
+-- | Device skin shutdown temperature thresholds in Celsius.
+hiSkinShutdownTemperatures :: Lens' HardwareInfo [Double]
+hiSkinShutdownTemperatures
+  = lens _hiSkinShutdownTemperatures
+      (\ s a -> s{_hiSkinShutdownTemperatures = a})
+      . _Default
+      . _Coerce
+
+-- | The device serial number.
+hiSerialNumber :: Lens' HardwareInfo (Maybe Text)
+hiSerialNumber
+  = lens _hiSerialNumber
+      (\ s a -> s{_hiSerialNumber = a})
+
+-- | Baseband version. For example, MDM9625_104662.22.05.34p.
+hiDeviceBasebandVersion :: Lens' HardwareInfo (Maybe Text)
+hiDeviceBasebandVersion
+  = lens _hiDeviceBasebandVersion
+      (\ s a -> s{_hiDeviceBasebandVersion = a})
+
+-- | Name of the hardware. For example, Angler.
+hiHardware :: Lens' HardwareInfo (Maybe Text)
+hiHardware
+  = lens _hiHardware (\ s a -> s{_hiHardware = a})
+
+instance FromJSON HardwareInfo where
+        parseJSON
+          = withObject "HardwareInfo"
+              (\ o ->
+                 HardwareInfo' <$>
+                   (o .:? "cpuThrottlingTemperatures" .!= mempty) <*>
+                     (o .:? "manufacturer")
+                     <*> (o .:? "brand")
+                     <*> (o .:? "cpuShutdownTemperatures" .!= mempty)
+                     <*>
+                     (o .:? "batteryThrottlingTemperatures" .!= mempty)
+                     <*> (o .:? "model")
+                     <*> (o .:? "batteryShutdownTemperatures" .!= mempty)
+                     <*> (o .:? "skinThrottlingTemperatures" .!= mempty)
+                     <*> (o .:? "gpuShutdownTemperatures" .!= mempty)
+                     <*> (o .:? "gpuThrottlingTemperatures" .!= mempty)
+                     <*> (o .:? "skinShutdownTemperatures" .!= mempty)
+                     <*> (o .:? "serialNumber")
+                     <*> (o .:? "deviceBasebandVersion")
+                     <*> (o .:? "hardware"))
+
+instance ToJSON HardwareInfo where
+        toJSON HardwareInfo'{..}
+          = object
+              (catMaybes
+                 [("cpuThrottlingTemperatures" .=) <$>
+                    _hiCPUThrottlingTemperatures,
+                  ("manufacturer" .=) <$> _hiManufacturer,
+                  ("brand" .=) <$> _hiBrand,
+                  ("cpuShutdownTemperatures" .=) <$>
+                    _hiCPUShutdownTemperatures,
+                  ("batteryThrottlingTemperatures" .=) <$>
+                    _hiBatteryThrottlingTemperatures,
+                  ("model" .=) <$> _hiModel,
+                  ("batteryShutdownTemperatures" .=) <$>
+                    _hiBatteryShutdownTemperatures,
+                  ("skinThrottlingTemperatures" .=) <$>
+                    _hiSkinThrottlingTemperatures,
+                  ("gpuShutdownTemperatures" .=) <$>
+                    _hiGpuShutdownTemperatures,
+                  ("gpuThrottlingTemperatures" .=) <$>
+                    _hiGpuThrottlingTemperatures,
+                  ("skinShutdownTemperatures" .=) <$>
+                    _hiSkinShutdownTemperatures,
+                  ("serialNumber" .=) <$> _hiSerialNumber,
+                  ("deviceBasebandVersion" .=) <$>
+                    _hiDeviceBasebandVersion,
+                  ("hardware" .=) <$> _hiHardware])
+
+-- | A device owned by an enterprise. Unless otherwise noted, all fields are
+-- read-only and can\'t be modified by enterprises.devices.patch.
+--
+-- /See:/ 'device' smart constructor.
+data Device = Device'
+    { _devMemoryInfo                     :: !(Maybe MemoryInfo)
+    , _devPolicyCompliant                :: !(Maybe Bool)
+    , _devApplicationReports             :: !(Maybe [ApplicationReport])
+    , _devPolicyName                     :: !(Maybe Text)
+    , _devState                          :: !(Maybe DeviceState)
+    , _devAppliedPolicyName              :: !(Maybe Text)
+    , _devLastStatusReportTime           :: !(Maybe DateTime')
+    , _devDeviceSettings                 :: !(Maybe DeviceSettings)
+    , _devEnrollmentTokenName            :: !(Maybe Text)
+    , _devManagementMode                 :: !(Maybe DeviceManagementMode)
+    , _devHardwareInfo                   :: !(Maybe HardwareInfo)
+    , _devPowerManagementEvents          :: !(Maybe [PowerManagementEvent])
+    , _devUserName                       :: !(Maybe Text)
+    , _devMemoryEvents                   :: !(Maybe [MemoryEvent])
+    , _devAPILevel                       :: !(Maybe (Textual Int32))
+    , _devUser                           :: !(Maybe User)
+    , _devDisabledReason                 :: !(Maybe UserFacingMessage)
+    , _devLastPolicyComplianceReportTime :: !(Maybe DateTime')
+    , _devEnrollmentTokenData            :: !(Maybe Text)
+    , _devName                           :: !(Maybe Text)
+    , _devAppliedPolicyVersion           :: !(Maybe (Textual Int64))
+    , _devHardwareStatusSamples          :: !(Maybe [HardwareStatus])
+    , _devAppliedState                   :: !(Maybe DeviceAppliedState)
+    , _devPreviousDeviceNames            :: !(Maybe [Text])
+    , _devLastPolicySyncTime             :: !(Maybe DateTime')
+    , _devNetworkInfo                    :: !(Maybe NetworkInfo)
+    , _devNonComplianceDetails           :: !(Maybe [NonComplianceDetail])
+    , _devSoftwareInfo                   :: !(Maybe SoftwareInfo)
+    , _devEnrollmentTime                 :: !(Maybe DateTime')
+    , _devDisplays                       :: !(Maybe [Display])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Device' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'devMemoryInfo'
+--
+-- * 'devPolicyCompliant'
+--
+-- * 'devApplicationReports'
+--
+-- * 'devPolicyName'
+--
+-- * 'devState'
+--
+-- * 'devAppliedPolicyName'
+--
+-- * 'devLastStatusReportTime'
+--
+-- * 'devDeviceSettings'
+--
+-- * 'devEnrollmentTokenName'
+--
+-- * 'devManagementMode'
+--
+-- * 'devHardwareInfo'
+--
+-- * 'devPowerManagementEvents'
+--
+-- * 'devUserName'
+--
+-- * 'devMemoryEvents'
+--
+-- * 'devAPILevel'
+--
+-- * 'devUser'
+--
+-- * 'devDisabledReason'
+--
+-- * 'devLastPolicyComplianceReportTime'
+--
+-- * 'devEnrollmentTokenData'
+--
+-- * 'devName'
+--
+-- * 'devAppliedPolicyVersion'
+--
+-- * 'devHardwareStatusSamples'
+--
+-- * 'devAppliedState'
+--
+-- * 'devPreviousDeviceNames'
+--
+-- * 'devLastPolicySyncTime'
+--
+-- * 'devNetworkInfo'
+--
+-- * 'devNonComplianceDetails'
+--
+-- * 'devSoftwareInfo'
+--
+-- * 'devEnrollmentTime'
+--
+-- * 'devDisplays'
+device
+    :: Device
+device =
+    Device'
+    { _devMemoryInfo = Nothing
+    , _devPolicyCompliant = Nothing
+    , _devApplicationReports = Nothing
+    , _devPolicyName = Nothing
+    , _devState = Nothing
+    , _devAppliedPolicyName = Nothing
+    , _devLastStatusReportTime = Nothing
+    , _devDeviceSettings = Nothing
+    , _devEnrollmentTokenName = Nothing
+    , _devManagementMode = Nothing
+    , _devHardwareInfo = Nothing
+    , _devPowerManagementEvents = Nothing
+    , _devUserName = Nothing
+    , _devMemoryEvents = Nothing
+    , _devAPILevel = Nothing
+    , _devUser = Nothing
+    , _devDisabledReason = Nothing
+    , _devLastPolicyComplianceReportTime = Nothing
+    , _devEnrollmentTokenData = Nothing
+    , _devName = Nothing
+    , _devAppliedPolicyVersion = Nothing
+    , _devHardwareStatusSamples = Nothing
+    , _devAppliedState = Nothing
+    , _devPreviousDeviceNames = Nothing
+    , _devLastPolicySyncTime = Nothing
+    , _devNetworkInfo = Nothing
+    , _devNonComplianceDetails = Nothing
+    , _devSoftwareInfo = Nothing
+    , _devEnrollmentTime = Nothing
+    , _devDisplays = Nothing
+    }
+
+-- | Memory information. This information is only available if
+-- memoryInfoEnabled is true in the device\'s policy.
+devMemoryInfo :: Lens' Device (Maybe MemoryInfo)
+devMemoryInfo
+  = lens _devMemoryInfo
+      (\ s a -> s{_devMemoryInfo = a})
+
+-- | Whether the device is compliant with its policy.
+devPolicyCompliant :: Lens' Device (Maybe Bool)
+devPolicyCompliant
+  = lens _devPolicyCompliant
+      (\ s a -> s{_devPolicyCompliant = a})
+
+-- | Reports for apps installed on the device. This information is only
+-- available when application_reports_enabled is true in the device\'s
+-- policy.
+devApplicationReports :: Lens' Device [ApplicationReport]
+devApplicationReports
+  = lens _devApplicationReports
+      (\ s a -> s{_devApplicationReports = a})
+      . _Default
+      . _Coerce
+
+-- | The name of the policy applied to the device, in the form
+-- enterprises\/{enterpriseId}\/policies\/{policyId}. If not specified, the
+-- policy_name for the device\'s user is applied. This field can be
+-- modified by a patch request. You can specify only the policyId when
+-- calling enterprises.devices.patch, as long as the policyId doesn’t
+-- contain any slashes. The rest of the policy name is inferred.
+devPolicyName :: Lens' Device (Maybe Text)
+devPolicyName
+  = lens _devPolicyName
+      (\ s a -> s{_devPolicyName = a})
+
+-- | The state to be applied to the device. This field can be modified by a
+-- patch request. Note that when calling enterprises.devices.patch, ACTIVE
+-- and DISABLED are the only allowable values. To enter the device into a
+-- DELETED state, call enterprises.devices.delete.
+devState :: Lens' Device (Maybe DeviceState)
+devState = lens _devState (\ s a -> s{_devState = a})
+
+-- | The name of the policy currently applied to the device.
+devAppliedPolicyName :: Lens' Device (Maybe Text)
+devAppliedPolicyName
+  = lens _devAppliedPolicyName
+      (\ s a -> s{_devAppliedPolicyName = a})
+
+-- | The last time the device sent a status report.
+devLastStatusReportTime :: Lens' Device (Maybe UTCTime)
+devLastStatusReportTime
+  = lens _devLastStatusReportTime
+      (\ s a -> s{_devLastStatusReportTime = a})
+      . mapping _DateTime
+
+-- | Device settings information. This information is only available if
+-- deviceSettingsEnabled is true in the device\'s policy.
+devDeviceSettings :: Lens' Device (Maybe DeviceSettings)
+devDeviceSettings
+  = lens _devDeviceSettings
+      (\ s a -> s{_devDeviceSettings = a})
+
+-- | If the device was enrolled with an enrollment token, this field contains
+-- the name of the token.
+devEnrollmentTokenName :: Lens' Device (Maybe Text)
+devEnrollmentTokenName
+  = lens _devEnrollmentTokenName
+      (\ s a -> s{_devEnrollmentTokenName = a})
+
+-- | The type of management mode Android Device Policy takes on the device.
+-- This influences which policy settings are supported.
+devManagementMode :: Lens' Device (Maybe DeviceManagementMode)
+devManagementMode
+  = lens _devManagementMode
+      (\ s a -> s{_devManagementMode = a})
+
+-- | Detailed information about the device hardware.
+devHardwareInfo :: Lens' Device (Maybe HardwareInfo)
+devHardwareInfo
+  = lens _devHardwareInfo
+      (\ s a -> s{_devHardwareInfo = a})
+
+-- | Power management events on the device in chronological order. This
+-- information is only available if powerManagementEventsEnabled is true in
+-- the device\'s policy.
+devPowerManagementEvents :: Lens' Device [PowerManagementEvent]
+devPowerManagementEvents
+  = lens _devPowerManagementEvents
+      (\ s a -> s{_devPowerManagementEvents = a})
+      . _Default
+      . _Coerce
+
+-- | The resource name of the user that owns this device in the form
+-- enterprises\/{enterpriseId}\/users\/{userId}.
+devUserName :: Lens' Device (Maybe Text)
+devUserName
+  = lens _devUserName (\ s a -> s{_devUserName = a})
+
+-- | Events related to memory and storage measurements in chronological
+-- order. This information is only available if memoryInfoEnabled is true
+-- in the device\'s policy.
+devMemoryEvents :: Lens' Device [MemoryEvent]
+devMemoryEvents
+  = lens _devMemoryEvents
+      (\ s a -> s{_devMemoryEvents = a})
+      . _Default
+      . _Coerce
+
+-- | The API level of the Android platform version running on the device.
+devAPILevel :: Lens' Device (Maybe Int32)
+devAPILevel
+  = lens _devAPILevel (\ s a -> s{_devAPILevel = a}) .
+      mapping _Coerce
+
+-- | The user who owns the device.
+devUser :: Lens' Device (Maybe User)
+devUser = lens _devUser (\ s a -> s{_devUser = a})
+
+-- | If the device state is DISABLED, an optional message that is displayed
+-- on the device indicating the reason the device is disabled. This field
+-- can be modified by a patch request.
+devDisabledReason :: Lens' Device (Maybe UserFacingMessage)
+devDisabledReason
+  = lens _devDisabledReason
+      (\ s a -> s{_devDisabledReason = a})
+
+-- | Deprecated.
+devLastPolicyComplianceReportTime :: Lens' Device (Maybe UTCTime)
+devLastPolicyComplianceReportTime
+  = lens _devLastPolicyComplianceReportTime
+      (\ s a -> s{_devLastPolicyComplianceReportTime = a})
+      . mapping _DateTime
+
+-- | If the device was enrolled with an enrollment token with additional data
+-- provided, this field contains that data.
+devEnrollmentTokenData :: Lens' Device (Maybe Text)
+devEnrollmentTokenData
+  = lens _devEnrollmentTokenData
+      (\ s a -> s{_devEnrollmentTokenData = a})
+
+-- | The name of the device in the form
+-- enterprises\/{enterpriseId}\/devices\/{deviceId}.
+devName :: Lens' Device (Maybe Text)
+devName = lens _devName (\ s a -> s{_devName = a})
+
+-- | The version of the policy currently applied to the device.
+devAppliedPolicyVersion :: Lens' Device (Maybe Int64)
+devAppliedPolicyVersion
+  = lens _devAppliedPolicyVersion
+      (\ s a -> s{_devAppliedPolicyVersion = a})
+      . mapping _Coerce
+
+-- | Hardware status samples in chronological order. This information is only
+-- available if hardwareStatusEnabled is true in the device\'s policy.
+devHardwareStatusSamples :: Lens' Device [HardwareStatus]
+devHardwareStatusSamples
+  = lens _devHardwareStatusSamples
+      (\ s a -> s{_devHardwareStatusSamples = a})
+      . _Default
+      . _Coerce
+
+-- | The state currently applied to the device.
+devAppliedState :: Lens' Device (Maybe DeviceAppliedState)
+devAppliedState
+  = lens _devAppliedState
+      (\ s a -> s{_devAppliedState = a})
+
+-- | If the same physical device has been enrolled multiple times, this field
+-- contains its previous device names. The serial number is used as the
+-- unique identifier to determine if the same physical device has enrolled
+-- previously. The names are in chronological order.
+devPreviousDeviceNames :: Lens' Device [Text]
+devPreviousDeviceNames
+  = lens _devPreviousDeviceNames
+      (\ s a -> s{_devPreviousDeviceNames = a})
+      . _Default
+      . _Coerce
+
+-- | The last time the device fetched its policy.
+devLastPolicySyncTime :: Lens' Device (Maybe UTCTime)
+devLastPolicySyncTime
+  = lens _devLastPolicySyncTime
+      (\ s a -> s{_devLastPolicySyncTime = a})
+      . mapping _DateTime
+
+-- | Device network information. This information is only available if
+-- networkInfoEnabled is true in the device\'s policy.
+devNetworkInfo :: Lens' Device (Maybe NetworkInfo)
+devNetworkInfo
+  = lens _devNetworkInfo
+      (\ s a -> s{_devNetworkInfo = a})
+
+-- | Details about policy settings that the device is not compliant with.
+devNonComplianceDetails :: Lens' Device [NonComplianceDetail]
+devNonComplianceDetails
+  = lens _devNonComplianceDetails
+      (\ s a -> s{_devNonComplianceDetails = a})
+      . _Default
+      . _Coerce
+
+-- | Detailed information about the device software. This information is only
+-- available if softwareInfoEnabled is true in the device\'s policy.
+devSoftwareInfo :: Lens' Device (Maybe SoftwareInfo)
+devSoftwareInfo
+  = lens _devSoftwareInfo
+      (\ s a -> s{_devSoftwareInfo = a})
+
+-- | The time of device enrollment.
+devEnrollmentTime :: Lens' Device (Maybe UTCTime)
+devEnrollmentTime
+  = lens _devEnrollmentTime
+      (\ s a -> s{_devEnrollmentTime = a})
+      . mapping _DateTime
+
+-- | Detailed information about displays on the device. This information is
+-- only available if displayInfoEnabled is true in the device\'s policy.
+devDisplays :: Lens' Device [Display]
+devDisplays
+  = lens _devDisplays (\ s a -> s{_devDisplays = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON Device where
+        parseJSON
+          = withObject "Device"
+              (\ o ->
+                 Device' <$>
+                   (o .:? "memoryInfo") <*> (o .:? "policyCompliant")
+                     <*> (o .:? "applicationReports" .!= mempty)
+                     <*> (o .:? "policyName")
+                     <*> (o .:? "state")
+                     <*> (o .:? "appliedPolicyName")
+                     <*> (o .:? "lastStatusReportTime")
+                     <*> (o .:? "deviceSettings")
+                     <*> (o .:? "enrollmentTokenName")
+                     <*> (o .:? "managementMode")
+                     <*> (o .:? "hardwareInfo")
+                     <*> (o .:? "powerManagementEvents" .!= mempty)
+                     <*> (o .:? "userName")
+                     <*> (o .:? "memoryEvents" .!= mempty)
+                     <*> (o .:? "apiLevel")
+                     <*> (o .:? "user")
+                     <*> (o .:? "disabledReason")
+                     <*> (o .:? "lastPolicyComplianceReportTime")
+                     <*> (o .:? "enrollmentTokenData")
+                     <*> (o .:? "name")
+                     <*> (o .:? "appliedPolicyVersion")
+                     <*> (o .:? "hardwareStatusSamples" .!= mempty)
+                     <*> (o .:? "appliedState")
+                     <*> (o .:? "previousDeviceNames" .!= mempty)
+                     <*> (o .:? "lastPolicySyncTime")
+                     <*> (o .:? "networkInfo")
+                     <*> (o .:? "nonComplianceDetails" .!= mempty)
+                     <*> (o .:? "softwareInfo")
+                     <*> (o .:? "enrollmentTime")
+                     <*> (o .:? "displays" .!= mempty))
+
+instance ToJSON Device where
+        toJSON Device'{..}
+          = object
+              (catMaybes
+                 [("memoryInfo" .=) <$> _devMemoryInfo,
+                  ("policyCompliant" .=) <$> _devPolicyCompliant,
+                  ("applicationReports" .=) <$> _devApplicationReports,
+                  ("policyName" .=) <$> _devPolicyName,
+                  ("state" .=) <$> _devState,
+                  ("appliedPolicyName" .=) <$> _devAppliedPolicyName,
+                  ("lastStatusReportTime" .=) <$>
+                    _devLastStatusReportTime,
+                  ("deviceSettings" .=) <$> _devDeviceSettings,
+                  ("enrollmentTokenName" .=) <$>
+                    _devEnrollmentTokenName,
+                  ("managementMode" .=) <$> _devManagementMode,
+                  ("hardwareInfo" .=) <$> _devHardwareInfo,
+                  ("powerManagementEvents" .=) <$>
+                    _devPowerManagementEvents,
+                  ("userName" .=) <$> _devUserName,
+                  ("memoryEvents" .=) <$> _devMemoryEvents,
+                  ("apiLevel" .=) <$> _devAPILevel,
+                  ("user" .=) <$> _devUser,
+                  ("disabledReason" .=) <$> _devDisabledReason,
+                  ("lastPolicyComplianceReportTime" .=) <$>
+                    _devLastPolicyComplianceReportTime,
+                  ("enrollmentTokenData" .=) <$>
+                    _devEnrollmentTokenData,
+                  ("name" .=) <$> _devName,
+                  ("appliedPolicyVersion" .=) <$>
+                    _devAppliedPolicyVersion,
+                  ("hardwareStatusSamples" .=) <$>
+                    _devHardwareStatusSamples,
+                  ("appliedState" .=) <$> _devAppliedState,
+                  ("previousDeviceNames" .=) <$>
+                    _devPreviousDeviceNames,
+                  ("lastPolicySyncTime" .=) <$> _devLastPolicySyncTime,
+                  ("networkInfo" .=) <$> _devNetworkInfo,
+                  ("nonComplianceDetails" .=) <$>
+                    _devNonComplianceDetails,
+                  ("softwareInfo" .=) <$> _devSoftwareInfo,
+                  ("enrollmentTime" .=) <$> _devEnrollmentTime,
+                  ("displays" .=) <$> _devDisplays])
+
+--
+-- /See:/ 'statusDetailsItem' smart constructor.
+newtype StatusDetailsItem = StatusDetailsItem'
+    { _sdiAddtional :: HashMap Text JSONValue
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StatusDetailsItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sdiAddtional'
+statusDetailsItem
+    :: HashMap Text JSONValue -- ^ 'sdiAddtional'
+    -> StatusDetailsItem
+statusDetailsItem pSdiAddtional_ =
+    StatusDetailsItem'
+    { _sdiAddtional = _Coerce # pSdiAddtional_
+    }
+
+-- | Properties of the object. Contains field \'type with type URL.
+sdiAddtional :: Lens' StatusDetailsItem (HashMap Text JSONValue)
+sdiAddtional
+  = lens _sdiAddtional (\ s a -> s{_sdiAddtional = a})
+      . _Coerce
+
+instance FromJSON StatusDetailsItem where
+        parseJSON
+          = withObject "StatusDetailsItem"
+              (\ o -> StatusDetailsItem' <$> (parseJSONObject o))
+
+instance ToJSON StatusDetailsItem where
+        toJSON = toJSON . _sdiAddtional
+
+-- | An entry of a managed property.
+--
+-- /See:/ 'managedPropertyEntry' smart constructor.
+data ManagedPropertyEntry = ManagedPropertyEntry'
+    { _mpeValue :: !(Maybe Text)
+    , _mpeName  :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ManagedPropertyEntry' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mpeValue'
+--
+-- * 'mpeName'
+managedPropertyEntry
+    :: ManagedPropertyEntry
+managedPropertyEntry =
+    ManagedPropertyEntry'
+    { _mpeValue = Nothing
+    , _mpeName = Nothing
+    }
+
+-- | The machine-readable value of the entry, which should be used in the
+-- configuration. Not localized.
+mpeValue :: Lens' ManagedPropertyEntry (Maybe Text)
+mpeValue = lens _mpeValue (\ s a -> s{_mpeValue = a})
+
+-- | The human-readable name of the value. Localized.
+mpeName :: Lens' ManagedPropertyEntry (Maybe Text)
+mpeName = lens _mpeName (\ s a -> s{_mpeName = a})
+
+instance FromJSON ManagedPropertyEntry where
+        parseJSON
+          = withObject "ManagedPropertyEntry"
+              (\ o ->
+                 ManagedPropertyEntry' <$>
+                   (o .:? "value") <*> (o .:? "name"))
+
+instance ToJSON ManagedPropertyEntry where
+        toJSON ManagedPropertyEntry'{..}
+          = object
+              (catMaybes
+                 [("value" .=) <$> _mpeValue,
+                  ("name" .=) <$> _mpeName])
+
+-- | A rule for automatically choosing a private key and certificate to
+-- authenticate the device to a server.
+--
+-- /See:/ 'choosePrivateKeyRule' smart constructor.
+data ChoosePrivateKeyRule = ChoosePrivateKeyRule'
+    { _cpkrPrivateKeyAlias :: !(Maybe Text)
+    , _cpkrURLPattern      :: !(Maybe Text)
+    , _cpkrPackageNames    :: !(Maybe [Text])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ChoosePrivateKeyRule' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cpkrPrivateKeyAlias'
+--
+-- * 'cpkrURLPattern'
+--
+-- * 'cpkrPackageNames'
+choosePrivateKeyRule
+    :: ChoosePrivateKeyRule
+choosePrivateKeyRule =
+    ChoosePrivateKeyRule'
+    { _cpkrPrivateKeyAlias = Nothing
+    , _cpkrURLPattern = Nothing
+    , _cpkrPackageNames = Nothing
+    }
+
+-- | The alias of the private key to be used.
+cpkrPrivateKeyAlias :: Lens' ChoosePrivateKeyRule (Maybe Text)
+cpkrPrivateKeyAlias
+  = lens _cpkrPrivateKeyAlias
+      (\ s a -> s{_cpkrPrivateKeyAlias = a})
+
+-- | The URL pattern to match against the URL of the outgoing request. The
+-- pattern may contain asterisk (*) wildcards. Any URL is matched if
+-- unspecified.
+cpkrURLPattern :: Lens' ChoosePrivateKeyRule (Maybe Text)
+cpkrURLPattern
+  = lens _cpkrURLPattern
+      (\ s a -> s{_cpkrURLPattern = a})
+
+-- | The package names for which outgoing requests are subject to this rule.
+-- If no package names are specified, then the rule applies to all
+-- packages. For each package name listed, the rule applies to that package
+-- and all other packages that shared the same Android UID. The SHA256 hash
+-- of the signing key signatures of each package_name will be verified
+-- against those provided by Play
+cpkrPackageNames :: Lens' ChoosePrivateKeyRule [Text]
+cpkrPackageNames
+  = lens _cpkrPackageNames
+      (\ s a -> s{_cpkrPackageNames = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON ChoosePrivateKeyRule where
+        parseJSON
+          = withObject "ChoosePrivateKeyRule"
+              (\ o ->
+                 ChoosePrivateKeyRule' <$>
+                   (o .:? "privateKeyAlias") <*> (o .:? "urlPattern")
+                     <*> (o .:? "packageNames" .!= mempty))
+
+instance ToJSON ChoosePrivateKeyRule where
+        toJSON ChoosePrivateKeyRule'{..}
+          = object
+              (catMaybes
+                 [("privateKeyAlias" .=) <$> _cpkrPrivateKeyAlias,
+                  ("urlPattern" .=) <$> _cpkrURLPattern,
+                  ("packageNames" .=) <$> _cpkrPackageNames])
+
+-- | A map containing pairs, where locale is a well-formed BCP 47 language
+-- (https:\/\/www.w3.org\/International\/articles\/language-tags\/) code,
+-- such as en-US, es-ES, or fr.
+--
+-- /See:/ 'userFacingMessageLocalizedMessages' smart constructor.
+newtype UserFacingMessageLocalizedMessages = UserFacingMessageLocalizedMessages'
+    { _ufmlmAddtional :: HashMap Text Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UserFacingMessageLocalizedMessages' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ufmlmAddtional'
+userFacingMessageLocalizedMessages
+    :: HashMap Text Text -- ^ 'ufmlmAddtional'
+    -> UserFacingMessageLocalizedMessages
+userFacingMessageLocalizedMessages pUfmlmAddtional_ =
+    UserFacingMessageLocalizedMessages'
+    { _ufmlmAddtional = _Coerce # pUfmlmAddtional_
+    }
+
+ufmlmAddtional :: Lens' UserFacingMessageLocalizedMessages (HashMap Text Text)
+ufmlmAddtional
+  = lens _ufmlmAddtional
+      (\ s a -> s{_ufmlmAddtional = a})
+      . _Coerce
+
+instance FromJSON UserFacingMessageLocalizedMessages
+         where
+        parseJSON
+          = withObject "UserFacingMessageLocalizedMessages"
+              (\ o ->
+                 UserFacingMessageLocalizedMessages' <$>
+                   (parseJSONObject o))
+
+instance ToJSON UserFacingMessageLocalizedMessages
+         where
+        toJSON = toJSON . _ufmlmAddtional
+
+-- | A user belonging to an enterprise.
+--
+-- /See:/ 'user' smart constructor.
+newtype User = User'
+    { _uAccountIdentifier :: 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:
+--
+-- * 'uAccountIdentifier'
+user
+    :: User
+user =
+    User'
+    { _uAccountIdentifier = Nothing
+    }
+
+-- | A unique identifier you create for this user, such as user342 or
+-- asset#44418. This field must be set when the user is created and can\'t
+-- be updated. This field must not contain personally identifiable
+-- information (PII). This identifier must be 1024 characters or less;
+-- otherwise, the update policy request will fail.
+uAccountIdentifier :: Lens' User (Maybe Text)
+uAccountIdentifier
+  = lens _uAccountIdentifier
+      (\ s a -> s{_uAccountIdentifier = a})
+
+instance FromJSON User where
+        parseJSON
+          = withObject "User"
+              (\ o -> User' <$> (o .:? "accountIdentifier"))
+
+instance ToJSON User where
+        toJSON User'{..}
+          = object
+              (catMaybes
+                 [("accountIdentifier" .=) <$> _uAccountIdentifier])
+
+-- | Configuration for managing system updates
+--
+-- /See:/ 'systemUpdate' smart constructor.
+data SystemUpdate = SystemUpdate'
+    { _suEndMinutes   :: !(Maybe (Textual Int32))
+    , _suStartMinutes :: !(Maybe (Textual Int32))
+    , _suType         :: !(Maybe SystemUpdateType)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SystemUpdate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'suEndMinutes'
+--
+-- * 'suStartMinutes'
+--
+-- * 'suType'
+systemUpdate
+    :: SystemUpdate
+systemUpdate =
+    SystemUpdate'
+    { _suEndMinutes = Nothing
+    , _suStartMinutes = Nothing
+    , _suType = Nothing
+    }
+
+-- | If the type is WINDOWED, the end of the maintenance window, measured as
+-- the number of minutes after midnight in device\'s local time. This value
+-- must be between 0 and 1439, inclusive. If this value is less than
+-- start_minutes, then the maintenance window spans midnight. If the
+-- maintenance window specified is smaller than 30 minutes, the actual
+-- window is extended to 30 minutes beyond the start time.
+suEndMinutes :: Lens' SystemUpdate (Maybe Int32)
+suEndMinutes
+  = lens _suEndMinutes (\ s a -> s{_suEndMinutes = a})
+      . mapping _Coerce
+
+-- | If the type is WINDOWED, the start of the maintenance window, measured
+-- as the number of minutes after midnight in the device\'s local time.
+-- This value must be between 0 and 1439, inclusive.
+suStartMinutes :: Lens' SystemUpdate (Maybe Int32)
+suStartMinutes
+  = lens _suStartMinutes
+      (\ s a -> s{_suStartMinutes = a})
+      . mapping _Coerce
+
+-- | The type of system update to configure.
+suType :: Lens' SystemUpdate (Maybe SystemUpdateType)
+suType = lens _suType (\ s a -> s{_suType = a})
+
+instance FromJSON SystemUpdate where
+        parseJSON
+          = withObject "SystemUpdate"
+              (\ o ->
+                 SystemUpdate' <$>
+                   (o .:? "endMinutes") <*> (o .:? "startMinutes") <*>
+                     (o .:? "type"))
+
+instance ToJSON SystemUpdate where
+        toJSON SystemUpdate'{..}
+          = object
+              (catMaybes
+                 [("endMinutes" .=) <$> _suEndMinutes,
+                  ("startMinutes" .=) <$> _suStartMinutes,
+                  ("type" .=) <$> _suType])
+
+-- | Information reported about an installed app.
+--
+-- /See:/ 'applicationReport' smart constructor.
+data ApplicationReport = ApplicationReport'
+    { _arVersionCode                :: !(Maybe (Textual Int32))
+    , _arSigningKeyCertFingerprints :: !(Maybe [Text])
+    , _arState                      :: !(Maybe ApplicationReportState)
+    , _arVersionName                :: !(Maybe Text)
+    , _arPackageName                :: !(Maybe Text)
+    , _arPackageSha256Hash          :: !(Maybe Text)
+    , _arApplicationSource          :: !(Maybe ApplicationReportApplicationSource)
+    , _arEvents                     :: !(Maybe [ApplicationEvent])
+    , _arDisplayName                :: !(Maybe Text)
+    , _arInstallerPackageName       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ApplicationReport' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'arVersionCode'
+--
+-- * 'arSigningKeyCertFingerprints'
+--
+-- * 'arState'
+--
+-- * 'arVersionName'
+--
+-- * 'arPackageName'
+--
+-- * 'arPackageSha256Hash'
+--
+-- * 'arApplicationSource'
+--
+-- * 'arEvents'
+--
+-- * 'arDisplayName'
+--
+-- * 'arInstallerPackageName'
+applicationReport
+    :: ApplicationReport
+applicationReport =
+    ApplicationReport'
+    { _arVersionCode = Nothing
+    , _arSigningKeyCertFingerprints = Nothing
+    , _arState = Nothing
+    , _arVersionName = Nothing
+    , _arPackageName = Nothing
+    , _arPackageSha256Hash = Nothing
+    , _arApplicationSource = Nothing
+    , _arEvents = Nothing
+    , _arDisplayName = Nothing
+    , _arInstallerPackageName = Nothing
+    }
+
+-- | The app version code, which can be used to determine whether one version
+-- is more recent than another.
+arVersionCode :: Lens' ApplicationReport (Maybe Int32)
+arVersionCode
+  = lens _arVersionCode
+      (\ s a -> s{_arVersionCode = a})
+      . mapping _Coerce
+
+-- | The SHA-1 hash of each android.content.pm.Signature
+-- (https:\/\/developer.android.com\/reference\/android\/content\/pm\/Signature.html)
+-- associated with the app package. Each byte of each hash value is
+-- represented as a two-digit hexadecimal number.
+arSigningKeyCertFingerprints :: Lens' ApplicationReport [Text]
+arSigningKeyCertFingerprints
+  = lens _arSigningKeyCertFingerprints
+      (\ s a -> s{_arSigningKeyCertFingerprints = a})
+      . _Default
+      . _Coerce
+
+-- | Application state.
+arState :: Lens' ApplicationReport (Maybe ApplicationReportState)
+arState = lens _arState (\ s a -> s{_arState = a})
+
+-- | The app version as displayed to the user.
+arVersionName :: Lens' ApplicationReport (Maybe Text)
+arVersionName
+  = lens _arVersionName
+      (\ s a -> s{_arVersionName = a})
+
+-- | Package name of the app.
+arPackageName :: Lens' ApplicationReport (Maybe Text)
+arPackageName
+  = lens _arPackageName
+      (\ s a -> s{_arPackageName = a})
+
+-- | The SHA-256 hash of the app\'s APK file, which can be used to verify the
+-- app hasn\'t been modified. Each byte of the hash value is represented as
+-- a two-digit hexadecimal number.
+arPackageSha256Hash :: Lens' ApplicationReport (Maybe Text)
+arPackageSha256Hash
+  = lens _arPackageSha256Hash
+      (\ s a -> s{_arPackageSha256Hash = a})
+
+-- | The source of the package.
+arApplicationSource :: Lens' ApplicationReport (Maybe ApplicationReportApplicationSource)
+arApplicationSource
+  = lens _arApplicationSource
+      (\ s a -> s{_arApplicationSource = a})
+
+-- | List of app events. The most recent 20 events are stored in the list.
+arEvents :: Lens' ApplicationReport [ApplicationEvent]
+arEvents
+  = lens _arEvents (\ s a -> s{_arEvents = a}) .
+      _Default
+      . _Coerce
+
+-- | The display name of the app.
+arDisplayName :: Lens' ApplicationReport (Maybe Text)
+arDisplayName
+  = lens _arDisplayName
+      (\ s a -> s{_arDisplayName = a})
+
+-- | The package name of the app that installed this app.
+arInstallerPackageName :: Lens' ApplicationReport (Maybe Text)
+arInstallerPackageName
+  = lens _arInstallerPackageName
+      (\ s a -> s{_arInstallerPackageName = a})
+
+instance FromJSON ApplicationReport where
+        parseJSON
+          = withObject "ApplicationReport"
+              (\ o ->
+                 ApplicationReport' <$>
+                   (o .:? "versionCode") <*>
+                     (o .:? "signingKeyCertFingerprints" .!= mempty)
+                     <*> (o .:? "state")
+                     <*> (o .:? "versionName")
+                     <*> (o .:? "packageName")
+                     <*> (o .:? "packageSha256Hash")
+                     <*> (o .:? "applicationSource")
+                     <*> (o .:? "events" .!= mempty)
+                     <*> (o .:? "displayName")
+                     <*> (o .:? "installerPackageName"))
+
+instance ToJSON ApplicationReport where
+        toJSON ApplicationReport'{..}
+          = object
+              (catMaybes
+                 [("versionCode" .=) <$> _arVersionCode,
+                  ("signingKeyCertFingerprints" .=) <$>
+                    _arSigningKeyCertFingerprints,
+                  ("state" .=) <$> _arState,
+                  ("versionName" .=) <$> _arVersionName,
+                  ("packageName" .=) <$> _arPackageName,
+                  ("packageSha256Hash" .=) <$> _arPackageSha256Hash,
+                  ("applicationSource" .=) <$> _arApplicationSource,
+                  ("events" .=) <$> _arEvents,
+                  ("displayName" .=) <$> _arDisplayName,
+                  ("installerPackageName" .=) <$>
+                    _arInstallerPackageName])
+
+-- | An enrollment token.
+--
+-- /See:/ 'enrollmentToken' smart constructor.
+data EnrollmentToken = EnrollmentToken'
+    { _etPolicyName          :: !(Maybe Text)
+    , _etValue               :: !(Maybe Text)
+    , _etQrCode              :: !(Maybe Text)
+    , _etAdditionalData      :: !(Maybe Text)
+    , _etUser                :: !(Maybe User)
+    , _etName                :: !(Maybe Text)
+    , _etOneTimeOnly         :: !(Maybe Bool)
+    , _etExpirationTimestamp :: !(Maybe DateTime')
+    , _etDuration            :: !(Maybe GDuration)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EnrollmentToken' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'etPolicyName'
+--
+-- * 'etValue'
+--
+-- * 'etQrCode'
+--
+-- * 'etAdditionalData'
+--
+-- * 'etUser'
+--
+-- * 'etName'
+--
+-- * 'etOneTimeOnly'
+--
+-- * 'etExpirationTimestamp'
+--
+-- * 'etDuration'
+enrollmentToken
+    :: EnrollmentToken
+enrollmentToken =
+    EnrollmentToken'
+    { _etPolicyName = Nothing
+    , _etValue = Nothing
+    , _etQrCode = Nothing
+    , _etAdditionalData = Nothing
+    , _etUser = Nothing
+    , _etName = Nothing
+    , _etOneTimeOnly = Nothing
+    , _etExpirationTimestamp = Nothing
+    , _etDuration = Nothing
+    }
+
+-- | The name of the policy initially applied to the enrolled device, in the
+-- form enterprises\/{enterpriseId}\/policies\/{policyId}. If not
+-- specified, the policy_name for the device’s user is applied. If
+-- user_name is also not specified,
+-- enterprises\/{enterpriseId}\/policies\/default is applied by default.
+-- When updating this field, you can specify only the policyId as long as
+-- the policyId doesn’t contain any slashes. The rest of the policy name
+-- will be inferred.
+etPolicyName :: Lens' EnrollmentToken (Maybe Text)
+etPolicyName
+  = lens _etPolicyName (\ s a -> s{_etPolicyName = a})
+
+-- | The token value that\'s passed to the device and authorizes the device
+-- to enroll. This is a read-only field generated by the server.
+etValue :: Lens' EnrollmentToken (Maybe Text)
+etValue = lens _etValue (\ s a -> s{_etValue = a})
+
+-- | A JSON string whose UTF-8 representation can be used to generate a QR
+-- code to enroll a device with this enrollment token. To enroll a device
+-- using NFC, the NFC record must contain a serialized java.util.Properties
+-- representation of the properties in the JSON.
+etQrCode :: Lens' EnrollmentToken (Maybe Text)
+etQrCode = lens _etQrCode (\ s a -> s{_etQrCode = a})
+
+-- | Optional, arbitrary data associated with the enrollment token. This
+-- could contain, for example, the ID of an org unit the device is assigned
+-- to after enrollment. After a device enrolls with the token, this data
+-- will be exposed in the enrollment_token_data field of the Device
+-- resource. The data must be 1024 characters or less; otherwise, the
+-- creation request will fail.
+etAdditionalData :: Lens' EnrollmentToken (Maybe Text)
+etAdditionalData
+  = lens _etAdditionalData
+      (\ s a -> s{_etAdditionalData = a})
+
+-- | The user associated with this enrollment token. If it\'s specified when
+-- the enrollment token is created and the user does not exist, the user
+-- will be created. This field must not contain personally identifiable
+-- information. Only the account_identifier field needs to be set.
+etUser :: Lens' EnrollmentToken (Maybe User)
+etUser = lens _etUser (\ s a -> s{_etUser = a})
+
+-- | The name of the enrollment token, which is generated by the server
+-- during creation, in the form
+-- enterprises\/{enterpriseId}\/enrollmentTokens\/{enrollmentTokenId}.
+etName :: Lens' EnrollmentToken (Maybe Text)
+etName = lens _etName (\ s a -> s{_etName = a})
+
+-- | Whether the enrollment token is for one time use only. If the flag is
+-- set to true, only one device can use it for registration.
+etOneTimeOnly :: Lens' EnrollmentToken (Maybe Bool)
+etOneTimeOnly
+  = lens _etOneTimeOnly
+      (\ s a -> s{_etOneTimeOnly = a})
+
+-- | The expiration time of the token. This is a read-only field generated by
+-- the server.
+etExpirationTimestamp :: Lens' EnrollmentToken (Maybe UTCTime)
+etExpirationTimestamp
+  = lens _etExpirationTimestamp
+      (\ s a -> s{_etExpirationTimestamp = a})
+      . mapping _DateTime
+
+-- | The length of time the enrollment token is valid, ranging from 1 minute
+-- to 30 days. If not specified, the default duration is 1 hour.
+etDuration :: Lens' EnrollmentToken (Maybe Scientific)
+etDuration
+  = lens _etDuration (\ s a -> s{_etDuration = a}) .
+      mapping _GDuration
+
+instance FromJSON EnrollmentToken where
+        parseJSON
+          = withObject "EnrollmentToken"
+              (\ o ->
+                 EnrollmentToken' <$>
+                   (o .:? "policyName") <*> (o .:? "value") <*>
+                     (o .:? "qrCode")
+                     <*> (o .:? "additionalData")
+                     <*> (o .:? "user")
+                     <*> (o .:? "name")
+                     <*> (o .:? "oneTimeOnly")
+                     <*> (o .:? "expirationTimestamp")
+                     <*> (o .:? "duration"))
+
+instance ToJSON EnrollmentToken where
+        toJSON EnrollmentToken'{..}
+          = object
+              (catMaybes
+                 [("policyName" .=) <$> _etPolicyName,
+                  ("value" .=) <$> _etValue,
+                  ("qrCode" .=) <$> _etQrCode,
+                  ("additionalData" .=) <$> _etAdditionalData,
+                  ("user" .=) <$> _etUser, ("name" .=) <$> _etName,
+                  ("oneTimeOnly" .=) <$> _etOneTimeOnly,
+                  ("expirationTimestamp" .=) <$>
+                    _etExpirationTimestamp,
+                  ("duration" .=) <$> _etDuration])
+
+-- | Managed configuration applied to the app. The format for the
+-- configuration is dictated by the ManagedProperty values supported by the
+-- app. Each field name in the managed configuration must match the key
+-- field of the ManagedProperty. The field value must be compatible with
+-- the type of the ManagedProperty:
+-- >   -------------- ------------------
+-- >   /type/         /JSON value/
+-- >   BOOL           true or false
+-- >   STRING         string
+-- >   INTEGER        number
+-- >   CHOICE         string
+-- >   MULTISELECT    array of strings
+-- >   HIDDEN         string
+-- >   BUNDLE_ARRAY   array of objects
+-- >   -------------- ------------------
+--
+-- /See:/ 'applicationPolicyManagedConfiguration' smart constructor.
+newtype ApplicationPolicyManagedConfiguration = ApplicationPolicyManagedConfiguration'
+    { _apmcAddtional :: HashMap Text JSONValue
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ApplicationPolicyManagedConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'apmcAddtional'
+applicationPolicyManagedConfiguration
+    :: HashMap Text JSONValue -- ^ 'apmcAddtional'
+    -> ApplicationPolicyManagedConfiguration
+applicationPolicyManagedConfiguration pApmcAddtional_ =
+    ApplicationPolicyManagedConfiguration'
+    { _apmcAddtional = _Coerce # pApmcAddtional_
+    }
+
+-- | Properties of the object.
+apmcAddtional :: Lens' ApplicationPolicyManagedConfiguration (HashMap Text JSONValue)
+apmcAddtional
+  = lens _apmcAddtional
+      (\ s a -> s{_apmcAddtional = a})
+      . _Coerce
+
+instance FromJSON
+         ApplicationPolicyManagedConfiguration where
+        parseJSON
+          = withObject "ApplicationPolicyManagedConfiguration"
+              (\ o ->
+                 ApplicationPolicyManagedConfiguration' <$>
+                   (parseJSONObject o))
+
+instance ToJSON ApplicationPolicyManagedConfiguration
+         where
+        toJSON = toJSON . _apmcAddtional
+
+-- | Settings controlling the behavior of status reports.
+--
+-- /See:/ 'statusReportingSettings' smart constructor.
+data StatusReportingSettings = StatusReportingSettings'
+    { _srsSoftwareInfoEnabled          :: !(Maybe Bool)
+    , _srsHardwareStatusEnabled        :: !(Maybe Bool)
+    , _srsPowerManagementEventsEnabled :: !(Maybe Bool)
+    , _srsDisplayInfoEnabled           :: !(Maybe Bool)
+    , _srsApplicationReportsEnabled    :: !(Maybe Bool)
+    , _srsMemoryInfoEnabled            :: !(Maybe Bool)
+    , _srsNetworkInfoEnabled           :: !(Maybe Bool)
+    , _srsDeviceSettingsEnabled        :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StatusReportingSettings' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'srsSoftwareInfoEnabled'
+--
+-- * 'srsHardwareStatusEnabled'
+--
+-- * 'srsPowerManagementEventsEnabled'
+--
+-- * 'srsDisplayInfoEnabled'
+--
+-- * 'srsApplicationReportsEnabled'
+--
+-- * 'srsMemoryInfoEnabled'
+--
+-- * 'srsNetworkInfoEnabled'
+--
+-- * 'srsDeviceSettingsEnabled'
+statusReportingSettings
+    :: StatusReportingSettings
+statusReportingSettings =
+    StatusReportingSettings'
+    { _srsSoftwareInfoEnabled = Nothing
+    , _srsHardwareStatusEnabled = Nothing
+    , _srsPowerManagementEventsEnabled = Nothing
+    , _srsDisplayInfoEnabled = Nothing
+    , _srsApplicationReportsEnabled = Nothing
+    , _srsMemoryInfoEnabled = Nothing
+    , _srsNetworkInfoEnabled = Nothing
+    , _srsDeviceSettingsEnabled = Nothing
+    }
+
+-- | Whether software info reporting is enabled.
+srsSoftwareInfoEnabled :: Lens' StatusReportingSettings (Maybe Bool)
+srsSoftwareInfoEnabled
+  = lens _srsSoftwareInfoEnabled
+      (\ s a -> s{_srsSoftwareInfoEnabled = a})
+
+-- | Whether hardware status reporting is enabled.
+srsHardwareStatusEnabled :: Lens' StatusReportingSettings (Maybe Bool)
+srsHardwareStatusEnabled
+  = lens _srsHardwareStatusEnabled
+      (\ s a -> s{_srsHardwareStatusEnabled = a})
+
+-- | Whether power management event reporting is enabled.
+srsPowerManagementEventsEnabled :: Lens' StatusReportingSettings (Maybe Bool)
+srsPowerManagementEventsEnabled
+  = lens _srsPowerManagementEventsEnabled
+      (\ s a -> s{_srsPowerManagementEventsEnabled = a})
+
+-- | Whether displays reporting is enabled.
+srsDisplayInfoEnabled :: Lens' StatusReportingSettings (Maybe Bool)
+srsDisplayInfoEnabled
+  = lens _srsDisplayInfoEnabled
+      (\ s a -> s{_srsDisplayInfoEnabled = a})
+
+-- | Whether app reports are enabled.
+srsApplicationReportsEnabled :: Lens' StatusReportingSettings (Maybe Bool)
+srsApplicationReportsEnabled
+  = lens _srsApplicationReportsEnabled
+      (\ s a -> s{_srsApplicationReportsEnabled = a})
+
+-- | Whether memory reporting is enabled.
+srsMemoryInfoEnabled :: Lens' StatusReportingSettings (Maybe Bool)
+srsMemoryInfoEnabled
+  = lens _srsMemoryInfoEnabled
+      (\ s a -> s{_srsMemoryInfoEnabled = a})
+
+-- | Whether network info reporting is enabled.
+srsNetworkInfoEnabled :: Lens' StatusReportingSettings (Maybe Bool)
+srsNetworkInfoEnabled
+  = lens _srsNetworkInfoEnabled
+      (\ s a -> s{_srsNetworkInfoEnabled = a})
+
+-- | Whether device settings reporting is enabled.
+srsDeviceSettingsEnabled :: Lens' StatusReportingSettings (Maybe Bool)
+srsDeviceSettingsEnabled
+  = lens _srsDeviceSettingsEnabled
+      (\ s a -> s{_srsDeviceSettingsEnabled = a})
+
+instance FromJSON StatusReportingSettings where
+        parseJSON
+          = withObject "StatusReportingSettings"
+              (\ o ->
+                 StatusReportingSettings' <$>
+                   (o .:? "softwareInfoEnabled") <*>
+                     (o .:? "hardwareStatusEnabled")
+                     <*> (o .:? "powerManagementEventsEnabled")
+                     <*> (o .:? "displayInfoEnabled")
+                     <*> (o .:? "applicationReportsEnabled")
+                     <*> (o .:? "memoryInfoEnabled")
+                     <*> (o .:? "networkInfoEnabled")
+                     <*> (o .:? "deviceSettingsEnabled"))
+
+instance ToJSON StatusReportingSettings where
+        toJSON StatusReportingSettings'{..}
+          = object
+              (catMaybes
+                 [("softwareInfoEnabled" .=) <$>
+                    _srsSoftwareInfoEnabled,
+                  ("hardwareStatusEnabled" .=) <$>
+                    _srsHardwareStatusEnabled,
+                  ("powerManagementEventsEnabled" .=) <$>
+                    _srsPowerManagementEventsEnabled,
+                  ("displayInfoEnabled" .=) <$> _srsDisplayInfoEnabled,
+                  ("applicationReportsEnabled" .=) <$>
+                    _srsApplicationReportsEnabled,
+                  ("memoryInfoEnabled" .=) <$> _srsMemoryInfoEnabled,
+                  ("networkInfoEnabled" .=) <$> _srsNetworkInfoEnabled,
+                  ("deviceSettingsEnabled" .=) <$>
+                    _srsDeviceSettingsEnabled])
+
+-- | Policy for an individual app.
+--
+-- /See:/ 'applicationPolicy' smart constructor.
+data ApplicationPolicy = ApplicationPolicy'
+    { _apDelegatedScopes              :: !(Maybe [Text])
+    , _apPackageName                  :: !(Maybe Text)
+    , _apManagedConfiguration         :: !(Maybe ApplicationPolicyManagedConfiguration)
+    , _apDefaultPermissionPolicy      :: !(Maybe ApplicationPolicyDefaultPermissionPolicy)
+    , _apDisabled                     :: !(Maybe Bool)
+    , _apLockTaskAllowed              :: !(Maybe Bool)
+    , _apPermissionGrants             :: !(Maybe [PermissionGrant])
+    , _apManagedConfigurationTemplate :: !(Maybe ManagedConfigurationTemplate)
+    , _apMinimumVersionCode           :: !(Maybe (Textual Int32))
+    , _apInstallType                  :: !(Maybe ApplicationPolicyInstallType)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ApplicationPolicy' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'apDelegatedScopes'
+--
+-- * 'apPackageName'
+--
+-- * 'apManagedConfiguration'
+--
+-- * 'apDefaultPermissionPolicy'
+--
+-- * 'apDisabled'
+--
+-- * 'apLockTaskAllowed'
+--
+-- * 'apPermissionGrants'
+--
+-- * 'apManagedConfigurationTemplate'
+--
+-- * 'apMinimumVersionCode'
+--
+-- * 'apInstallType'
+applicationPolicy
+    :: ApplicationPolicy
+applicationPolicy =
+    ApplicationPolicy'
+    { _apDelegatedScopes = Nothing
+    , _apPackageName = Nothing
+    , _apManagedConfiguration = Nothing
+    , _apDefaultPermissionPolicy = Nothing
+    , _apDisabled = Nothing
+    , _apLockTaskAllowed = Nothing
+    , _apPermissionGrants = Nothing
+    , _apManagedConfigurationTemplate = Nothing
+    , _apMinimumVersionCode = Nothing
+    , _apInstallType = Nothing
+    }
+
+-- | The scopes delegated to the app from Android Device Policy.
+apDelegatedScopes :: Lens' ApplicationPolicy [Text]
+apDelegatedScopes
+  = lens _apDelegatedScopes
+      (\ s a -> s{_apDelegatedScopes = a})
+      . _Default
+      . _Coerce
+
+-- | The package name of the app. For example, com.google.android.youtube for
+-- the YouTube app.
+apPackageName :: Lens' ApplicationPolicy (Maybe Text)
+apPackageName
+  = lens _apPackageName
+      (\ s a -> s{_apPackageName = a})
+
+-- | Managed configuration applied to the app. The format for the
+-- configuration is dictated by the ManagedProperty values supported by the
+-- app. Each field name in the managed configuration must match the key
+-- field of the ManagedProperty. The field value must be compatible with
+-- the type of the ManagedProperty:
+-- >   -------------- ------------------
+-- >   /type/         /JSON value/
+-- >   BOOL           true or false
+-- >   STRING         string
+-- >   INTEGER        number
+-- >   CHOICE         string
+-- >   MULTISELECT    array of strings
+-- >   HIDDEN         string
+-- >   BUNDLE_ARRAY   array of objects
+-- >   -------------- ------------------
+apManagedConfiguration :: Lens' ApplicationPolicy (Maybe ApplicationPolicyManagedConfiguration)
+apManagedConfiguration
+  = lens _apManagedConfiguration
+      (\ s a -> s{_apManagedConfiguration = a})
+
+-- | The default policy for all permissions requested by the app. If
+-- specified, this overrides the policy-level default_permission_policy
+-- which applies to all apps. It does not override the permission_grants
+-- which applies to all apps.
+apDefaultPermissionPolicy :: Lens' ApplicationPolicy (Maybe ApplicationPolicyDefaultPermissionPolicy)
+apDefaultPermissionPolicy
+  = lens _apDefaultPermissionPolicy
+      (\ s a -> s{_apDefaultPermissionPolicy = a})
+
+-- | Whether the app is disabled. When disabled, the app data is still
+-- preserved.
+apDisabled :: Lens' ApplicationPolicy (Maybe Bool)
+apDisabled
+  = lens _apDisabled (\ s a -> s{_apDisabled = a})
+
+-- | Whether the app is allowed to lock itself in full-screen mode.
+apLockTaskAllowed :: Lens' ApplicationPolicy (Maybe Bool)
+apLockTaskAllowed
+  = lens _apLockTaskAllowed
+      (\ s a -> s{_apLockTaskAllowed = a})
+
+-- | Explicit permission grants or denials for the app. These values override
+-- the default_permission_policy and permission_grants which apply to all
+-- apps.
+apPermissionGrants :: Lens' ApplicationPolicy [PermissionGrant]
+apPermissionGrants
+  = lens _apPermissionGrants
+      (\ s a -> s{_apPermissionGrants = a})
+      . _Default
+      . _Coerce
+
+-- | The managed configurations template for the app, saved from the managed
+-- configurations iframe. This field is ignored if managed_configuration is
+-- set.
+apManagedConfigurationTemplate :: Lens' ApplicationPolicy (Maybe ManagedConfigurationTemplate)
+apManagedConfigurationTemplate
+  = lens _apManagedConfigurationTemplate
+      (\ s a -> s{_apManagedConfigurationTemplate = a})
+
+-- | The minimum version of the app that runs on the device. If set, the
+-- device attempts to update the app to at least this version code. If the
+-- app is not up-to-date, the device will contain a NonComplianceDetail
+-- with non_compliance_reason set to APP_NOT_UPDATED. The app must already
+-- be published to Google Play with a version code greater than or equal to
+-- this value. At most 20 apps may specify a minimum version code per
+-- policy.
+apMinimumVersionCode :: Lens' ApplicationPolicy (Maybe Int32)
+apMinimumVersionCode
+  = lens _apMinimumVersionCode
+      (\ s a -> s{_apMinimumVersionCode = a})
+      . mapping _Coerce
+
+-- | The type of installation to perform.
+apInstallType :: Lens' ApplicationPolicy (Maybe ApplicationPolicyInstallType)
+apInstallType
+  = lens _apInstallType
+      (\ s a -> s{_apInstallType = a})
+
+instance FromJSON ApplicationPolicy where
+        parseJSON
+          = withObject "ApplicationPolicy"
+              (\ o ->
+                 ApplicationPolicy' <$>
+                   (o .:? "delegatedScopes" .!= mempty) <*>
+                     (o .:? "packageName")
+                     <*> (o .:? "managedConfiguration")
+                     <*> (o .:? "defaultPermissionPolicy")
+                     <*> (o .:? "disabled")
+                     <*> (o .:? "lockTaskAllowed")
+                     <*> (o .:? "permissionGrants" .!= mempty)
+                     <*> (o .:? "managedConfigurationTemplate")
+                     <*> (o .:? "minimumVersionCode")
+                     <*> (o .:? "installType"))
+
+instance ToJSON ApplicationPolicy where
+        toJSON ApplicationPolicy'{..}
+          = object
+              (catMaybes
+                 [("delegatedScopes" .=) <$> _apDelegatedScopes,
+                  ("packageName" .=) <$> _apPackageName,
+                  ("managedConfiguration" .=) <$>
+                    _apManagedConfiguration,
+                  ("defaultPermissionPolicy" .=) <$>
+                    _apDefaultPermissionPolicy,
+                  ("disabled" .=) <$> _apDisabled,
+                  ("lockTaskAllowed" .=) <$> _apLockTaskAllowed,
+                  ("permissionGrants" .=) <$> _apPermissionGrants,
+                  ("managedConfigurationTemplate" .=) <$>
+                    _apManagedConfigurationTemplate,
+                  ("minimumVersionCode" .=) <$> _apMinimumVersionCode,
+                  ("installType" .=) <$> _apInstallType])
+
+-- | Response to a request to list devices for a given enterprise.
+--
+-- /See:/ 'listDevicesResponse' smart constructor.
+data ListDevicesResponse = ListDevicesResponse'
+    { _ldrNextPageToken :: !(Maybe Text)
+    , _ldrDevices       :: !(Maybe [Device])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListDevicesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ldrNextPageToken'
+--
+-- * 'ldrDevices'
+listDevicesResponse
+    :: ListDevicesResponse
+listDevicesResponse =
+    ListDevicesResponse'
+    { _ldrNextPageToken = Nothing
+    , _ldrDevices = Nothing
+    }
+
+-- | If there are more results, a token to retrieve next page of results.
+ldrNextPageToken :: Lens' ListDevicesResponse (Maybe Text)
+ldrNextPageToken
+  = lens _ldrNextPageToken
+      (\ s a -> s{_ldrNextPageToken = a})
+
+-- | The list of devices.
+ldrDevices :: Lens' ListDevicesResponse [Device]
+ldrDevices
+  = lens _ldrDevices (\ s a -> s{_ldrDevices = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON ListDevicesResponse where
+        parseJSON
+          = withObject "ListDevicesResponse"
+              (\ o ->
+                 ListDevicesResponse' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "devices" .!= mempty))
+
+instance ToJSON ListDevicesResponse where
+        toJSON ListDevicesResponse'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _ldrNextPageToken,
+                  ("devices" .=) <$> _ldrDevices])
+
+-- | The managed configurations template for the app, saved from the managed
+-- configurations iframe.
+--
+-- /See:/ 'managedConfigurationTemplate' smart constructor.
+data ManagedConfigurationTemplate = ManagedConfigurationTemplate'
+    { _mctTemplateId             :: !(Maybe Text)
+    , _mctConfigurationVariables :: !(Maybe ManagedConfigurationTemplateConfigurationVariables)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ManagedConfigurationTemplate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mctTemplateId'
+--
+-- * 'mctConfigurationVariables'
+managedConfigurationTemplate
+    :: ManagedConfigurationTemplate
+managedConfigurationTemplate =
+    ManagedConfigurationTemplate'
+    { _mctTemplateId = Nothing
+    , _mctConfigurationVariables = Nothing
+    }
+
+-- | The ID of the managed configurations template.
+mctTemplateId :: Lens' ManagedConfigurationTemplate (Maybe Text)
+mctTemplateId
+  = lens _mctTemplateId
+      (\ s a -> s{_mctTemplateId = a})
+
+-- | Optional, a map containing configuration variables defined for the
+-- configuration.
+mctConfigurationVariables :: Lens' ManagedConfigurationTemplate (Maybe ManagedConfigurationTemplateConfigurationVariables)
+mctConfigurationVariables
+  = lens _mctConfigurationVariables
+      (\ s a -> s{_mctConfigurationVariables = a})
+
+instance FromJSON ManagedConfigurationTemplate where
+        parseJSON
+          = withObject "ManagedConfigurationTemplate"
+              (\ o ->
+                 ManagedConfigurationTemplate' <$>
+                   (o .:? "templateId") <*>
+                     (o .:? "configurationVariables"))
+
+instance ToJSON ManagedConfigurationTemplate where
+        toJSON ManagedConfigurationTemplate'{..}
+          = object
+              (catMaybes
+                 [("templateId" .=) <$> _mctTemplateId,
+                  ("configurationVariables" .=) <$>
+                    _mctConfigurationVariables])
+
+-- | The configuration applied to an enterprise.
+--
+-- /See:/ 'enterprise' smart constructor.
+data Enterprise = Enterprise'
+    { _eAppAutoApprovalEnabled   :: !(Maybe Bool)
+    , _eEnabledNotificationTypes :: !(Maybe [Text])
+    , _eSigninDetails            :: !(Maybe [SigninDetail])
+    , _eName                     :: !(Maybe Text)
+    , _ePubsubTopic              :: !(Maybe Text)
+    , _eEnterpriseDisplayName    :: !(Maybe Text)
+    , _eLogo                     :: !(Maybe ExternalData)
+    , _eTermsAndConditions       :: !(Maybe [TermsAndConditions])
+    , _ePrimaryColor             :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Enterprise' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'eAppAutoApprovalEnabled'
+--
+-- * 'eEnabledNotificationTypes'
+--
+-- * 'eSigninDetails'
+--
+-- * 'eName'
+--
+-- * 'ePubsubTopic'
+--
+-- * 'eEnterpriseDisplayName'
+--
+-- * 'eLogo'
+--
+-- * 'eTermsAndConditions'
+--
+-- * 'ePrimaryColor'
+enterprise
+    :: Enterprise
+enterprise =
+    Enterprise'
+    { _eAppAutoApprovalEnabled = Nothing
+    , _eEnabledNotificationTypes = Nothing
+    , _eSigninDetails = Nothing
+    , _eName = Nothing
+    , _ePubsubTopic = Nothing
+    , _eEnterpriseDisplayName = Nothing
+    , _eLogo = Nothing
+    , _eTermsAndConditions = Nothing
+    , _ePrimaryColor = Nothing
+    }
+
+-- | Deprecated and unused.
+eAppAutoApprovalEnabled :: Lens' Enterprise (Maybe Bool)
+eAppAutoApprovalEnabled
+  = lens _eAppAutoApprovalEnabled
+      (\ s a -> s{_eAppAutoApprovalEnabled = a})
+
+-- | The types of Google Pub\/Sub notifications enabled for the enterprise.
+eEnabledNotificationTypes :: Lens' Enterprise [Text]
+eEnabledNotificationTypes
+  = lens _eEnabledNotificationTypes
+      (\ s a -> s{_eEnabledNotificationTypes = a})
+      . _Default
+      . _Coerce
+
+-- | Sign-in details of the enterprise. Maximum of 1 SigninDetail is
+-- supported.
+eSigninDetails :: Lens' Enterprise [SigninDetail]
+eSigninDetails
+  = lens _eSigninDetails
+      (\ s a -> s{_eSigninDetails = a})
+      . _Default
+      . _Coerce
+
+-- | The name of the enterprise which is generated by the server during
+-- creation, in the form enterprises\/{enterpriseId}.
+eName :: Lens' Enterprise (Maybe Text)
+eName = lens _eName (\ s a -> s{_eName = a})
+
+-- | The topic that Cloud Pub\/Sub notifications are published to, in the
+-- form projects\/{project}\/topics\/{topic}. This field is only required
+-- if Pub\/Sub notifications are enabled.
+ePubsubTopic :: Lens' Enterprise (Maybe Text)
+ePubsubTopic
+  = lens _ePubsubTopic (\ s a -> s{_ePubsubTopic = a})
+
+-- | The name of the enterprise displayed to users.
+eEnterpriseDisplayName :: Lens' Enterprise (Maybe Text)
+eEnterpriseDisplayName
+  = lens _eEnterpriseDisplayName
+      (\ s a -> s{_eEnterpriseDisplayName = a})
+
+-- | An image displayed as a logo during device provisioning. Supported types
+-- are: image\/bmp, image\/gif, image\/x-ico, image\/jpeg, image\/png,
+-- image\/webp, image\/vnd.wap.wbmp, image\/x-adobe-dng.
+eLogo :: Lens' Enterprise (Maybe ExternalData)
+eLogo = lens _eLogo (\ s a -> s{_eLogo = a})
+
+-- | Terms and conditions that must be accepted when provisioning a device
+-- for this enterprise. A page of terms is generated for each value in this
+-- list.
+eTermsAndConditions :: Lens' Enterprise [TermsAndConditions]
+eTermsAndConditions
+  = lens _eTermsAndConditions
+      (\ s a -> s{_eTermsAndConditions = a})
+      . _Default
+      . _Coerce
+
+-- | A color in RGB format that indicates the predominant color to display in
+-- the device management app UI. The color components are stored as
+-- follows: (red \<\< 16) | (green \<\< 8) | blue, where the value of each
+-- component is between 0 and 255, inclusive.
+ePrimaryColor :: Lens' Enterprise (Maybe Int32)
+ePrimaryColor
+  = lens _ePrimaryColor
+      (\ s a -> s{_ePrimaryColor = a})
+      . mapping _Coerce
+
+instance FromJSON Enterprise where
+        parseJSON
+          = withObject "Enterprise"
+              (\ o ->
+                 Enterprise' <$>
+                   (o .:? "appAutoApprovalEnabled") <*>
+                     (o .:? "enabledNotificationTypes" .!= mempty)
+                     <*> (o .:? "signinDetails" .!= mempty)
+                     <*> (o .:? "name")
+                     <*> (o .:? "pubsubTopic")
+                     <*> (o .:? "enterpriseDisplayName")
+                     <*> (o .:? "logo")
+                     <*> (o .:? "termsAndConditions" .!= mempty)
+                     <*> (o .:? "primaryColor"))
+
+instance ToJSON Enterprise where
+        toJSON Enterprise'{..}
+          = object
+              (catMaybes
+                 [("appAutoApprovalEnabled" .=) <$>
+                    _eAppAutoApprovalEnabled,
+                  ("enabledNotificationTypes" .=) <$>
+                    _eEnabledNotificationTypes,
+                  ("signinDetails" .=) <$> _eSigninDetails,
+                  ("name" .=) <$> _eName,
+                  ("pubsubTopic" .=) <$> _ePubsubTopic,
+                  ("enterpriseDisplayName" .=) <$>
+                    _eEnterpriseDisplayName,
+                  ("logo" .=) <$> _eLogo,
+                  ("termsAndConditions" .=) <$> _eTermsAndConditions,
+                  ("primaryColor" .=) <$> _ePrimaryColor])
+
+-- | An event related to memory and storage measurements.
+--
+-- /See:/ 'memoryEvent' smart constructor.
+data MemoryEvent = MemoryEvent'
+    { _meByteCount  :: !(Maybe (Textual Int64))
+    , _meEventType  :: !(Maybe MemoryEventEventType)
+    , _meCreateTime :: !(Maybe DateTime')
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MemoryEvent' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'meByteCount'
+--
+-- * 'meEventType'
+--
+-- * 'meCreateTime'
+memoryEvent
+    :: MemoryEvent
+memoryEvent =
+    MemoryEvent'
+    { _meByteCount = Nothing
+    , _meEventType = Nothing
+    , _meCreateTime = Nothing
+    }
+
+-- | The number of free bytes in the medium, or for
+-- EXTERNAL_STORAGE_DETECTED, the total capacity in bytes of the storage
+-- medium.
+meByteCount :: Lens' MemoryEvent (Maybe Int64)
+meByteCount
+  = lens _meByteCount (\ s a -> s{_meByteCount = a}) .
+      mapping _Coerce
+
+-- | Event type.
+meEventType :: Lens' MemoryEvent (Maybe MemoryEventEventType)
+meEventType
+  = lens _meEventType (\ s a -> s{_meEventType = a})
+
+-- | The creation time of the event.
+meCreateTime :: Lens' MemoryEvent (Maybe UTCTime)
+meCreateTime
+  = lens _meCreateTime (\ s a -> s{_meCreateTime = a})
+      . mapping _DateTime
+
+instance FromJSON MemoryEvent where
+        parseJSON
+          = withObject "MemoryEvent"
+              (\ o ->
+                 MemoryEvent' <$>
+                   (o .:? "byteCount") <*> (o .:? "eventType") <*>
+                     (o .:? "createTime"))
+
+instance ToJSON MemoryEvent where
+        toJSON MemoryEvent'{..}
+          = object
+              (catMaybes
+                 [("byteCount" .=) <$> _meByteCount,
+                  ("eventType" .=) <$> _meEventType,
+                  ("createTime" .=) <$> _meCreateTime])
+
+-- | Configuration for an Android permission and its grant state.
+--
+-- /See:/ 'permissionGrant' smart constructor.
+data PermissionGrant = PermissionGrant'
+    { _pgPolicy     :: !(Maybe PermissionGrantPolicy)
+    , _pgPermission :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PermissionGrant' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pgPolicy'
+--
+-- * 'pgPermission'
+permissionGrant
+    :: PermissionGrant
+permissionGrant =
+    PermissionGrant'
+    { _pgPolicy = Nothing
+    , _pgPermission = Nothing
+    }
+
+-- | The policy for granting the permission.
+pgPolicy :: Lens' PermissionGrant (Maybe PermissionGrantPolicy)
+pgPolicy = lens _pgPolicy (\ s a -> s{_pgPolicy = a})
+
+-- | The Android permission or group, e.g. android.permission.READ_CALENDAR
+-- or android.permission_group.CALENDAR.
+pgPermission :: Lens' PermissionGrant (Maybe Text)
+pgPermission
+  = lens _pgPermission (\ s a -> s{_pgPermission = a})
+
+instance FromJSON PermissionGrant where
+        parseJSON
+          = withObject "PermissionGrant"
+              (\ o ->
+                 PermissionGrant' <$>
+                   (o .:? "policy") <*> (o .:? "permission"))
+
+instance ToJSON PermissionGrant where
+        toJSON PermissionGrant'{..}
+          = object
+              (catMaybes
+                 [("policy" .=) <$> _pgPolicy,
+                  ("permission" .=) <$> _pgPermission])
+
+-- | A resource containing sign in details for an enterprise.
+--
+-- /See:/ 'signinDetail' smart constructor.
+data SigninDetail = SigninDetail'
+    { _sdSigninURL             :: !(Maybe Text)
+    , _sdQrCode                :: !(Maybe Text)
+    , _sdSigninEnrollmentToken :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SigninDetail' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sdSigninURL'
+--
+-- * 'sdQrCode'
+--
+-- * 'sdSigninEnrollmentToken'
+signinDetail
+    :: SigninDetail
+signinDetail =
+    SigninDetail'
+    { _sdSigninURL = Nothing
+    , _sdQrCode = Nothing
+    , _sdSigninEnrollmentToken = Nothing
+    }
+
+-- | Sign-in URL for authentication when device is provisioned with a sign-in
+-- enrollment token. The sign-in endpoint should finish authentication flow
+-- with a URL in the form of
+-- https:\/\/enterprise.google.com\/android\/enroll?et= for a successful
+-- login, or https:\/\/enterprise.google.com\/android\/enroll\/invalid for
+-- a failed login.
+sdSigninURL :: Lens' SigninDetail (Maybe Text)
+sdSigninURL
+  = lens _sdSigninURL (\ s a -> s{_sdSigninURL = a})
+
+-- | A JSON string whose UTF-8 representation can be used to generate a QR
+-- code to enroll a device with this enrollment token. To enroll a device
+-- using NFC, the NFC record must contain a serialized java.util.Properties
+-- representation of the properties in the JSON. This is a read-only field
+-- generated by the server.
+sdQrCode :: Lens' SigninDetail (Maybe Text)
+sdQrCode = lens _sdQrCode (\ s a -> s{_sdQrCode = a})
+
+-- | An enterprise wide enrollment token used to trigger custom sign-in flow.
+-- This is a read-only field generated by the server.
+sdSigninEnrollmentToken :: Lens' SigninDetail (Maybe Text)
+sdSigninEnrollmentToken
+  = lens _sdSigninEnrollmentToken
+      (\ s a -> s{_sdSigninEnrollmentToken = a})
+
+instance FromJSON SigninDetail where
+        parseJSON
+          = withObject "SigninDetail"
+              (\ o ->
+                 SigninDetail' <$>
+                   (o .:? "signinUrl") <*> (o .:? "qrCode") <*>
+                     (o .:? "signinEnrollmentToken"))
+
+instance ToJSON SigninDetail where
+        toJSON SigninDetail'{..}
+          = object
+              (catMaybes
+                 [("signinUrl" .=) <$> _sdSigninURL,
+                  ("qrCode" .=) <$> _sdQrCode,
+                  ("signinEnrollmentToken" .=) <$>
+                    _sdSigninEnrollmentToken])
+
+-- | An enterprise signup URL.
+--
+-- /See:/ 'signupURL' smart constructor.
+data SignupURL = SignupURL'
+    { _suURL  :: !(Maybe Text)
+    , _suName :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SignupURL' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'suURL'
+--
+-- * 'suName'
+signupURL
+    :: SignupURL
+signupURL =
+    SignupURL'
+    { _suURL = Nothing
+    , _suName = Nothing
+    }
+
+-- | A URL where an enterprise admin can register their enterprise. The page
+-- can\'t be rendered in an iframe.
+suURL :: Lens' SignupURL (Maybe Text)
+suURL = lens _suURL (\ s a -> s{_suURL = a})
+
+-- | The name of the resource. Use this value in the signupUrl field when
+-- calling enterprises.create to complete the enterprise signup flow.
+suName :: Lens' SignupURL (Maybe Text)
+suName = lens _suName (\ s a -> s{_suName = a})
+
+instance FromJSON SignupURL where
+        parseJSON
+          = withObject "SignupURL"
+              (\ o ->
+                 SignupURL' <$> (o .:? "url") <*> (o .:? "name"))
+
+instance ToJSON SignupURL where
+        toJSON SignupURL'{..}
+          = object
+              (catMaybes
+                 [("url" .=) <$> _suURL, ("name" .=) <$> _suName])
+
+-- | Device network info.
+--
+-- /See:/ 'networkInfo' smart constructor.
+data NetworkInfo = NetworkInfo'
+    { _niNetworkOperatorName :: !(Maybe Text)
+    , _niMeid                :: !(Maybe Text)
+    , _niImei                :: !(Maybe Text)
+    , _niWifiMACAddress      :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'NetworkInfo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'niNetworkOperatorName'
+--
+-- * 'niMeid'
+--
+-- * 'niImei'
+--
+-- * 'niWifiMACAddress'
+networkInfo
+    :: NetworkInfo
+networkInfo =
+    NetworkInfo'
+    { _niNetworkOperatorName = Nothing
+    , _niMeid = Nothing
+    , _niImei = Nothing
+    , _niWifiMACAddress = Nothing
+    }
+
+-- | Alphabetic name of current registered operator. For example, Vodafone.
+niNetworkOperatorName :: Lens' NetworkInfo (Maybe Text)
+niNetworkOperatorName
+  = lens _niNetworkOperatorName
+      (\ s a -> s{_niNetworkOperatorName = a})
+
+-- | MEID number of the CDMA device. For example, A00000292788E1.
+niMeid :: Lens' NetworkInfo (Maybe Text)
+niMeid = lens _niMeid (\ s a -> s{_niMeid = a})
+
+-- | IMEI number of the GSM device. For example, A1000031212.
+niImei :: Lens' NetworkInfo (Maybe Text)
+niImei = lens _niImei (\ s a -> s{_niImei = a})
+
+-- | Wi-Fi MAC address of the device. For example, 7c:11:11:11:11:11.
+niWifiMACAddress :: Lens' NetworkInfo (Maybe Text)
+niWifiMACAddress
+  = lens _niWifiMACAddress
+      (\ s a -> s{_niWifiMACAddress = a})
+
+instance FromJSON NetworkInfo where
+        parseJSON
+          = withObject "NetworkInfo"
+              (\ o ->
+                 NetworkInfo' <$>
+                   (o .:? "networkOperatorName") <*> (o .:? "meid") <*>
+                     (o .:? "imei")
+                     <*> (o .:? "wifiMacAddress"))
+
+instance ToJSON NetworkInfo where
+        toJSON NetworkInfo'{..}
+          = object
+              (catMaybes
+                 [("networkOperatorName" .=) <$>
+                    _niNetworkOperatorName,
+                  ("meid" .=) <$> _niMeid, ("imei" .=) <$> _niImei,
+                  ("wifiMacAddress" .=) <$> _niWifiMACAddress])
+
+-- | A power management event.
+--
+-- /See:/ 'powerManagementEvent' smart constructor.
+data PowerManagementEvent = PowerManagementEvent'
+    { _pmeBatteryLevel :: !(Maybe (Textual Double))
+    , _pmeEventType    :: !(Maybe PowerManagementEventEventType)
+    , _pmeCreateTime   :: !(Maybe DateTime')
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PowerManagementEvent' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pmeBatteryLevel'
+--
+-- * 'pmeEventType'
+--
+-- * 'pmeCreateTime'
+powerManagementEvent
+    :: PowerManagementEvent
+powerManagementEvent =
+    PowerManagementEvent'
+    { _pmeBatteryLevel = Nothing
+    , _pmeEventType = Nothing
+    , _pmeCreateTime = Nothing
+    }
+
+-- | For BATTERY_LEVEL_COLLECTED events, the battery level as a percentage.
+pmeBatteryLevel :: Lens' PowerManagementEvent (Maybe Double)
+pmeBatteryLevel
+  = lens _pmeBatteryLevel
+      (\ s a -> s{_pmeBatteryLevel = a})
+      . mapping _Coerce
+
+-- | Event type.
+pmeEventType :: Lens' PowerManagementEvent (Maybe PowerManagementEventEventType)
+pmeEventType
+  = lens _pmeEventType (\ s a -> s{_pmeEventType = a})
+
+-- | The creation time of the event.
+pmeCreateTime :: Lens' PowerManagementEvent (Maybe UTCTime)
+pmeCreateTime
+  = lens _pmeCreateTime
+      (\ s a -> s{_pmeCreateTime = a})
+      . mapping _DateTime
+
+instance FromJSON PowerManagementEvent where
+        parseJSON
+          = withObject "PowerManagementEvent"
+              (\ o ->
+                 PowerManagementEvent' <$>
+                   (o .:? "batteryLevel") <*> (o .:? "eventType") <*>
+                     (o .:? "createTime"))
+
+instance ToJSON PowerManagementEvent where
+        toJSON PowerManagementEvent'{..}
+          = object
+              (catMaybes
+                 [("batteryLevel" .=) <$> _pmeBatteryLevel,
+                  ("eventType" .=) <$> _pmeEventType,
+                  ("createTime" .=) <$> _pmeCreateTime])
+
+-- | A policy resources represents a group settings that govern the behavior
+-- of a managed device and the apps installed on it.
+--
+-- /See:/ 'policy' smart constructor.
+data Policy = Policy'
+    { _pBluetoothConfigDisabled            :: !(Maybe Bool)
+    , _pUnmuteMicrophoneDisabled           :: !(Maybe Bool)
+    , _pMountPhysicalMediaDisabled         :: !(Maybe Bool)
+    , _pFrpAdminEmails                     :: !(Maybe [Text])
+    , _pAppAutoUpdatePolicy                :: !(Maybe PolicyAppAutoUpdatePolicy)
+    , _pEncryptionPolicy                   :: !(Maybe PolicyEncryptionPolicy)
+    , _pAndroidDevicePolicyTracks          :: !(Maybe [Text])
+    , _pSafeBootDisabled                   :: !(Maybe Bool)
+    , _pAlwaysOnVPNPackage                 :: !(Maybe AlwaysOnVPNPackage)
+    , _pChoosePrivateKeyRules              :: !(Maybe [ChoosePrivateKeyRule])
+    , _pCredentialsConfigDisabled          :: !(Maybe Bool)
+    , _pRecommendedGlobalProxy             :: !(Maybe ProxyInfo)
+    , _pKeyguardDisabled                   :: !(Maybe Bool)
+    , _pSkipFirstUseHintsEnabled           :: !(Maybe Bool)
+    , _pAdjustVolumeDisabled               :: !(Maybe Bool)
+    , _pDefaultPermissionPolicy            :: !(Maybe PolicyDefaultPermissionPolicy)
+    , _pUninstallAppsDisabled              :: !(Maybe Bool)
+    , _pSetUserIconDisabled                :: !(Maybe Bool)
+    , _pPermittedInputMethods              :: !(Maybe PackageNameList)
+    , _pScreenCaptureDisabled              :: !(Maybe Bool)
+    , _pAddUserDisabled                    :: !(Maybe Bool)
+    , _pShareLocationDisabled              :: !(Maybe Bool)
+    , _pAutoTimeRequired                   :: !(Maybe Bool)
+    , _pInstallAppsDisabled                :: !(Maybe Bool)
+    , _pCreateWindowsDisabled              :: !(Maybe Bool)
+    , _pNetworkResetDisabled               :: !(Maybe Bool)
+    , _pBluetoothContactSharingDisabled    :: !(Maybe Bool)
+    , _pPermissionGrants                   :: !(Maybe [PermissionGrant])
+    , _pShortSupportMessage                :: !(Maybe UserFacingMessage)
+    , _pStayOnPluggedModes                 :: !(Maybe [Text])
+    , _pDataRoamingDisabled                :: !(Maybe Bool)
+    , _pDebuggingFeaturesAllowed           :: !(Maybe Bool)
+    , _pKioskCustomLauncherEnabled         :: !(Maybe Bool)
+    , _pWifiConfigsLockdownEnabled         :: !(Maybe Bool)
+    , _pUsbMassStorageEnabled              :: !(Maybe Bool)
+    , _pNetworkEscapeHatchEnabled          :: !(Maybe Bool)
+    , _pSystemUpdate                       :: !(Maybe SystemUpdate)
+    , _pInstallUnknownSourcesAllowed       :: !(Maybe Bool)
+    , _pName                               :: !(Maybe Text)
+    , _pPrivateKeySelectionEnabled         :: !(Maybe Bool)
+    , _pOutgoingCallsDisabled              :: !(Maybe Bool)
+    , _pStatusReportingSettings            :: !(Maybe StatusReportingSettings)
+    , _pRemoveUserDisabled                 :: !(Maybe Bool)
+    , _pMobileNetworksConfigDisabled       :: !(Maybe Bool)
+    , _pVersion                            :: !(Maybe (Textual Int64))
+    , _pEnsureVerifyAppsEnabled            :: !(Maybe Bool)
+    , _pSetWallpaperDisabled               :: !(Maybe Bool)
+    , _pVPNConfigDisabled                  :: !(Maybe Bool)
+    , _pOpenNetworkConfiguration           :: !(Maybe PolicyOpenNetworkConfiguration)
+    , _pModifyAccountsDisabled             :: !(Maybe Bool)
+    , _pBlockApplicationsEnabled           :: !(Maybe Bool)
+    , _pKeyguardDisabledFeatures           :: !(Maybe [Text])
+    , _pFunDisabled                        :: !(Maybe Bool)
+    , _pSmsDisabled                        :: !(Maybe Bool)
+    , _pMaximumTimeToLock                  :: !(Maybe (Textual Int64))
+    , _pOutgoingBeamDisabled               :: !(Maybe Bool)
+    , _pStatusBarDisabled                  :: !(Maybe Bool)
+    , _pCellBroadcastsConfigDisabled       :: !(Maybe Bool)
+    , _pDeviceOwnerLockScreenInfo          :: !(Maybe UserFacingMessage)
+    , _pPlayStoreMode                      :: !(Maybe PolicyPlayStoreMode)
+    , _pComplianceRules                    :: !(Maybe [ComplianceRule])
+    , _pTetheringConfigDisabled            :: !(Maybe Bool)
+    , _pAccountTypesWithManagementDisabled :: !(Maybe [Text])
+    , _pWifiConfigDisabled                 :: !(Maybe Bool)
+    , _pPersistentPreferredActivities      :: !(Maybe [PersistentPreferredActivity])
+    , _pPasswordRequirements               :: !(Maybe PasswordRequirements)
+    , _pLongSupportMessage                 :: !(Maybe UserFacingMessage)
+    , _pLocationMode                       :: !(Maybe PolicyLocationMode)
+    , _pBluetoothDisabled                  :: !(Maybe Bool)
+    , _pUsbFileTransferDisabled            :: !(Maybe Bool)
+    , _pCameraDisabled                     :: !(Maybe Bool)
+    , _pApplications                       :: !(Maybe [ApplicationPolicy])
+    , _pPasswordPolicies                   :: !(Maybe [PasswordRequirements])
+    , _pFactoryResetDisabled               :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Policy' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pBluetoothConfigDisabled'
+--
+-- * 'pUnmuteMicrophoneDisabled'
+--
+-- * 'pMountPhysicalMediaDisabled'
+--
+-- * 'pFrpAdminEmails'
+--
+-- * 'pAppAutoUpdatePolicy'
+--
+-- * 'pEncryptionPolicy'
+--
+-- * 'pAndroidDevicePolicyTracks'
+--
+-- * 'pSafeBootDisabled'
+--
+-- * 'pAlwaysOnVPNPackage'
+--
+-- * 'pChoosePrivateKeyRules'
+--
+-- * 'pCredentialsConfigDisabled'
+--
+-- * 'pRecommendedGlobalProxy'
+--
+-- * 'pKeyguardDisabled'
+--
+-- * 'pSkipFirstUseHintsEnabled'
+--
+-- * 'pAdjustVolumeDisabled'
+--
+-- * 'pDefaultPermissionPolicy'
+--
+-- * 'pUninstallAppsDisabled'
+--
+-- * 'pSetUserIconDisabled'
+--
+-- * 'pPermittedInputMethods'
+--
+-- * 'pScreenCaptureDisabled'
+--
+-- * 'pAddUserDisabled'
+--
+-- * 'pShareLocationDisabled'
+--
+-- * 'pAutoTimeRequired'
+--
+-- * 'pInstallAppsDisabled'
+--
+-- * 'pCreateWindowsDisabled'
+--
+-- * 'pNetworkResetDisabled'
+--
+-- * 'pBluetoothContactSharingDisabled'
+--
+-- * 'pPermissionGrants'
+--
+-- * 'pShortSupportMessage'
+--
+-- * 'pStayOnPluggedModes'
+--
+-- * 'pDataRoamingDisabled'
+--
+-- * 'pDebuggingFeaturesAllowed'
+--
+-- * 'pKioskCustomLauncherEnabled'
+--
+-- * 'pWifiConfigsLockdownEnabled'
+--
+-- * 'pUsbMassStorageEnabled'
+--
+-- * 'pNetworkEscapeHatchEnabled'
+--
+-- * 'pSystemUpdate'
+--
+-- * 'pInstallUnknownSourcesAllowed'
+--
+-- * 'pName'
+--
+-- * 'pPrivateKeySelectionEnabled'
+--
+-- * 'pOutgoingCallsDisabled'
+--
+-- * 'pStatusReportingSettings'
+--
+-- * 'pRemoveUserDisabled'
+--
+-- * 'pMobileNetworksConfigDisabled'
+--
+-- * 'pVersion'
+--
+-- * 'pEnsureVerifyAppsEnabled'
+--
+-- * 'pSetWallpaperDisabled'
+--
+-- * 'pVPNConfigDisabled'
+--
+-- * 'pOpenNetworkConfiguration'
+--
+-- * 'pModifyAccountsDisabled'
+--
+-- * 'pBlockApplicationsEnabled'
+--
+-- * 'pKeyguardDisabledFeatures'
+--
+-- * 'pFunDisabled'
+--
+-- * 'pSmsDisabled'
+--
+-- * 'pMaximumTimeToLock'
+--
+-- * 'pOutgoingBeamDisabled'
+--
+-- * 'pStatusBarDisabled'
+--
+-- * 'pCellBroadcastsConfigDisabled'
+--
+-- * 'pDeviceOwnerLockScreenInfo'
+--
+-- * 'pPlayStoreMode'
+--
+-- * 'pComplianceRules'
+--
+-- * 'pTetheringConfigDisabled'
+--
+-- * 'pAccountTypesWithManagementDisabled'
+--
+-- * 'pWifiConfigDisabled'
+--
+-- * 'pPersistentPreferredActivities'
+--
+-- * 'pPasswordRequirements'
+--
+-- * 'pLongSupportMessage'
+--
+-- * 'pLocationMode'
+--
+-- * 'pBluetoothDisabled'
+--
+-- * 'pUsbFileTransferDisabled'
+--
+-- * 'pCameraDisabled'
+--
+-- * 'pApplications'
+--
+-- * 'pPasswordPolicies'
+--
+-- * 'pFactoryResetDisabled'
+policy
+    :: Policy
+policy =
+    Policy'
+    { _pBluetoothConfigDisabled = Nothing
+    , _pUnmuteMicrophoneDisabled = Nothing
+    , _pMountPhysicalMediaDisabled = Nothing
+    , _pFrpAdminEmails = Nothing
+    , _pAppAutoUpdatePolicy = Nothing
+    , _pEncryptionPolicy = Nothing
+    , _pAndroidDevicePolicyTracks = Nothing
+    , _pSafeBootDisabled = Nothing
+    , _pAlwaysOnVPNPackage = Nothing
+    , _pChoosePrivateKeyRules = Nothing
+    , _pCredentialsConfigDisabled = Nothing
+    , _pRecommendedGlobalProxy = Nothing
+    , _pKeyguardDisabled = Nothing
+    , _pSkipFirstUseHintsEnabled = Nothing
+    , _pAdjustVolumeDisabled = Nothing
+    , _pDefaultPermissionPolicy = Nothing
+    , _pUninstallAppsDisabled = Nothing
+    , _pSetUserIconDisabled = Nothing
+    , _pPermittedInputMethods = Nothing
+    , _pScreenCaptureDisabled = Nothing
+    , _pAddUserDisabled = Nothing
+    , _pShareLocationDisabled = Nothing
+    , _pAutoTimeRequired = Nothing
+    , _pInstallAppsDisabled = Nothing
+    , _pCreateWindowsDisabled = Nothing
+    , _pNetworkResetDisabled = Nothing
+    , _pBluetoothContactSharingDisabled = Nothing
+    , _pPermissionGrants = Nothing
+    , _pShortSupportMessage = Nothing
+    , _pStayOnPluggedModes = Nothing
+    , _pDataRoamingDisabled = Nothing
+    , _pDebuggingFeaturesAllowed = Nothing
+    , _pKioskCustomLauncherEnabled = Nothing
+    , _pWifiConfigsLockdownEnabled = Nothing
+    , _pUsbMassStorageEnabled = Nothing
+    , _pNetworkEscapeHatchEnabled = Nothing
+    , _pSystemUpdate = Nothing
+    , _pInstallUnknownSourcesAllowed = Nothing
+    , _pName = Nothing
+    , _pPrivateKeySelectionEnabled = Nothing
+    , _pOutgoingCallsDisabled = Nothing
+    , _pStatusReportingSettings = Nothing
+    , _pRemoveUserDisabled = Nothing
+    , _pMobileNetworksConfigDisabled = Nothing
+    , _pVersion = Nothing
+    , _pEnsureVerifyAppsEnabled = Nothing
+    , _pSetWallpaperDisabled = Nothing
+    , _pVPNConfigDisabled = Nothing
+    , _pOpenNetworkConfiguration = Nothing
+    , _pModifyAccountsDisabled = Nothing
+    , _pBlockApplicationsEnabled = Nothing
+    , _pKeyguardDisabledFeatures = Nothing
+    , _pFunDisabled = Nothing
+    , _pSmsDisabled = Nothing
+    , _pMaximumTimeToLock = Nothing
+    , _pOutgoingBeamDisabled = Nothing
+    , _pStatusBarDisabled = Nothing
+    , _pCellBroadcastsConfigDisabled = Nothing
+    , _pDeviceOwnerLockScreenInfo = Nothing
+    , _pPlayStoreMode = Nothing
+    , _pComplianceRules = Nothing
+    , _pTetheringConfigDisabled = Nothing
+    , _pAccountTypesWithManagementDisabled = Nothing
+    , _pWifiConfigDisabled = Nothing
+    , _pPersistentPreferredActivities = Nothing
+    , _pPasswordRequirements = Nothing
+    , _pLongSupportMessage = Nothing
+    , _pLocationMode = Nothing
+    , _pBluetoothDisabled = Nothing
+    , _pUsbFileTransferDisabled = Nothing
+    , _pCameraDisabled = Nothing
+    , _pApplications = Nothing
+    , _pPasswordPolicies = Nothing
+    , _pFactoryResetDisabled = Nothing
+    }
+
+-- | Whether configuring bluetooth is disabled.
+pBluetoothConfigDisabled :: Lens' Policy (Maybe Bool)
+pBluetoothConfigDisabled
+  = lens _pBluetoothConfigDisabled
+      (\ s a -> s{_pBluetoothConfigDisabled = a})
+
+-- | Whether the microphone is muted and adjusting microphone volume is
+-- disabled.
+pUnmuteMicrophoneDisabled :: Lens' Policy (Maybe Bool)
+pUnmuteMicrophoneDisabled
+  = lens _pUnmuteMicrophoneDisabled
+      (\ s a -> s{_pUnmuteMicrophoneDisabled = a})
+
+-- | Whether the user mounting physical external media is disabled.
+pMountPhysicalMediaDisabled :: Lens' Policy (Maybe Bool)
+pMountPhysicalMediaDisabled
+  = lens _pMountPhysicalMediaDisabled
+      (\ s a -> s{_pMountPhysicalMediaDisabled = a})
+
+-- | Email addresses of device administrators for factory reset protection.
+-- When the device is factory reset, it will require one of these admins to
+-- log in with the Google account email and password to unlock the device.
+-- If no admins are specified, the device won\'t provide factory reset
+-- protection.
+pFrpAdminEmails :: Lens' Policy [Text]
+pFrpAdminEmails
+  = lens _pFrpAdminEmails
+      (\ s a -> s{_pFrpAdminEmails = a})
+      . _Default
+      . _Coerce
+
+-- | The app auto update policy, which controls when automatic app updates
+-- can be applied.
+pAppAutoUpdatePolicy :: Lens' Policy (Maybe PolicyAppAutoUpdatePolicy)
+pAppAutoUpdatePolicy
+  = lens _pAppAutoUpdatePolicy
+      (\ s a -> s{_pAppAutoUpdatePolicy = a})
+
+-- | Whether encryption is enabled
+pEncryptionPolicy :: Lens' Policy (Maybe PolicyEncryptionPolicy)
+pEncryptionPolicy
+  = lens _pEncryptionPolicy
+      (\ s a -> s{_pEncryptionPolicy = a})
+
+-- | The app tracks for Android Device Policy the device can access. The
+-- device receives the latest version among all accessible tracks. If no
+-- tracks are specified, then the device only uses the production track.
+pAndroidDevicePolicyTracks :: Lens' Policy [Text]
+pAndroidDevicePolicyTracks
+  = lens _pAndroidDevicePolicyTracks
+      (\ s a -> s{_pAndroidDevicePolicyTracks = a})
+      . _Default
+      . _Coerce
+
+-- | Whether rebooting the device into safe boot is disabled.
+pSafeBootDisabled :: Lens' Policy (Maybe Bool)
+pSafeBootDisabled
+  = lens _pSafeBootDisabled
+      (\ s a -> s{_pSafeBootDisabled = a})
+
+-- | Configuration for an always-on VPN connection. Use with
+-- vpn_config_disabled to prevent modification of this setting.
+pAlwaysOnVPNPackage :: Lens' Policy (Maybe AlwaysOnVPNPackage)
+pAlwaysOnVPNPackage
+  = lens _pAlwaysOnVPNPackage
+      (\ s a -> s{_pAlwaysOnVPNPackage = a})
+
+-- | Rules for automatically choosing a private key and certificate to
+-- authenticate the device to a server. The rules are ordered by increasing
+-- precedence, so if an outgoing request matches more than one rule, the
+-- last rule defines which private key to use.
+pChoosePrivateKeyRules :: Lens' Policy [ChoosePrivateKeyRule]
+pChoosePrivateKeyRules
+  = lens _pChoosePrivateKeyRules
+      (\ s a -> s{_pChoosePrivateKeyRules = a})
+      . _Default
+      . _Coerce
+
+-- | Whether configuring user credentials is disabled.
+pCredentialsConfigDisabled :: Lens' Policy (Maybe Bool)
+pCredentialsConfigDisabled
+  = lens _pCredentialsConfigDisabled
+      (\ s a -> s{_pCredentialsConfigDisabled = a})
+
+-- | The network-independent global HTTP proxy. Typically proxies should be
+-- configured per-network in open_network_configuration. However for
+-- unusual configurations like general internal filtering a global HTTP
+-- proxy may be useful. If the proxy is not accessible, network access may
+-- break. The global proxy is only a recommendation and some apps may
+-- ignore it.
+pRecommendedGlobalProxy :: Lens' Policy (Maybe ProxyInfo)
+pRecommendedGlobalProxy
+  = lens _pRecommendedGlobalProxy
+      (\ s a -> s{_pRecommendedGlobalProxy = a})
+
+-- | Whether the keyguard is disabled.
+pKeyguardDisabled :: Lens' Policy (Maybe Bool)
+pKeyguardDisabled
+  = lens _pKeyguardDisabled
+      (\ s a -> s{_pKeyguardDisabled = a})
+
+-- | Flag to skip hints on the first use. Enterprise admin can enable the
+-- system recommendation for apps to skip their user tutorial and other
+-- introductory hints on first start-up.
+pSkipFirstUseHintsEnabled :: Lens' Policy (Maybe Bool)
+pSkipFirstUseHintsEnabled
+  = lens _pSkipFirstUseHintsEnabled
+      (\ s a -> s{_pSkipFirstUseHintsEnabled = a})
+
+-- | Whether adjusting the master volume is disabled.
+pAdjustVolumeDisabled :: Lens' Policy (Maybe Bool)
+pAdjustVolumeDisabled
+  = lens _pAdjustVolumeDisabled
+      (\ s a -> s{_pAdjustVolumeDisabled = a})
+
+-- | The default permission policy for runtime permission requests.
+pDefaultPermissionPolicy :: Lens' Policy (Maybe PolicyDefaultPermissionPolicy)
+pDefaultPermissionPolicy
+  = lens _pDefaultPermissionPolicy
+      (\ s a -> s{_pDefaultPermissionPolicy = a})
+
+-- | Whether user uninstallation of applications is disabled.
+pUninstallAppsDisabled :: Lens' Policy (Maybe Bool)
+pUninstallAppsDisabled
+  = lens _pUninstallAppsDisabled
+      (\ s a -> s{_pUninstallAppsDisabled = a})
+
+-- | Whether changing the user icon is disabled.
+pSetUserIconDisabled :: Lens' Policy (Maybe Bool)
+pSetUserIconDisabled
+  = lens _pSetUserIconDisabled
+      (\ s a -> s{_pSetUserIconDisabled = a})
+
+-- | If present, only the input methods provided by packages in this list are
+-- permitted. If this field is present, but the list is empty, then only
+-- system input methods are permitted.
+pPermittedInputMethods :: Lens' Policy (Maybe PackageNameList)
+pPermittedInputMethods
+  = lens _pPermittedInputMethods
+      (\ s a -> s{_pPermittedInputMethods = a})
+
+-- | Whether screen capture is disabled.
+pScreenCaptureDisabled :: Lens' Policy (Maybe Bool)
+pScreenCaptureDisabled
+  = lens _pScreenCaptureDisabled
+      (\ s a -> s{_pScreenCaptureDisabled = a})
+
+-- | Whether adding new users and profiles is disabled.
+pAddUserDisabled :: Lens' Policy (Maybe Bool)
+pAddUserDisabled
+  = lens _pAddUserDisabled
+      (\ s a -> s{_pAddUserDisabled = a})
+
+-- | Whether location sharing is disabled.
+pShareLocationDisabled :: Lens' Policy (Maybe Bool)
+pShareLocationDisabled
+  = lens _pShareLocationDisabled
+      (\ s a -> s{_pShareLocationDisabled = a})
+
+-- | Whether auto time is required, which prevents the user from manually
+-- setting the date and time.
+pAutoTimeRequired :: Lens' Policy (Maybe Bool)
+pAutoTimeRequired
+  = lens _pAutoTimeRequired
+      (\ s a -> s{_pAutoTimeRequired = a})
+
+-- | Whether user installation of apps is disabled.
+pInstallAppsDisabled :: Lens' Policy (Maybe Bool)
+pInstallAppsDisabled
+  = lens _pInstallAppsDisabled
+      (\ s a -> s{_pInstallAppsDisabled = a})
+
+-- | Whether creating windows besides app windows is disabled.
+pCreateWindowsDisabled :: Lens' Policy (Maybe Bool)
+pCreateWindowsDisabled
+  = lens _pCreateWindowsDisabled
+      (\ s a -> s{_pCreateWindowsDisabled = a})
+
+-- | Whether resetting network settings is disabled.
+pNetworkResetDisabled :: Lens' Policy (Maybe Bool)
+pNetworkResetDisabled
+  = lens _pNetworkResetDisabled
+      (\ s a -> s{_pNetworkResetDisabled = a})
+
+-- | Whether bluetooth contact sharing is disabled.
+pBluetoothContactSharingDisabled :: Lens' Policy (Maybe Bool)
+pBluetoothContactSharingDisabled
+  = lens _pBluetoothContactSharingDisabled
+      (\ s a -> s{_pBluetoothContactSharingDisabled = a})
+
+-- | Explicit permission or group grants or denials for all apps. These
+-- values override the default_permission_policy.
+pPermissionGrants :: Lens' Policy [PermissionGrant]
+pPermissionGrants
+  = lens _pPermissionGrants
+      (\ s a -> s{_pPermissionGrants = a})
+      . _Default
+      . _Coerce
+
+-- | A message displayed to the user in the settings screen wherever
+-- functionality has been disabled by the admin.
+pShortSupportMessage :: Lens' Policy (Maybe UserFacingMessage)
+pShortSupportMessage
+  = lens _pShortSupportMessage
+      (\ s a -> s{_pShortSupportMessage = a})
+
+-- | The battery plugged in modes for which the device stays on. When using
+-- this setting, it is recommended to clear maximum_time_to_lock so that
+-- the device doesn\'t lock itself while it stays on.
+pStayOnPluggedModes :: Lens' Policy [Text]
+pStayOnPluggedModes
+  = lens _pStayOnPluggedModes
+      (\ s a -> s{_pStayOnPluggedModes = a})
+      . _Default
+      . _Coerce
+
+-- | Whether roaming data services are disabled.
+pDataRoamingDisabled :: Lens' Policy (Maybe Bool)
+pDataRoamingDisabled
+  = lens _pDataRoamingDisabled
+      (\ s a -> s{_pDataRoamingDisabled = a})
+
+-- | Whether the user is allowed to enable debugging features.
+pDebuggingFeaturesAllowed :: Lens' Policy (Maybe Bool)
+pDebuggingFeaturesAllowed
+  = lens _pDebuggingFeaturesAllowed
+      (\ s a -> s{_pDebuggingFeaturesAllowed = a})
+
+-- | Whether the kiosk custom launcher is enabled. This replaces the home
+-- screen with a launcher that locks down the device to the apps installed
+-- via the applications setting. The apps appear on a single page in
+-- alphabetical order. It is recommended to also use status_bar_disabled to
+-- block access to device settings.
+pKioskCustomLauncherEnabled :: Lens' Policy (Maybe Bool)
+pKioskCustomLauncherEnabled
+  = lens _pKioskCustomLauncherEnabled
+      (\ s a -> s{_pKioskCustomLauncherEnabled = a})
+
+-- | Whether Wi-Fi networks defined in Open Network Configuration are locked
+-- so they can\'t be edited by the user.
+pWifiConfigsLockdownEnabled :: Lens' Policy (Maybe Bool)
+pWifiConfigsLockdownEnabled
+  = lens _pWifiConfigsLockdownEnabled
+      (\ s a -> s{_pWifiConfigsLockdownEnabled = a})
+
+-- | Whether USB storage is enabled. Deprecated.
+pUsbMassStorageEnabled :: Lens' Policy (Maybe Bool)
+pUsbMassStorageEnabled
+  = lens _pUsbMassStorageEnabled
+      (\ s a -> s{_pUsbMassStorageEnabled = a})
+
+-- | Whether the network escape hatch is enabled. If a network connection
+-- can\'t be made at boot time, the escape hatch prompts the user to
+-- temporarily connect to a network in order to refresh the device policy.
+-- After applying policy, the temporary network will be forgotten and the
+-- device will continue booting. This prevents being unable to connect to a
+-- network if there is no suitable network in the last policy and the
+-- device boots into an app in lock task mode, or the user is otherwise
+-- unable to reach device settings.
+pNetworkEscapeHatchEnabled :: Lens' Policy (Maybe Bool)
+pNetworkEscapeHatchEnabled
+  = lens _pNetworkEscapeHatchEnabled
+      (\ s a -> s{_pNetworkEscapeHatchEnabled = a})
+
+-- | The system update policy, which controls how OS updates are applied. If
+-- the update type is WINDOWED, the update window will automatically apply
+-- to Play app updates as well.
+pSystemUpdate :: Lens' Policy (Maybe SystemUpdate)
+pSystemUpdate
+  = lens _pSystemUpdate
+      (\ s a -> s{_pSystemUpdate = a})
+
+-- | Whether the user is allowed to enable the \"Unknown Sources\" setting,
+-- which allows installation of apps from unknown sources.
+pInstallUnknownSourcesAllowed :: Lens' Policy (Maybe Bool)
+pInstallUnknownSourcesAllowed
+  = lens _pInstallUnknownSourcesAllowed
+      (\ s a -> s{_pInstallUnknownSourcesAllowed = a})
+
+-- | The name of the policy in the form
+-- enterprises\/{enterpriseId}\/policies\/{policyId}.
+pName :: Lens' Policy (Maybe Text)
+pName = lens _pName (\ s a -> s{_pName = a})
+
+-- | Allows showing UI on a device for a user to choose a private key alias
+-- if there are no matching rules in ChoosePrivateKeyRules. For devices
+-- below Android P, setting this may leave enterprise keys vulnerable.
+pPrivateKeySelectionEnabled :: Lens' Policy (Maybe Bool)
+pPrivateKeySelectionEnabled
+  = lens _pPrivateKeySelectionEnabled
+      (\ s a -> s{_pPrivateKeySelectionEnabled = a})
+
+-- | Whether outgoing calls are disabled.
+pOutgoingCallsDisabled :: Lens' Policy (Maybe Bool)
+pOutgoingCallsDisabled
+  = lens _pOutgoingCallsDisabled
+      (\ s a -> s{_pOutgoingCallsDisabled = a})
+
+-- | Status reporting settings
+pStatusReportingSettings :: Lens' Policy (Maybe StatusReportingSettings)
+pStatusReportingSettings
+  = lens _pStatusReportingSettings
+      (\ s a -> s{_pStatusReportingSettings = a})
+
+-- | Whether removing other users is disabled.
+pRemoveUserDisabled :: Lens' Policy (Maybe Bool)
+pRemoveUserDisabled
+  = lens _pRemoveUserDisabled
+      (\ s a -> s{_pRemoveUserDisabled = a})
+
+-- | Whether configuring mobile networks is disabled.
+pMobileNetworksConfigDisabled :: Lens' Policy (Maybe Bool)
+pMobileNetworksConfigDisabled
+  = lens _pMobileNetworksConfigDisabled
+      (\ s a -> s{_pMobileNetworksConfigDisabled = a})
+
+-- | The version of the policy. This is a read-only field. The version is
+-- incremented each time the policy is updated.
+pVersion :: Lens' Policy (Maybe Int64)
+pVersion
+  = lens _pVersion (\ s a -> s{_pVersion = a}) .
+      mapping _Coerce
+
+-- | Whether app verification is force-enabled.
+pEnsureVerifyAppsEnabled :: Lens' Policy (Maybe Bool)
+pEnsureVerifyAppsEnabled
+  = lens _pEnsureVerifyAppsEnabled
+      (\ s a -> s{_pEnsureVerifyAppsEnabled = a})
+
+-- | Whether changing the wallpaper is disabled.
+pSetWallpaperDisabled :: Lens' Policy (Maybe Bool)
+pSetWallpaperDisabled
+  = lens _pSetWallpaperDisabled
+      (\ s a -> s{_pSetWallpaperDisabled = a})
+
+-- | Whether configuring VPN is disabled.
+pVPNConfigDisabled :: Lens' Policy (Maybe Bool)
+pVPNConfigDisabled
+  = lens _pVPNConfigDisabled
+      (\ s a -> s{_pVPNConfigDisabled = a})
+
+-- | Network configuration for the device. See configure networks for more
+-- information.
+pOpenNetworkConfiguration :: Lens' Policy (Maybe PolicyOpenNetworkConfiguration)
+pOpenNetworkConfiguration
+  = lens _pOpenNetworkConfiguration
+      (\ s a -> s{_pOpenNetworkConfiguration = a})
+
+-- | Whether adding or removing accounts is disabled.
+pModifyAccountsDisabled :: Lens' Policy (Maybe Bool)
+pModifyAccountsDisabled
+  = lens _pModifyAccountsDisabled
+      (\ s a -> s{_pModifyAccountsDisabled = a})
+
+-- | Whether applications other than the ones configured in applications are
+-- blocked from being installed. When set, applications that were installed
+-- under a previous policy but no longer appear in the policy are
+-- automatically uninstalled.
+pBlockApplicationsEnabled :: Lens' Policy (Maybe Bool)
+pBlockApplicationsEnabled
+  = lens _pBlockApplicationsEnabled
+      (\ s a -> s{_pBlockApplicationsEnabled = a})
+
+-- | Disabled keyguard customizations, such as widgets.
+pKeyguardDisabledFeatures :: Lens' Policy [Text]
+pKeyguardDisabledFeatures
+  = lens _pKeyguardDisabledFeatures
+      (\ s a -> s{_pKeyguardDisabledFeatures = a})
+      . _Default
+      . _Coerce
+
+-- | Whether the user is allowed to have fun. Controls whether the Easter egg
+-- game in Settings is disabled.
+pFunDisabled :: Lens' Policy (Maybe Bool)
+pFunDisabled
+  = lens _pFunDisabled (\ s a -> s{_pFunDisabled = a})
+
+-- | Whether sending and receiving SMS messages is disabled.
+pSmsDisabled :: Lens' Policy (Maybe Bool)
+pSmsDisabled
+  = lens _pSmsDisabled (\ s a -> s{_pSmsDisabled = a})
+
+-- | Maximum time in milliseconds for user activity until the device locks. A
+-- value of 0 means there is no restriction.
+pMaximumTimeToLock :: Lens' Policy (Maybe Int64)
+pMaximumTimeToLock
+  = lens _pMaximumTimeToLock
+      (\ s a -> s{_pMaximumTimeToLock = a})
+      . mapping _Coerce
+
+-- | Whether using NFC to beam data from apps is disabled.
+pOutgoingBeamDisabled :: Lens' Policy (Maybe Bool)
+pOutgoingBeamDisabled
+  = lens _pOutgoingBeamDisabled
+      (\ s a -> s{_pOutgoingBeamDisabled = a})
+
+-- | Whether the status bar is disabled. This disables notifications, quick
+-- settings, and other screen overlays that allow escape from full-screen
+-- mode.
+pStatusBarDisabled :: Lens' Policy (Maybe Bool)
+pStatusBarDisabled
+  = lens _pStatusBarDisabled
+      (\ s a -> s{_pStatusBarDisabled = a})
+
+-- | Whether configuring cell broadcast is disabled.
+pCellBroadcastsConfigDisabled :: Lens' Policy (Maybe Bool)
+pCellBroadcastsConfigDisabled
+  = lens _pCellBroadcastsConfigDisabled
+      (\ s a -> s{_pCellBroadcastsConfigDisabled = a})
+
+-- | The device owner information to be shown on the lock screen.
+pDeviceOwnerLockScreenInfo :: Lens' Policy (Maybe UserFacingMessage)
+pDeviceOwnerLockScreenInfo
+  = lens _pDeviceOwnerLockScreenInfo
+      (\ s a -> s{_pDeviceOwnerLockScreenInfo = a})
+
+-- | This mode controls which apps are available to the user in the Play
+-- Store and the behavior on the device when apps are removed from the
+-- policy.
+pPlayStoreMode :: Lens' Policy (Maybe PolicyPlayStoreMode)
+pPlayStoreMode
+  = lens _pPlayStoreMode
+      (\ s a -> s{_pPlayStoreMode = a})
+
+-- | Rules declaring which mitigating actions to take when a device is not
+-- compliant with its policy. When the conditions for multiple rules are
+-- satisfied, all of the mitigating actions for the rules are taken. There
+-- is a maximum limit of 100 rules.
+pComplianceRules :: Lens' Policy [ComplianceRule]
+pComplianceRules
+  = lens _pComplianceRules
+      (\ s a -> s{_pComplianceRules = a})
+      . _Default
+      . _Coerce
+
+-- | Whether configuring tethering and portable hotspots is disabled.
+pTetheringConfigDisabled :: Lens' Policy (Maybe Bool)
+pTetheringConfigDisabled
+  = lens _pTetheringConfigDisabled
+      (\ s a -> s{_pTetheringConfigDisabled = a})
+
+-- | Account types that can\'t be managed by the user.
+pAccountTypesWithManagementDisabled :: Lens' Policy [Text]
+pAccountTypesWithManagementDisabled
+  = lens _pAccountTypesWithManagementDisabled
+      (\ s a ->
+         s{_pAccountTypesWithManagementDisabled = a})
+      . _Default
+      . _Coerce
+
+-- | Whether configuring Wi-Fi access points is disabled.
+pWifiConfigDisabled :: Lens' Policy (Maybe Bool)
+pWifiConfigDisabled
+  = lens _pWifiConfigDisabled
+      (\ s a -> s{_pWifiConfigDisabled = a})
+
+-- | Default intent handler activities.
+pPersistentPreferredActivities :: Lens' Policy [PersistentPreferredActivity]
+pPersistentPreferredActivities
+  = lens _pPersistentPreferredActivities
+      (\ s a -> s{_pPersistentPreferredActivities = a})
+      . _Default
+      . _Coerce
+
+-- | Password requirements. DEPRECATED - Use password_policies
+pPasswordRequirements :: Lens' Policy (Maybe PasswordRequirements)
+pPasswordRequirements
+  = lens _pPasswordRequirements
+      (\ s a -> s{_pPasswordRequirements = a})
+
+-- | A message displayed to the user in the device administators settings
+-- screen.
+pLongSupportMessage :: Lens' Policy (Maybe UserFacingMessage)
+pLongSupportMessage
+  = lens _pLongSupportMessage
+      (\ s a -> s{_pLongSupportMessage = a})
+
+-- | The degree of location detection enabled. The user may change the value
+-- unless the user is otherwise blocked from accessing device settings.
+pLocationMode :: Lens' Policy (Maybe PolicyLocationMode)
+pLocationMode
+  = lens _pLocationMode
+      (\ s a -> s{_pLocationMode = a})
+
+-- | Whether bluetooth is disabled. Prefer this setting over
+-- bluetooth_config_disabled because bluetooth_config_disabled can be
+-- bypassed by the user.
+pBluetoothDisabled :: Lens' Policy (Maybe Bool)
+pBluetoothDisabled
+  = lens _pBluetoothDisabled
+      (\ s a -> s{_pBluetoothDisabled = a})
+
+-- | Whether transferring files over USB is disabled.
+pUsbFileTransferDisabled :: Lens' Policy (Maybe Bool)
+pUsbFileTransferDisabled
+  = lens _pUsbFileTransferDisabled
+      (\ s a -> s{_pUsbFileTransferDisabled = a})
+
+-- | Whether all cameras on the device are disabled.
+pCameraDisabled :: Lens' Policy (Maybe Bool)
+pCameraDisabled
+  = lens _pCameraDisabled
+      (\ s a -> s{_pCameraDisabled = a})
+
+-- | Policy applied to apps.
+pApplications :: Lens' Policy [ApplicationPolicy]
+pApplications
+  = lens _pApplications
+      (\ s a -> s{_pApplications = a})
+      . _Default
+      . _Coerce
+
+-- | Password requirement policies. Different policies can be set for work
+-- profile or fully managed devices by setting the password_scope field in
+-- the policy.
+pPasswordPolicies :: Lens' Policy [PasswordRequirements]
+pPasswordPolicies
+  = lens _pPasswordPolicies
+      (\ s a -> s{_pPasswordPolicies = a})
+      . _Default
+      . _Coerce
+
+-- | Whether factory resetting from settings is disabled.
+pFactoryResetDisabled :: Lens' Policy (Maybe Bool)
+pFactoryResetDisabled
+  = lens _pFactoryResetDisabled
+      (\ s a -> s{_pFactoryResetDisabled = a})
+
+instance FromJSON Policy where
+        parseJSON
+          = withObject "Policy"
+              (\ o ->
+                 Policy' <$>
+                   (o .:? "bluetoothConfigDisabled") <*>
+                     (o .:? "unmuteMicrophoneDisabled")
+                     <*> (o .:? "mountPhysicalMediaDisabled")
+                     <*> (o .:? "frpAdminEmails" .!= mempty)
+                     <*> (o .:? "appAutoUpdatePolicy")
+                     <*> (o .:? "encryptionPolicy")
+                     <*> (o .:? "androidDevicePolicyTracks" .!= mempty)
+                     <*> (o .:? "safeBootDisabled")
+                     <*> (o .:? "alwaysOnVpnPackage")
+                     <*> (o .:? "choosePrivateKeyRules" .!= mempty)
+                     <*> (o .:? "credentialsConfigDisabled")
+                     <*> (o .:? "recommendedGlobalProxy")
+                     <*> (o .:? "keyguardDisabled")
+                     <*> (o .:? "skipFirstUseHintsEnabled")
+                     <*> (o .:? "adjustVolumeDisabled")
+                     <*> (o .:? "defaultPermissionPolicy")
+                     <*> (o .:? "uninstallAppsDisabled")
+                     <*> (o .:? "setUserIconDisabled")
+                     <*> (o .:? "permittedInputMethods")
+                     <*> (o .:? "screenCaptureDisabled")
+                     <*> (o .:? "addUserDisabled")
+                     <*> (o .:? "shareLocationDisabled")
+                     <*> (o .:? "autoTimeRequired")
+                     <*> (o .:? "installAppsDisabled")
+                     <*> (o .:? "createWindowsDisabled")
+                     <*> (o .:? "networkResetDisabled")
+                     <*> (o .:? "bluetoothContactSharingDisabled")
+                     <*> (o .:? "permissionGrants" .!= mempty)
+                     <*> (o .:? "shortSupportMessage")
+                     <*> (o .:? "stayOnPluggedModes" .!= mempty)
+                     <*> (o .:? "dataRoamingDisabled")
+                     <*> (o .:? "debuggingFeaturesAllowed")
+                     <*> (o .:? "kioskCustomLauncherEnabled")
+                     <*> (o .:? "wifiConfigsLockdownEnabled")
+                     <*> (o .:? "usbMassStorageEnabled")
+                     <*> (o .:? "networkEscapeHatchEnabled")
+                     <*> (o .:? "systemUpdate")
+                     <*> (o .:? "installUnknownSourcesAllowed")
+                     <*> (o .:? "name")
+                     <*> (o .:? "privateKeySelectionEnabled")
+                     <*> (o .:? "outgoingCallsDisabled")
+                     <*> (o .:? "statusReportingSettings")
+                     <*> (o .:? "removeUserDisabled")
+                     <*> (o .:? "mobileNetworksConfigDisabled")
+                     <*> (o .:? "version")
+                     <*> (o .:? "ensureVerifyAppsEnabled")
+                     <*> (o .:? "setWallpaperDisabled")
+                     <*> (o .:? "vpnConfigDisabled")
+                     <*> (o .:? "openNetworkConfiguration")
+                     <*> (o .:? "modifyAccountsDisabled")
+                     <*> (o .:? "blockApplicationsEnabled")
+                     <*> (o .:? "keyguardDisabledFeatures" .!= mempty)
+                     <*> (o .:? "funDisabled")
+                     <*> (o .:? "smsDisabled")
+                     <*> (o .:? "maximumTimeToLock")
+                     <*> (o .:? "outgoingBeamDisabled")
+                     <*> (o .:? "statusBarDisabled")
+                     <*> (o .:? "cellBroadcastsConfigDisabled")
+                     <*> (o .:? "deviceOwnerLockScreenInfo")
+                     <*> (o .:? "playStoreMode")
+                     <*> (o .:? "complianceRules" .!= mempty)
+                     <*> (o .:? "tetheringConfigDisabled")
+                     <*>
+                     (o .:? "accountTypesWithManagementDisabled" .!=
+                        mempty)
+                     <*> (o .:? "wifiConfigDisabled")
+                     <*>
+                     (o .:? "persistentPreferredActivities" .!= mempty)
+                     <*> (o .:? "passwordRequirements")
+                     <*> (o .:? "longSupportMessage")
+                     <*> (o .:? "locationMode")
+                     <*> (o .:? "bluetoothDisabled")
+                     <*> (o .:? "usbFileTransferDisabled")
+                     <*> (o .:? "cameraDisabled")
+                     <*> (o .:? "applications" .!= mempty)
+                     <*> (o .:? "passwordPolicies" .!= mempty)
+                     <*> (o .:? "factoryResetDisabled"))
+
+instance ToJSON Policy where
+        toJSON Policy'{..}
+          = object
+              (catMaybes
+                 [("bluetoothConfigDisabled" .=) <$>
+                    _pBluetoothConfigDisabled,
+                  ("unmuteMicrophoneDisabled" .=) <$>
+                    _pUnmuteMicrophoneDisabled,
+                  ("mountPhysicalMediaDisabled" .=) <$>
+                    _pMountPhysicalMediaDisabled,
+                  ("frpAdminEmails" .=) <$> _pFrpAdminEmails,
+                  ("appAutoUpdatePolicy" .=) <$> _pAppAutoUpdatePolicy,
+                  ("encryptionPolicy" .=) <$> _pEncryptionPolicy,
+                  ("androidDevicePolicyTracks" .=) <$>
+                    _pAndroidDevicePolicyTracks,
+                  ("safeBootDisabled" .=) <$> _pSafeBootDisabled,
+                  ("alwaysOnVpnPackage" .=) <$> _pAlwaysOnVPNPackage,
+                  ("choosePrivateKeyRules" .=) <$>
+                    _pChoosePrivateKeyRules,
+                  ("credentialsConfigDisabled" .=) <$>
+                    _pCredentialsConfigDisabled,
+                  ("recommendedGlobalProxy" .=) <$>
+                    _pRecommendedGlobalProxy,
+                  ("keyguardDisabled" .=) <$> _pKeyguardDisabled,
+                  ("skipFirstUseHintsEnabled" .=) <$>
+                    _pSkipFirstUseHintsEnabled,
+                  ("adjustVolumeDisabled" .=) <$>
+                    _pAdjustVolumeDisabled,
+                  ("defaultPermissionPolicy" .=) <$>
+                    _pDefaultPermissionPolicy,
+                  ("uninstallAppsDisabled" .=) <$>
+                    _pUninstallAppsDisabled,
+                  ("setUserIconDisabled" .=) <$> _pSetUserIconDisabled,
+                  ("permittedInputMethods" .=) <$>
+                    _pPermittedInputMethods,
+                  ("screenCaptureDisabled" .=) <$>
+                    _pScreenCaptureDisabled,
+                  ("addUserDisabled" .=) <$> _pAddUserDisabled,
+                  ("shareLocationDisabled" .=) <$>
+                    _pShareLocationDisabled,
+                  ("autoTimeRequired" .=) <$> _pAutoTimeRequired,
+                  ("installAppsDisabled" .=) <$> _pInstallAppsDisabled,
+                  ("createWindowsDisabled" .=) <$>
+                    _pCreateWindowsDisabled,
+                  ("networkResetDisabled" .=) <$>
+                    _pNetworkResetDisabled,
+                  ("bluetoothContactSharingDisabled" .=) <$>
+                    _pBluetoothContactSharingDisabled,
+                  ("permissionGrants" .=) <$> _pPermissionGrants,
+                  ("shortSupportMessage" .=) <$> _pShortSupportMessage,
+                  ("stayOnPluggedModes" .=) <$> _pStayOnPluggedModes,
+                  ("dataRoamingDisabled" .=) <$> _pDataRoamingDisabled,
+                  ("debuggingFeaturesAllowed" .=) <$>
+                    _pDebuggingFeaturesAllowed,
+                  ("kioskCustomLauncherEnabled" .=) <$>
+                    _pKioskCustomLauncherEnabled,
+                  ("wifiConfigsLockdownEnabled" .=) <$>
+                    _pWifiConfigsLockdownEnabled,
+                  ("usbMassStorageEnabled" .=) <$>
+                    _pUsbMassStorageEnabled,
+                  ("networkEscapeHatchEnabled" .=) <$>
+                    _pNetworkEscapeHatchEnabled,
+                  ("systemUpdate" .=) <$> _pSystemUpdate,
+                  ("installUnknownSourcesAllowed" .=) <$>
+                    _pInstallUnknownSourcesAllowed,
+                  ("name" .=) <$> _pName,
+                  ("privateKeySelectionEnabled" .=) <$>
+                    _pPrivateKeySelectionEnabled,
+                  ("outgoingCallsDisabled" .=) <$>
+                    _pOutgoingCallsDisabled,
+                  ("statusReportingSettings" .=) <$>
+                    _pStatusReportingSettings,
+                  ("removeUserDisabled" .=) <$> _pRemoveUserDisabled,
+                  ("mobileNetworksConfigDisabled" .=) <$>
+                    _pMobileNetworksConfigDisabled,
+                  ("version" .=) <$> _pVersion,
+                  ("ensureVerifyAppsEnabled" .=) <$>
+                    _pEnsureVerifyAppsEnabled,
+                  ("setWallpaperDisabled" .=) <$>
+                    _pSetWallpaperDisabled,
+                  ("vpnConfigDisabled" .=) <$> _pVPNConfigDisabled,
+                  ("openNetworkConfiguration" .=) <$>
+                    _pOpenNetworkConfiguration,
+                  ("modifyAccountsDisabled" .=) <$>
+                    _pModifyAccountsDisabled,
+                  ("blockApplicationsEnabled" .=) <$>
+                    _pBlockApplicationsEnabled,
+                  ("keyguardDisabledFeatures" .=) <$>
+                    _pKeyguardDisabledFeatures,
+                  ("funDisabled" .=) <$> _pFunDisabled,
+                  ("smsDisabled" .=) <$> _pSmsDisabled,
+                  ("maximumTimeToLock" .=) <$> _pMaximumTimeToLock,
+                  ("outgoingBeamDisabled" .=) <$>
+                    _pOutgoingBeamDisabled,
+                  ("statusBarDisabled" .=) <$> _pStatusBarDisabled,
+                  ("cellBroadcastsConfigDisabled" .=) <$>
+                    _pCellBroadcastsConfigDisabled,
+                  ("deviceOwnerLockScreenInfo" .=) <$>
+                    _pDeviceOwnerLockScreenInfo,
+                  ("playStoreMode" .=) <$> _pPlayStoreMode,
+                  ("complianceRules" .=) <$> _pComplianceRules,
+                  ("tetheringConfigDisabled" .=) <$>
+                    _pTetheringConfigDisabled,
+                  ("accountTypesWithManagementDisabled" .=) <$>
+                    _pAccountTypesWithManagementDisabled,
+                  ("wifiConfigDisabled" .=) <$> _pWifiConfigDisabled,
+                  ("persistentPreferredActivities" .=) <$>
+                    _pPersistentPreferredActivities,
+                  ("passwordRequirements" .=) <$>
+                    _pPasswordRequirements,
+                  ("longSupportMessage" .=) <$> _pLongSupportMessage,
+                  ("locationMode" .=) <$> _pLocationMode,
+                  ("bluetoothDisabled" .=) <$> _pBluetoothDisabled,
+                  ("usbFileTransferDisabled" .=) <$>
+                    _pUsbFileTransferDisabled,
+                  ("cameraDisabled" .=) <$> _pCameraDisabled,
+                  ("applications" .=) <$> _pApplications,
+                  ("passwordPolicies" .=) <$> _pPasswordPolicies,
+                  ("factoryResetDisabled" .=) <$>
+                    _pFactoryResetDisabled])
+
+-- | A compliance rule condition which is satisfied if there exists any
+-- matching NonComplianceDetail for the device. A NonComplianceDetail
+-- matches a NonComplianceDetailCondition if all the fields which are set
+-- within the NonComplianceDetailCondition match the corresponding
+-- NonComplianceDetail fields.
+--
+-- /See:/ 'nonComplianceDetailCondition' smart constructor.
+data NonComplianceDetailCondition = NonComplianceDetailCondition'
+    { _ncdcPackageName         :: !(Maybe Text)
+    , _ncdcNonComplianceReason :: !(Maybe NonComplianceDetailConditionNonComplianceReason)
+    , _ncdcSettingName         :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'NonComplianceDetailCondition' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ncdcPackageName'
+--
+-- * 'ncdcNonComplianceReason'
+--
+-- * 'ncdcSettingName'
+nonComplianceDetailCondition
+    :: NonComplianceDetailCondition
+nonComplianceDetailCondition =
+    NonComplianceDetailCondition'
+    { _ncdcPackageName = Nothing
+    , _ncdcNonComplianceReason = Nothing
+    , _ncdcSettingName = Nothing
+    }
+
+-- | The package name of the app that\'s out of compliance. If not set, then
+-- this condition matches any package name.
+ncdcPackageName :: Lens' NonComplianceDetailCondition (Maybe Text)
+ncdcPackageName
+  = lens _ncdcPackageName
+      (\ s a -> s{_ncdcPackageName = a})
+
+-- | The reason the device is not in compliance with the setting. If not set,
+-- then this condition matches any reason.
+ncdcNonComplianceReason :: Lens' NonComplianceDetailCondition (Maybe NonComplianceDetailConditionNonComplianceReason)
+ncdcNonComplianceReason
+  = lens _ncdcNonComplianceReason
+      (\ s a -> s{_ncdcNonComplianceReason = a})
+
+-- | The name of the policy setting. This is the JSON field name of a
+-- top-level Policy field. If not set, then this condition matches any
+-- setting name.
+ncdcSettingName :: Lens' NonComplianceDetailCondition (Maybe Text)
+ncdcSettingName
+  = lens _ncdcSettingName
+      (\ s a -> s{_ncdcSettingName = a})
+
+instance FromJSON NonComplianceDetailCondition where
+        parseJSON
+          = withObject "NonComplianceDetailCondition"
+              (\ o ->
+                 NonComplianceDetailCondition' <$>
+                   (o .:? "packageName") <*>
+                     (o .:? "nonComplianceReason")
+                     <*> (o .:? "settingName"))
+
+instance ToJSON NonComplianceDetailCondition where
+        toJSON NonComplianceDetailCondition'{..}
+          = object
+              (catMaybes
+                 [("packageName" .=) <$> _ncdcPackageName,
+                  ("nonComplianceReason" .=) <$>
+                    _ncdcNonComplianceReason,
+                  ("settingName" .=) <$> _ncdcSettingName])
+
+-- | Service-specific metadata associated with the operation. It typically
+-- contains progress information and common metadata such as create time.
+-- Some services might not provide such metadata. Any method that returns a
+-- long-running operation should document the metadata type, if any.
+--
+-- /See:/ 'operationMetadata' smart constructor.
+newtype OperationMetadata = OperationMetadata'
+    { _omAddtional :: HashMap Text JSONValue
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'OperationMetadata' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'omAddtional'
+operationMetadata
+    :: HashMap Text JSONValue -- ^ 'omAddtional'
+    -> OperationMetadata
+operationMetadata pOmAddtional_ =
+    OperationMetadata'
+    { _omAddtional = _Coerce # pOmAddtional_
+    }
+
+-- | Properties of the object. Contains field \'type with type URL.
+omAddtional :: Lens' OperationMetadata (HashMap Text JSONValue)
+omAddtional
+  = lens _omAddtional (\ s a -> s{_omAddtional = a}) .
+      _Coerce
+
+instance FromJSON OperationMetadata where
+        parseJSON
+          = withObject "OperationMetadata"
+              (\ o -> OperationMetadata' <$> (parseJSONObject o))
+
+instance ToJSON OperationMetadata where
+        toJSON = toJSON . _omAddtional
+
+-- | A web token used to access the managed Google Play iframe.
+--
+-- /See:/ 'webToken' smart constructor.
+data WebToken = WebToken'
+    { _wtParentFrameURL :: !(Maybe Text)
+    , _wtValue          :: !(Maybe Text)
+    , _wtName           :: !(Maybe Text)
+    , _wtPermissions    :: !(Maybe [Text])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'WebToken' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'wtParentFrameURL'
+--
+-- * 'wtValue'
+--
+-- * 'wtName'
+--
+-- * 'wtPermissions'
+webToken
+    :: WebToken
+webToken =
+    WebToken'
+    { _wtParentFrameURL = Nothing
+    , _wtValue = Nothing
+    , _wtName = Nothing
+    , _wtPermissions = Nothing
+    }
+
+-- | The URL of the parent frame hosting the iframe with the embedded UI. To
+-- prevent XSS, the iframe may not be hosted at other URLs. The URL must
+-- use the https scheme.
+wtParentFrameURL :: Lens' WebToken (Maybe Text)
+wtParentFrameURL
+  = lens _wtParentFrameURL
+      (\ s a -> s{_wtParentFrameURL = a})
+
+-- | The token value which is used in the hosting page to generate the iframe
+-- with the embedded UI. This is a read-only field generated by the server.
+wtValue :: Lens' WebToken (Maybe Text)
+wtValue = lens _wtValue (\ s a -> s{_wtValue = a})
+
+-- | The name of the web token, which is generated by the server during
+-- creation in the form
+-- enterprises\/{enterpriseId}\/webTokens\/{webTokenId}.
+wtName :: Lens' WebToken (Maybe Text)
+wtName = lens _wtName (\ s a -> s{_wtName = a})
+
+-- | Permissions available to an admin in the embedded UI. An admin must have
+-- all of these permissions in order to view the UI.
+wtPermissions :: Lens' WebToken [Text]
+wtPermissions
+  = lens _wtPermissions
+      (\ s a -> s{_wtPermissions = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON WebToken where
+        parseJSON
+          = withObject "WebToken"
+              (\ o ->
+                 WebToken' <$>
+                   (o .:? "parentFrameUrl") <*> (o .:? "value") <*>
+                     (o .:? "name")
+                     <*> (o .:? "permissions" .!= mempty))
+
+instance ToJSON WebToken where
+        toJSON WebToken'{..}
+          = object
+              (catMaybes
+                 [("parentFrameUrl" .=) <$> _wtParentFrameURL,
+                  ("value" .=) <$> _wtValue, ("name" .=) <$> _wtName,
+                  ("permissions" .=) <$> _wtPermissions])
+
+-- | A rule declaring which mitigating actions to take when a device is not
+-- compliant with its policy. For every rule, there is always an implicit
+-- mitigating action to set policy_compliant to false for the Device
+-- resource, and display a message on the device indicating that the device
+-- is not compliant with its policy. Other mitigating actions may
+-- optionally be taken as well, depending on the field values in the rule.
+--
+-- /See:/ 'complianceRule' smart constructor.
+data ComplianceRule = ComplianceRule'
+    { _crAPILevelCondition            :: !(Maybe APILevelCondition)
+    , _crDisableApps                  :: !(Maybe Bool)
+    , _crPackageNamesToDisable        :: !(Maybe [Text])
+    , _crNonComplianceDetailCondition :: !(Maybe NonComplianceDetailCondition)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ComplianceRule' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'crAPILevelCondition'
+--
+-- * 'crDisableApps'
+--
+-- * 'crPackageNamesToDisable'
+--
+-- * 'crNonComplianceDetailCondition'
+complianceRule
+    :: ComplianceRule
+complianceRule =
+    ComplianceRule'
+    { _crAPILevelCondition = Nothing
+    , _crDisableApps = Nothing
+    , _crPackageNamesToDisable = Nothing
+    , _crNonComplianceDetailCondition = Nothing
+    }
+
+-- | A condition which is satisfied if the Android Framework API level on the
+-- device doesn\'t meet a minimum requirement.
+crAPILevelCondition :: Lens' ComplianceRule (Maybe APILevelCondition)
+crAPILevelCondition
+  = lens _crAPILevelCondition
+      (\ s a -> s{_crAPILevelCondition = a})
+
+-- | If set to true, the rule includes a mitigating action to disable apps so
+-- that the device is effectively disabled, but app data is preserved. If
+-- the device is running an app in locked task mode, the app will be closed
+-- and a UI showing the reason for non-compliance will be displayed.
+crDisableApps :: Lens' ComplianceRule (Maybe Bool)
+crDisableApps
+  = lens _crDisableApps
+      (\ s a -> s{_crDisableApps = a})
+
+-- | If set, the rule includes a mitigating action to disable apps specified
+-- in the list, but app data is preserved.
+crPackageNamesToDisable :: Lens' ComplianceRule [Text]
+crPackageNamesToDisable
+  = lens _crPackageNamesToDisable
+      (\ s a -> s{_crPackageNamesToDisable = a})
+      . _Default
+      . _Coerce
+
+-- | A condition which is satisfied if there exists any matching
+-- NonComplianceDetail for the device.
+crNonComplianceDetailCondition :: Lens' ComplianceRule (Maybe NonComplianceDetailCondition)
+crNonComplianceDetailCondition
+  = lens _crNonComplianceDetailCondition
+      (\ s a -> s{_crNonComplianceDetailCondition = a})
+
+instance FromJSON ComplianceRule where
+        parseJSON
+          = withObject "ComplianceRule"
+              (\ o ->
+                 ComplianceRule' <$>
+                   (o .:? "apiLevelCondition") <*> (o .:? "disableApps")
+                     <*> (o .:? "packageNamesToDisable" .!= mempty)
+                     <*> (o .:? "nonComplianceDetailCondition"))
+
+instance ToJSON ComplianceRule where
+        toJSON ComplianceRule'{..}
+          = object
+              (catMaybes
+                 [("apiLevelCondition" .=) <$> _crAPILevelCondition,
+                  ("disableApps" .=) <$> _crDisableApps,
+                  ("packageNamesToDisable" .=) <$>
+                    _crPackageNamesToDisable,
+                  ("nonComplianceDetailCondition" .=) <$>
+                    _crNonComplianceDetailCondition])
+
+-- | Requirements for the password used to unlock a device.
+--
+-- /See:/ 'passwordRequirements' smart constructor.
+data PasswordRequirements = PasswordRequirements'
+    { _prPasswordMinimumSymbols        :: !(Maybe (Textual Int32))
+    , _prMaximumFailedPasswordsForWipe :: !(Maybe (Textual Int32))
+    , _prPasswordExpirationTimeout     :: !(Maybe GDuration)
+    , _prPasswordMinimumNonLetter      :: !(Maybe (Textual Int32))
+    , _prPasswordHistoryLength         :: !(Maybe (Textual Int32))
+    , _prPasswordMinimumLetters        :: !(Maybe (Textual Int32))
+    , _prPasswordMinimumUpperCase      :: !(Maybe (Textual Int32))
+    , _prPasswordMinimumNumeric        :: !(Maybe (Textual Int32))
+    , _prPasswordQuality               :: !(Maybe PasswordRequirementsPasswordQuality)
+    , _prPasswordMinimumLength         :: !(Maybe (Textual Int32))
+    , _prPasswordScope                 :: !(Maybe PasswordRequirementsPasswordScope)
+    , _prPasswordMinimumLowerCase      :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PasswordRequirements' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'prPasswordMinimumSymbols'
+--
+-- * 'prMaximumFailedPasswordsForWipe'
+--
+-- * 'prPasswordExpirationTimeout'
+--
+-- * 'prPasswordMinimumNonLetter'
+--
+-- * 'prPasswordHistoryLength'
+--
+-- * 'prPasswordMinimumLetters'
+--
+-- * 'prPasswordMinimumUpperCase'
+--
+-- * 'prPasswordMinimumNumeric'
+--
+-- * 'prPasswordQuality'
+--
+-- * 'prPasswordMinimumLength'
+--
+-- * 'prPasswordScope'
+--
+-- * 'prPasswordMinimumLowerCase'
+passwordRequirements
+    :: PasswordRequirements
+passwordRequirements =
+    PasswordRequirements'
+    { _prPasswordMinimumSymbols = Nothing
+    , _prMaximumFailedPasswordsForWipe = Nothing
+    , _prPasswordExpirationTimeout = Nothing
+    , _prPasswordMinimumNonLetter = Nothing
+    , _prPasswordHistoryLength = Nothing
+    , _prPasswordMinimumLetters = Nothing
+    , _prPasswordMinimumUpperCase = Nothing
+    , _prPasswordMinimumNumeric = Nothing
+    , _prPasswordQuality = Nothing
+    , _prPasswordMinimumLength = Nothing
+    , _prPasswordScope = Nothing
+    , _prPasswordMinimumLowerCase = Nothing
+    }
+
+-- | Minimum number of symbols required in the password. Only enforced when
+-- password_quality is COMPLEX.
+prPasswordMinimumSymbols :: Lens' PasswordRequirements (Maybe Int32)
+prPasswordMinimumSymbols
+  = lens _prPasswordMinimumSymbols
+      (\ s a -> s{_prPasswordMinimumSymbols = a})
+      . mapping _Coerce
+
+-- | Number of incorrect device-unlock passwords that can be entered before a
+-- device is wiped. A value of 0 means there is no restriction.
+prMaximumFailedPasswordsForWipe :: Lens' PasswordRequirements (Maybe Int32)
+prMaximumFailedPasswordsForWipe
+  = lens _prMaximumFailedPasswordsForWipe
+      (\ s a -> s{_prMaximumFailedPasswordsForWipe = a})
+      . mapping _Coerce
+
+-- | Password expiration timeout.
+prPasswordExpirationTimeout :: Lens' PasswordRequirements (Maybe Scientific)
+prPasswordExpirationTimeout
+  = lens _prPasswordExpirationTimeout
+      (\ s a -> s{_prPasswordExpirationTimeout = a})
+      . mapping _GDuration
+
+-- | Minimum number of non-letter characters (numerical digits or symbols)
+-- required in the password. Only enforced when password_quality is
+-- COMPLEX.
+prPasswordMinimumNonLetter :: Lens' PasswordRequirements (Maybe Int32)
+prPasswordMinimumNonLetter
+  = lens _prPasswordMinimumNonLetter
+      (\ s a -> s{_prPasswordMinimumNonLetter = a})
+      . mapping _Coerce
+
+-- | The length of the password history. After setting this field, the user
+-- won\'t be able to enter a new password that is the same as any password
+-- in the history. A value of 0 means there is no restriction.
+prPasswordHistoryLength :: Lens' PasswordRequirements (Maybe Int32)
+prPasswordHistoryLength
+  = lens _prPasswordHistoryLength
+      (\ s a -> s{_prPasswordHistoryLength = a})
+      . mapping _Coerce
+
+-- | Minimum number of letters required in the password. Only enforced when
+-- password_quality is COMPLEX.
+prPasswordMinimumLetters :: Lens' PasswordRequirements (Maybe Int32)
+prPasswordMinimumLetters
+  = lens _prPasswordMinimumLetters
+      (\ s a -> s{_prPasswordMinimumLetters = a})
+      . mapping _Coerce
+
+-- | Minimum number of upper case letters required in the password. Only
+-- enforced when password_quality is COMPLEX.
+prPasswordMinimumUpperCase :: Lens' PasswordRequirements (Maybe Int32)
+prPasswordMinimumUpperCase
+  = lens _prPasswordMinimumUpperCase
+      (\ s a -> s{_prPasswordMinimumUpperCase = a})
+      . mapping _Coerce
+
+-- | Minimum number of numerical digits required in the password. Only
+-- enforced when password_quality is COMPLEX.
+prPasswordMinimumNumeric :: Lens' PasswordRequirements (Maybe Int32)
+prPasswordMinimumNumeric
+  = lens _prPasswordMinimumNumeric
+      (\ s a -> s{_prPasswordMinimumNumeric = a})
+      . mapping _Coerce
+
+-- | The required password quality.
+prPasswordQuality :: Lens' PasswordRequirements (Maybe PasswordRequirementsPasswordQuality)
+prPasswordQuality
+  = lens _prPasswordQuality
+      (\ s a -> s{_prPasswordQuality = a})
+
+-- | The minimum allowed password length. A value of 0 means there is no
+-- restriction. Only enforced when password_quality is NUMERIC,
+-- NUMERIC_COMPLEX, ALPHABETIC, ALPHANUMERIC, or COMPLEX.
+prPasswordMinimumLength :: Lens' PasswordRequirements (Maybe Int32)
+prPasswordMinimumLength
+  = lens _prPasswordMinimumLength
+      (\ s a -> s{_prPasswordMinimumLength = a})
+      . mapping _Coerce
+
+-- | The scope that the password requirement applies to.
+prPasswordScope :: Lens' PasswordRequirements (Maybe PasswordRequirementsPasswordScope)
+prPasswordScope
+  = lens _prPasswordScope
+      (\ s a -> s{_prPasswordScope = a})
+
+-- | Minimum number of lower case letters required in the password. Only
+-- enforced when password_quality is COMPLEX.
+prPasswordMinimumLowerCase :: Lens' PasswordRequirements (Maybe Int32)
+prPasswordMinimumLowerCase
+  = lens _prPasswordMinimumLowerCase
+      (\ s a -> s{_prPasswordMinimumLowerCase = a})
+      . mapping _Coerce
+
+instance FromJSON PasswordRequirements where
+        parseJSON
+          = withObject "PasswordRequirements"
+              (\ o ->
+                 PasswordRequirements' <$>
+                   (o .:? "passwordMinimumSymbols") <*>
+                     (o .:? "maximumFailedPasswordsForWipe")
+                     <*> (o .:? "passwordExpirationTimeout")
+                     <*> (o .:? "passwordMinimumNonLetter")
+                     <*> (o .:? "passwordHistoryLength")
+                     <*> (o .:? "passwordMinimumLetters")
+                     <*> (o .:? "passwordMinimumUpperCase")
+                     <*> (o .:? "passwordMinimumNumeric")
+                     <*> (o .:? "passwordQuality")
+                     <*> (o .:? "passwordMinimumLength")
+                     <*> (o .:? "passwordScope")
+                     <*> (o .:? "passwordMinimumLowerCase"))
+
+instance ToJSON PasswordRequirements where
+        toJSON PasswordRequirements'{..}
+          = object
+              (catMaybes
+                 [("passwordMinimumSymbols" .=) <$>
+                    _prPasswordMinimumSymbols,
+                  ("maximumFailedPasswordsForWipe" .=) <$>
+                    _prMaximumFailedPasswordsForWipe,
+                  ("passwordExpirationTimeout" .=) <$>
+                    _prPasswordExpirationTimeout,
+                  ("passwordMinimumNonLetter" .=) <$>
+                    _prPasswordMinimumNonLetter,
+                  ("passwordHistoryLength" .=) <$>
+                    _prPasswordHistoryLength,
+                  ("passwordMinimumLetters" .=) <$>
+                    _prPasswordMinimumLetters,
+                  ("passwordMinimumUpperCase" .=) <$>
+                    _prPasswordMinimumUpperCase,
+                  ("passwordMinimumNumeric" .=) <$>
+                    _prPasswordMinimumNumeric,
+                  ("passwordQuality" .=) <$> _prPasswordQuality,
+                  ("passwordMinimumLength" .=) <$>
+                    _prPasswordMinimumLength,
+                  ("passwordScope" .=) <$> _prPasswordScope,
+                  ("passwordMinimumLowerCase" .=) <$>
+                    _prPasswordMinimumLowerCase])
+
+-- | Provides detail about non-compliance with a policy setting.
+--
+-- /See:/ 'nonComplianceDetail' smart constructor.
+data NonComplianceDetail = NonComplianceDetail'
+    { _ncdFieldPath                 :: !(Maybe Text)
+    , _ncdPackageName               :: !(Maybe Text)
+    , _ncdInstallationFailureReason :: !(Maybe NonComplianceDetailInstallationFailureReason)
+    , _ncdNonComplianceReason       :: !(Maybe NonComplianceDetailNonComplianceReason)
+    , _ncdSettingName               :: !(Maybe Text)
+    , _ncdCurrentValue              :: !(Maybe JSONValue)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'NonComplianceDetail' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ncdFieldPath'
+--
+-- * 'ncdPackageName'
+--
+-- * 'ncdInstallationFailureReason'
+--
+-- * 'ncdNonComplianceReason'
+--
+-- * 'ncdSettingName'
+--
+-- * 'ncdCurrentValue'
+nonComplianceDetail
+    :: NonComplianceDetail
+nonComplianceDetail =
+    NonComplianceDetail'
+    { _ncdFieldPath = Nothing
+    , _ncdPackageName = Nothing
+    , _ncdInstallationFailureReason = Nothing
+    , _ncdNonComplianceReason = Nothing
+    , _ncdSettingName = Nothing
+    , _ncdCurrentValue = Nothing
+    }
+
+-- | For settings with nested fields, if a particular nested field is out of
+-- compliance, this specifies the full path to the offending field. The
+-- path is formatted in the same way the policy JSON field would be
+-- referenced in JavaScript, that is: 1) For object-typed fields, the field
+-- name is followed by a dot then by a subfield name. 2) For array-typed
+-- fields, the field name is followed by the array index enclosed in
+-- brackets. For example, to indicate a problem with the url field in the
+-- externalData field in the 3rd application, the path would be
+-- applications[2].externalData.url
+ncdFieldPath :: Lens' NonComplianceDetail (Maybe Text)
+ncdFieldPath
+  = lens _ncdFieldPath (\ s a -> s{_ncdFieldPath = a})
+
+-- | The package name indicating which app is out of compliance, if
+-- applicable.
+ncdPackageName :: Lens' NonComplianceDetail (Maybe Text)
+ncdPackageName
+  = lens _ncdPackageName
+      (\ s a -> s{_ncdPackageName = a})
+
+-- | If package_name is set and the non-compliance reason is
+-- APP_NOT_INSTALLED or APP_NOT_UPDATED, the detailed reason the app can\'t
+-- be installed or updated.
+ncdInstallationFailureReason :: Lens' NonComplianceDetail (Maybe NonComplianceDetailInstallationFailureReason)
+ncdInstallationFailureReason
+  = lens _ncdInstallationFailureReason
+      (\ s a -> s{_ncdInstallationFailureReason = a})
+
+-- | The reason the device is not in compliance with the setting.
+ncdNonComplianceReason :: Lens' NonComplianceDetail (Maybe NonComplianceDetailNonComplianceReason)
+ncdNonComplianceReason
+  = lens _ncdNonComplianceReason
+      (\ s a -> s{_ncdNonComplianceReason = a})
+
+-- | The name of the policy setting. This is the JSON field name of a
+-- top-level Policy field.
+ncdSettingName :: Lens' NonComplianceDetail (Maybe Text)
+ncdSettingName
+  = lens _ncdSettingName
+      (\ s a -> s{_ncdSettingName = a})
+
+-- | If the policy setting could not be applied, the current value of the
+-- setting on the device.
+ncdCurrentValue :: Lens' NonComplianceDetail (Maybe JSONValue)
+ncdCurrentValue
+  = lens _ncdCurrentValue
+      (\ s a -> s{_ncdCurrentValue = a})
+
+instance FromJSON NonComplianceDetail where
+        parseJSON
+          = withObject "NonComplianceDetail"
+              (\ o ->
+                 NonComplianceDetail' <$>
+                   (o .:? "fieldPath") <*> (o .:? "packageName") <*>
+                     (o .:? "installationFailureReason")
+                     <*> (o .:? "nonComplianceReason")
+                     <*> (o .:? "settingName")
+                     <*> (o .:? "currentValue"))
+
+instance ToJSON NonComplianceDetail where
+        toJSON NonComplianceDetail'{..}
+          = object
+              (catMaybes
+                 [("fieldPath" .=) <$> _ncdFieldPath,
+                  ("packageName" .=) <$> _ncdPackageName,
+                  ("installationFailureReason" .=) <$>
+                    _ncdInstallationFailureReason,
+                  ("nonComplianceReason" .=) <$>
+                    _ncdNonComplianceReason,
+                  ("settingName" .=) <$> _ncdSettingName,
+                  ("currentValue" .=) <$> _ncdCurrentValue])
+
+-- | An app-related event.
+--
+-- /See:/ 'applicationEvent' smart constructor.
+data ApplicationEvent = ApplicationEvent'
+    { _aeEventType  :: !(Maybe ApplicationEventEventType)
+    , _aeCreateTime :: !(Maybe DateTime')
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ApplicationEvent' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aeEventType'
+--
+-- * 'aeCreateTime'
+applicationEvent
+    :: ApplicationEvent
+applicationEvent =
+    ApplicationEvent'
+    { _aeEventType = Nothing
+    , _aeCreateTime = Nothing
+    }
+
+-- | App event type.
+aeEventType :: Lens' ApplicationEvent (Maybe ApplicationEventEventType)
+aeEventType
+  = lens _aeEventType (\ s a -> s{_aeEventType = a})
+
+-- | The creation time of the event.
+aeCreateTime :: Lens' ApplicationEvent (Maybe UTCTime)
+aeCreateTime
+  = lens _aeCreateTime (\ s a -> s{_aeCreateTime = a})
+      . mapping _DateTime
+
+instance FromJSON ApplicationEvent where
+        parseJSON
+          = withObject "ApplicationEvent"
+              (\ o ->
+                 ApplicationEvent' <$>
+                   (o .:? "eventType") <*> (o .:? "createTime"))
+
+instance ToJSON ApplicationEvent where
+        toJSON ApplicationEvent'{..}
+          = object
+              (catMaybes
+                 [("eventType" .=) <$> _aeEventType,
+                  ("createTime" .=) <$> _aeCreateTime])
+
+-- | A terms and conditions page to be accepted during provisioning.
+--
+-- /See:/ 'termsAndConditions' smart constructor.
+data TermsAndConditions = TermsAndConditions'
+    { _tacContent :: !(Maybe UserFacingMessage)
+    , _tacHeader  :: !(Maybe UserFacingMessage)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TermsAndConditions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tacContent'
+--
+-- * 'tacHeader'
+termsAndConditions
+    :: TermsAndConditions
+termsAndConditions =
+    TermsAndConditions'
+    { _tacContent = Nothing
+    , _tacHeader = Nothing
+    }
+
+-- | A well-formatted HTML string. It will be parsed on the client with
+-- android.text.Html#fromHtml.
+tacContent :: Lens' TermsAndConditions (Maybe UserFacingMessage)
+tacContent
+  = lens _tacContent (\ s a -> s{_tacContent = a})
+
+-- | A short header which appears above the HTML content.
+tacHeader :: Lens' TermsAndConditions (Maybe UserFacingMessage)
+tacHeader
+  = lens _tacHeader (\ s a -> s{_tacHeader = a})
+
+instance FromJSON TermsAndConditions where
+        parseJSON
+          = withObject "TermsAndConditions"
+              (\ o ->
+                 TermsAndConditions' <$>
+                   (o .:? "content") <*> (o .:? "header"))
+
+instance ToJSON TermsAndConditions where
+        toJSON TermsAndConditions'{..}
+          = object
+              (catMaybes
+                 [("content" .=) <$> _tacContent,
+                  ("header" .=) <$> _tacHeader])
+
+-- | The normal response of the operation in case of success. If the original
+-- method returns no data on success, such as Delete, the response is
+-- google.protobuf.Empty. If the original method is standard
+-- Get\/Create\/Update, the response should be the resource. For other
+-- methods, the response should have the type XxxResponse, where Xxx is the
+-- original method name. For example, if the original method name is
+-- TakeSnapshot(), the inferred response type is TakeSnapshotResponse.
+--
+-- /See:/ 'operationResponse' smart constructor.
+newtype OperationResponse = OperationResponse'
+    { _orAddtional :: HashMap Text JSONValue
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'OperationResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'orAddtional'
+operationResponse
+    :: HashMap Text JSONValue -- ^ 'orAddtional'
+    -> OperationResponse
+operationResponse pOrAddtional_ =
+    OperationResponse'
+    { _orAddtional = _Coerce # pOrAddtional_
+    }
+
+-- | Properties of the object. Contains field \'type with type URL.
+orAddtional :: Lens' OperationResponse (HashMap Text JSONValue)
+orAddtional
+  = lens _orAddtional (\ s a -> s{_orAddtional = a}) .
+      _Coerce
+
+instance FromJSON OperationResponse where
+        parseJSON
+          = withObject "OperationResponse"
+              (\ o -> OperationResponse' <$> (parseJSONObject o))
+
+instance ToJSON OperationResponse where
+        toJSON = toJSON . _orAddtional
+
+-- | Provides a user-facing message with locale info. The maximum message
+-- length is 4096 characters.
+--
+-- /See:/ 'userFacingMessage' smart constructor.
+data UserFacingMessage = UserFacingMessage'
+    { _ufmLocalizedMessages :: !(Maybe UserFacingMessageLocalizedMessages)
+    , _ufmDefaultMessage    :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UserFacingMessage' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ufmLocalizedMessages'
+--
+-- * 'ufmDefaultMessage'
+userFacingMessage
+    :: UserFacingMessage
+userFacingMessage =
+    UserFacingMessage'
+    { _ufmLocalizedMessages = Nothing
+    , _ufmDefaultMessage = Nothing
+    }
+
+-- | A map containing pairs, where locale is a well-formed BCP 47 language
+-- (https:\/\/www.w3.org\/International\/articles\/language-tags\/) code,
+-- such as en-US, es-ES, or fr.
+ufmLocalizedMessages :: Lens' UserFacingMessage (Maybe UserFacingMessageLocalizedMessages)
+ufmLocalizedMessages
+  = lens _ufmLocalizedMessages
+      (\ s a -> s{_ufmLocalizedMessages = a})
+
+-- | The default message displayed if no localized message is specified or
+-- the user\'s locale doesn\'t match with any of the localized messages. A
+-- default message must be provided if any localized messages are provided.
+ufmDefaultMessage :: Lens' UserFacingMessage (Maybe Text)
+ufmDefaultMessage
+  = lens _ufmDefaultMessage
+      (\ s a -> s{_ufmDefaultMessage = a})
+
+instance FromJSON UserFacingMessage where
+        parseJSON
+          = withObject "UserFacingMessage"
+              (\ o ->
+                 UserFacingMessage' <$>
+                   (o .:? "localizedMessages") <*>
+                     (o .:? "defaultMessage"))
+
+instance ToJSON UserFacingMessage where
+        toJSON UserFacingMessage'{..}
+          = object
+              (catMaybes
+                 [("localizedMessages" .=) <$> _ufmLocalizedMessages,
+                  ("defaultMessage" .=) <$> _ufmDefaultMessage])
+
+-- | Information about device software.
+--
+-- /See:/ 'softwareInfo' smart constructor.
+data SoftwareInfo = SoftwareInfo'
+    { _siSecurityPatchLevel             :: !(Maybe Text)
+    , _siAndroidDevicePolicyVersionName :: !(Maybe Text)
+    , _siDeviceKernelVersion            :: !(Maybe Text)
+    , _siAndroidDevicePolicyVersionCode :: !(Maybe (Textual Int32))
+    , _siDeviceBuildSignature           :: !(Maybe Text)
+    , _siBootLoaderVersion              :: !(Maybe Text)
+    , _siAndroidBuildTime               :: !(Maybe DateTime')
+    , _siPrimaryLanguageCode            :: !(Maybe Text)
+    , _siAndroidBuildNumber             :: !(Maybe Text)
+    , _siAndroidVersion                 :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SoftwareInfo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'siSecurityPatchLevel'
+--
+-- * 'siAndroidDevicePolicyVersionName'
+--
+-- * 'siDeviceKernelVersion'
+--
+-- * 'siAndroidDevicePolicyVersionCode'
+--
+-- * 'siDeviceBuildSignature'
+--
+-- * 'siBootLoaderVersion'
+--
+-- * 'siAndroidBuildTime'
+--
+-- * 'siPrimaryLanguageCode'
+--
+-- * 'siAndroidBuildNumber'
+--
+-- * 'siAndroidVersion'
+softwareInfo
+    :: SoftwareInfo
+softwareInfo =
+    SoftwareInfo'
+    { _siSecurityPatchLevel = Nothing
+    , _siAndroidDevicePolicyVersionName = Nothing
+    , _siDeviceKernelVersion = Nothing
+    , _siAndroidDevicePolicyVersionCode = Nothing
+    , _siDeviceBuildSignature = Nothing
+    , _siBootLoaderVersion = Nothing
+    , _siAndroidBuildTime = Nothing
+    , _siPrimaryLanguageCode = Nothing
+    , _siAndroidBuildNumber = Nothing
+    , _siAndroidVersion = Nothing
+    }
+
+-- | Security patch level, e.g. 2016-05-01.
+siSecurityPatchLevel :: Lens' SoftwareInfo (Maybe Text)
+siSecurityPatchLevel
+  = lens _siSecurityPatchLevel
+      (\ s a -> s{_siSecurityPatchLevel = a})
+
+-- | The Android Device Policy app version as displayed to the user.
+siAndroidDevicePolicyVersionName :: Lens' SoftwareInfo (Maybe Text)
+siAndroidDevicePolicyVersionName
+  = lens _siAndroidDevicePolicyVersionName
+      (\ s a -> s{_siAndroidDevicePolicyVersionName = a})
+
+-- | Kernel version, for example, 2.6.32.9-g103d848.
+siDeviceKernelVersion :: Lens' SoftwareInfo (Maybe Text)
+siDeviceKernelVersion
+  = lens _siDeviceKernelVersion
+      (\ s a -> s{_siDeviceKernelVersion = a})
+
+-- | The Android Device Policy app version code.
+siAndroidDevicePolicyVersionCode :: Lens' SoftwareInfo (Maybe Int32)
+siAndroidDevicePolicyVersionCode
+  = lens _siAndroidDevicePolicyVersionCode
+      (\ s a -> s{_siAndroidDevicePolicyVersionCode = a})
+      . mapping _Coerce
+
+-- | SHA-256 hash of android.content.pm.Signature
+-- (https:\/\/developer.android.com\/reference\/android\/content\/pm\/Signature.html)
+-- associated with the system package, which can be used to verify that the
+-- system build hasn\'t been modified.
+siDeviceBuildSignature :: Lens' SoftwareInfo (Maybe Text)
+siDeviceBuildSignature
+  = lens _siDeviceBuildSignature
+      (\ s a -> s{_siDeviceBuildSignature = a})
+
+-- | The system bootloader version number, e.g. 0.6.7.
+siBootLoaderVersion :: Lens' SoftwareInfo (Maybe Text)
+siBootLoaderVersion
+  = lens _siBootLoaderVersion
+      (\ s a -> s{_siBootLoaderVersion = a})
+
+-- | Build time.
+siAndroidBuildTime :: Lens' SoftwareInfo (Maybe UTCTime)
+siAndroidBuildTime
+  = lens _siAndroidBuildTime
+      (\ s a -> s{_siAndroidBuildTime = a})
+      . mapping _DateTime
+
+-- | An IETF BCP 47 language code for the primary locale on the device.
+siPrimaryLanguageCode :: Lens' SoftwareInfo (Maybe Text)
+siPrimaryLanguageCode
+  = lens _siPrimaryLanguageCode
+      (\ s a -> s{_siPrimaryLanguageCode = a})
+
+-- | Android build ID string meant for displaying to the user. For example,
+-- shamu-userdebug 6.0.1 MOB30I 2756745 dev-keys.
+siAndroidBuildNumber :: Lens' SoftwareInfo (Maybe Text)
+siAndroidBuildNumber
+  = lens _siAndroidBuildNumber
+      (\ s a -> s{_siAndroidBuildNumber = a})
+
+-- | The user-visible Android version string. For example, 6.0.1.
+siAndroidVersion :: Lens' SoftwareInfo (Maybe Text)
+siAndroidVersion
+  = lens _siAndroidVersion
+      (\ s a -> s{_siAndroidVersion = a})
+
+instance FromJSON SoftwareInfo where
+        parseJSON
+          = withObject "SoftwareInfo"
+              (\ o ->
+                 SoftwareInfo' <$>
+                   (o .:? "securityPatchLevel") <*>
+                     (o .:? "androidDevicePolicyVersionName")
+                     <*> (o .:? "deviceKernelVersion")
+                     <*> (o .:? "androidDevicePolicyVersionCode")
+                     <*> (o .:? "deviceBuildSignature")
+                     <*> (o .:? "bootloaderVersion")
+                     <*> (o .:? "androidBuildTime")
+                     <*> (o .:? "primaryLanguageCode")
+                     <*> (o .:? "androidBuildNumber")
+                     <*> (o .:? "androidVersion"))
+
+instance ToJSON SoftwareInfo where
+        toJSON SoftwareInfo'{..}
+          = object
+              (catMaybes
+                 [("securityPatchLevel" .=) <$> _siSecurityPatchLevel,
+                  ("androidDevicePolicyVersionName" .=) <$>
+                    _siAndroidDevicePolicyVersionName,
+                  ("deviceKernelVersion" .=) <$>
+                    _siDeviceKernelVersion,
+                  ("androidDevicePolicyVersionCode" .=) <$>
+                    _siAndroidDevicePolicyVersionCode,
+                  ("deviceBuildSignature" .=) <$>
+                    _siDeviceBuildSignature,
+                  ("bootloaderVersion" .=) <$> _siBootLoaderVersion,
+                  ("androidBuildTime" .=) <$> _siAndroidBuildTime,
+                  ("primaryLanguageCode" .=) <$>
+                    _siPrimaryLanguageCode,
+                  ("androidBuildNumber" .=) <$> _siAndroidBuildNumber,
+                  ("androidVersion" .=) <$> _siAndroidVersion])
+
+-- | A permission required by the app.
+--
+-- /See:/ 'applicationPermission' smart constructor.
+data ApplicationPermission = ApplicationPermission'
+    { _apName         :: !(Maybe Text)
+    , _apDescription  :: !(Maybe Text)
+    , _apPermissionId :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ApplicationPermission' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'apName'
+--
+-- * 'apDescription'
+--
+-- * 'apPermissionId'
+applicationPermission
+    :: ApplicationPermission
+applicationPermission =
+    ApplicationPermission'
+    { _apName = Nothing
+    , _apDescription = Nothing
+    , _apPermissionId = Nothing
+    }
+
+-- | The name of the permission. Localized.
+apName :: Lens' ApplicationPermission (Maybe Text)
+apName = lens _apName (\ s a -> s{_apName = a})
+
+-- | A longer description of the permission, providing more detail on what it
+-- affects. Localized.
+apDescription :: Lens' ApplicationPermission (Maybe Text)
+apDescription
+  = lens _apDescription
+      (\ s a -> s{_apDescription = a})
+
+-- | An opaque string uniquely identifying the permission. Not localized.
+apPermissionId :: Lens' ApplicationPermission (Maybe Text)
+apPermissionId
+  = lens _apPermissionId
+      (\ s a -> s{_apPermissionId = a})
+
+instance FromJSON ApplicationPermission where
+        parseJSON
+          = withObject "ApplicationPermission"
+              (\ o ->
+                 ApplicationPermission' <$>
+                   (o .:? "name") <*> (o .:? "description") <*>
+                     (o .:? "permissionId"))
+
+instance ToJSON ApplicationPermission where
+        toJSON ApplicationPermission'{..}
+          = object
+              (catMaybes
+                 [("name" .=) <$> _apName,
+                  ("description" .=) <$> _apDescription,
+                  ("permissionId" .=) <$> _apPermissionId])
diff --git a/gen/Network/Google/AndroidManagement/Types/Sum.hs b/gen/Network/Google/AndroidManagement/Types/Sum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/AndroidManagement/Types/Sum.hs
@@ -0,0 +1,1392 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE LambdaCase         #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Network.Google.AndroidManagement.Types.Sum
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.Google.AndroidManagement.Types.Sum where
+
+import           Network.Google.Prelude hiding (Bytes)
+
+-- | Event type.
+data PowerManagementEventEventType
+    = PowerManagementEventTypeUnspecified
+      -- ^ @POWER_MANAGEMENT_EVENT_TYPE_UNSPECIFIED@
+      -- Unspecified. No events have this type.
+    | BatteryLevelCollected
+      -- ^ @BATTERY_LEVEL_COLLECTED@
+      -- Battery level was measured.
+    | PowerConnected
+      -- ^ @POWER_CONNECTED@
+      -- The device started charging.
+    | PowerDisconnected
+      -- ^ @POWER_DISCONNECTED@
+      -- The device stopped charging.
+    | BatteryLow
+      -- ^ @BATTERY_LOW@
+      -- The device entered low-power mode.
+    | BatteryOkay
+      -- ^ @BATTERY_OKAY@
+      -- The device exited low-power mode.
+    | BootCompleted
+      -- ^ @BOOT_COMPLETED@
+      -- The device booted.
+    | Shutdown
+      -- ^ @SHUTDOWN@
+      -- The device shut down.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable PowerManagementEventEventType
+
+instance FromHttpApiData PowerManagementEventEventType where
+    parseQueryParam = \case
+        "POWER_MANAGEMENT_EVENT_TYPE_UNSPECIFIED" -> Right PowerManagementEventTypeUnspecified
+        "BATTERY_LEVEL_COLLECTED" -> Right BatteryLevelCollected
+        "POWER_CONNECTED" -> Right PowerConnected
+        "POWER_DISCONNECTED" -> Right PowerDisconnected
+        "BATTERY_LOW" -> Right BatteryLow
+        "BATTERY_OKAY" -> Right BatteryOkay
+        "BOOT_COMPLETED" -> Right BootCompleted
+        "SHUTDOWN" -> Right Shutdown
+        x -> Left ("Unable to parse PowerManagementEventEventType from: " <> x)
+
+instance ToHttpApiData PowerManagementEventEventType where
+    toQueryParam = \case
+        PowerManagementEventTypeUnspecified -> "POWER_MANAGEMENT_EVENT_TYPE_UNSPECIFIED"
+        BatteryLevelCollected -> "BATTERY_LEVEL_COLLECTED"
+        PowerConnected -> "POWER_CONNECTED"
+        PowerDisconnected -> "POWER_DISCONNECTED"
+        BatteryLow -> "BATTERY_LOW"
+        BatteryOkay -> "BATTERY_OKAY"
+        BootCompleted -> "BOOT_COMPLETED"
+        Shutdown -> "SHUTDOWN"
+
+instance FromJSON PowerManagementEventEventType where
+    parseJSON = parseJSONText "PowerManagementEventEventType"
+
+instance ToJSON PowerManagementEventEventType where
+    toJSON = toJSONText
+
+-- | The type of system update to configure.
+data SystemUpdateType
+    = SystemUpdateTypeUnspecified
+      -- ^ @SYSTEM_UPDATE_TYPE_UNSPECIFIED@
+      -- Follow the default update behavior for the device, which typically
+      -- requires the user to accept system updates.
+    | Automatic
+      -- ^ @AUTOMATIC@
+      -- Install automatically as soon as an update is available.
+    | Windowed
+      -- ^ @WINDOWED@
+      -- Install automatically within a daily maintenance window. This also
+      -- configures Play apps to be updated within the window. This is strongly
+      -- recommended for kiosk devices because this is the only way apps
+      -- persistently pinned to the foreground can be updated by Play.
+    | Postpone
+      -- ^ @POSTPONE@
+      -- Postpone automatic install up to a maximum of 30 days.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable SystemUpdateType
+
+instance FromHttpApiData SystemUpdateType where
+    parseQueryParam = \case
+        "SYSTEM_UPDATE_TYPE_UNSPECIFIED" -> Right SystemUpdateTypeUnspecified
+        "AUTOMATIC" -> Right Automatic
+        "WINDOWED" -> Right Windowed
+        "POSTPONE" -> Right Postpone
+        x -> Left ("Unable to parse SystemUpdateType from: " <> x)
+
+instance ToHttpApiData SystemUpdateType where
+    toQueryParam = \case
+        SystemUpdateTypeUnspecified -> "SYSTEM_UPDATE_TYPE_UNSPECIFIED"
+        Automatic -> "AUTOMATIC"
+        Windowed -> "WINDOWED"
+        Postpone -> "POSTPONE"
+
+instance FromJSON SystemUpdateType where
+    parseJSON = parseJSONText "SystemUpdateType"
+
+instance ToJSON SystemUpdateType where
+    toJSON = toJSONText
+
+-- | The state to be applied to the device. This field can be modified by a
+-- patch request. Note that when calling enterprises.devices.patch, ACTIVE
+-- and DISABLED are the only allowable values. To enter the device into a
+-- DELETED state, call enterprises.devices.delete.
+data DeviceState
+    = DeviceStateUnspecified
+      -- ^ @DEVICE_STATE_UNSPECIFIED@
+      -- This value is disallowed.
+    | Active
+      -- ^ @ACTIVE@
+      -- The device is active.
+    | Disabled
+      -- ^ @DISABLED@
+      -- The device is disabled.
+    | Deleted
+      -- ^ @DELETED@
+      -- The device was deleted. This state will never be returned by an API
+      -- call, but is used in the final status report published to Cloud Pub\/Sub
+      -- when the device acknowledges the deletion.
+    | Provisioning
+      -- ^ @PROVISIONING@
+      -- The device is being provisioned. Newly enrolled devices are in this
+      -- state until they have a policy applied.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable DeviceState
+
+instance FromHttpApiData DeviceState where
+    parseQueryParam = \case
+        "DEVICE_STATE_UNSPECIFIED" -> Right DeviceStateUnspecified
+        "ACTIVE" -> Right Active
+        "DISABLED" -> Right Disabled
+        "DELETED" -> Right Deleted
+        "PROVISIONING" -> Right Provisioning
+        x -> Left ("Unable to parse DeviceState from: " <> x)
+
+instance ToHttpApiData DeviceState where
+    toQueryParam = \case
+        DeviceStateUnspecified -> "DEVICE_STATE_UNSPECIFIED"
+        Active -> "ACTIVE"
+        Disabled -> "DISABLED"
+        Deleted -> "DELETED"
+        Provisioning -> "PROVISIONING"
+
+instance FromJSON DeviceState where
+    parseJSON = parseJSONText "DeviceState"
+
+instance ToJSON DeviceState where
+    toJSON = toJSONText
+
+-- | If the command failed, an error code explaining the failure. This is not
+-- set when the command is cancelled by the caller.
+data CommandErrorCode
+    = CommandErrorCodeUnspecified
+      -- ^ @COMMAND_ERROR_CODE_UNSPECIFIED@
+      -- There was no error.
+    | Unknown
+      -- ^ @UNKNOWN@
+      -- An unknown error occurred.
+    | APILevel
+      -- ^ @API_LEVEL@
+      -- The API level of the device does not support this command.
+    | ManagementMode
+      -- ^ @MANAGEMENT_MODE@
+      -- The management mode (profile owner, device owner, etc.) does not support
+      -- the command.
+    | InvalidValue
+      -- ^ @INVALID_VALUE@
+      -- The command has an invalid parameter value.
+    | Unsupported
+      -- ^ @UNSUPPORTED@
+      -- The device doesn\'t support the command. Updating Android Device Policy
+      -- to the latest version may resolve the issue.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable CommandErrorCode
+
+instance FromHttpApiData CommandErrorCode where
+    parseQueryParam = \case
+        "COMMAND_ERROR_CODE_UNSPECIFIED" -> Right CommandErrorCodeUnspecified
+        "UNKNOWN" -> Right Unknown
+        "API_LEVEL" -> Right APILevel
+        "MANAGEMENT_MODE" -> Right ManagementMode
+        "INVALID_VALUE" -> Right InvalidValue
+        "UNSUPPORTED" -> Right Unsupported
+        x -> Left ("Unable to parse CommandErrorCode from: " <> x)
+
+instance ToHttpApiData CommandErrorCode where
+    toQueryParam = \case
+        CommandErrorCodeUnspecified -> "COMMAND_ERROR_CODE_UNSPECIFIED"
+        Unknown -> "UNKNOWN"
+        APILevel -> "API_LEVEL"
+        ManagementMode -> "MANAGEMENT_MODE"
+        InvalidValue -> "INVALID_VALUE"
+        Unsupported -> "UNSUPPORTED"
+
+instance FromJSON CommandErrorCode where
+    parseJSON = parseJSONText "CommandErrorCode"
+
+instance ToJSON CommandErrorCode where
+    toJSON = toJSONText
+
+-- | The policy for granting the permission.
+data PermissionGrantPolicy
+    = PermissionPolicyUnspecified
+      -- ^ @PERMISSION_POLICY_UNSPECIFIED@
+      -- Policy not specified. If no policy is specified for a permission at any
+      -- level, then the PROMPT behavior is used by default.
+    | Prompt
+      -- ^ @PROMPT@
+      -- Prompt the user to grant a permission.
+    | Grant
+      -- ^ @GRANT@
+      -- Automatically grant a permission.
+    | Deny
+      -- ^ @DENY@
+      -- Automatically deny a permission.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable PermissionGrantPolicy
+
+instance FromHttpApiData PermissionGrantPolicy where
+    parseQueryParam = \case
+        "PERMISSION_POLICY_UNSPECIFIED" -> Right PermissionPolicyUnspecified
+        "PROMPT" -> Right Prompt
+        "GRANT" -> Right Grant
+        "DENY" -> Right Deny
+        x -> Left ("Unable to parse PermissionGrantPolicy from: " <> x)
+
+instance ToHttpApiData PermissionGrantPolicy where
+    toQueryParam = \case
+        PermissionPolicyUnspecified -> "PERMISSION_POLICY_UNSPECIFIED"
+        Prompt -> "PROMPT"
+        Grant -> "GRANT"
+        Deny -> "DENY"
+
+instance FromJSON PermissionGrantPolicy where
+    parseJSON = parseJSONText "PermissionGrantPolicy"
+
+instance ToJSON PermissionGrantPolicy where
+    toJSON = toJSONText
+
+-- | State of the display.
+data DisplayState
+    = DisplayStateUnspecified
+      -- ^ @DISPLAY_STATE_UNSPECIFIED@
+      -- This value is disallowed.
+    | Off
+      -- ^ @OFF@
+      -- Display is off.
+    | ON
+      -- ^ @ON@
+      -- Display is on.
+    | Doze
+      -- ^ @DOZE@
+      -- Display is dozing in a low power state
+    | Suspended
+      -- ^ @SUSPENDED@
+      -- Display is dozing in a suspended low power state.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable DisplayState
+
+instance FromHttpApiData DisplayState where
+    parseQueryParam = \case
+        "DISPLAY_STATE_UNSPECIFIED" -> Right DisplayStateUnspecified
+        "OFF" -> Right Off
+        "ON" -> Right ON
+        "DOZE" -> Right Doze
+        "SUSPENDED" -> Right Suspended
+        x -> Left ("Unable to parse DisplayState from: " <> x)
+
+instance ToHttpApiData DisplayState where
+    toQueryParam = \case
+        DisplayStateUnspecified -> "DISPLAY_STATE_UNSPECIFIED"
+        Off -> "OFF"
+        ON -> "ON"
+        Doze -> "DOZE"
+        Suspended -> "SUSPENDED"
+
+instance FromJSON DisplayState where
+    parseJSON = parseJSONText "DisplayState"
+
+instance ToJSON DisplayState where
+    toJSON = toJSONText
+
+-- | This mode controls which apps are available to the user in the Play
+-- Store and the behavior on the device when apps are removed from the
+-- policy.
+data PolicyPlayStoreMode
+    = PlayStoreModeUnspecified
+      -- ^ @PLAY_STORE_MODE_UNSPECIFIED@
+      -- Unspecified. Defaults to WHITELIST.
+    | WhiteList
+      -- ^ @WHITELIST@
+      -- Only apps that are in the policy are available and any app not in the
+      -- policy will be automatically uninstalled from the device.
+    | BlackList
+      -- ^ @BLACKLIST@
+      -- All apps are available and any app that should not be on the device
+      -- should be explicitly markeds as \'BLOCKED\' in the applications policy.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable PolicyPlayStoreMode
+
+instance FromHttpApiData PolicyPlayStoreMode where
+    parseQueryParam = \case
+        "PLAY_STORE_MODE_UNSPECIFIED" -> Right PlayStoreModeUnspecified
+        "WHITELIST" -> Right WhiteList
+        "BLACKLIST" -> Right BlackList
+        x -> Left ("Unable to parse PolicyPlayStoreMode from: " <> x)
+
+instance ToHttpApiData PolicyPlayStoreMode where
+    toQueryParam = \case
+        PlayStoreModeUnspecified -> "PLAY_STORE_MODE_UNSPECIFIED"
+        WhiteList -> "WHITELIST"
+        BlackList -> "BLACKLIST"
+
+instance FromJSON PolicyPlayStoreMode where
+    parseJSON = parseJSONText "PolicyPlayStoreMode"
+
+instance ToJSON PolicyPlayStoreMode where
+    toJSON = toJSONText
+
+-- | The type of management mode Android Device Policy takes on the device.
+-- This influences which policy settings are supported.
+data DeviceManagementMode
+    = ManagementModeUnspecified
+      -- ^ @MANAGEMENT_MODE_UNSPECIFIED@
+      -- This value is disallowed.
+    | DeviceOwner
+      -- ^ @DEVICE_OWNER@
+      -- Device owner. Android Device Policy has full control over the device.
+    | ProFileOwner
+      -- ^ @PROFILE_OWNER@
+      -- Profile owner. Android Device Policy has control over a managed profile
+      -- on the device.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable DeviceManagementMode
+
+instance FromHttpApiData DeviceManagementMode where
+    parseQueryParam = \case
+        "MANAGEMENT_MODE_UNSPECIFIED" -> Right ManagementModeUnspecified
+        "DEVICE_OWNER" -> Right DeviceOwner
+        "PROFILE_OWNER" -> Right ProFileOwner
+        x -> Left ("Unable to parse DeviceManagementMode from: " <> x)
+
+instance ToHttpApiData DeviceManagementMode where
+    toQueryParam = \case
+        ManagementModeUnspecified -> "MANAGEMENT_MODE_UNSPECIFIED"
+        DeviceOwner -> "DEVICE_OWNER"
+        ProFileOwner -> "PROFILE_OWNER"
+
+instance FromJSON DeviceManagementMode where
+    parseJSON = parseJSONText "DeviceManagementMode"
+
+instance ToJSON DeviceManagementMode where
+    toJSON = toJSONText
+
+-- | The source of the package.
+data ApplicationReportApplicationSource
+    = ApplicationSourceUnspecified
+      -- ^ @APPLICATION_SOURCE_UNSPECIFIED@
+      -- The app was sideloaded from an unspecified source.
+    | SystemAppFactoryVersion
+      -- ^ @SYSTEM_APP_FACTORY_VERSION@
+      -- This is a system app from the device\'s factory image.
+    | SystemAppUpdatedVersion
+      -- ^ @SYSTEM_APP_UPDATED_VERSION@
+      -- This is an updated system app.
+    | InstalledFromPlayStore
+      -- ^ @INSTALLED_FROM_PLAY_STORE@
+      -- The app was installed from the Google Play Store.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable ApplicationReportApplicationSource
+
+instance FromHttpApiData ApplicationReportApplicationSource where
+    parseQueryParam = \case
+        "APPLICATION_SOURCE_UNSPECIFIED" -> Right ApplicationSourceUnspecified
+        "SYSTEM_APP_FACTORY_VERSION" -> Right SystemAppFactoryVersion
+        "SYSTEM_APP_UPDATED_VERSION" -> Right SystemAppUpdatedVersion
+        "INSTALLED_FROM_PLAY_STORE" -> Right InstalledFromPlayStore
+        x -> Left ("Unable to parse ApplicationReportApplicationSource from: " <> x)
+
+instance ToHttpApiData ApplicationReportApplicationSource where
+    toQueryParam = \case
+        ApplicationSourceUnspecified -> "APPLICATION_SOURCE_UNSPECIFIED"
+        SystemAppFactoryVersion -> "SYSTEM_APP_FACTORY_VERSION"
+        SystemAppUpdatedVersion -> "SYSTEM_APP_UPDATED_VERSION"
+        InstalledFromPlayStore -> "INSTALLED_FROM_PLAY_STORE"
+
+instance FromJSON ApplicationReportApplicationSource where
+    parseJSON = parseJSONText "ApplicationReportApplicationSource"
+
+instance ToJSON ApplicationReportApplicationSource where
+    toJSON = toJSONText
+
+-- | The type of installation to perform.
+data ApplicationPolicyInstallType
+    = InstallTypeUnspecified
+      -- ^ @INSTALL_TYPE_UNSPECIFIED@
+      -- Unspecified. Defaults to AVAILABLE.
+    | Preinstalled
+      -- ^ @PREINSTALLED@
+      -- The app is automatically installed and can be removed by the user.
+    | ForceInstalled
+      -- ^ @FORCE_INSTALLED@
+      -- The app is automatically installed and can\'t be removed by the user.
+    | Blocked
+      -- ^ @BLOCKED@
+      -- The app is blocked and can\'t be installed. If the app was installed
+      -- under a previous policy, it will be uninstalled.
+    | Available
+      -- ^ @AVAILABLE@
+      -- The app is available to install.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable ApplicationPolicyInstallType
+
+instance FromHttpApiData ApplicationPolicyInstallType where
+    parseQueryParam = \case
+        "INSTALL_TYPE_UNSPECIFIED" -> Right InstallTypeUnspecified
+        "PREINSTALLED" -> Right Preinstalled
+        "FORCE_INSTALLED" -> Right ForceInstalled
+        "BLOCKED" -> Right Blocked
+        "AVAILABLE" -> Right Available
+        x -> Left ("Unable to parse ApplicationPolicyInstallType from: " <> x)
+
+instance ToHttpApiData ApplicationPolicyInstallType where
+    toQueryParam = \case
+        InstallTypeUnspecified -> "INSTALL_TYPE_UNSPECIFIED"
+        Preinstalled -> "PREINSTALLED"
+        ForceInstalled -> "FORCE_INSTALLED"
+        Blocked -> "BLOCKED"
+        Available -> "AVAILABLE"
+
+instance FromJSON ApplicationPolicyInstallType where
+    parseJSON = parseJSONText "ApplicationPolicyInstallType"
+
+instance ToJSON ApplicationPolicyInstallType where
+    toJSON = toJSONText
+
+-- | If package_name is set and the non-compliance reason is
+-- APP_NOT_INSTALLED or APP_NOT_UPDATED, the detailed reason the app can\'t
+-- be installed or updated.
+data NonComplianceDetailInstallationFailureReason
+    = InstallationFailureReasonUnspecified
+      -- ^ @INSTALLATION_FAILURE_REASON_UNSPECIFIED@
+      -- This value is disallowed.
+    | InstallationFailureReasonUnknown
+      -- ^ @INSTALLATION_FAILURE_REASON_UNKNOWN@
+      -- An unknown condition is preventing the app from being installed. Some
+      -- potential reasons are that the device doesn\'t have enough storage, the
+      -- device network connection is unreliable, or the installation is taking
+      -- longer than expected. The installation will be retried automatically.
+    | InProgress
+      -- ^ @IN_PROGRESS@
+      -- The installation is still in progress.
+    | NotFound
+      -- ^ @NOT_FOUND@
+      -- The app was not found in Play.
+    | NotCompatibleWithDevice
+      -- ^ @NOT_COMPATIBLE_WITH_DEVICE@
+      -- The app is incompatible with the device.
+    | NotApproved
+      -- ^ @NOT_APPROVED@
+      -- The app has not been approved by the admin.
+    | PermissionsNotAccepted
+      -- ^ @PERMISSIONS_NOT_ACCEPTED@
+      -- The app has new permissions that have not been accepted by the admin.
+    | NotAvailableInCountry
+      -- ^ @NOT_AVAILABLE_IN_COUNTRY@
+      -- The app is not available in the user\'s country.
+    | NoLicensesRemaining
+      -- ^ @NO_LICENSES_REMAINING@
+      -- There are no licenses available to assign to the user.
+    | NotEnrolled
+      -- ^ @NOT_ENROLLED@
+      -- The enterprise is no longer enrolled with managed Play or the admin has
+      -- not accepted the latest managed Play terms of service.
+    | UserInvalid
+      -- ^ @USER_INVALID@
+      -- The user is no longer valid. The user may have been deleted or disabled.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable NonComplianceDetailInstallationFailureReason
+
+instance FromHttpApiData NonComplianceDetailInstallationFailureReason where
+    parseQueryParam = \case
+        "INSTALLATION_FAILURE_REASON_UNSPECIFIED" -> Right InstallationFailureReasonUnspecified
+        "INSTALLATION_FAILURE_REASON_UNKNOWN" -> Right InstallationFailureReasonUnknown
+        "IN_PROGRESS" -> Right InProgress
+        "NOT_FOUND" -> Right NotFound
+        "NOT_COMPATIBLE_WITH_DEVICE" -> Right NotCompatibleWithDevice
+        "NOT_APPROVED" -> Right NotApproved
+        "PERMISSIONS_NOT_ACCEPTED" -> Right PermissionsNotAccepted
+        "NOT_AVAILABLE_IN_COUNTRY" -> Right NotAvailableInCountry
+        "NO_LICENSES_REMAINING" -> Right NoLicensesRemaining
+        "NOT_ENROLLED" -> Right NotEnrolled
+        "USER_INVALID" -> Right UserInvalid
+        x -> Left ("Unable to parse NonComplianceDetailInstallationFailureReason from: " <> x)
+
+instance ToHttpApiData NonComplianceDetailInstallationFailureReason where
+    toQueryParam = \case
+        InstallationFailureReasonUnspecified -> "INSTALLATION_FAILURE_REASON_UNSPECIFIED"
+        InstallationFailureReasonUnknown -> "INSTALLATION_FAILURE_REASON_UNKNOWN"
+        InProgress -> "IN_PROGRESS"
+        NotFound -> "NOT_FOUND"
+        NotCompatibleWithDevice -> "NOT_COMPATIBLE_WITH_DEVICE"
+        NotApproved -> "NOT_APPROVED"
+        PermissionsNotAccepted -> "PERMISSIONS_NOT_ACCEPTED"
+        NotAvailableInCountry -> "NOT_AVAILABLE_IN_COUNTRY"
+        NoLicensesRemaining -> "NO_LICENSES_REMAINING"
+        NotEnrolled -> "NOT_ENROLLED"
+        UserInvalid -> "USER_INVALID"
+
+instance FromJSON NonComplianceDetailInstallationFailureReason where
+    parseJSON = parseJSONText "NonComplianceDetailInstallationFailureReason"
+
+instance ToJSON NonComplianceDetailInstallationFailureReason where
+    toJSON = toJSONText
+
+-- | The scope that the password requirement applies to.
+data PasswordRequirementsPasswordScope
+    = ScopeUnspecified
+      -- ^ @SCOPE_UNSPECIFIED@
+      -- The scope is unspecified. The password requirements are applied to the
+      -- work profile for work profile devices and the whole device for fully
+      -- managed or dedicated devices.
+    | ScopeDevice
+      -- ^ @SCOPE_DEVICE@
+      -- The password requirements are only applied to the device.
+    | ScopeProFile
+      -- ^ @SCOPE_PROFILE@
+      -- The password requirements are only applied to the work profile.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable PasswordRequirementsPasswordScope
+
+instance FromHttpApiData PasswordRequirementsPasswordScope where
+    parseQueryParam = \case
+        "SCOPE_UNSPECIFIED" -> Right ScopeUnspecified
+        "SCOPE_DEVICE" -> Right ScopeDevice
+        "SCOPE_PROFILE" -> Right ScopeProFile
+        x -> Left ("Unable to parse PasswordRequirementsPasswordScope from: " <> x)
+
+instance ToHttpApiData PasswordRequirementsPasswordScope where
+    toQueryParam = \case
+        ScopeUnspecified -> "SCOPE_UNSPECIFIED"
+        ScopeDevice -> "SCOPE_DEVICE"
+        ScopeProFile -> "SCOPE_PROFILE"
+
+instance FromJSON PasswordRequirementsPasswordScope where
+    parseJSON = parseJSONText "PasswordRequirementsPasswordScope"
+
+instance ToJSON PasswordRequirementsPasswordScope where
+    toJSON = toJSONText
+
+-- | Encryption status from DevicePolicyManager.
+data DeviceSettingsEncryptionStatus
+    = DSESEncryptionStatusUnspecified
+      -- ^ @ENCRYPTION_STATUS_UNSPECIFIED@
+      -- Unspecified. No device should have this type.
+    | DSESUnsupported
+      -- ^ @UNSUPPORTED@
+      -- Encryption is not supported by the device.
+    | DSESInactive
+      -- ^ @INACTIVE@
+      -- Encryption is supported by the device, but is not currently active.
+    | DSESActivating
+      -- ^ @ACTIVATING@
+      -- Encryption is not currently active, but is currently being activated.
+    | DSESActive
+      -- ^ @ACTIVE@
+      -- Encryption is active.
+    | DSESActiveDefaultKey
+      -- ^ @ACTIVE_DEFAULT_KEY@
+      -- Encryption is active, but an encryption key is not set by the user.
+    | DSESActivePerUser
+      -- ^ @ACTIVE_PER_USER@
+      -- Encryption is active, and the encryption key is tied to the user
+      -- profile.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable DeviceSettingsEncryptionStatus
+
+instance FromHttpApiData DeviceSettingsEncryptionStatus where
+    parseQueryParam = \case
+        "ENCRYPTION_STATUS_UNSPECIFIED" -> Right DSESEncryptionStatusUnspecified
+        "UNSUPPORTED" -> Right DSESUnsupported
+        "INACTIVE" -> Right DSESInactive
+        "ACTIVATING" -> Right DSESActivating
+        "ACTIVE" -> Right DSESActive
+        "ACTIVE_DEFAULT_KEY" -> Right DSESActiveDefaultKey
+        "ACTIVE_PER_USER" -> Right DSESActivePerUser
+        x -> Left ("Unable to parse DeviceSettingsEncryptionStatus from: " <> x)
+
+instance ToHttpApiData DeviceSettingsEncryptionStatus where
+    toQueryParam = \case
+        DSESEncryptionStatusUnspecified -> "ENCRYPTION_STATUS_UNSPECIFIED"
+        DSESUnsupported -> "UNSUPPORTED"
+        DSESInactive -> "INACTIVE"
+        DSESActivating -> "ACTIVATING"
+        DSESActive -> "ACTIVE"
+        DSESActiveDefaultKey -> "ACTIVE_DEFAULT_KEY"
+        DSESActivePerUser -> "ACTIVE_PER_USER"
+
+instance FromJSON DeviceSettingsEncryptionStatus where
+    parseJSON = parseJSONText "DeviceSettingsEncryptionStatus"
+
+instance ToJSON DeviceSettingsEncryptionStatus where
+    toJSON = toJSONText
+
+-- | The degree of location detection enabled. The user may change the value
+-- unless the user is otherwise blocked from accessing device settings.
+data PolicyLocationMode
+    = PLMLocationModeUnspecified
+      -- ^ @LOCATION_MODE_UNSPECIFIED@
+      -- The current device value is not modified.
+    | PLMHighAccuracy
+      -- ^ @HIGH_ACCURACY@
+      -- All location detection methods are enabled, including GPS, networks, and
+      -- other sensors.
+    | PLMSensorsOnly
+      -- ^ @SENSORS_ONLY@
+      -- Only GPS and other sensors are enabled.
+    | PLMBatterySaving
+      -- ^ @BATTERY_SAVING@
+      -- Only the network location provider is enabled.
+    | PLMOff
+      -- ^ @OFF@
+      -- Location detection is disabled.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable PolicyLocationMode
+
+instance FromHttpApiData PolicyLocationMode where
+    parseQueryParam = \case
+        "LOCATION_MODE_UNSPECIFIED" -> Right PLMLocationModeUnspecified
+        "HIGH_ACCURACY" -> Right PLMHighAccuracy
+        "SENSORS_ONLY" -> Right PLMSensorsOnly
+        "BATTERY_SAVING" -> Right PLMBatterySaving
+        "OFF" -> Right PLMOff
+        x -> Left ("Unable to parse PolicyLocationMode from: " <> x)
+
+instance ToHttpApiData PolicyLocationMode where
+    toQueryParam = \case
+        PLMLocationModeUnspecified -> "LOCATION_MODE_UNSPECIFIED"
+        PLMHighAccuracy -> "HIGH_ACCURACY"
+        PLMSensorsOnly -> "SENSORS_ONLY"
+        PLMBatterySaving -> "BATTERY_SAVING"
+        PLMOff -> "OFF"
+
+instance FromJSON PolicyLocationMode where
+    parseJSON = parseJSONText "PolicyLocationMode"
+
+instance ToJSON PolicyLocationMode where
+    toJSON = toJSONText
+
+-- | The app auto update policy, which controls when automatic app updates
+-- can be applied.
+data PolicyAppAutoUpdatePolicy
+    = AppAutoUpdatePolicyUnspecified
+      -- ^ @APP_AUTO_UPDATE_POLICY_UNSPECIFIED@
+      -- The auto-update policy is not set. Equivalent to CHOICE_TO_THE_USER.
+    | ChoiceToTheUser
+      -- ^ @CHOICE_TO_THE_USER@
+      -- The user can control auto-updates.
+    | Never
+      -- ^ @NEVER@
+      -- Apps are never auto-updated.
+    | WifiOnly
+      -- ^ @WIFI_ONLY@
+      -- Apps are auto-updated over Wi-Fi only.
+    | Always
+      -- ^ @ALWAYS@
+      -- Apps are auto-updated at any time. Data charges may apply.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable PolicyAppAutoUpdatePolicy
+
+instance FromHttpApiData PolicyAppAutoUpdatePolicy where
+    parseQueryParam = \case
+        "APP_AUTO_UPDATE_POLICY_UNSPECIFIED" -> Right AppAutoUpdatePolicyUnspecified
+        "CHOICE_TO_THE_USER" -> Right ChoiceToTheUser
+        "NEVER" -> Right Never
+        "WIFI_ONLY" -> Right WifiOnly
+        "ALWAYS" -> Right Always
+        x -> Left ("Unable to parse PolicyAppAutoUpdatePolicy from: " <> x)
+
+instance ToHttpApiData PolicyAppAutoUpdatePolicy where
+    toQueryParam = \case
+        AppAutoUpdatePolicyUnspecified -> "APP_AUTO_UPDATE_POLICY_UNSPECIFIED"
+        ChoiceToTheUser -> "CHOICE_TO_THE_USER"
+        Never -> "NEVER"
+        WifiOnly -> "WIFI_ONLY"
+        Always -> "ALWAYS"
+
+instance FromJSON PolicyAppAutoUpdatePolicy where
+    parseJSON = parseJSONText "PolicyAppAutoUpdatePolicy"
+
+instance ToJSON PolicyAppAutoUpdatePolicy where
+    toJSON = toJSONText
+
+-- | Whether encryption is enabled
+data PolicyEncryptionPolicy
+    = EncryptionPolicyUnspecified
+      -- ^ @ENCRYPTION_POLICY_UNSPECIFIED@
+      -- This value is ignored, i.e. no encryption required
+    | EnabledWithoutPassword
+      -- ^ @ENABLED_WITHOUT_PASSWORD@
+      -- Encryption required but no password required to boot
+    | EnabledWithPassword
+      -- ^ @ENABLED_WITH_PASSWORD@
+      -- Encryption required with password required to boot
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable PolicyEncryptionPolicy
+
+instance FromHttpApiData PolicyEncryptionPolicy where
+    parseQueryParam = \case
+        "ENCRYPTION_POLICY_UNSPECIFIED" -> Right EncryptionPolicyUnspecified
+        "ENABLED_WITHOUT_PASSWORD" -> Right EnabledWithoutPassword
+        "ENABLED_WITH_PASSWORD" -> Right EnabledWithPassword
+        x -> Left ("Unable to parse PolicyEncryptionPolicy from: " <> x)
+
+instance ToHttpApiData PolicyEncryptionPolicy where
+    toQueryParam = \case
+        EncryptionPolicyUnspecified -> "ENCRYPTION_POLICY_UNSPECIFIED"
+        EnabledWithoutPassword -> "ENABLED_WITHOUT_PASSWORD"
+        EnabledWithPassword -> "ENABLED_WITH_PASSWORD"
+
+instance FromJSON PolicyEncryptionPolicy where
+    parseJSON = parseJSONText "PolicyEncryptionPolicy"
+
+instance ToJSON PolicyEncryptionPolicy where
+    toJSON = toJSONText
+
+-- | The type of the command.
+data CommandType
+    = CommandTypeUnspecified
+      -- ^ @COMMAND_TYPE_UNSPECIFIED@
+      -- This value is disallowed.
+    | Lock
+      -- ^ @LOCK@
+      -- Lock the device, as if the lock screen timeout had expired.
+    | ResetPassword
+      -- ^ @RESET_PASSWORD@
+      -- Reset the user\'s password.
+    | Reboot
+      -- ^ @REBOOT@
+      -- Reboot the device. Only supported on API level 24+.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable CommandType
+
+instance FromHttpApiData CommandType where
+    parseQueryParam = \case
+        "COMMAND_TYPE_UNSPECIFIED" -> Right CommandTypeUnspecified
+        "LOCK" -> Right Lock
+        "RESET_PASSWORD" -> Right ResetPassword
+        "REBOOT" -> Right Reboot
+        x -> Left ("Unable to parse CommandType from: " <> x)
+
+instance ToHttpApiData CommandType where
+    toQueryParam = \case
+        CommandTypeUnspecified -> "COMMAND_TYPE_UNSPECIFIED"
+        Lock -> "LOCK"
+        ResetPassword -> "RESET_PASSWORD"
+        Reboot -> "REBOOT"
+
+instance FromJSON CommandType where
+    parseJSON = parseJSONText "CommandType"
+
+instance ToJSON CommandType where
+    toJSON = toJSONText
+
+-- | The default policy for all permissions requested by the app. If
+-- specified, this overrides the policy-level default_permission_policy
+-- which applies to all apps. It does not override the permission_grants
+-- which applies to all apps.
+data ApplicationPolicyDefaultPermissionPolicy
+    = APDPPPermissionPolicyUnspecified
+      -- ^ @PERMISSION_POLICY_UNSPECIFIED@
+      -- Policy not specified. If no policy is specified for a permission at any
+      -- level, then the PROMPT behavior is used by default.
+    | APDPPPrompt
+      -- ^ @PROMPT@
+      -- Prompt the user to grant a permission.
+    | APDPPGrant
+      -- ^ @GRANT@
+      -- Automatically grant a permission.
+    | APDPPDeny
+      -- ^ @DENY@
+      -- Automatically deny a permission.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable ApplicationPolicyDefaultPermissionPolicy
+
+instance FromHttpApiData ApplicationPolicyDefaultPermissionPolicy where
+    parseQueryParam = \case
+        "PERMISSION_POLICY_UNSPECIFIED" -> Right APDPPPermissionPolicyUnspecified
+        "PROMPT" -> Right APDPPPrompt
+        "GRANT" -> Right APDPPGrant
+        "DENY" -> Right APDPPDeny
+        x -> Left ("Unable to parse ApplicationPolicyDefaultPermissionPolicy from: " <> x)
+
+instance ToHttpApiData ApplicationPolicyDefaultPermissionPolicy where
+    toQueryParam = \case
+        APDPPPermissionPolicyUnspecified -> "PERMISSION_POLICY_UNSPECIFIED"
+        APDPPPrompt -> "PROMPT"
+        APDPPGrant -> "GRANT"
+        APDPPDeny -> "DENY"
+
+instance FromJSON ApplicationPolicyDefaultPermissionPolicy where
+    parseJSON = parseJSONText "ApplicationPolicyDefaultPermissionPolicy"
+
+instance ToJSON ApplicationPolicyDefaultPermissionPolicy where
+    toJSON = toJSONText
+
+-- | V1 error format.
+data Xgafv
+    = X1
+      -- ^ @1@
+      -- v1 error format
+    | X2
+      -- ^ @2@
+      -- v2 error format
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable Xgafv
+
+instance FromHttpApiData Xgafv where
+    parseQueryParam = \case
+        "1" -> Right X1
+        "2" -> Right X2
+        x -> Left ("Unable to parse Xgafv from: " <> x)
+
+instance ToHttpApiData Xgafv where
+    toQueryParam = \case
+        X1 -> "1"
+        X2 -> "2"
+
+instance FromJSON Xgafv where
+    parseJSON = parseJSONText "Xgafv"
+
+instance ToJSON Xgafv where
+    toJSON = toJSONText
+
+-- | The type of the property.
+data ManagedPropertyType
+    = ManagedPropertyTypeUnspecified
+      -- ^ @MANAGED_PROPERTY_TYPE_UNSPECIFIED@
+      -- Not used.
+    | Bool
+      -- ^ @BOOL@
+      -- A property of boolean type.
+    | String
+      -- ^ @STRING@
+      -- A property of string type.
+    | Integer
+      -- ^ @INTEGER@
+      -- A property of integer type.
+    | Choice
+      -- ^ @CHOICE@
+      -- A choice of one item from a set.
+    | Multiselect
+      -- ^ @MULTISELECT@
+      -- A choice of multiple items from a set.
+    | Hidden
+      -- ^ @HIDDEN@
+      -- A hidden restriction of string type (the default value can be used to
+      -- pass along information that can\'t be modified, such as a version code).
+    | BundleArray
+      -- ^ @BUNDLE_ARRAY@
+      -- An array of property bundles.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable ManagedPropertyType
+
+instance FromHttpApiData ManagedPropertyType where
+    parseQueryParam = \case
+        "MANAGED_PROPERTY_TYPE_UNSPECIFIED" -> Right ManagedPropertyTypeUnspecified
+        "BOOL" -> Right Bool
+        "STRING" -> Right String
+        "INTEGER" -> Right Integer
+        "CHOICE" -> Right Choice
+        "MULTISELECT" -> Right Multiselect
+        "HIDDEN" -> Right Hidden
+        "BUNDLE_ARRAY" -> Right BundleArray
+        x -> Left ("Unable to parse ManagedPropertyType from: " <> x)
+
+instance ToHttpApiData ManagedPropertyType where
+    toQueryParam = \case
+        ManagedPropertyTypeUnspecified -> "MANAGED_PROPERTY_TYPE_UNSPECIFIED"
+        Bool -> "BOOL"
+        String -> "STRING"
+        Integer -> "INTEGER"
+        Choice -> "CHOICE"
+        Multiselect -> "MULTISELECT"
+        Hidden -> "HIDDEN"
+        BundleArray -> "BUNDLE_ARRAY"
+
+instance FromJSON ManagedPropertyType where
+    parseJSON = parseJSONText "ManagedPropertyType"
+
+instance ToJSON ManagedPropertyType where
+    toJSON = toJSONText
+
+-- | The state currently applied to the device.
+data DeviceAppliedState
+    = DASDeviceStateUnspecified
+      -- ^ @DEVICE_STATE_UNSPECIFIED@
+      -- This value is disallowed.
+    | DASActive
+      -- ^ @ACTIVE@
+      -- The device is active.
+    | DASDisabled
+      -- ^ @DISABLED@
+      -- The device is disabled.
+    | DASDeleted
+      -- ^ @DELETED@
+      -- The device was deleted. This state will never be returned by an API
+      -- call, but is used in the final status report published to Cloud Pub\/Sub
+      -- when the device acknowledges the deletion.
+    | DASProvisioning
+      -- ^ @PROVISIONING@
+      -- The device is being provisioned. Newly enrolled devices are in this
+      -- state until they have a policy applied.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable DeviceAppliedState
+
+instance FromHttpApiData DeviceAppliedState where
+    parseQueryParam = \case
+        "DEVICE_STATE_UNSPECIFIED" -> Right DASDeviceStateUnspecified
+        "ACTIVE" -> Right DASActive
+        "DISABLED" -> Right DASDisabled
+        "DELETED" -> Right DASDeleted
+        "PROVISIONING" -> Right DASProvisioning
+        x -> Left ("Unable to parse DeviceAppliedState from: " <> x)
+
+instance ToHttpApiData DeviceAppliedState where
+    toQueryParam = \case
+        DASDeviceStateUnspecified -> "DEVICE_STATE_UNSPECIFIED"
+        DASActive -> "ACTIVE"
+        DASDisabled -> "DISABLED"
+        DASDeleted -> "DELETED"
+        DASProvisioning -> "PROVISIONING"
+
+instance FromJSON DeviceAppliedState where
+    parseJSON = parseJSONText "DeviceAppliedState"
+
+instance ToJSON DeviceAppliedState where
+    toJSON = toJSONText
+
+-- | App event type.
+data ApplicationEventEventType
+    = ApplicationEventTypeUnspecified
+      -- ^ @APPLICATION_EVENT_TYPE_UNSPECIFIED@
+      -- This value is disallowed.
+    | Installed
+      -- ^ @INSTALLED@
+      -- The app was installed.
+    | Changed
+      -- ^ @CHANGED@
+      -- The app was changed, for example, a component was enabled or disabled.
+    | DataCleared
+      -- ^ @DATA_CLEARED@
+      -- The app data was cleared.
+    | Removed
+      -- ^ @REMOVED@
+      -- The app was removed.
+    | Replaced
+      -- ^ @REPLACED@
+      -- A new version of the app has been installed, replacing the old version.
+    | Restarted
+      -- ^ @RESTARTED@
+      -- The app was restarted.
+    | Pinned
+      -- ^ @PINNED@
+      -- The app was pinned to the foreground.
+    | Unpinned
+      -- ^ @UNPINNED@
+      -- The app was unpinned.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable ApplicationEventEventType
+
+instance FromHttpApiData ApplicationEventEventType where
+    parseQueryParam = \case
+        "APPLICATION_EVENT_TYPE_UNSPECIFIED" -> Right ApplicationEventTypeUnspecified
+        "INSTALLED" -> Right Installed
+        "CHANGED" -> Right Changed
+        "DATA_CLEARED" -> Right DataCleared
+        "REMOVED" -> Right Removed
+        "REPLACED" -> Right Replaced
+        "RESTARTED" -> Right Restarted
+        "PINNED" -> Right Pinned
+        "UNPINNED" -> Right Unpinned
+        x -> Left ("Unable to parse ApplicationEventEventType from: " <> x)
+
+instance ToHttpApiData ApplicationEventEventType where
+    toQueryParam = \case
+        ApplicationEventTypeUnspecified -> "APPLICATION_EVENT_TYPE_UNSPECIFIED"
+        Installed -> "INSTALLED"
+        Changed -> "CHANGED"
+        DataCleared -> "DATA_CLEARED"
+        Removed -> "REMOVED"
+        Replaced -> "REPLACED"
+        Restarted -> "RESTARTED"
+        Pinned -> "PINNED"
+        Unpinned -> "UNPINNED"
+
+instance FromJSON ApplicationEventEventType where
+    parseJSON = parseJSONText "ApplicationEventEventType"
+
+instance ToJSON ApplicationEventEventType where
+    toJSON = toJSONText
+
+-- | The reason the device is not in compliance with the setting.
+data NonComplianceDetailNonComplianceReason
+    = NCDNCRNonComplianceReasonUnspecified
+      -- ^ @NON_COMPLIANCE_REASON_UNSPECIFIED@
+      -- This value is disallowed.
+    | NCDNCRAPILevel
+      -- ^ @API_LEVEL@
+      -- The setting is not supported in the API level of the Android version
+      -- running on the device.
+    | NCDNCRManagementMode
+      -- ^ @MANAGEMENT_MODE@
+      -- The management mode (profile owner, device owner, etc.) doesn\'t support
+      -- the setting.
+    | NCDNCRUserAction
+      -- ^ @USER_ACTION@
+      -- The user has not taken required action to comply with the setting.
+    | NCDNCRInvalidValue
+      -- ^ @INVALID_VALUE@
+      -- The setting has an invalid value.
+    | NCDNCRAppNotInstalled
+      -- ^ @APP_NOT_INSTALLED@
+      -- The app required to implement the policy is not installed.
+    | NCDNCRUnsupported
+      -- ^ @UNSUPPORTED@
+      -- The policy is not supported by the version of Android Device Policy on
+      -- the device.
+    | NCDNCRAppInstalled
+      -- ^ @APP_INSTALLED@
+      -- A blocked app is installed.
+    | NCDNCRPending
+      -- ^ @PENDING@
+      -- The setting hasn\'t been applied at the time of the report, but is
+      -- expected to be applied shortly.
+    | NCDNCRAppIncompatible
+      -- ^ @APP_INCOMPATIBLE@
+      -- The setting can\'t be applied to the app because the app doesn\'t
+      -- support it, for example because its target SDK version is not high
+      -- enough.
+    | NCDNCRAppNotUpdated
+      -- ^ @APP_NOT_UPDATED@
+      -- The app is installed, but it hasn\'t been updated to the minimum version
+      -- code specified by policy.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable NonComplianceDetailNonComplianceReason
+
+instance FromHttpApiData NonComplianceDetailNonComplianceReason where
+    parseQueryParam = \case
+        "NON_COMPLIANCE_REASON_UNSPECIFIED" -> Right NCDNCRNonComplianceReasonUnspecified
+        "API_LEVEL" -> Right NCDNCRAPILevel
+        "MANAGEMENT_MODE" -> Right NCDNCRManagementMode
+        "USER_ACTION" -> Right NCDNCRUserAction
+        "INVALID_VALUE" -> Right NCDNCRInvalidValue
+        "APP_NOT_INSTALLED" -> Right NCDNCRAppNotInstalled
+        "UNSUPPORTED" -> Right NCDNCRUnsupported
+        "APP_INSTALLED" -> Right NCDNCRAppInstalled
+        "PENDING" -> Right NCDNCRPending
+        "APP_INCOMPATIBLE" -> Right NCDNCRAppIncompatible
+        "APP_NOT_UPDATED" -> Right NCDNCRAppNotUpdated
+        x -> Left ("Unable to parse NonComplianceDetailNonComplianceReason from: " <> x)
+
+instance ToHttpApiData NonComplianceDetailNonComplianceReason where
+    toQueryParam = \case
+        NCDNCRNonComplianceReasonUnspecified -> "NON_COMPLIANCE_REASON_UNSPECIFIED"
+        NCDNCRAPILevel -> "API_LEVEL"
+        NCDNCRManagementMode -> "MANAGEMENT_MODE"
+        NCDNCRUserAction -> "USER_ACTION"
+        NCDNCRInvalidValue -> "INVALID_VALUE"
+        NCDNCRAppNotInstalled -> "APP_NOT_INSTALLED"
+        NCDNCRUnsupported -> "UNSUPPORTED"
+        NCDNCRAppInstalled -> "APP_INSTALLED"
+        NCDNCRPending -> "PENDING"
+        NCDNCRAppIncompatible -> "APP_INCOMPATIBLE"
+        NCDNCRAppNotUpdated -> "APP_NOT_UPDATED"
+
+instance FromJSON NonComplianceDetailNonComplianceReason where
+    parseJSON = parseJSONText "NonComplianceDetailNonComplianceReason"
+
+instance ToJSON NonComplianceDetailNonComplianceReason where
+    toJSON = toJSONText
+
+-- | The default permission policy for runtime permission requests.
+data PolicyDefaultPermissionPolicy
+    = PDPPPermissionPolicyUnspecified
+      -- ^ @PERMISSION_POLICY_UNSPECIFIED@
+      -- Policy not specified. If no policy is specified for a permission at any
+      -- level, then the PROMPT behavior is used by default.
+    | PDPPPrompt
+      -- ^ @PROMPT@
+      -- Prompt the user to grant a permission.
+    | PDPPGrant
+      -- ^ @GRANT@
+      -- Automatically grant a permission.
+    | PDPPDeny
+      -- ^ @DENY@
+      -- Automatically deny a permission.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable PolicyDefaultPermissionPolicy
+
+instance FromHttpApiData PolicyDefaultPermissionPolicy where
+    parseQueryParam = \case
+        "PERMISSION_POLICY_UNSPECIFIED" -> Right PDPPPermissionPolicyUnspecified
+        "PROMPT" -> Right PDPPPrompt
+        "GRANT" -> Right PDPPGrant
+        "DENY" -> Right PDPPDeny
+        x -> Left ("Unable to parse PolicyDefaultPermissionPolicy from: " <> x)
+
+instance ToHttpApiData PolicyDefaultPermissionPolicy where
+    toQueryParam = \case
+        PDPPPermissionPolicyUnspecified -> "PERMISSION_POLICY_UNSPECIFIED"
+        PDPPPrompt -> "PROMPT"
+        PDPPGrant -> "GRANT"
+        PDPPDeny -> "DENY"
+
+instance FromJSON PolicyDefaultPermissionPolicy where
+    parseJSON = parseJSONText "PolicyDefaultPermissionPolicy"
+
+instance ToJSON PolicyDefaultPermissionPolicy where
+    toJSON = toJSONText
+
+-- | Application state.
+data ApplicationReportState
+    = ARSInstalled
+      -- ^ @INSTALLED@
+      -- App is installed on the device
+    | ARSRemoved
+      -- ^ @REMOVED@
+      -- App was removed from the device
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable ApplicationReportState
+
+instance FromHttpApiData ApplicationReportState where
+    parseQueryParam = \case
+        "INSTALLED" -> Right ARSInstalled
+        "REMOVED" -> Right ARSRemoved
+        x -> Left ("Unable to parse ApplicationReportState from: " <> x)
+
+instance ToHttpApiData ApplicationReportState where
+    toQueryParam = \case
+        ARSInstalled -> "INSTALLED"
+        ARSRemoved -> "REMOVED"
+
+instance FromJSON ApplicationReportState where
+    parseJSON = parseJSONText "ApplicationReportState"
+
+instance ToJSON ApplicationReportState where
+    toJSON = toJSONText
+
+-- | The reason the device is not in compliance with the setting. If not set,
+-- then this condition matches any reason.
+data NonComplianceDetailConditionNonComplianceReason
+    = NCDCNCRNonComplianceReasonUnspecified
+      -- ^ @NON_COMPLIANCE_REASON_UNSPECIFIED@
+      -- This value is disallowed.
+    | NCDCNCRAPILevel
+      -- ^ @API_LEVEL@
+      -- The setting is not supported in the API level of the Android version
+      -- running on the device.
+    | NCDCNCRManagementMode
+      -- ^ @MANAGEMENT_MODE@
+      -- The management mode (profile owner, device owner, etc.) doesn\'t support
+      -- the setting.
+    | NCDCNCRUserAction
+      -- ^ @USER_ACTION@
+      -- The user has not taken required action to comply with the setting.
+    | NCDCNCRInvalidValue
+      -- ^ @INVALID_VALUE@
+      -- The setting has an invalid value.
+    | NCDCNCRAppNotInstalled
+      -- ^ @APP_NOT_INSTALLED@
+      -- The app required to implement the policy is not installed.
+    | NCDCNCRUnsupported
+      -- ^ @UNSUPPORTED@
+      -- The policy is not supported by the version of Android Device Policy on
+      -- the device.
+    | NCDCNCRAppInstalled
+      -- ^ @APP_INSTALLED@
+      -- A blocked app is installed.
+    | NCDCNCRPending
+      -- ^ @PENDING@
+      -- The setting hasn\'t been applied at the time of the report, but is
+      -- expected to be applied shortly.
+    | NCDCNCRAppIncompatible
+      -- ^ @APP_INCOMPATIBLE@
+      -- The setting can\'t be applied to the app because the app doesn\'t
+      -- support it, for example because its target SDK version is not high
+      -- enough.
+    | NCDCNCRAppNotUpdated
+      -- ^ @APP_NOT_UPDATED@
+      -- The app is installed, but it hasn\'t been updated to the minimum version
+      -- code specified by policy.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable NonComplianceDetailConditionNonComplianceReason
+
+instance FromHttpApiData NonComplianceDetailConditionNonComplianceReason where
+    parseQueryParam = \case
+        "NON_COMPLIANCE_REASON_UNSPECIFIED" -> Right NCDCNCRNonComplianceReasonUnspecified
+        "API_LEVEL" -> Right NCDCNCRAPILevel
+        "MANAGEMENT_MODE" -> Right NCDCNCRManagementMode
+        "USER_ACTION" -> Right NCDCNCRUserAction
+        "INVALID_VALUE" -> Right NCDCNCRInvalidValue
+        "APP_NOT_INSTALLED" -> Right NCDCNCRAppNotInstalled
+        "UNSUPPORTED" -> Right NCDCNCRUnsupported
+        "APP_INSTALLED" -> Right NCDCNCRAppInstalled
+        "PENDING" -> Right NCDCNCRPending
+        "APP_INCOMPATIBLE" -> Right NCDCNCRAppIncompatible
+        "APP_NOT_UPDATED" -> Right NCDCNCRAppNotUpdated
+        x -> Left ("Unable to parse NonComplianceDetailConditionNonComplianceReason from: " <> x)
+
+instance ToHttpApiData NonComplianceDetailConditionNonComplianceReason where
+    toQueryParam = \case
+        NCDCNCRNonComplianceReasonUnspecified -> "NON_COMPLIANCE_REASON_UNSPECIFIED"
+        NCDCNCRAPILevel -> "API_LEVEL"
+        NCDCNCRManagementMode -> "MANAGEMENT_MODE"
+        NCDCNCRUserAction -> "USER_ACTION"
+        NCDCNCRInvalidValue -> "INVALID_VALUE"
+        NCDCNCRAppNotInstalled -> "APP_NOT_INSTALLED"
+        NCDCNCRUnsupported -> "UNSUPPORTED"
+        NCDCNCRAppInstalled -> "APP_INSTALLED"
+        NCDCNCRPending -> "PENDING"
+        NCDCNCRAppIncompatible -> "APP_INCOMPATIBLE"
+        NCDCNCRAppNotUpdated -> "APP_NOT_UPDATED"
+
+instance FromJSON NonComplianceDetailConditionNonComplianceReason where
+    parseJSON = parseJSONText "NonComplianceDetailConditionNonComplianceReason"
+
+instance ToJSON NonComplianceDetailConditionNonComplianceReason where
+    toJSON = toJSONText
+
+-- | Event type.
+data MemoryEventEventType
+    = MemoryEventTypeUnspecified
+      -- ^ @MEMORY_EVENT_TYPE_UNSPECIFIED@
+      -- Unspecified. No events have this type.
+    | RamMeasured
+      -- ^ @RAM_MEASURED@
+      -- Free space in RAM was measured.
+    | InternalStorageMeasured
+      -- ^ @INTERNAL_STORAGE_MEASURED@
+      -- Free space in internal storage was measured.
+    | ExternalStorageDetected
+      -- ^ @EXTERNAL_STORAGE_DETECTED@
+      -- A new external storage medium was detected. The reported byte count is
+      -- the total capacity of the storage medium.
+    | ExternalStorageRemoved
+      -- ^ @EXTERNAL_STORAGE_REMOVED@
+      -- An external storage medium was removed. The reported byte count is zero.
+    | ExternalStorageMeasured
+      -- ^ @EXTERNAL_STORAGE_MEASURED@
+      -- Free space in an external storage medium was measured.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable MemoryEventEventType
+
+instance FromHttpApiData MemoryEventEventType where
+    parseQueryParam = \case
+        "MEMORY_EVENT_TYPE_UNSPECIFIED" -> Right MemoryEventTypeUnspecified
+        "RAM_MEASURED" -> Right RamMeasured
+        "INTERNAL_STORAGE_MEASURED" -> Right InternalStorageMeasured
+        "EXTERNAL_STORAGE_DETECTED" -> Right ExternalStorageDetected
+        "EXTERNAL_STORAGE_REMOVED" -> Right ExternalStorageRemoved
+        "EXTERNAL_STORAGE_MEASURED" -> Right ExternalStorageMeasured
+        x -> Left ("Unable to parse MemoryEventEventType from: " <> x)
+
+instance ToHttpApiData MemoryEventEventType where
+    toQueryParam = \case
+        MemoryEventTypeUnspecified -> "MEMORY_EVENT_TYPE_UNSPECIFIED"
+        RamMeasured -> "RAM_MEASURED"
+        InternalStorageMeasured -> "INTERNAL_STORAGE_MEASURED"
+        ExternalStorageDetected -> "EXTERNAL_STORAGE_DETECTED"
+        ExternalStorageRemoved -> "EXTERNAL_STORAGE_REMOVED"
+        ExternalStorageMeasured -> "EXTERNAL_STORAGE_MEASURED"
+
+instance FromJSON MemoryEventEventType where
+    parseJSON = parseJSONText "MemoryEventEventType"
+
+instance ToJSON MemoryEventEventType where
+    toJSON = toJSONText
+
+-- | The required password quality.
+data PasswordRequirementsPasswordQuality
+    = PasswordQualityUnspecified
+      -- ^ @PASSWORD_QUALITY_UNSPECIFIED@
+      -- There are no password requirements.
+    | BiometricWeak
+      -- ^ @BIOMETRIC_WEAK@
+      -- The device must be secured with a low-security biometric recognition
+      -- technology, at minimum. This includes technologies that can recognize
+      -- the identity of an individual that are roughly equivalent to a 3-digit
+      -- PIN (false detection is less than 1 in 1,000).
+    | Something
+      -- ^ @SOMETHING@
+      -- A password is required, but there are no restrictions on what the
+      -- password must contain.
+    | Numeric
+      -- ^ @NUMERIC@
+      -- The password must contain numeric characters.
+    | NumericComplex
+      -- ^ @NUMERIC_COMPLEX@
+      -- The password must contain numeric characters with no repeating (4444) or
+      -- ordered (1234, 4321, 2468) sequences.
+    | Alphabetic
+      -- ^ @ALPHABETIC@
+      -- The password must contain alphabetic (or symbol) characters.
+    | Alphanumeric
+      -- ^ @ALPHANUMERIC@
+      -- The password must contain both numeric and alphabetic (or symbol)
+      -- characters.
+    | Complex
+      -- ^ @COMPLEX@
+      -- The password must contain at least a letter, a numerical digit and a
+      -- special symbol. Other password constraints, for example,
+      -- password_minimum_letters are enforced.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable PasswordRequirementsPasswordQuality
+
+instance FromHttpApiData PasswordRequirementsPasswordQuality where
+    parseQueryParam = \case
+        "PASSWORD_QUALITY_UNSPECIFIED" -> Right PasswordQualityUnspecified
+        "BIOMETRIC_WEAK" -> Right BiometricWeak
+        "SOMETHING" -> Right Something
+        "NUMERIC" -> Right Numeric
+        "NUMERIC_COMPLEX" -> Right NumericComplex
+        "ALPHABETIC" -> Right Alphabetic
+        "ALPHANUMERIC" -> Right Alphanumeric
+        "COMPLEX" -> Right Complex
+        x -> Left ("Unable to parse PasswordRequirementsPasswordQuality from: " <> x)
+
+instance ToHttpApiData PasswordRequirementsPasswordQuality where
+    toQueryParam = \case
+        PasswordQualityUnspecified -> "PASSWORD_QUALITY_UNSPECIFIED"
+        BiometricWeak -> "BIOMETRIC_WEAK"
+        Something -> "SOMETHING"
+        Numeric -> "NUMERIC"
+        NumericComplex -> "NUMERIC_COMPLEX"
+        Alphabetic -> "ALPHABETIC"
+        Alphanumeric -> "ALPHANUMERIC"
+        Complex -> "COMPLEX"
+
+instance FromJSON PasswordRequirementsPasswordQuality where
+    parseJSON = parseJSONText "PasswordRequirementsPasswordQuality"
+
+instance ToJSON PasswordRequirementsPasswordQuality where
+    toJSON = toJSONText
diff --git a/gen/Network/Google/Resource/AndroidManagement/Enterprises/Applications/Get.hs b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Applications/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Applications/Get.hs
@@ -0,0 +1,161 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.AndroidManagement.Enterprises.Applications.Get
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets info about an application.
+--
+-- /See:/ <https://developers.google.com/android/management Android Management API Reference> for @androidmanagement.enterprises.applications.get@.
+module Network.Google.Resource.AndroidManagement.Enterprises.Applications.Get
+    (
+    -- * REST Resource
+      EnterprisesApplicationsGetResource
+
+    -- * Creating a Request
+    , enterprisesApplicationsGet
+    , EnterprisesApplicationsGet
+
+    -- * Request Lenses
+    , eagXgafv
+    , eagLanguageCode
+    , eagUploadProtocol
+    , eagAccessToken
+    , eagUploadType
+    , eagName
+    , eagCallback
+    ) where
+
+import           Network.Google.AndroidManagement.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidmanagement.enterprises.applications.get@ method which the
+-- 'EnterprisesApplicationsGet' request conforms to.
+type EnterprisesApplicationsGetResource =
+     "v1" :>
+       Capture "name" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "languageCode" Text :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "callback" Text :>
+                     QueryParam "alt" AltJSON :> Get '[JSON] Application
+
+-- | Gets info about an application.
+--
+-- /See:/ 'enterprisesApplicationsGet' smart constructor.
+data EnterprisesApplicationsGet = EnterprisesApplicationsGet'
+    { _eagXgafv          :: !(Maybe Xgafv)
+    , _eagLanguageCode   :: !(Maybe Text)
+    , _eagUploadProtocol :: !(Maybe Text)
+    , _eagAccessToken    :: !(Maybe Text)
+    , _eagUploadType     :: !(Maybe Text)
+    , _eagName           :: !Text
+    , _eagCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EnterprisesApplicationsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'eagXgafv'
+--
+-- * 'eagLanguageCode'
+--
+-- * 'eagUploadProtocol'
+--
+-- * 'eagAccessToken'
+--
+-- * 'eagUploadType'
+--
+-- * 'eagName'
+--
+-- * 'eagCallback'
+enterprisesApplicationsGet
+    :: Text -- ^ 'eagName'
+    -> EnterprisesApplicationsGet
+enterprisesApplicationsGet pEagName_ =
+    EnterprisesApplicationsGet'
+    { _eagXgafv = Nothing
+    , _eagLanguageCode = Nothing
+    , _eagUploadProtocol = Nothing
+    , _eagAccessToken = Nothing
+    , _eagUploadType = Nothing
+    , _eagName = pEagName_
+    , _eagCallback = Nothing
+    }
+
+-- | V1 error format.
+eagXgafv :: Lens' EnterprisesApplicationsGet (Maybe Xgafv)
+eagXgafv = lens _eagXgafv (\ s a -> s{_eagXgafv = a})
+
+-- | The preferred language for localized application info, as a BCP47 tag
+-- (e.g. \"en-US\", \"de\"). If not specified the default language of the
+-- application will be used.
+eagLanguageCode :: Lens' EnterprisesApplicationsGet (Maybe Text)
+eagLanguageCode
+  = lens _eagLanguageCode
+      (\ s a -> s{_eagLanguageCode = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+eagUploadProtocol :: Lens' EnterprisesApplicationsGet (Maybe Text)
+eagUploadProtocol
+  = lens _eagUploadProtocol
+      (\ s a -> s{_eagUploadProtocol = a})
+
+-- | OAuth access token.
+eagAccessToken :: Lens' EnterprisesApplicationsGet (Maybe Text)
+eagAccessToken
+  = lens _eagAccessToken
+      (\ s a -> s{_eagAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+eagUploadType :: Lens' EnterprisesApplicationsGet (Maybe Text)
+eagUploadType
+  = lens _eagUploadType
+      (\ s a -> s{_eagUploadType = a})
+
+-- | The name of the application in the form
+-- enterprises\/{enterpriseId}\/applications\/{package_name}.
+eagName :: Lens' EnterprisesApplicationsGet Text
+eagName = lens _eagName (\ s a -> s{_eagName = a})
+
+-- | JSONP
+eagCallback :: Lens' EnterprisesApplicationsGet (Maybe Text)
+eagCallback
+  = lens _eagCallback (\ s a -> s{_eagCallback = a})
+
+instance GoogleRequest EnterprisesApplicationsGet
+         where
+        type Rs EnterprisesApplicationsGet = Application
+        type Scopes EnterprisesApplicationsGet =
+             '["https://www.googleapis.com/auth/androidmanagement"]
+        requestClient EnterprisesApplicationsGet'{..}
+          = go _eagName _eagXgafv _eagLanguageCode
+              _eagUploadProtocol
+              _eagAccessToken
+              _eagUploadType
+              _eagCallback
+              (Just AltJSON)
+              androidManagementService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy EnterprisesApplicationsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidManagement/Enterprises/Create.hs b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Create.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Create.hs
@@ -0,0 +1,186 @@
+{-# 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.AndroidManagement.Enterprises.Create
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates an enterprise. This is the last step in the enterprise signup
+-- flow.
+--
+-- /See:/ <https://developers.google.com/android/management Android Management API Reference> for @androidmanagement.enterprises.create@.
+module Network.Google.Resource.AndroidManagement.Enterprises.Create
+    (
+    -- * REST Resource
+      EnterprisesCreateResource
+
+    -- * Creating a Request
+    , enterprisesCreate
+    , EnterprisesCreate
+
+    -- * Request Lenses
+    , ecXgafv
+    , ecSignupURLName
+    , ecUploadProtocol
+    , ecAccessToken
+    , ecUploadType
+    , ecPayload
+    , ecProjectId
+    , ecEnterpriseToken
+    , ecCallback
+    ) where
+
+import           Network.Google.AndroidManagement.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidmanagement.enterprises.create@ method which the
+-- 'EnterprisesCreate' request conforms to.
+type EnterprisesCreateResource =
+     "v1" :>
+       "enterprises" :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "signupUrlName" Text :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "projectId" Text :>
+                     QueryParam "enterpriseToken" Text :>
+                       QueryParam "callback" Text :>
+                         QueryParam "alt" AltJSON :>
+                           ReqBody '[JSON] Enterprise :> Post '[JSON] Enterprise
+
+-- | Creates an enterprise. This is the last step in the enterprise signup
+-- flow.
+--
+-- /See:/ 'enterprisesCreate' smart constructor.
+data EnterprisesCreate = EnterprisesCreate'
+    { _ecXgafv           :: !(Maybe Xgafv)
+    , _ecSignupURLName   :: !(Maybe Text)
+    , _ecUploadProtocol  :: !(Maybe Text)
+    , _ecAccessToken     :: !(Maybe Text)
+    , _ecUploadType      :: !(Maybe Text)
+    , _ecPayload         :: !Enterprise
+    , _ecProjectId       :: !(Maybe Text)
+    , _ecEnterpriseToken :: !(Maybe Text)
+    , _ecCallback        :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EnterprisesCreate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ecXgafv'
+--
+-- * 'ecSignupURLName'
+--
+-- * 'ecUploadProtocol'
+--
+-- * 'ecAccessToken'
+--
+-- * 'ecUploadType'
+--
+-- * 'ecPayload'
+--
+-- * 'ecProjectId'
+--
+-- * 'ecEnterpriseToken'
+--
+-- * 'ecCallback'
+enterprisesCreate
+    :: Enterprise -- ^ 'ecPayload'
+    -> EnterprisesCreate
+enterprisesCreate pEcPayload_ =
+    EnterprisesCreate'
+    { _ecXgafv = Nothing
+    , _ecSignupURLName = Nothing
+    , _ecUploadProtocol = Nothing
+    , _ecAccessToken = Nothing
+    , _ecUploadType = Nothing
+    , _ecPayload = pEcPayload_
+    , _ecProjectId = Nothing
+    , _ecEnterpriseToken = Nothing
+    , _ecCallback = Nothing
+    }
+
+-- | V1 error format.
+ecXgafv :: Lens' EnterprisesCreate (Maybe Xgafv)
+ecXgafv = lens _ecXgafv (\ s a -> s{_ecXgafv = a})
+
+-- | The name of the SignupUrl used to sign up for the enterprise.
+ecSignupURLName :: Lens' EnterprisesCreate (Maybe Text)
+ecSignupURLName
+  = lens _ecSignupURLName
+      (\ s a -> s{_ecSignupURLName = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+ecUploadProtocol :: Lens' EnterprisesCreate (Maybe Text)
+ecUploadProtocol
+  = lens _ecUploadProtocol
+      (\ s a -> s{_ecUploadProtocol = a})
+
+-- | OAuth access token.
+ecAccessToken :: Lens' EnterprisesCreate (Maybe Text)
+ecAccessToken
+  = lens _ecAccessToken
+      (\ s a -> s{_ecAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+ecUploadType :: Lens' EnterprisesCreate (Maybe Text)
+ecUploadType
+  = lens _ecUploadType (\ s a -> s{_ecUploadType = a})
+
+-- | Multipart request metadata.
+ecPayload :: Lens' EnterprisesCreate Enterprise
+ecPayload
+  = lens _ecPayload (\ s a -> s{_ecPayload = a})
+
+-- | The ID of the Google Cloud Platform project which will own the
+-- enterprise.
+ecProjectId :: Lens' EnterprisesCreate (Maybe Text)
+ecProjectId
+  = lens _ecProjectId (\ s a -> s{_ecProjectId = a})
+
+-- | The enterprise token appended to the callback URL.
+ecEnterpriseToken :: Lens' EnterprisesCreate (Maybe Text)
+ecEnterpriseToken
+  = lens _ecEnterpriseToken
+      (\ s a -> s{_ecEnterpriseToken = a})
+
+-- | JSONP
+ecCallback :: Lens' EnterprisesCreate (Maybe Text)
+ecCallback
+  = lens _ecCallback (\ s a -> s{_ecCallback = a})
+
+instance GoogleRequest EnterprisesCreate where
+        type Rs EnterprisesCreate = Enterprise
+        type Scopes EnterprisesCreate =
+             '["https://www.googleapis.com/auth/androidmanagement"]
+        requestClient EnterprisesCreate'{..}
+          = go _ecXgafv _ecSignupURLName _ecUploadProtocol
+              _ecAccessToken
+              _ecUploadType
+              _ecProjectId
+              _ecEnterpriseToken
+              _ecCallback
+              (Just AltJSON)
+              _ecPayload
+              androidManagementService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy EnterprisesCreateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidManagement/Enterprises/Devices/Delete.hs b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Devices/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Devices/Delete.hs
@@ -0,0 +1,161 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.AndroidManagement.Enterprises.Devices.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 device. This operation wipes the device.
+--
+-- /See:/ <https://developers.google.com/android/management Android Management API Reference> for @androidmanagement.enterprises.devices.delete@.
+module Network.Google.Resource.AndroidManagement.Enterprises.Devices.Delete
+    (
+    -- * REST Resource
+      EnterprisesDevicesDeleteResource
+
+    -- * Creating a Request
+    , enterprisesDevicesDelete
+    , EnterprisesDevicesDelete
+
+    -- * Request Lenses
+    , eddXgafv
+    , eddWipeDataFlags
+    , eddUploadProtocol
+    , eddAccessToken
+    , eddUploadType
+    , eddName
+    , eddCallback
+    ) where
+
+import           Network.Google.AndroidManagement.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidmanagement.enterprises.devices.delete@ method which the
+-- 'EnterprisesDevicesDelete' request conforms to.
+type EnterprisesDevicesDeleteResource =
+     "v1" :>
+       Capture "name" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParams "wipeDataFlags" Text :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "callback" Text :>
+                     QueryParam "alt" AltJSON :> Delete '[JSON] Empty
+
+-- | Deletes a device. This operation wipes the device.
+--
+-- /See:/ 'enterprisesDevicesDelete' smart constructor.
+data EnterprisesDevicesDelete = EnterprisesDevicesDelete'
+    { _eddXgafv          :: !(Maybe Xgafv)
+    , _eddWipeDataFlags  :: !(Maybe [Text])
+    , _eddUploadProtocol :: !(Maybe Text)
+    , _eddAccessToken    :: !(Maybe Text)
+    , _eddUploadType     :: !(Maybe Text)
+    , _eddName           :: !Text
+    , _eddCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EnterprisesDevicesDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'eddXgafv'
+--
+-- * 'eddWipeDataFlags'
+--
+-- * 'eddUploadProtocol'
+--
+-- * 'eddAccessToken'
+--
+-- * 'eddUploadType'
+--
+-- * 'eddName'
+--
+-- * 'eddCallback'
+enterprisesDevicesDelete
+    :: Text -- ^ 'eddName'
+    -> EnterprisesDevicesDelete
+enterprisesDevicesDelete pEddName_ =
+    EnterprisesDevicesDelete'
+    { _eddXgafv = Nothing
+    , _eddWipeDataFlags = Nothing
+    , _eddUploadProtocol = Nothing
+    , _eddAccessToken = Nothing
+    , _eddUploadType = Nothing
+    , _eddName = pEddName_
+    , _eddCallback = Nothing
+    }
+
+-- | V1 error format.
+eddXgafv :: Lens' EnterprisesDevicesDelete (Maybe Xgafv)
+eddXgafv = lens _eddXgafv (\ s a -> s{_eddXgafv = a})
+
+-- | Optional flags that control the device wiping behavior.
+eddWipeDataFlags :: Lens' EnterprisesDevicesDelete [Text]
+eddWipeDataFlags
+  = lens _eddWipeDataFlags
+      (\ s a -> s{_eddWipeDataFlags = a})
+      . _Default
+      . _Coerce
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+eddUploadProtocol :: Lens' EnterprisesDevicesDelete (Maybe Text)
+eddUploadProtocol
+  = lens _eddUploadProtocol
+      (\ s a -> s{_eddUploadProtocol = a})
+
+-- | OAuth access token.
+eddAccessToken :: Lens' EnterprisesDevicesDelete (Maybe Text)
+eddAccessToken
+  = lens _eddAccessToken
+      (\ s a -> s{_eddAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+eddUploadType :: Lens' EnterprisesDevicesDelete (Maybe Text)
+eddUploadType
+  = lens _eddUploadType
+      (\ s a -> s{_eddUploadType = a})
+
+-- | The name of the device in the form
+-- enterprises\/{enterpriseId}\/devices\/{deviceId}.
+eddName :: Lens' EnterprisesDevicesDelete Text
+eddName = lens _eddName (\ s a -> s{_eddName = a})
+
+-- | JSONP
+eddCallback :: Lens' EnterprisesDevicesDelete (Maybe Text)
+eddCallback
+  = lens _eddCallback (\ s a -> s{_eddCallback = a})
+
+instance GoogleRequest EnterprisesDevicesDelete where
+        type Rs EnterprisesDevicesDelete = Empty
+        type Scopes EnterprisesDevicesDelete =
+             '["https://www.googleapis.com/auth/androidmanagement"]
+        requestClient EnterprisesDevicesDelete'{..}
+          = go _eddName _eddXgafv
+              (_eddWipeDataFlags ^. _Default)
+              _eddUploadProtocol
+              _eddAccessToken
+              _eddUploadType
+              _eddCallback
+              (Just AltJSON)
+              androidManagementService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy EnterprisesDevicesDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidManagement/Enterprises/Devices/Get.hs b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Devices/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Devices/Get.hs
@@ -0,0 +1,145 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.AndroidManagement.Enterprises.Devices.Get
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets a device.
+--
+-- /See:/ <https://developers.google.com/android/management Android Management API Reference> for @androidmanagement.enterprises.devices.get@.
+module Network.Google.Resource.AndroidManagement.Enterprises.Devices.Get
+    (
+    -- * REST Resource
+      EnterprisesDevicesGetResource
+
+    -- * Creating a Request
+    , enterprisesDevicesGet
+    , EnterprisesDevicesGet
+
+    -- * Request Lenses
+    , edgXgafv
+    , edgUploadProtocol
+    , edgAccessToken
+    , edgUploadType
+    , edgName
+    , edgCallback
+    ) where
+
+import           Network.Google.AndroidManagement.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidmanagement.enterprises.devices.get@ method which the
+-- 'EnterprisesDevicesGet' request conforms to.
+type EnterprisesDevicesGetResource =
+     "v1" :>
+       Capture "name" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "callback" Text :>
+                   QueryParam "alt" AltJSON :> Get '[JSON] Device
+
+-- | Gets a device.
+--
+-- /See:/ 'enterprisesDevicesGet' smart constructor.
+data EnterprisesDevicesGet = EnterprisesDevicesGet'
+    { _edgXgafv          :: !(Maybe Xgafv)
+    , _edgUploadProtocol :: !(Maybe Text)
+    , _edgAccessToken    :: !(Maybe Text)
+    , _edgUploadType     :: !(Maybe Text)
+    , _edgName           :: !Text
+    , _edgCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EnterprisesDevicesGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'edgXgafv'
+--
+-- * 'edgUploadProtocol'
+--
+-- * 'edgAccessToken'
+--
+-- * 'edgUploadType'
+--
+-- * 'edgName'
+--
+-- * 'edgCallback'
+enterprisesDevicesGet
+    :: Text -- ^ 'edgName'
+    -> EnterprisesDevicesGet
+enterprisesDevicesGet pEdgName_ =
+    EnterprisesDevicesGet'
+    { _edgXgafv = Nothing
+    , _edgUploadProtocol = Nothing
+    , _edgAccessToken = Nothing
+    , _edgUploadType = Nothing
+    , _edgName = pEdgName_
+    , _edgCallback = Nothing
+    }
+
+-- | V1 error format.
+edgXgafv :: Lens' EnterprisesDevicesGet (Maybe Xgafv)
+edgXgafv = lens _edgXgafv (\ s a -> s{_edgXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+edgUploadProtocol :: Lens' EnterprisesDevicesGet (Maybe Text)
+edgUploadProtocol
+  = lens _edgUploadProtocol
+      (\ s a -> s{_edgUploadProtocol = a})
+
+-- | OAuth access token.
+edgAccessToken :: Lens' EnterprisesDevicesGet (Maybe Text)
+edgAccessToken
+  = lens _edgAccessToken
+      (\ s a -> s{_edgAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+edgUploadType :: Lens' EnterprisesDevicesGet (Maybe Text)
+edgUploadType
+  = lens _edgUploadType
+      (\ s a -> s{_edgUploadType = a})
+
+-- | The name of the device in the form
+-- enterprises\/{enterpriseId}\/devices\/{deviceId}.
+edgName :: Lens' EnterprisesDevicesGet Text
+edgName = lens _edgName (\ s a -> s{_edgName = a})
+
+-- | JSONP
+edgCallback :: Lens' EnterprisesDevicesGet (Maybe Text)
+edgCallback
+  = lens _edgCallback (\ s a -> s{_edgCallback = a})
+
+instance GoogleRequest EnterprisesDevicesGet where
+        type Rs EnterprisesDevicesGet = Device
+        type Scopes EnterprisesDevicesGet =
+             '["https://www.googleapis.com/auth/androidmanagement"]
+        requestClient EnterprisesDevicesGet'{..}
+          = go _edgName _edgXgafv _edgUploadProtocol
+              _edgAccessToken
+              _edgUploadType
+              _edgCallback
+              (Just AltJSON)
+              androidManagementService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy EnterprisesDevicesGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidManagement/Enterprises/Devices/IssueCommand.hs b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Devices/IssueCommand.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Devices/IssueCommand.hs
@@ -0,0 +1,165 @@
+{-# 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.AndroidManagement.Enterprises.Devices.IssueCommand
+-- 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)
+--
+-- Issues a command to a device. The Operation resource returned contains a
+-- Command in its metadata field. Use the get operation method to get the
+-- status of the command.
+--
+-- /See:/ <https://developers.google.com/android/management Android Management API Reference> for @androidmanagement.enterprises.devices.issueCommand@.
+module Network.Google.Resource.AndroidManagement.Enterprises.Devices.IssueCommand
+    (
+    -- * REST Resource
+      EnterprisesDevicesIssueCommandResource
+
+    -- * Creating a Request
+    , enterprisesDevicesIssueCommand
+    , EnterprisesDevicesIssueCommand
+
+    -- * Request Lenses
+    , edicXgafv
+    , edicUploadProtocol
+    , edicAccessToken
+    , edicUploadType
+    , edicPayload
+    , edicName
+    , edicCallback
+    ) where
+
+import           Network.Google.AndroidManagement.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidmanagement.enterprises.devices.issueCommand@ method which the
+-- 'EnterprisesDevicesIssueCommand' request conforms to.
+type EnterprisesDevicesIssueCommandResource =
+     "v1" :>
+       CaptureMode "name" "issueCommand" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "callback" Text :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON] Command :> Post '[JSON] Operation
+
+-- | Issues a command to a device. The Operation resource returned contains a
+-- Command in its metadata field. Use the get operation method to get the
+-- status of the command.
+--
+-- /See:/ 'enterprisesDevicesIssueCommand' smart constructor.
+data EnterprisesDevicesIssueCommand = EnterprisesDevicesIssueCommand'
+    { _edicXgafv          :: !(Maybe Xgafv)
+    , _edicUploadProtocol :: !(Maybe Text)
+    , _edicAccessToken    :: !(Maybe Text)
+    , _edicUploadType     :: !(Maybe Text)
+    , _edicPayload        :: !Command
+    , _edicName           :: !Text
+    , _edicCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EnterprisesDevicesIssueCommand' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'edicXgafv'
+--
+-- * 'edicUploadProtocol'
+--
+-- * 'edicAccessToken'
+--
+-- * 'edicUploadType'
+--
+-- * 'edicPayload'
+--
+-- * 'edicName'
+--
+-- * 'edicCallback'
+enterprisesDevicesIssueCommand
+    :: Command -- ^ 'edicPayload'
+    -> Text -- ^ 'edicName'
+    -> EnterprisesDevicesIssueCommand
+enterprisesDevicesIssueCommand pEdicPayload_ pEdicName_ =
+    EnterprisesDevicesIssueCommand'
+    { _edicXgafv = Nothing
+    , _edicUploadProtocol = Nothing
+    , _edicAccessToken = Nothing
+    , _edicUploadType = Nothing
+    , _edicPayload = pEdicPayload_
+    , _edicName = pEdicName_
+    , _edicCallback = Nothing
+    }
+
+-- | V1 error format.
+edicXgafv :: Lens' EnterprisesDevicesIssueCommand (Maybe Xgafv)
+edicXgafv
+  = lens _edicXgafv (\ s a -> s{_edicXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+edicUploadProtocol :: Lens' EnterprisesDevicesIssueCommand (Maybe Text)
+edicUploadProtocol
+  = lens _edicUploadProtocol
+      (\ s a -> s{_edicUploadProtocol = a})
+
+-- | OAuth access token.
+edicAccessToken :: Lens' EnterprisesDevicesIssueCommand (Maybe Text)
+edicAccessToken
+  = lens _edicAccessToken
+      (\ s a -> s{_edicAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+edicUploadType :: Lens' EnterprisesDevicesIssueCommand (Maybe Text)
+edicUploadType
+  = lens _edicUploadType
+      (\ s a -> s{_edicUploadType = a})
+
+-- | Multipart request metadata.
+edicPayload :: Lens' EnterprisesDevicesIssueCommand Command
+edicPayload
+  = lens _edicPayload (\ s a -> s{_edicPayload = a})
+
+-- | The name of the device in the form
+-- enterprises\/{enterpriseId}\/devices\/{deviceId}.
+edicName :: Lens' EnterprisesDevicesIssueCommand Text
+edicName = lens _edicName (\ s a -> s{_edicName = a})
+
+-- | JSONP
+edicCallback :: Lens' EnterprisesDevicesIssueCommand (Maybe Text)
+edicCallback
+  = lens _edicCallback (\ s a -> s{_edicCallback = a})
+
+instance GoogleRequest EnterprisesDevicesIssueCommand
+         where
+        type Rs EnterprisesDevicesIssueCommand = Operation
+        type Scopes EnterprisesDevicesIssueCommand =
+             '["https://www.googleapis.com/auth/androidmanagement"]
+        requestClient EnterprisesDevicesIssueCommand'{..}
+          = go _edicName _edicXgafv _edicUploadProtocol
+              _edicAccessToken
+              _edicUploadType
+              _edicCallback
+              (Just AltJSON)
+              _edicPayload
+              androidManagementService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy EnterprisesDevicesIssueCommandResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidManagement/Enterprises/Devices/List.hs b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Devices/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Devices/List.hs
@@ -0,0 +1,173 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.AndroidManagement.Enterprises.Devices.List
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists devices for a given enterprise.
+--
+-- /See:/ <https://developers.google.com/android/management Android Management API Reference> for @androidmanagement.enterprises.devices.list@.
+module Network.Google.Resource.AndroidManagement.Enterprises.Devices.List
+    (
+    -- * REST Resource
+      EnterprisesDevicesListResource
+
+    -- * Creating a Request
+    , enterprisesDevicesList
+    , EnterprisesDevicesList
+
+    -- * Request Lenses
+    , edlParent
+    , edlXgafv
+    , edlUploadProtocol
+    , edlAccessToken
+    , edlUploadType
+    , edlPageToken
+    , edlPageSize
+    , edlCallback
+    ) where
+
+import           Network.Google.AndroidManagement.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidmanagement.enterprises.devices.list@ method which the
+-- 'EnterprisesDevicesList' request conforms to.
+type EnterprisesDevicesListResource =
+     "v1" :>
+       Capture "parent" Text :>
+         "devices" :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "pageToken" Text :>
+                     QueryParam "pageSize" (Textual Int32) :>
+                       QueryParam "callback" Text :>
+                         QueryParam "alt" AltJSON :>
+                           Get '[JSON] ListDevicesResponse
+
+-- | Lists devices for a given enterprise.
+--
+-- /See:/ 'enterprisesDevicesList' smart constructor.
+data EnterprisesDevicesList = EnterprisesDevicesList'
+    { _edlParent         :: !Text
+    , _edlXgafv          :: !(Maybe Xgafv)
+    , _edlUploadProtocol :: !(Maybe Text)
+    , _edlAccessToken    :: !(Maybe Text)
+    , _edlUploadType     :: !(Maybe Text)
+    , _edlPageToken      :: !(Maybe Text)
+    , _edlPageSize       :: !(Maybe (Textual Int32))
+    , _edlCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EnterprisesDevicesList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'edlParent'
+--
+-- * 'edlXgafv'
+--
+-- * 'edlUploadProtocol'
+--
+-- * 'edlAccessToken'
+--
+-- * 'edlUploadType'
+--
+-- * 'edlPageToken'
+--
+-- * 'edlPageSize'
+--
+-- * 'edlCallback'
+enterprisesDevicesList
+    :: Text -- ^ 'edlParent'
+    -> EnterprisesDevicesList
+enterprisesDevicesList pEdlParent_ =
+    EnterprisesDevicesList'
+    { _edlParent = pEdlParent_
+    , _edlXgafv = Nothing
+    , _edlUploadProtocol = Nothing
+    , _edlAccessToken = Nothing
+    , _edlUploadType = Nothing
+    , _edlPageToken = Nothing
+    , _edlPageSize = Nothing
+    , _edlCallback = Nothing
+    }
+
+-- | The name of the enterprise in the form enterprises\/{enterpriseId}.
+edlParent :: Lens' EnterprisesDevicesList Text
+edlParent
+  = lens _edlParent (\ s a -> s{_edlParent = a})
+
+-- | V1 error format.
+edlXgafv :: Lens' EnterprisesDevicesList (Maybe Xgafv)
+edlXgafv = lens _edlXgafv (\ s a -> s{_edlXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+edlUploadProtocol :: Lens' EnterprisesDevicesList (Maybe Text)
+edlUploadProtocol
+  = lens _edlUploadProtocol
+      (\ s a -> s{_edlUploadProtocol = a})
+
+-- | OAuth access token.
+edlAccessToken :: Lens' EnterprisesDevicesList (Maybe Text)
+edlAccessToken
+  = lens _edlAccessToken
+      (\ s a -> s{_edlAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+edlUploadType :: Lens' EnterprisesDevicesList (Maybe Text)
+edlUploadType
+  = lens _edlUploadType
+      (\ s a -> s{_edlUploadType = a})
+
+-- | A token identifying a page of results returned by the server.
+edlPageToken :: Lens' EnterprisesDevicesList (Maybe Text)
+edlPageToken
+  = lens _edlPageToken (\ s a -> s{_edlPageToken = a})
+
+-- | The requested page size. The actual page size may be fixed to a min or
+-- max value.
+edlPageSize :: Lens' EnterprisesDevicesList (Maybe Int32)
+edlPageSize
+  = lens _edlPageSize (\ s a -> s{_edlPageSize = a}) .
+      mapping _Coerce
+
+-- | JSONP
+edlCallback :: Lens' EnterprisesDevicesList (Maybe Text)
+edlCallback
+  = lens _edlCallback (\ s a -> s{_edlCallback = a})
+
+instance GoogleRequest EnterprisesDevicesList where
+        type Rs EnterprisesDevicesList = ListDevicesResponse
+        type Scopes EnterprisesDevicesList =
+             '["https://www.googleapis.com/auth/androidmanagement"]
+        requestClient EnterprisesDevicesList'{..}
+          = go _edlParent _edlXgafv _edlUploadProtocol
+              _edlAccessToken
+              _edlUploadType
+              _edlPageToken
+              _edlPageSize
+              _edlCallback
+              (Just AltJSON)
+              androidManagementService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy EnterprisesDevicesListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidManagement/Enterprises/Devices/Operations/Cancel.hs b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Devices/Operations/Cancel.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Devices/Operations/Cancel.hs
@@ -0,0 +1,163 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.AndroidManagement.Enterprises.Devices.Operations.Cancel
+-- 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)
+--
+-- Starts asynchronous cancellation on a long-running operation. The server
+-- makes a best effort to cancel the operation, but success is not
+-- guaranteed. If the server doesn\'t support this method, it returns
+-- google.rpc.Code.UNIMPLEMENTED. Clients can use Operations.GetOperation
+-- or other methods to check whether the cancellation succeeded or whether
+-- the operation completed despite cancellation. On successful
+-- cancellation, the operation is not deleted; instead, it becomes an
+-- operation with an Operation.error value with a google.rpc.Status.code of
+-- 1, corresponding to Code.CANCELLED.
+--
+-- /See:/ <https://developers.google.com/android/management Android Management API Reference> for @androidmanagement.enterprises.devices.operations.cancel@.
+module Network.Google.Resource.AndroidManagement.Enterprises.Devices.Operations.Cancel
+    (
+    -- * REST Resource
+      EnterprisesDevicesOperationsCancelResource
+
+    -- * Creating a Request
+    , enterprisesDevicesOperationsCancel
+    , EnterprisesDevicesOperationsCancel
+
+    -- * Request Lenses
+    , edocXgafv
+    , edocUploadProtocol
+    , edocAccessToken
+    , edocUploadType
+    , edocName
+    , edocCallback
+    ) where
+
+import           Network.Google.AndroidManagement.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidmanagement.enterprises.devices.operations.cancel@ method which the
+-- 'EnterprisesDevicesOperationsCancel' request conforms to.
+type EnterprisesDevicesOperationsCancelResource =
+     "v1" :>
+       CaptureMode "name" "cancel" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "callback" Text :>
+                   QueryParam "alt" AltJSON :> Post '[JSON] Empty
+
+-- | Starts asynchronous cancellation on a long-running operation. The server
+-- makes a best effort to cancel the operation, but success is not
+-- guaranteed. If the server doesn\'t support this method, it returns
+-- google.rpc.Code.UNIMPLEMENTED. Clients can use Operations.GetOperation
+-- or other methods to check whether the cancellation succeeded or whether
+-- the operation completed despite cancellation. On successful
+-- cancellation, the operation is not deleted; instead, it becomes an
+-- operation with an Operation.error value with a google.rpc.Status.code of
+-- 1, corresponding to Code.CANCELLED.
+--
+-- /See:/ 'enterprisesDevicesOperationsCancel' smart constructor.
+data EnterprisesDevicesOperationsCancel = EnterprisesDevicesOperationsCancel'
+    { _edocXgafv          :: !(Maybe Xgafv)
+    , _edocUploadProtocol :: !(Maybe Text)
+    , _edocAccessToken    :: !(Maybe Text)
+    , _edocUploadType     :: !(Maybe Text)
+    , _edocName           :: !Text
+    , _edocCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EnterprisesDevicesOperationsCancel' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'edocXgafv'
+--
+-- * 'edocUploadProtocol'
+--
+-- * 'edocAccessToken'
+--
+-- * 'edocUploadType'
+--
+-- * 'edocName'
+--
+-- * 'edocCallback'
+enterprisesDevicesOperationsCancel
+    :: Text -- ^ 'edocName'
+    -> EnterprisesDevicesOperationsCancel
+enterprisesDevicesOperationsCancel pEdocName_ =
+    EnterprisesDevicesOperationsCancel'
+    { _edocXgafv = Nothing
+    , _edocUploadProtocol = Nothing
+    , _edocAccessToken = Nothing
+    , _edocUploadType = Nothing
+    , _edocName = pEdocName_
+    , _edocCallback = Nothing
+    }
+
+-- | V1 error format.
+edocXgafv :: Lens' EnterprisesDevicesOperationsCancel (Maybe Xgafv)
+edocXgafv
+  = lens _edocXgafv (\ s a -> s{_edocXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+edocUploadProtocol :: Lens' EnterprisesDevicesOperationsCancel (Maybe Text)
+edocUploadProtocol
+  = lens _edocUploadProtocol
+      (\ s a -> s{_edocUploadProtocol = a})
+
+-- | OAuth access token.
+edocAccessToken :: Lens' EnterprisesDevicesOperationsCancel (Maybe Text)
+edocAccessToken
+  = lens _edocAccessToken
+      (\ s a -> s{_edocAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+edocUploadType :: Lens' EnterprisesDevicesOperationsCancel (Maybe Text)
+edocUploadType
+  = lens _edocUploadType
+      (\ s a -> s{_edocUploadType = a})
+
+-- | The name of the operation resource to be cancelled.
+edocName :: Lens' EnterprisesDevicesOperationsCancel Text
+edocName = lens _edocName (\ s a -> s{_edocName = a})
+
+-- | JSONP
+edocCallback :: Lens' EnterprisesDevicesOperationsCancel (Maybe Text)
+edocCallback
+  = lens _edocCallback (\ s a -> s{_edocCallback = a})
+
+instance GoogleRequest
+         EnterprisesDevicesOperationsCancel where
+        type Rs EnterprisesDevicesOperationsCancel = Empty
+        type Scopes EnterprisesDevicesOperationsCancel =
+             '["https://www.googleapis.com/auth/androidmanagement"]
+        requestClient EnterprisesDevicesOperationsCancel'{..}
+          = go _edocName _edocXgafv _edocUploadProtocol
+              _edocAccessToken
+              _edocUploadType
+              _edocCallback
+              (Just AltJSON)
+              androidManagementService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy EnterprisesDevicesOperationsCancelResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidManagement/Enterprises/Devices/Operations/Delete.hs b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Devices/Operations/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Devices/Operations/Delete.hs
@@ -0,0 +1,153 @@
+{-# 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.AndroidManagement.Enterprises.Devices.Operations.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 long-running operation. This method indicates that the client
+-- is no longer interested in the operation result. It does not cancel the
+-- operation. If the server doesn\'t support this method, it returns
+-- google.rpc.Code.UNIMPLEMENTED.
+--
+-- /See:/ <https://developers.google.com/android/management Android Management API Reference> for @androidmanagement.enterprises.devices.operations.delete@.
+module Network.Google.Resource.AndroidManagement.Enterprises.Devices.Operations.Delete
+    (
+    -- * REST Resource
+      EnterprisesDevicesOperationsDeleteResource
+
+    -- * Creating a Request
+    , enterprisesDevicesOperationsDelete
+    , EnterprisesDevicesOperationsDelete
+
+    -- * Request Lenses
+    , edodXgafv
+    , edodUploadProtocol
+    , edodAccessToken
+    , edodUploadType
+    , edodName
+    , edodCallback
+    ) where
+
+import           Network.Google.AndroidManagement.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidmanagement.enterprises.devices.operations.delete@ method which the
+-- 'EnterprisesDevicesOperationsDelete' request conforms to.
+type EnterprisesDevicesOperationsDeleteResource =
+     "v1" :>
+       Capture "name" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "callback" Text :>
+                   QueryParam "alt" AltJSON :> Delete '[JSON] Empty
+
+-- | Deletes a long-running operation. This method indicates that the client
+-- is no longer interested in the operation result. It does not cancel the
+-- operation. If the server doesn\'t support this method, it returns
+-- google.rpc.Code.UNIMPLEMENTED.
+--
+-- /See:/ 'enterprisesDevicesOperationsDelete' smart constructor.
+data EnterprisesDevicesOperationsDelete = EnterprisesDevicesOperationsDelete'
+    { _edodXgafv          :: !(Maybe Xgafv)
+    , _edodUploadProtocol :: !(Maybe Text)
+    , _edodAccessToken    :: !(Maybe Text)
+    , _edodUploadType     :: !(Maybe Text)
+    , _edodName           :: !Text
+    , _edodCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EnterprisesDevicesOperationsDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'edodXgafv'
+--
+-- * 'edodUploadProtocol'
+--
+-- * 'edodAccessToken'
+--
+-- * 'edodUploadType'
+--
+-- * 'edodName'
+--
+-- * 'edodCallback'
+enterprisesDevicesOperationsDelete
+    :: Text -- ^ 'edodName'
+    -> EnterprisesDevicesOperationsDelete
+enterprisesDevicesOperationsDelete pEdodName_ =
+    EnterprisesDevicesOperationsDelete'
+    { _edodXgafv = Nothing
+    , _edodUploadProtocol = Nothing
+    , _edodAccessToken = Nothing
+    , _edodUploadType = Nothing
+    , _edodName = pEdodName_
+    , _edodCallback = Nothing
+    }
+
+-- | V1 error format.
+edodXgafv :: Lens' EnterprisesDevicesOperationsDelete (Maybe Xgafv)
+edodXgafv
+  = lens _edodXgafv (\ s a -> s{_edodXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+edodUploadProtocol :: Lens' EnterprisesDevicesOperationsDelete (Maybe Text)
+edodUploadProtocol
+  = lens _edodUploadProtocol
+      (\ s a -> s{_edodUploadProtocol = a})
+
+-- | OAuth access token.
+edodAccessToken :: Lens' EnterprisesDevicesOperationsDelete (Maybe Text)
+edodAccessToken
+  = lens _edodAccessToken
+      (\ s a -> s{_edodAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+edodUploadType :: Lens' EnterprisesDevicesOperationsDelete (Maybe Text)
+edodUploadType
+  = lens _edodUploadType
+      (\ s a -> s{_edodUploadType = a})
+
+-- | The name of the operation resource to be deleted.
+edodName :: Lens' EnterprisesDevicesOperationsDelete Text
+edodName = lens _edodName (\ s a -> s{_edodName = a})
+
+-- | JSONP
+edodCallback :: Lens' EnterprisesDevicesOperationsDelete (Maybe Text)
+edodCallback
+  = lens _edodCallback (\ s a -> s{_edodCallback = a})
+
+instance GoogleRequest
+         EnterprisesDevicesOperationsDelete where
+        type Rs EnterprisesDevicesOperationsDelete = Empty
+        type Scopes EnterprisesDevicesOperationsDelete =
+             '["https://www.googleapis.com/auth/androidmanagement"]
+        requestClient EnterprisesDevicesOperationsDelete'{..}
+          = go _edodName _edodXgafv _edodUploadProtocol
+              _edodAccessToken
+              _edodUploadType
+              _edodCallback
+              (Just AltJSON)
+              androidManagementService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy EnterprisesDevicesOperationsDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidManagement/Enterprises/Devices/Operations/Get.hs b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Devices/Operations/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Devices/Operations/Get.hs
@@ -0,0 +1,151 @@
+{-# 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.AndroidManagement.Enterprises.Devices.Operations.Get
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets the latest state of a long-running operation. Clients can use this
+-- method to poll the operation result at intervals as recommended by the
+-- API service.
+--
+-- /See:/ <https://developers.google.com/android/management Android Management API Reference> for @androidmanagement.enterprises.devices.operations.get@.
+module Network.Google.Resource.AndroidManagement.Enterprises.Devices.Operations.Get
+    (
+    -- * REST Resource
+      EnterprisesDevicesOperationsGetResource
+
+    -- * Creating a Request
+    , enterprisesDevicesOperationsGet
+    , EnterprisesDevicesOperationsGet
+
+    -- * Request Lenses
+    , edogXgafv
+    , edogUploadProtocol
+    , edogAccessToken
+    , edogUploadType
+    , edogName
+    , edogCallback
+    ) where
+
+import           Network.Google.AndroidManagement.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidmanagement.enterprises.devices.operations.get@ method which the
+-- 'EnterprisesDevicesOperationsGet' request conforms to.
+type EnterprisesDevicesOperationsGetResource =
+     "v1" :>
+       Capture "name" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "callback" Text :>
+                   QueryParam "alt" AltJSON :> Get '[JSON] Operation
+
+-- | Gets the latest state of a long-running operation. Clients can use this
+-- method to poll the operation result at intervals as recommended by the
+-- API service.
+--
+-- /See:/ 'enterprisesDevicesOperationsGet' smart constructor.
+data EnterprisesDevicesOperationsGet = EnterprisesDevicesOperationsGet'
+    { _edogXgafv          :: !(Maybe Xgafv)
+    , _edogUploadProtocol :: !(Maybe Text)
+    , _edogAccessToken    :: !(Maybe Text)
+    , _edogUploadType     :: !(Maybe Text)
+    , _edogName           :: !Text
+    , _edogCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EnterprisesDevicesOperationsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'edogXgafv'
+--
+-- * 'edogUploadProtocol'
+--
+-- * 'edogAccessToken'
+--
+-- * 'edogUploadType'
+--
+-- * 'edogName'
+--
+-- * 'edogCallback'
+enterprisesDevicesOperationsGet
+    :: Text -- ^ 'edogName'
+    -> EnterprisesDevicesOperationsGet
+enterprisesDevicesOperationsGet pEdogName_ =
+    EnterprisesDevicesOperationsGet'
+    { _edogXgafv = Nothing
+    , _edogUploadProtocol = Nothing
+    , _edogAccessToken = Nothing
+    , _edogUploadType = Nothing
+    , _edogName = pEdogName_
+    , _edogCallback = Nothing
+    }
+
+-- | V1 error format.
+edogXgafv :: Lens' EnterprisesDevicesOperationsGet (Maybe Xgafv)
+edogXgafv
+  = lens _edogXgafv (\ s a -> s{_edogXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+edogUploadProtocol :: Lens' EnterprisesDevicesOperationsGet (Maybe Text)
+edogUploadProtocol
+  = lens _edogUploadProtocol
+      (\ s a -> s{_edogUploadProtocol = a})
+
+-- | OAuth access token.
+edogAccessToken :: Lens' EnterprisesDevicesOperationsGet (Maybe Text)
+edogAccessToken
+  = lens _edogAccessToken
+      (\ s a -> s{_edogAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+edogUploadType :: Lens' EnterprisesDevicesOperationsGet (Maybe Text)
+edogUploadType
+  = lens _edogUploadType
+      (\ s a -> s{_edogUploadType = a})
+
+-- | The name of the operation resource.
+edogName :: Lens' EnterprisesDevicesOperationsGet Text
+edogName = lens _edogName (\ s a -> s{_edogName = a})
+
+-- | JSONP
+edogCallback :: Lens' EnterprisesDevicesOperationsGet (Maybe Text)
+edogCallback
+  = lens _edogCallback (\ s a -> s{_edogCallback = a})
+
+instance GoogleRequest
+         EnterprisesDevicesOperationsGet where
+        type Rs EnterprisesDevicesOperationsGet = Operation
+        type Scopes EnterprisesDevicesOperationsGet =
+             '["https://www.googleapis.com/auth/androidmanagement"]
+        requestClient EnterprisesDevicesOperationsGet'{..}
+          = go _edogName _edogXgafv _edogUploadProtocol
+              _edogAccessToken
+              _edogUploadType
+              _edogCallback
+              (Just AltJSON)
+              androidManagementService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy EnterprisesDevicesOperationsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidManagement/Enterprises/Devices/Operations/List.hs b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Devices/Operations/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Devices/Operations/List.hs
@@ -0,0 +1,203 @@
+{-# 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.AndroidManagement.Enterprises.Devices.Operations.List
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists operations that match the specified filter in the request. If the
+-- server doesn\'t support this method, it returns UNIMPLEMENTED.NOTE: the
+-- name binding allows API services to override the binding to use
+-- different resource name schemes, such as users\/*\/operations. To
+-- override the binding, API services can add a binding such as
+-- \"\/v1\/{name=users\/*}\/operations\" to their service configuration.
+-- For backwards compatibility, the default name includes the operations
+-- collection id, however overriding users must ensure the name binding is
+-- the parent resource, without the operations collection id.
+--
+-- /See:/ <https://developers.google.com/android/management Android Management API Reference> for @androidmanagement.enterprises.devices.operations.list@.
+module Network.Google.Resource.AndroidManagement.Enterprises.Devices.Operations.List
+    (
+    -- * REST Resource
+      EnterprisesDevicesOperationsListResource
+
+    -- * Creating a Request
+    , enterprisesDevicesOperationsList
+    , EnterprisesDevicesOperationsList
+
+    -- * Request Lenses
+    , edolXgafv
+    , edolUploadProtocol
+    , edolAccessToken
+    , edolUploadType
+    , edolName
+    , edolFilter
+    , edolPageToken
+    , edolPageSize
+    , edolCallback
+    ) where
+
+import           Network.Google.AndroidManagement.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidmanagement.enterprises.devices.operations.list@ method which the
+-- 'EnterprisesDevicesOperationsList' request conforms to.
+type EnterprisesDevicesOperationsListResource =
+     "v1" :>
+       Capture "name" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "filter" Text :>
+                   QueryParam "pageToken" Text :>
+                     QueryParam "pageSize" (Textual Int32) :>
+                       QueryParam "callback" Text :>
+                         QueryParam "alt" AltJSON :>
+                           Get '[JSON] ListOperationsResponse
+
+-- | Lists operations that match the specified filter in the request. If the
+-- server doesn\'t support this method, it returns UNIMPLEMENTED.NOTE: the
+-- name binding allows API services to override the binding to use
+-- different resource name schemes, such as users\/*\/operations. To
+-- override the binding, API services can add a binding such as
+-- \"\/v1\/{name=users\/*}\/operations\" to their service configuration.
+-- For backwards compatibility, the default name includes the operations
+-- collection id, however overriding users must ensure the name binding is
+-- the parent resource, without the operations collection id.
+--
+-- /See:/ 'enterprisesDevicesOperationsList' smart constructor.
+data EnterprisesDevicesOperationsList = EnterprisesDevicesOperationsList'
+    { _edolXgafv          :: !(Maybe Xgafv)
+    , _edolUploadProtocol :: !(Maybe Text)
+    , _edolAccessToken    :: !(Maybe Text)
+    , _edolUploadType     :: !(Maybe Text)
+    , _edolName           :: !Text
+    , _edolFilter         :: !(Maybe Text)
+    , _edolPageToken      :: !(Maybe Text)
+    , _edolPageSize       :: !(Maybe (Textual Int32))
+    , _edolCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EnterprisesDevicesOperationsList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'edolXgafv'
+--
+-- * 'edolUploadProtocol'
+--
+-- * 'edolAccessToken'
+--
+-- * 'edolUploadType'
+--
+-- * 'edolName'
+--
+-- * 'edolFilter'
+--
+-- * 'edolPageToken'
+--
+-- * 'edolPageSize'
+--
+-- * 'edolCallback'
+enterprisesDevicesOperationsList
+    :: Text -- ^ 'edolName'
+    -> EnterprisesDevicesOperationsList
+enterprisesDevicesOperationsList pEdolName_ =
+    EnterprisesDevicesOperationsList'
+    { _edolXgafv = Nothing
+    , _edolUploadProtocol = Nothing
+    , _edolAccessToken = Nothing
+    , _edolUploadType = Nothing
+    , _edolName = pEdolName_
+    , _edolFilter = Nothing
+    , _edolPageToken = Nothing
+    , _edolPageSize = Nothing
+    , _edolCallback = Nothing
+    }
+
+-- | V1 error format.
+edolXgafv :: Lens' EnterprisesDevicesOperationsList (Maybe Xgafv)
+edolXgafv
+  = lens _edolXgafv (\ s a -> s{_edolXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+edolUploadProtocol :: Lens' EnterprisesDevicesOperationsList (Maybe Text)
+edolUploadProtocol
+  = lens _edolUploadProtocol
+      (\ s a -> s{_edolUploadProtocol = a})
+
+-- | OAuth access token.
+edolAccessToken :: Lens' EnterprisesDevicesOperationsList (Maybe Text)
+edolAccessToken
+  = lens _edolAccessToken
+      (\ s a -> s{_edolAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+edolUploadType :: Lens' EnterprisesDevicesOperationsList (Maybe Text)
+edolUploadType
+  = lens _edolUploadType
+      (\ s a -> s{_edolUploadType = a})
+
+-- | The name of the operation\'s parent resource.
+edolName :: Lens' EnterprisesDevicesOperationsList Text
+edolName = lens _edolName (\ s a -> s{_edolName = a})
+
+-- | The standard list filter.
+edolFilter :: Lens' EnterprisesDevicesOperationsList (Maybe Text)
+edolFilter
+  = lens _edolFilter (\ s a -> s{_edolFilter = a})
+
+-- | The standard list page token.
+edolPageToken :: Lens' EnterprisesDevicesOperationsList (Maybe Text)
+edolPageToken
+  = lens _edolPageToken
+      (\ s a -> s{_edolPageToken = a})
+
+-- | The standard list page size.
+edolPageSize :: Lens' EnterprisesDevicesOperationsList (Maybe Int32)
+edolPageSize
+  = lens _edolPageSize (\ s a -> s{_edolPageSize = a})
+      . mapping _Coerce
+
+-- | JSONP
+edolCallback :: Lens' EnterprisesDevicesOperationsList (Maybe Text)
+edolCallback
+  = lens _edolCallback (\ s a -> s{_edolCallback = a})
+
+instance GoogleRequest
+         EnterprisesDevicesOperationsList where
+        type Rs EnterprisesDevicesOperationsList =
+             ListOperationsResponse
+        type Scopes EnterprisesDevicesOperationsList =
+             '["https://www.googleapis.com/auth/androidmanagement"]
+        requestClient EnterprisesDevicesOperationsList'{..}
+          = go _edolName _edolXgafv _edolUploadProtocol
+              _edolAccessToken
+              _edolUploadType
+              _edolFilter
+              _edolPageToken
+              _edolPageSize
+              _edolCallback
+              (Just AltJSON)
+              androidManagementService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy EnterprisesDevicesOperationsListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidManagement/Enterprises/Devices/Patch.hs b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Devices/Patch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Devices/Patch.hs
@@ -0,0 +1,172 @@
+{-# 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.AndroidManagement.Enterprises.Devices.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 device.
+--
+-- /See:/ <https://developers.google.com/android/management Android Management API Reference> for @androidmanagement.enterprises.devices.patch@.
+module Network.Google.Resource.AndroidManagement.Enterprises.Devices.Patch
+    (
+    -- * REST Resource
+      EnterprisesDevicesPatchResource
+
+    -- * Creating a Request
+    , enterprisesDevicesPatch
+    , EnterprisesDevicesPatch
+
+    -- * Request Lenses
+    , edpXgafv
+    , edpUploadProtocol
+    , edpUpdateMask
+    , edpAccessToken
+    , edpUploadType
+    , edpPayload
+    , edpName
+    , edpCallback
+    ) where
+
+import           Network.Google.AndroidManagement.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidmanagement.enterprises.devices.patch@ method which the
+-- 'EnterprisesDevicesPatch' request conforms to.
+type EnterprisesDevicesPatchResource =
+     "v1" :>
+       Capture "name" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "updateMask" GFieldMask :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "callback" Text :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON] Device :> Patch '[JSON] Device
+
+-- | Updates a device.
+--
+-- /See:/ 'enterprisesDevicesPatch' smart constructor.
+data EnterprisesDevicesPatch = EnterprisesDevicesPatch'
+    { _edpXgafv          :: !(Maybe Xgafv)
+    , _edpUploadProtocol :: !(Maybe Text)
+    , _edpUpdateMask     :: !(Maybe GFieldMask)
+    , _edpAccessToken    :: !(Maybe Text)
+    , _edpUploadType     :: !(Maybe Text)
+    , _edpPayload        :: !Device
+    , _edpName           :: !Text
+    , _edpCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EnterprisesDevicesPatch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'edpXgafv'
+--
+-- * 'edpUploadProtocol'
+--
+-- * 'edpUpdateMask'
+--
+-- * 'edpAccessToken'
+--
+-- * 'edpUploadType'
+--
+-- * 'edpPayload'
+--
+-- * 'edpName'
+--
+-- * 'edpCallback'
+enterprisesDevicesPatch
+    :: Device -- ^ 'edpPayload'
+    -> Text -- ^ 'edpName'
+    -> EnterprisesDevicesPatch
+enterprisesDevicesPatch pEdpPayload_ pEdpName_ =
+    EnterprisesDevicesPatch'
+    { _edpXgafv = Nothing
+    , _edpUploadProtocol = Nothing
+    , _edpUpdateMask = Nothing
+    , _edpAccessToken = Nothing
+    , _edpUploadType = Nothing
+    , _edpPayload = pEdpPayload_
+    , _edpName = pEdpName_
+    , _edpCallback = Nothing
+    }
+
+-- | V1 error format.
+edpXgafv :: Lens' EnterprisesDevicesPatch (Maybe Xgafv)
+edpXgafv = lens _edpXgafv (\ s a -> s{_edpXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+edpUploadProtocol :: Lens' EnterprisesDevicesPatch (Maybe Text)
+edpUploadProtocol
+  = lens _edpUploadProtocol
+      (\ s a -> s{_edpUploadProtocol = a})
+
+-- | The field mask indicating the fields to update. If not set, all
+-- modifiable fields will be modified.
+edpUpdateMask :: Lens' EnterprisesDevicesPatch (Maybe GFieldMask)
+edpUpdateMask
+  = lens _edpUpdateMask
+      (\ s a -> s{_edpUpdateMask = a})
+
+-- | OAuth access token.
+edpAccessToken :: Lens' EnterprisesDevicesPatch (Maybe Text)
+edpAccessToken
+  = lens _edpAccessToken
+      (\ s a -> s{_edpAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+edpUploadType :: Lens' EnterprisesDevicesPatch (Maybe Text)
+edpUploadType
+  = lens _edpUploadType
+      (\ s a -> s{_edpUploadType = a})
+
+-- | Multipart request metadata.
+edpPayload :: Lens' EnterprisesDevicesPatch Device
+edpPayload
+  = lens _edpPayload (\ s a -> s{_edpPayload = a})
+
+-- | The name of the device in the form
+-- enterprises\/{enterpriseId}\/devices\/{deviceId}.
+edpName :: Lens' EnterprisesDevicesPatch Text
+edpName = lens _edpName (\ s a -> s{_edpName = a})
+
+-- | JSONP
+edpCallback :: Lens' EnterprisesDevicesPatch (Maybe Text)
+edpCallback
+  = lens _edpCallback (\ s a -> s{_edpCallback = a})
+
+instance GoogleRequest EnterprisesDevicesPatch where
+        type Rs EnterprisesDevicesPatch = Device
+        type Scopes EnterprisesDevicesPatch =
+             '["https://www.googleapis.com/auth/androidmanagement"]
+        requestClient EnterprisesDevicesPatch'{..}
+          = go _edpName _edpXgafv _edpUploadProtocol
+              _edpUpdateMask
+              _edpAccessToken
+              _edpUploadType
+              _edpCallback
+              (Just AltJSON)
+              _edpPayload
+              androidManagementService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy EnterprisesDevicesPatchResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidManagement/Enterprises/EnrollmentTokens/Create.hs b/gen/Network/Google/Resource/AndroidManagement/Enterprises/EnrollmentTokens/Create.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidManagement/Enterprises/EnrollmentTokens/Create.hs
@@ -0,0 +1,164 @@
+{-# 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.AndroidManagement.Enterprises.EnrollmentTokens.Create
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates an enrollment token for a given enterprise.
+--
+-- /See:/ <https://developers.google.com/android/management Android Management API Reference> for @androidmanagement.enterprises.enrollmentTokens.create@.
+module Network.Google.Resource.AndroidManagement.Enterprises.EnrollmentTokens.Create
+    (
+    -- * REST Resource
+      EnterprisesEnrollmentTokensCreateResource
+
+    -- * Creating a Request
+    , enterprisesEnrollmentTokensCreate
+    , EnterprisesEnrollmentTokensCreate
+
+    -- * Request Lenses
+    , eetcParent
+    , eetcXgafv
+    , eetcUploadProtocol
+    , eetcAccessToken
+    , eetcUploadType
+    , eetcPayload
+    , eetcCallback
+    ) where
+
+import           Network.Google.AndroidManagement.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidmanagement.enterprises.enrollmentTokens.create@ method which the
+-- 'EnterprisesEnrollmentTokensCreate' request conforms to.
+type EnterprisesEnrollmentTokensCreateResource =
+     "v1" :>
+       Capture "parent" Text :>
+         "enrollmentTokens" :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "callback" Text :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON] EnrollmentToken :>
+                         Post '[JSON] EnrollmentToken
+
+-- | Creates an enrollment token for a given enterprise.
+--
+-- /See:/ 'enterprisesEnrollmentTokensCreate' smart constructor.
+data EnterprisesEnrollmentTokensCreate = EnterprisesEnrollmentTokensCreate'
+    { _eetcParent         :: !Text
+    , _eetcXgafv          :: !(Maybe Xgafv)
+    , _eetcUploadProtocol :: !(Maybe Text)
+    , _eetcAccessToken    :: !(Maybe Text)
+    , _eetcUploadType     :: !(Maybe Text)
+    , _eetcPayload        :: !EnrollmentToken
+    , _eetcCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EnterprisesEnrollmentTokensCreate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'eetcParent'
+--
+-- * 'eetcXgafv'
+--
+-- * 'eetcUploadProtocol'
+--
+-- * 'eetcAccessToken'
+--
+-- * 'eetcUploadType'
+--
+-- * 'eetcPayload'
+--
+-- * 'eetcCallback'
+enterprisesEnrollmentTokensCreate
+    :: Text -- ^ 'eetcParent'
+    -> EnrollmentToken -- ^ 'eetcPayload'
+    -> EnterprisesEnrollmentTokensCreate
+enterprisesEnrollmentTokensCreate pEetcParent_ pEetcPayload_ =
+    EnterprisesEnrollmentTokensCreate'
+    { _eetcParent = pEetcParent_
+    , _eetcXgafv = Nothing
+    , _eetcUploadProtocol = Nothing
+    , _eetcAccessToken = Nothing
+    , _eetcUploadType = Nothing
+    , _eetcPayload = pEetcPayload_
+    , _eetcCallback = Nothing
+    }
+
+-- | The name of the enterprise in the form enterprises\/{enterpriseId}.
+eetcParent :: Lens' EnterprisesEnrollmentTokensCreate Text
+eetcParent
+  = lens _eetcParent (\ s a -> s{_eetcParent = a})
+
+-- | V1 error format.
+eetcXgafv :: Lens' EnterprisesEnrollmentTokensCreate (Maybe Xgafv)
+eetcXgafv
+  = lens _eetcXgafv (\ s a -> s{_eetcXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+eetcUploadProtocol :: Lens' EnterprisesEnrollmentTokensCreate (Maybe Text)
+eetcUploadProtocol
+  = lens _eetcUploadProtocol
+      (\ s a -> s{_eetcUploadProtocol = a})
+
+-- | OAuth access token.
+eetcAccessToken :: Lens' EnterprisesEnrollmentTokensCreate (Maybe Text)
+eetcAccessToken
+  = lens _eetcAccessToken
+      (\ s a -> s{_eetcAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+eetcUploadType :: Lens' EnterprisesEnrollmentTokensCreate (Maybe Text)
+eetcUploadType
+  = lens _eetcUploadType
+      (\ s a -> s{_eetcUploadType = a})
+
+-- | Multipart request metadata.
+eetcPayload :: Lens' EnterprisesEnrollmentTokensCreate EnrollmentToken
+eetcPayload
+  = lens _eetcPayload (\ s a -> s{_eetcPayload = a})
+
+-- | JSONP
+eetcCallback :: Lens' EnterprisesEnrollmentTokensCreate (Maybe Text)
+eetcCallback
+  = lens _eetcCallback (\ s a -> s{_eetcCallback = a})
+
+instance GoogleRequest
+         EnterprisesEnrollmentTokensCreate where
+        type Rs EnterprisesEnrollmentTokensCreate =
+             EnrollmentToken
+        type Scopes EnterprisesEnrollmentTokensCreate =
+             '["https://www.googleapis.com/auth/androidmanagement"]
+        requestClient EnterprisesEnrollmentTokensCreate'{..}
+          = go _eetcParent _eetcXgafv _eetcUploadProtocol
+              _eetcAccessToken
+              _eetcUploadType
+              _eetcCallback
+              (Just AltJSON)
+              _eetcPayload
+              androidManagementService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy EnterprisesEnrollmentTokensCreateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidManagement/Enterprises/EnrollmentTokens/Delete.hs b/gen/Network/Google/Resource/AndroidManagement/Enterprises/EnrollmentTokens/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidManagement/Enterprises/EnrollmentTokens/Delete.hs
@@ -0,0 +1,150 @@
+{-# 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.AndroidManagement.Enterprises.EnrollmentTokens.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 an enrollment token. This operation invalidates the token,
+-- preventing its future use.
+--
+-- /See:/ <https://developers.google.com/android/management Android Management API Reference> for @androidmanagement.enterprises.enrollmentTokens.delete@.
+module Network.Google.Resource.AndroidManagement.Enterprises.EnrollmentTokens.Delete
+    (
+    -- * REST Resource
+      EnterprisesEnrollmentTokensDeleteResource
+
+    -- * Creating a Request
+    , enterprisesEnrollmentTokensDelete
+    , EnterprisesEnrollmentTokensDelete
+
+    -- * Request Lenses
+    , eetdXgafv
+    , eetdUploadProtocol
+    , eetdAccessToken
+    , eetdUploadType
+    , eetdName
+    , eetdCallback
+    ) where
+
+import           Network.Google.AndroidManagement.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidmanagement.enterprises.enrollmentTokens.delete@ method which the
+-- 'EnterprisesEnrollmentTokensDelete' request conforms to.
+type EnterprisesEnrollmentTokensDeleteResource =
+     "v1" :>
+       Capture "name" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "callback" Text :>
+                   QueryParam "alt" AltJSON :> Delete '[JSON] Empty
+
+-- | Deletes an enrollment token. This operation invalidates the token,
+-- preventing its future use.
+--
+-- /See:/ 'enterprisesEnrollmentTokensDelete' smart constructor.
+data EnterprisesEnrollmentTokensDelete = EnterprisesEnrollmentTokensDelete'
+    { _eetdXgafv          :: !(Maybe Xgafv)
+    , _eetdUploadProtocol :: !(Maybe Text)
+    , _eetdAccessToken    :: !(Maybe Text)
+    , _eetdUploadType     :: !(Maybe Text)
+    , _eetdName           :: !Text
+    , _eetdCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EnterprisesEnrollmentTokensDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'eetdXgafv'
+--
+-- * 'eetdUploadProtocol'
+--
+-- * 'eetdAccessToken'
+--
+-- * 'eetdUploadType'
+--
+-- * 'eetdName'
+--
+-- * 'eetdCallback'
+enterprisesEnrollmentTokensDelete
+    :: Text -- ^ 'eetdName'
+    -> EnterprisesEnrollmentTokensDelete
+enterprisesEnrollmentTokensDelete pEetdName_ =
+    EnterprisesEnrollmentTokensDelete'
+    { _eetdXgafv = Nothing
+    , _eetdUploadProtocol = Nothing
+    , _eetdAccessToken = Nothing
+    , _eetdUploadType = Nothing
+    , _eetdName = pEetdName_
+    , _eetdCallback = Nothing
+    }
+
+-- | V1 error format.
+eetdXgafv :: Lens' EnterprisesEnrollmentTokensDelete (Maybe Xgafv)
+eetdXgafv
+  = lens _eetdXgafv (\ s a -> s{_eetdXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+eetdUploadProtocol :: Lens' EnterprisesEnrollmentTokensDelete (Maybe Text)
+eetdUploadProtocol
+  = lens _eetdUploadProtocol
+      (\ s a -> s{_eetdUploadProtocol = a})
+
+-- | OAuth access token.
+eetdAccessToken :: Lens' EnterprisesEnrollmentTokensDelete (Maybe Text)
+eetdAccessToken
+  = lens _eetdAccessToken
+      (\ s a -> s{_eetdAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+eetdUploadType :: Lens' EnterprisesEnrollmentTokensDelete (Maybe Text)
+eetdUploadType
+  = lens _eetdUploadType
+      (\ s a -> s{_eetdUploadType = a})
+
+-- | The name of the enrollment token in the form
+-- enterprises\/{enterpriseId}\/enrollmentTokens\/{enrollmentTokenId}.
+eetdName :: Lens' EnterprisesEnrollmentTokensDelete Text
+eetdName = lens _eetdName (\ s a -> s{_eetdName = a})
+
+-- | JSONP
+eetdCallback :: Lens' EnterprisesEnrollmentTokensDelete (Maybe Text)
+eetdCallback
+  = lens _eetdCallback (\ s a -> s{_eetdCallback = a})
+
+instance GoogleRequest
+         EnterprisesEnrollmentTokensDelete where
+        type Rs EnterprisesEnrollmentTokensDelete = Empty
+        type Scopes EnterprisesEnrollmentTokensDelete =
+             '["https://www.googleapis.com/auth/androidmanagement"]
+        requestClient EnterprisesEnrollmentTokensDelete'{..}
+          = go _eetdName _eetdXgafv _eetdUploadProtocol
+              _eetdAccessToken
+              _eetdUploadType
+              _eetdCallback
+              (Just AltJSON)
+              androidManagementService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy EnterprisesEnrollmentTokensDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidManagement/Enterprises/Get.hs b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Get.hs
@@ -0,0 +1,142 @@
+{-# 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.AndroidManagement.Enterprises.Get
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets an enterprise.
+--
+-- /See:/ <https://developers.google.com/android/management Android Management API Reference> for @androidmanagement.enterprises.get@.
+module Network.Google.Resource.AndroidManagement.Enterprises.Get
+    (
+    -- * REST Resource
+      EnterprisesGetResource
+
+    -- * Creating a Request
+    , enterprisesGet
+    , EnterprisesGet
+
+    -- * Request Lenses
+    , egXgafv
+    , egUploadProtocol
+    , egAccessToken
+    , egUploadType
+    , egName
+    , egCallback
+    ) where
+
+import           Network.Google.AndroidManagement.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidmanagement.enterprises.get@ method which the
+-- 'EnterprisesGet' request conforms to.
+type EnterprisesGetResource =
+     "v1" :>
+       Capture "name" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "callback" Text :>
+                   QueryParam "alt" AltJSON :> Get '[JSON] Enterprise
+
+-- | Gets an enterprise.
+--
+-- /See:/ 'enterprisesGet' smart constructor.
+data EnterprisesGet = EnterprisesGet'
+    { _egXgafv          :: !(Maybe Xgafv)
+    , _egUploadProtocol :: !(Maybe Text)
+    , _egAccessToken    :: !(Maybe Text)
+    , _egUploadType     :: !(Maybe Text)
+    , _egName           :: !Text
+    , _egCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EnterprisesGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'egXgafv'
+--
+-- * 'egUploadProtocol'
+--
+-- * 'egAccessToken'
+--
+-- * 'egUploadType'
+--
+-- * 'egName'
+--
+-- * 'egCallback'
+enterprisesGet
+    :: Text -- ^ 'egName'
+    -> EnterprisesGet
+enterprisesGet pEgName_ =
+    EnterprisesGet'
+    { _egXgafv = Nothing
+    , _egUploadProtocol = Nothing
+    , _egAccessToken = Nothing
+    , _egUploadType = Nothing
+    , _egName = pEgName_
+    , _egCallback = Nothing
+    }
+
+-- | V1 error format.
+egXgafv :: Lens' EnterprisesGet (Maybe Xgafv)
+egXgafv = lens _egXgafv (\ s a -> s{_egXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+egUploadProtocol :: Lens' EnterprisesGet (Maybe Text)
+egUploadProtocol
+  = lens _egUploadProtocol
+      (\ s a -> s{_egUploadProtocol = a})
+
+-- | OAuth access token.
+egAccessToken :: Lens' EnterprisesGet (Maybe Text)
+egAccessToken
+  = lens _egAccessToken
+      (\ s a -> s{_egAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+egUploadType :: Lens' EnterprisesGet (Maybe Text)
+egUploadType
+  = lens _egUploadType (\ s a -> s{_egUploadType = a})
+
+-- | The name of the enterprise in the form enterprises\/{enterpriseId}.
+egName :: Lens' EnterprisesGet Text
+egName = lens _egName (\ s a -> s{_egName = a})
+
+-- | JSONP
+egCallback :: Lens' EnterprisesGet (Maybe Text)
+egCallback
+  = lens _egCallback (\ s a -> s{_egCallback = a})
+
+instance GoogleRequest EnterprisesGet where
+        type Rs EnterprisesGet = Enterprise
+        type Scopes EnterprisesGet =
+             '["https://www.googleapis.com/auth/androidmanagement"]
+        requestClient EnterprisesGet'{..}
+          = go _egName _egXgafv _egUploadProtocol
+              _egAccessToken
+              _egUploadType
+              _egCallback
+              (Just AltJSON)
+              androidManagementService
+          where go
+                  = buildClient (Proxy :: Proxy EnterprisesGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidManagement/Enterprises/Patch.hs b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Patch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Patch.hs
@@ -0,0 +1,169 @@
+{-# 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.AndroidManagement.Enterprises.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 an enterprise.
+--
+-- /See:/ <https://developers.google.com/android/management Android Management API Reference> for @androidmanagement.enterprises.patch@.
+module Network.Google.Resource.AndroidManagement.Enterprises.Patch
+    (
+    -- * REST Resource
+      EnterprisesPatchResource
+
+    -- * Creating a Request
+    , enterprisesPatch
+    , EnterprisesPatch
+
+    -- * Request Lenses
+    , epXgafv
+    , epUploadProtocol
+    , epUpdateMask
+    , epAccessToken
+    , epUploadType
+    , epPayload
+    , epName
+    , epCallback
+    ) where
+
+import           Network.Google.AndroidManagement.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidmanagement.enterprises.patch@ method which the
+-- 'EnterprisesPatch' request conforms to.
+type EnterprisesPatchResource =
+     "v1" :>
+       Capture "name" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "updateMask" GFieldMask :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "callback" Text :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON] Enterprise :>
+                         Patch '[JSON] Enterprise
+
+-- | Updates an enterprise.
+--
+-- /See:/ 'enterprisesPatch' smart constructor.
+data EnterprisesPatch = EnterprisesPatch'
+    { _epXgafv          :: !(Maybe Xgafv)
+    , _epUploadProtocol :: !(Maybe Text)
+    , _epUpdateMask     :: !(Maybe GFieldMask)
+    , _epAccessToken    :: !(Maybe Text)
+    , _epUploadType     :: !(Maybe Text)
+    , _epPayload        :: !Enterprise
+    , _epName           :: !Text
+    , _epCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EnterprisesPatch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'epXgafv'
+--
+-- * 'epUploadProtocol'
+--
+-- * 'epUpdateMask'
+--
+-- * 'epAccessToken'
+--
+-- * 'epUploadType'
+--
+-- * 'epPayload'
+--
+-- * 'epName'
+--
+-- * 'epCallback'
+enterprisesPatch
+    :: Enterprise -- ^ 'epPayload'
+    -> Text -- ^ 'epName'
+    -> EnterprisesPatch
+enterprisesPatch pEpPayload_ pEpName_ =
+    EnterprisesPatch'
+    { _epXgafv = Nothing
+    , _epUploadProtocol = Nothing
+    , _epUpdateMask = Nothing
+    , _epAccessToken = Nothing
+    , _epUploadType = Nothing
+    , _epPayload = pEpPayload_
+    , _epName = pEpName_
+    , _epCallback = Nothing
+    }
+
+-- | V1 error format.
+epXgafv :: Lens' EnterprisesPatch (Maybe Xgafv)
+epXgafv = lens _epXgafv (\ s a -> s{_epXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+epUploadProtocol :: Lens' EnterprisesPatch (Maybe Text)
+epUploadProtocol
+  = lens _epUploadProtocol
+      (\ s a -> s{_epUploadProtocol = a})
+
+-- | The field mask indicating the fields to update. If not set, all
+-- modifiable fields will be modified.
+epUpdateMask :: Lens' EnterprisesPatch (Maybe GFieldMask)
+epUpdateMask
+  = lens _epUpdateMask (\ s a -> s{_epUpdateMask = a})
+
+-- | OAuth access token.
+epAccessToken :: Lens' EnterprisesPatch (Maybe Text)
+epAccessToken
+  = lens _epAccessToken
+      (\ s a -> s{_epAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+epUploadType :: Lens' EnterprisesPatch (Maybe Text)
+epUploadType
+  = lens _epUploadType (\ s a -> s{_epUploadType = a})
+
+-- | Multipart request metadata.
+epPayload :: Lens' EnterprisesPatch Enterprise
+epPayload
+  = lens _epPayload (\ s a -> s{_epPayload = a})
+
+-- | The name of the enterprise in the form enterprises\/{enterpriseId}.
+epName :: Lens' EnterprisesPatch Text
+epName = lens _epName (\ s a -> s{_epName = a})
+
+-- | JSONP
+epCallback :: Lens' EnterprisesPatch (Maybe Text)
+epCallback
+  = lens _epCallback (\ s a -> s{_epCallback = a})
+
+instance GoogleRequest EnterprisesPatch where
+        type Rs EnterprisesPatch = Enterprise
+        type Scopes EnterprisesPatch =
+             '["https://www.googleapis.com/auth/androidmanagement"]
+        requestClient EnterprisesPatch'{..}
+          = go _epName _epXgafv _epUploadProtocol _epUpdateMask
+              _epAccessToken
+              _epUploadType
+              _epCallback
+              (Just AltJSON)
+              _epPayload
+              androidManagementService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy EnterprisesPatchResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidManagement/Enterprises/Policies/Delete.hs b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Policies/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Policies/Delete.hs
@@ -0,0 +1,148 @@
+{-# 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.AndroidManagement.Enterprises.Policies.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 policy. This operation is only permitted if no devices are
+-- currently referencing the policy.
+--
+-- /See:/ <https://developers.google.com/android/management Android Management API Reference> for @androidmanagement.enterprises.policies.delete@.
+module Network.Google.Resource.AndroidManagement.Enterprises.Policies.Delete
+    (
+    -- * REST Resource
+      EnterprisesPoliciesDeleteResource
+
+    -- * Creating a Request
+    , enterprisesPoliciesDelete
+    , EnterprisesPoliciesDelete
+
+    -- * Request Lenses
+    , epdXgafv
+    , epdUploadProtocol
+    , epdAccessToken
+    , epdUploadType
+    , epdName
+    , epdCallback
+    ) where
+
+import           Network.Google.AndroidManagement.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidmanagement.enterprises.policies.delete@ method which the
+-- 'EnterprisesPoliciesDelete' request conforms to.
+type EnterprisesPoliciesDeleteResource =
+     "v1" :>
+       Capture "name" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "callback" Text :>
+                   QueryParam "alt" AltJSON :> Delete '[JSON] Empty
+
+-- | Deletes a policy. This operation is only permitted if no devices are
+-- currently referencing the policy.
+--
+-- /See:/ 'enterprisesPoliciesDelete' smart constructor.
+data EnterprisesPoliciesDelete = EnterprisesPoliciesDelete'
+    { _epdXgafv          :: !(Maybe Xgafv)
+    , _epdUploadProtocol :: !(Maybe Text)
+    , _epdAccessToken    :: !(Maybe Text)
+    , _epdUploadType     :: !(Maybe Text)
+    , _epdName           :: !Text
+    , _epdCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EnterprisesPoliciesDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'epdXgafv'
+--
+-- * 'epdUploadProtocol'
+--
+-- * 'epdAccessToken'
+--
+-- * 'epdUploadType'
+--
+-- * 'epdName'
+--
+-- * 'epdCallback'
+enterprisesPoliciesDelete
+    :: Text -- ^ 'epdName'
+    -> EnterprisesPoliciesDelete
+enterprisesPoliciesDelete pEpdName_ =
+    EnterprisesPoliciesDelete'
+    { _epdXgafv = Nothing
+    , _epdUploadProtocol = Nothing
+    , _epdAccessToken = Nothing
+    , _epdUploadType = Nothing
+    , _epdName = pEpdName_
+    , _epdCallback = Nothing
+    }
+
+-- | V1 error format.
+epdXgafv :: Lens' EnterprisesPoliciesDelete (Maybe Xgafv)
+epdXgafv = lens _epdXgafv (\ s a -> s{_epdXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+epdUploadProtocol :: Lens' EnterprisesPoliciesDelete (Maybe Text)
+epdUploadProtocol
+  = lens _epdUploadProtocol
+      (\ s a -> s{_epdUploadProtocol = a})
+
+-- | OAuth access token.
+epdAccessToken :: Lens' EnterprisesPoliciesDelete (Maybe Text)
+epdAccessToken
+  = lens _epdAccessToken
+      (\ s a -> s{_epdAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+epdUploadType :: Lens' EnterprisesPoliciesDelete (Maybe Text)
+epdUploadType
+  = lens _epdUploadType
+      (\ s a -> s{_epdUploadType = a})
+
+-- | The name of the policy in the form
+-- enterprises\/{enterpriseId}\/policies\/{policyId}.
+epdName :: Lens' EnterprisesPoliciesDelete Text
+epdName = lens _epdName (\ s a -> s{_epdName = a})
+
+-- | JSONP
+epdCallback :: Lens' EnterprisesPoliciesDelete (Maybe Text)
+epdCallback
+  = lens _epdCallback (\ s a -> s{_epdCallback = a})
+
+instance GoogleRequest EnterprisesPoliciesDelete
+         where
+        type Rs EnterprisesPoliciesDelete = Empty
+        type Scopes EnterprisesPoliciesDelete =
+             '["https://www.googleapis.com/auth/androidmanagement"]
+        requestClient EnterprisesPoliciesDelete'{..}
+          = go _epdName _epdXgafv _epdUploadProtocol
+              _epdAccessToken
+              _epdUploadType
+              _epdCallback
+              (Just AltJSON)
+              androidManagementService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy EnterprisesPoliciesDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidManagement/Enterprises/Policies/Get.hs b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Policies/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Policies/Get.hs
@@ -0,0 +1,145 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.AndroidManagement.Enterprises.Policies.Get
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets a policy.
+--
+-- /See:/ <https://developers.google.com/android/management Android Management API Reference> for @androidmanagement.enterprises.policies.get@.
+module Network.Google.Resource.AndroidManagement.Enterprises.Policies.Get
+    (
+    -- * REST Resource
+      EnterprisesPoliciesGetResource
+
+    -- * Creating a Request
+    , enterprisesPoliciesGet
+    , EnterprisesPoliciesGet
+
+    -- * Request Lenses
+    , epgXgafv
+    , epgUploadProtocol
+    , epgAccessToken
+    , epgUploadType
+    , epgName
+    , epgCallback
+    ) where
+
+import           Network.Google.AndroidManagement.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidmanagement.enterprises.policies.get@ method which the
+-- 'EnterprisesPoliciesGet' request conforms to.
+type EnterprisesPoliciesGetResource =
+     "v1" :>
+       Capture "name" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "callback" Text :>
+                   QueryParam "alt" AltJSON :> Get '[JSON] Policy
+
+-- | Gets a policy.
+--
+-- /See:/ 'enterprisesPoliciesGet' smart constructor.
+data EnterprisesPoliciesGet = EnterprisesPoliciesGet'
+    { _epgXgafv          :: !(Maybe Xgafv)
+    , _epgUploadProtocol :: !(Maybe Text)
+    , _epgAccessToken    :: !(Maybe Text)
+    , _epgUploadType     :: !(Maybe Text)
+    , _epgName           :: !Text
+    , _epgCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EnterprisesPoliciesGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'epgXgafv'
+--
+-- * 'epgUploadProtocol'
+--
+-- * 'epgAccessToken'
+--
+-- * 'epgUploadType'
+--
+-- * 'epgName'
+--
+-- * 'epgCallback'
+enterprisesPoliciesGet
+    :: Text -- ^ 'epgName'
+    -> EnterprisesPoliciesGet
+enterprisesPoliciesGet pEpgName_ =
+    EnterprisesPoliciesGet'
+    { _epgXgafv = Nothing
+    , _epgUploadProtocol = Nothing
+    , _epgAccessToken = Nothing
+    , _epgUploadType = Nothing
+    , _epgName = pEpgName_
+    , _epgCallback = Nothing
+    }
+
+-- | V1 error format.
+epgXgafv :: Lens' EnterprisesPoliciesGet (Maybe Xgafv)
+epgXgafv = lens _epgXgafv (\ s a -> s{_epgXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+epgUploadProtocol :: Lens' EnterprisesPoliciesGet (Maybe Text)
+epgUploadProtocol
+  = lens _epgUploadProtocol
+      (\ s a -> s{_epgUploadProtocol = a})
+
+-- | OAuth access token.
+epgAccessToken :: Lens' EnterprisesPoliciesGet (Maybe Text)
+epgAccessToken
+  = lens _epgAccessToken
+      (\ s a -> s{_epgAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+epgUploadType :: Lens' EnterprisesPoliciesGet (Maybe Text)
+epgUploadType
+  = lens _epgUploadType
+      (\ s a -> s{_epgUploadType = a})
+
+-- | The name of the policy in the form
+-- enterprises\/{enterpriseId}\/policies\/{policyId}.
+epgName :: Lens' EnterprisesPoliciesGet Text
+epgName = lens _epgName (\ s a -> s{_epgName = a})
+
+-- | JSONP
+epgCallback :: Lens' EnterprisesPoliciesGet (Maybe Text)
+epgCallback
+  = lens _epgCallback (\ s a -> s{_epgCallback = a})
+
+instance GoogleRequest EnterprisesPoliciesGet where
+        type Rs EnterprisesPoliciesGet = Policy
+        type Scopes EnterprisesPoliciesGet =
+             '["https://www.googleapis.com/auth/androidmanagement"]
+        requestClient EnterprisesPoliciesGet'{..}
+          = go _epgName _epgXgafv _epgUploadProtocol
+              _epgAccessToken
+              _epgUploadType
+              _epgCallback
+              (Just AltJSON)
+              androidManagementService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy EnterprisesPoliciesGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidManagement/Enterprises/Policies/List.hs b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Policies/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Policies/List.hs
@@ -0,0 +1,174 @@
+{-# 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.AndroidManagement.Enterprises.Policies.List
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists policies for a given enterprise.
+--
+-- /See:/ <https://developers.google.com/android/management Android Management API Reference> for @androidmanagement.enterprises.policies.list@.
+module Network.Google.Resource.AndroidManagement.Enterprises.Policies.List
+    (
+    -- * REST Resource
+      EnterprisesPoliciesListResource
+
+    -- * Creating a Request
+    , enterprisesPoliciesList
+    , EnterprisesPoliciesList
+
+    -- * Request Lenses
+    , eplParent
+    , eplXgafv
+    , eplUploadProtocol
+    , eplAccessToken
+    , eplUploadType
+    , eplPageToken
+    , eplPageSize
+    , eplCallback
+    ) where
+
+import           Network.Google.AndroidManagement.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidmanagement.enterprises.policies.list@ method which the
+-- 'EnterprisesPoliciesList' request conforms to.
+type EnterprisesPoliciesListResource =
+     "v1" :>
+       Capture "parent" Text :>
+         "policies" :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "pageToken" Text :>
+                     QueryParam "pageSize" (Textual Int32) :>
+                       QueryParam "callback" Text :>
+                         QueryParam "alt" AltJSON :>
+                           Get '[JSON] ListPoliciesResponse
+
+-- | Lists policies for a given enterprise.
+--
+-- /See:/ 'enterprisesPoliciesList' smart constructor.
+data EnterprisesPoliciesList = EnterprisesPoliciesList'
+    { _eplParent         :: !Text
+    , _eplXgafv          :: !(Maybe Xgafv)
+    , _eplUploadProtocol :: !(Maybe Text)
+    , _eplAccessToken    :: !(Maybe Text)
+    , _eplUploadType     :: !(Maybe Text)
+    , _eplPageToken      :: !(Maybe Text)
+    , _eplPageSize       :: !(Maybe (Textual Int32))
+    , _eplCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EnterprisesPoliciesList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'eplParent'
+--
+-- * 'eplXgafv'
+--
+-- * 'eplUploadProtocol'
+--
+-- * 'eplAccessToken'
+--
+-- * 'eplUploadType'
+--
+-- * 'eplPageToken'
+--
+-- * 'eplPageSize'
+--
+-- * 'eplCallback'
+enterprisesPoliciesList
+    :: Text -- ^ 'eplParent'
+    -> EnterprisesPoliciesList
+enterprisesPoliciesList pEplParent_ =
+    EnterprisesPoliciesList'
+    { _eplParent = pEplParent_
+    , _eplXgafv = Nothing
+    , _eplUploadProtocol = Nothing
+    , _eplAccessToken = Nothing
+    , _eplUploadType = Nothing
+    , _eplPageToken = Nothing
+    , _eplPageSize = Nothing
+    , _eplCallback = Nothing
+    }
+
+-- | The name of the enterprise in the form enterprises\/{enterpriseId}.
+eplParent :: Lens' EnterprisesPoliciesList Text
+eplParent
+  = lens _eplParent (\ s a -> s{_eplParent = a})
+
+-- | V1 error format.
+eplXgafv :: Lens' EnterprisesPoliciesList (Maybe Xgafv)
+eplXgafv = lens _eplXgafv (\ s a -> s{_eplXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+eplUploadProtocol :: Lens' EnterprisesPoliciesList (Maybe Text)
+eplUploadProtocol
+  = lens _eplUploadProtocol
+      (\ s a -> s{_eplUploadProtocol = a})
+
+-- | OAuth access token.
+eplAccessToken :: Lens' EnterprisesPoliciesList (Maybe Text)
+eplAccessToken
+  = lens _eplAccessToken
+      (\ s a -> s{_eplAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+eplUploadType :: Lens' EnterprisesPoliciesList (Maybe Text)
+eplUploadType
+  = lens _eplUploadType
+      (\ s a -> s{_eplUploadType = a})
+
+-- | A token identifying a page of results returned by the server.
+eplPageToken :: Lens' EnterprisesPoliciesList (Maybe Text)
+eplPageToken
+  = lens _eplPageToken (\ s a -> s{_eplPageToken = a})
+
+-- | The requested page size. The actual page size may be fixed to a min or
+-- max value.
+eplPageSize :: Lens' EnterprisesPoliciesList (Maybe Int32)
+eplPageSize
+  = lens _eplPageSize (\ s a -> s{_eplPageSize = a}) .
+      mapping _Coerce
+
+-- | JSONP
+eplCallback :: Lens' EnterprisesPoliciesList (Maybe Text)
+eplCallback
+  = lens _eplCallback (\ s a -> s{_eplCallback = a})
+
+instance GoogleRequest EnterprisesPoliciesList where
+        type Rs EnterprisesPoliciesList =
+             ListPoliciesResponse
+        type Scopes EnterprisesPoliciesList =
+             '["https://www.googleapis.com/auth/androidmanagement"]
+        requestClient EnterprisesPoliciesList'{..}
+          = go _eplParent _eplXgafv _eplUploadProtocol
+              _eplAccessToken
+              _eplUploadType
+              _eplPageToken
+              _eplPageSize
+              _eplCallback
+              (Just AltJSON)
+              androidManagementService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy EnterprisesPoliciesListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidManagement/Enterprises/Policies/Patch.hs b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Policies/Patch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Policies/Patch.hs
@@ -0,0 +1,172 @@
+{-# 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.AndroidManagement.Enterprises.Policies.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 or creates a policy.
+--
+-- /See:/ <https://developers.google.com/android/management Android Management API Reference> for @androidmanagement.enterprises.policies.patch@.
+module Network.Google.Resource.AndroidManagement.Enterprises.Policies.Patch
+    (
+    -- * REST Resource
+      EnterprisesPoliciesPatchResource
+
+    -- * Creating a Request
+    , enterprisesPoliciesPatch
+    , EnterprisesPoliciesPatch
+
+    -- * Request Lenses
+    , eppXgafv
+    , eppUploadProtocol
+    , eppUpdateMask
+    , eppAccessToken
+    , eppUploadType
+    , eppPayload
+    , eppName
+    , eppCallback
+    ) where
+
+import           Network.Google.AndroidManagement.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidmanagement.enterprises.policies.patch@ method which the
+-- 'EnterprisesPoliciesPatch' request conforms to.
+type EnterprisesPoliciesPatchResource =
+     "v1" :>
+       Capture "name" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "updateMask" GFieldMask :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "callback" Text :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON] Policy :> Patch '[JSON] Policy
+
+-- | Updates or creates a policy.
+--
+-- /See:/ 'enterprisesPoliciesPatch' smart constructor.
+data EnterprisesPoliciesPatch = EnterprisesPoliciesPatch'
+    { _eppXgafv          :: !(Maybe Xgafv)
+    , _eppUploadProtocol :: !(Maybe Text)
+    , _eppUpdateMask     :: !(Maybe GFieldMask)
+    , _eppAccessToken    :: !(Maybe Text)
+    , _eppUploadType     :: !(Maybe Text)
+    , _eppPayload        :: !Policy
+    , _eppName           :: !Text
+    , _eppCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EnterprisesPoliciesPatch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'eppXgafv'
+--
+-- * 'eppUploadProtocol'
+--
+-- * 'eppUpdateMask'
+--
+-- * 'eppAccessToken'
+--
+-- * 'eppUploadType'
+--
+-- * 'eppPayload'
+--
+-- * 'eppName'
+--
+-- * 'eppCallback'
+enterprisesPoliciesPatch
+    :: Policy -- ^ 'eppPayload'
+    -> Text -- ^ 'eppName'
+    -> EnterprisesPoliciesPatch
+enterprisesPoliciesPatch pEppPayload_ pEppName_ =
+    EnterprisesPoliciesPatch'
+    { _eppXgafv = Nothing
+    , _eppUploadProtocol = Nothing
+    , _eppUpdateMask = Nothing
+    , _eppAccessToken = Nothing
+    , _eppUploadType = Nothing
+    , _eppPayload = pEppPayload_
+    , _eppName = pEppName_
+    , _eppCallback = Nothing
+    }
+
+-- | V1 error format.
+eppXgafv :: Lens' EnterprisesPoliciesPatch (Maybe Xgafv)
+eppXgafv = lens _eppXgafv (\ s a -> s{_eppXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+eppUploadProtocol :: Lens' EnterprisesPoliciesPatch (Maybe Text)
+eppUploadProtocol
+  = lens _eppUploadProtocol
+      (\ s a -> s{_eppUploadProtocol = a})
+
+-- | The field mask indicating the fields to update. If not set, all
+-- modifiable fields will be modified.
+eppUpdateMask :: Lens' EnterprisesPoliciesPatch (Maybe GFieldMask)
+eppUpdateMask
+  = lens _eppUpdateMask
+      (\ s a -> s{_eppUpdateMask = a})
+
+-- | OAuth access token.
+eppAccessToken :: Lens' EnterprisesPoliciesPatch (Maybe Text)
+eppAccessToken
+  = lens _eppAccessToken
+      (\ s a -> s{_eppAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+eppUploadType :: Lens' EnterprisesPoliciesPatch (Maybe Text)
+eppUploadType
+  = lens _eppUploadType
+      (\ s a -> s{_eppUploadType = a})
+
+-- | Multipart request metadata.
+eppPayload :: Lens' EnterprisesPoliciesPatch Policy
+eppPayload
+  = lens _eppPayload (\ s a -> s{_eppPayload = a})
+
+-- | The name of the policy in the form
+-- enterprises\/{enterpriseId}\/policies\/{policyId}.
+eppName :: Lens' EnterprisesPoliciesPatch Text
+eppName = lens _eppName (\ s a -> s{_eppName = a})
+
+-- | JSONP
+eppCallback :: Lens' EnterprisesPoliciesPatch (Maybe Text)
+eppCallback
+  = lens _eppCallback (\ s a -> s{_eppCallback = a})
+
+instance GoogleRequest EnterprisesPoliciesPatch where
+        type Rs EnterprisesPoliciesPatch = Policy
+        type Scopes EnterprisesPoliciesPatch =
+             '["https://www.googleapis.com/auth/androidmanagement"]
+        requestClient EnterprisesPoliciesPatch'{..}
+          = go _eppName _eppXgafv _eppUploadProtocol
+              _eppUpdateMask
+              _eppAccessToken
+              _eppUploadType
+              _eppCallback
+              (Just AltJSON)
+              _eppPayload
+              androidManagementService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy EnterprisesPoliciesPatchResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidManagement/Enterprises/WebTokens/Create.hs b/gen/Network/Google/Resource/AndroidManagement/Enterprises/WebTokens/Create.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidManagement/Enterprises/WebTokens/Create.hs
@@ -0,0 +1,163 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.AndroidManagement.Enterprises.WebTokens.Create
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a web token to access an embeddable managed Google Play web UI
+-- for a given enterprise.
+--
+-- /See:/ <https://developers.google.com/android/management Android Management API Reference> for @androidmanagement.enterprises.webTokens.create@.
+module Network.Google.Resource.AndroidManagement.Enterprises.WebTokens.Create
+    (
+    -- * REST Resource
+      EnterprisesWebTokensCreateResource
+
+    -- * Creating a Request
+    , enterprisesWebTokensCreate
+    , EnterprisesWebTokensCreate
+
+    -- * Request Lenses
+    , ewtcParent
+    , ewtcXgafv
+    , ewtcUploadProtocol
+    , ewtcAccessToken
+    , ewtcUploadType
+    , ewtcPayload
+    , ewtcCallback
+    ) where
+
+import           Network.Google.AndroidManagement.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidmanagement.enterprises.webTokens.create@ method which the
+-- 'EnterprisesWebTokensCreate' request conforms to.
+type EnterprisesWebTokensCreateResource =
+     "v1" :>
+       Capture "parent" Text :>
+         "webTokens" :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "callback" Text :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON] WebToken :> Post '[JSON] WebToken
+
+-- | Creates a web token to access an embeddable managed Google Play web UI
+-- for a given enterprise.
+--
+-- /See:/ 'enterprisesWebTokensCreate' smart constructor.
+data EnterprisesWebTokensCreate = EnterprisesWebTokensCreate'
+    { _ewtcParent         :: !Text
+    , _ewtcXgafv          :: !(Maybe Xgafv)
+    , _ewtcUploadProtocol :: !(Maybe Text)
+    , _ewtcAccessToken    :: !(Maybe Text)
+    , _ewtcUploadType     :: !(Maybe Text)
+    , _ewtcPayload        :: !WebToken
+    , _ewtcCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EnterprisesWebTokensCreate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ewtcParent'
+--
+-- * 'ewtcXgafv'
+--
+-- * 'ewtcUploadProtocol'
+--
+-- * 'ewtcAccessToken'
+--
+-- * 'ewtcUploadType'
+--
+-- * 'ewtcPayload'
+--
+-- * 'ewtcCallback'
+enterprisesWebTokensCreate
+    :: Text -- ^ 'ewtcParent'
+    -> WebToken -- ^ 'ewtcPayload'
+    -> EnterprisesWebTokensCreate
+enterprisesWebTokensCreate pEwtcParent_ pEwtcPayload_ =
+    EnterprisesWebTokensCreate'
+    { _ewtcParent = pEwtcParent_
+    , _ewtcXgafv = Nothing
+    , _ewtcUploadProtocol = Nothing
+    , _ewtcAccessToken = Nothing
+    , _ewtcUploadType = Nothing
+    , _ewtcPayload = pEwtcPayload_
+    , _ewtcCallback = Nothing
+    }
+
+-- | The name of the enterprise in the form enterprises\/{enterpriseId}.
+ewtcParent :: Lens' EnterprisesWebTokensCreate Text
+ewtcParent
+  = lens _ewtcParent (\ s a -> s{_ewtcParent = a})
+
+-- | V1 error format.
+ewtcXgafv :: Lens' EnterprisesWebTokensCreate (Maybe Xgafv)
+ewtcXgafv
+  = lens _ewtcXgafv (\ s a -> s{_ewtcXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+ewtcUploadProtocol :: Lens' EnterprisesWebTokensCreate (Maybe Text)
+ewtcUploadProtocol
+  = lens _ewtcUploadProtocol
+      (\ s a -> s{_ewtcUploadProtocol = a})
+
+-- | OAuth access token.
+ewtcAccessToken :: Lens' EnterprisesWebTokensCreate (Maybe Text)
+ewtcAccessToken
+  = lens _ewtcAccessToken
+      (\ s a -> s{_ewtcAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+ewtcUploadType :: Lens' EnterprisesWebTokensCreate (Maybe Text)
+ewtcUploadType
+  = lens _ewtcUploadType
+      (\ s a -> s{_ewtcUploadType = a})
+
+-- | Multipart request metadata.
+ewtcPayload :: Lens' EnterprisesWebTokensCreate WebToken
+ewtcPayload
+  = lens _ewtcPayload (\ s a -> s{_ewtcPayload = a})
+
+-- | JSONP
+ewtcCallback :: Lens' EnterprisesWebTokensCreate (Maybe Text)
+ewtcCallback
+  = lens _ewtcCallback (\ s a -> s{_ewtcCallback = a})
+
+instance GoogleRequest EnterprisesWebTokensCreate
+         where
+        type Rs EnterprisesWebTokensCreate = WebToken
+        type Scopes EnterprisesWebTokensCreate =
+             '["https://www.googleapis.com/auth/androidmanagement"]
+        requestClient EnterprisesWebTokensCreate'{..}
+          = go _ewtcParent _ewtcXgafv _ewtcUploadProtocol
+              _ewtcAccessToken
+              _ewtcUploadType
+              _ewtcCallback
+              (Just AltJSON)
+              _ewtcPayload
+              androidManagementService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy EnterprisesWebTokensCreateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidManagement/SignupURLs/Create.hs b/gen/Network/Google/Resource/AndroidManagement/SignupURLs/Create.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidManagement/SignupURLs/Create.hs
@@ -0,0 +1,164 @@
+{-# 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.AndroidManagement.SignupURLs.Create
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates an enterprise signup URL.
+--
+-- /See:/ <https://developers.google.com/android/management Android Management API Reference> for @androidmanagement.signupUrls.create@.
+module Network.Google.Resource.AndroidManagement.SignupURLs.Create
+    (
+    -- * REST Resource
+      SignupURLsCreateResource
+
+    -- * Creating a Request
+    , signupURLsCreate
+    , SignupURLsCreate
+
+    -- * Request Lenses
+    , sucXgafv
+    , sucUploadProtocol
+    , sucCallbackURL
+    , sucAccessToken
+    , sucUploadType
+    , sucProjectId
+    , sucCallback
+    ) where
+
+import           Network.Google.AndroidManagement.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidmanagement.signupUrls.create@ method which the
+-- 'SignupURLsCreate' request conforms to.
+type SignupURLsCreateResource =
+     "v1" :>
+       "signupUrls" :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "callbackUrl" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "projectId" Text :>
+                     QueryParam "callback" Text :>
+                       QueryParam "alt" AltJSON :> Post '[JSON] SignupURL
+
+-- | Creates an enterprise signup URL.
+--
+-- /See:/ 'signupURLsCreate' smart constructor.
+data SignupURLsCreate = SignupURLsCreate'
+    { _sucXgafv          :: !(Maybe Xgafv)
+    , _sucUploadProtocol :: !(Maybe Text)
+    , _sucCallbackURL    :: !(Maybe Text)
+    , _sucAccessToken    :: !(Maybe Text)
+    , _sucUploadType     :: !(Maybe Text)
+    , _sucProjectId      :: !(Maybe Text)
+    , _sucCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SignupURLsCreate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sucXgafv'
+--
+-- * 'sucUploadProtocol'
+--
+-- * 'sucCallbackURL'
+--
+-- * 'sucAccessToken'
+--
+-- * 'sucUploadType'
+--
+-- * 'sucProjectId'
+--
+-- * 'sucCallback'
+signupURLsCreate
+    :: SignupURLsCreate
+signupURLsCreate =
+    SignupURLsCreate'
+    { _sucXgafv = Nothing
+    , _sucUploadProtocol = Nothing
+    , _sucCallbackURL = Nothing
+    , _sucAccessToken = Nothing
+    , _sucUploadType = Nothing
+    , _sucProjectId = Nothing
+    , _sucCallback = Nothing
+    }
+
+-- | V1 error format.
+sucXgafv :: Lens' SignupURLsCreate (Maybe Xgafv)
+sucXgafv = lens _sucXgafv (\ s a -> s{_sucXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+sucUploadProtocol :: Lens' SignupURLsCreate (Maybe Text)
+sucUploadProtocol
+  = lens _sucUploadProtocol
+      (\ s a -> s{_sucUploadProtocol = a})
+
+-- | The callback URL that the admin will be redirected to after successfully
+-- creating an enterprise. Before redirecting there the system will add a
+-- query parameter to this URL named enterpriseToken which will contain an
+-- opaque token to be used for the create enterprise request. The URL will
+-- be parsed then reformatted in order to add the enterpriseToken
+-- parameter, so there may be some minor formatting changes.
+sucCallbackURL :: Lens' SignupURLsCreate (Maybe Text)
+sucCallbackURL
+  = lens _sucCallbackURL
+      (\ s a -> s{_sucCallbackURL = a})
+
+-- | OAuth access token.
+sucAccessToken :: Lens' SignupURLsCreate (Maybe Text)
+sucAccessToken
+  = lens _sucAccessToken
+      (\ s a -> s{_sucAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+sucUploadType :: Lens' SignupURLsCreate (Maybe Text)
+sucUploadType
+  = lens _sucUploadType
+      (\ s a -> s{_sucUploadType = a})
+
+-- | The ID of the Google Cloud Platform project which will own the
+-- enterprise.
+sucProjectId :: Lens' SignupURLsCreate (Maybe Text)
+sucProjectId
+  = lens _sucProjectId (\ s a -> s{_sucProjectId = a})
+
+-- | JSONP
+sucCallback :: Lens' SignupURLsCreate (Maybe Text)
+sucCallback
+  = lens _sucCallback (\ s a -> s{_sucCallback = a})
+
+instance GoogleRequest SignupURLsCreate where
+        type Rs SignupURLsCreate = SignupURL
+        type Scopes SignupURLsCreate =
+             '["https://www.googleapis.com/auth/androidmanagement"]
+        requestClient SignupURLsCreate'{..}
+          = go _sucXgafv _sucUploadProtocol _sucCallbackURL
+              _sucAccessToken
+              _sucUploadType
+              _sucProjectId
+              _sucCallback
+              (Just AltJSON)
+              androidManagementService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy SignupURLsCreateResource)
+                      mempty
diff --git a/gogol-androidmanagement.cabal b/gogol-androidmanagement.cabal
new file mode 100644
--- /dev/null
+++ b/gogol-androidmanagement.cabal
@@ -0,0 +1,67 @@
+name:                  gogol-androidmanagement
+version:               0.4.0
+synopsis:              Google Android Management SDK.
+homepage:              https://github.com/brendanhay/gogol
+bug-reports:           https://github.com/brendanhay/gogol/issues
+license:               OtherLicense
+license-file:          LICENSE
+author:                Brendan Hay
+maintainer:            Brendan Hay <brendan.g.hay@gmail.com>
+copyright:             Copyright (c) 2015-2016 Brendan Hay
+category:              Network, Google, Cloud
+build-type:            Simple
+cabal-version:         >= 1.10
+extra-source-files:    README.md src/.gitkeep
+
+description:
+    The Android Management API provides remote enterprise management of
+    Android devices and apps.
+    .
+    /Warning:/ This is an experimental prototype/preview release which is still
+    under exploratory development and not intended for public use, caveat emptor!
+    .
+    This library is compatible with version @v1@
+    of the API.
+
+source-repository head
+    type:     git
+    location: git://github.com/brendanhay/gogol.git
+
+library
+    default-language:  Haskell2010
+    hs-source-dirs:    src gen
+
+    ghc-options:       -Wall
+
+    exposed-modules:
+          Network.Google.AndroidManagement
+        , Network.Google.AndroidManagement.Types
+        , Network.Google.Resource.AndroidManagement.Enterprises.Applications.Get
+        , Network.Google.Resource.AndroidManagement.Enterprises.Create
+        , Network.Google.Resource.AndroidManagement.Enterprises.Devices.Delete
+        , Network.Google.Resource.AndroidManagement.Enterprises.Devices.Get
+        , Network.Google.Resource.AndroidManagement.Enterprises.Devices.IssueCommand
+        , Network.Google.Resource.AndroidManagement.Enterprises.Devices.List
+        , Network.Google.Resource.AndroidManagement.Enterprises.Devices.Operations.Cancel
+        , Network.Google.Resource.AndroidManagement.Enterprises.Devices.Operations.Delete
+        , Network.Google.Resource.AndroidManagement.Enterprises.Devices.Operations.Get
+        , Network.Google.Resource.AndroidManagement.Enterprises.Devices.Operations.List
+        , Network.Google.Resource.AndroidManagement.Enterprises.Devices.Patch
+        , Network.Google.Resource.AndroidManagement.Enterprises.EnrollmentTokens.Create
+        , Network.Google.Resource.AndroidManagement.Enterprises.EnrollmentTokens.Delete
+        , Network.Google.Resource.AndroidManagement.Enterprises.Get
+        , Network.Google.Resource.AndroidManagement.Enterprises.Patch
+        , Network.Google.Resource.AndroidManagement.Enterprises.Policies.Delete
+        , Network.Google.Resource.AndroidManagement.Enterprises.Policies.Get
+        , Network.Google.Resource.AndroidManagement.Enterprises.Policies.List
+        , Network.Google.Resource.AndroidManagement.Enterprises.Policies.Patch
+        , Network.Google.Resource.AndroidManagement.Enterprises.WebTokens.Create
+        , Network.Google.Resource.AndroidManagement.SignupURLs.Create
+
+    other-modules:
+          Network.Google.AndroidManagement.Types.Product
+        , Network.Google.AndroidManagement.Types.Sum
+
+    build-depends:
+          gogol-core == 0.4.0.*
+        , base       >= 4.7 && < 5
diff --git a/src/.gitkeep b/src/.gitkeep
new file mode 100644
--- /dev/null
+++ b/src/.gitkeep
