diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -8,7 +8,7 @@
 
 ## Version
 
-`0.3.0`
+`0.5.0`
 
 
 ## Description
diff --git a/gen/Network/Google/AndroidManagement.hs b/gen/Network/Google/AndroidManagement.hs
--- a/gen/Network/Google/AndroidManagement.hs
+++ b/gen/Network/Google/AndroidManagement.hs
@@ -87,6 +87,21 @@
     -- ** androidmanagement.enterprises.policies.patch
     , module Network.Google.Resource.AndroidManagement.Enterprises.Policies.Patch
 
+    -- ** androidmanagement.enterprises.webApps.create
+    , module Network.Google.Resource.AndroidManagement.Enterprises.WebApps.Create
+
+    -- ** androidmanagement.enterprises.webApps.delete
+    , module Network.Google.Resource.AndroidManagement.Enterprises.WebApps.Delete
+
+    -- ** androidmanagement.enterprises.webApps.get
+    , module Network.Google.Resource.AndroidManagement.Enterprises.WebApps.Get
+
+    -- ** androidmanagement.enterprises.webApps.list
+    , module Network.Google.Resource.AndroidManagement.Enterprises.WebApps.List
+
+    -- ** androidmanagement.enterprises.webApps.patch
+    , module Network.Google.Resource.AndroidManagement.Enterprises.WebApps.Patch
+
     -- ** androidmanagement.enterprises.webTokens.create
     , module Network.Google.Resource.AndroidManagement.Enterprises.WebTokens.Create
 
@@ -167,6 +182,11 @@
     , policyOpenNetworkConfiguration
     , poncAddtional
 
+    -- ** LaunchAppAction
+    , LaunchAppAction
+    , launchAppAction
+    , laaPackageName
+
     -- ** CommandErrorCode
     , CommandErrorCode (..)
 
@@ -319,6 +339,9 @@
     , devEnrollmentTime
     , devDisplays
 
+    -- ** WebAppDisplayMode
+    , WebAppDisplayMode (..)
+
     -- ** ApplicationReportApplicationSource
     , ApplicationReportApplicationSource (..)
 
@@ -381,6 +404,7 @@
     , arVersionName
     , arPackageName
     , arPackageSha256Hash
+    , arKeyedAppStates
     , arApplicationSource
     , arEvents
     , arDisplayName
@@ -421,6 +445,7 @@
     , srsMemoryInfoEnabled
     , srsNetworkInfoEnabled
     , srsDeviceSettingsEnabled
+    , srsApplicationReportingSettings
 
     -- ** CommandType
     , CommandType (..)
@@ -428,6 +453,11 @@
     -- ** ApplicationPolicyDefaultPermissionPolicy
     , ApplicationPolicyDefaultPermissionPolicy (..)
 
+    -- ** WebAppIcon
+    , WebAppIcon
+    , webAppIcon
+    , waiImageData
+
     -- ** Xgafv
     , Xgafv (..)
 
@@ -577,6 +607,7 @@
     , pEnsureVerifyAppsEnabled
     , pSetWallpaperDisabled
     , pVPNConfigDisabled
+    , pSetupActions
     , pOpenNetworkConfiguration
     , pModifyAccountsDisabled
     , pBlockApplicationsEnabled
@@ -611,6 +642,16 @@
     , ncdcNonComplianceReason
     , ncdcSettingName
 
+    -- ** KeyedAppState
+    , KeyedAppState
+    , keyedAppState
+    , kasData
+    , kasSeverity
+    , kasKey
+    , kasMessage
+    , kasLastUpdateTime
+    , kasCreateTime
+
     -- ** OperationMetadata
     , OperationMetadata
     , operationMetadata
@@ -624,6 +665,9 @@
     , wtName
     , wtPermissions
 
+    -- ** KeyedAppStateSeverity
+    , KeyedAppStateSeverity (..)
+
     -- ** ComplianceRule
     , ComplianceRule
     , complianceRule
@@ -632,6 +676,12 @@
     , crPackageNamesToDisable
     , crNonComplianceDetailCondition
 
+    -- ** ListWebAppsResponse
+    , ListWebAppsResponse
+    , listWebAppsResponse
+    , lwarNextPageToken
+    , lwarWebApps
+
     -- ** PasswordRequirements
     , PasswordRequirements
     , passwordRequirements
@@ -701,6 +751,11 @@
     , siAndroidBuildNumber
     , siAndroidVersion
 
+    -- ** ApplicationReportingSettings
+    , ApplicationReportingSettings
+    , applicationReportingSettings
+    , arsIncludeRemovedApps
+
     -- ** MemoryEventEventType
     , MemoryEventEventType (..)
 
@@ -711,6 +766,23 @@
     , apDescription
     , apPermissionId
 
+    -- ** SetupAction
+    , SetupAction
+    , setupAction
+    , saLaunchApp
+    , saTitle
+    , saDescription
+
+    -- ** WebApp
+    , WebApp
+    , webApp
+    , waVersionCode
+    , waIcons
+    , waStartURL
+    , waDisplayMode
+    , waName
+    , waTitle
+
     -- ** PasswordRequirementsPasswordQuality
     , PasswordRequirementsPasswordQuality (..)
     ) where
@@ -736,6 +808,11 @@
 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.WebApps.Create
+import           Network.Google.Resource.AndroidManagement.Enterprises.WebApps.Delete
+import           Network.Google.Resource.AndroidManagement.Enterprises.WebApps.Get
+import           Network.Google.Resource.AndroidManagement.Enterprises.WebApps.List
+import           Network.Google.Resource.AndroidManagement.Enterprises.WebApps.Patch
 import           Network.Google.Resource.AndroidManagement.Enterprises.WebTokens.Create
 import           Network.Google.Resource.AndroidManagement.SignupURLs.Create
 
@@ -747,6 +824,11 @@
 type AndroidManagementAPI =
      EnterprisesEnrollmentTokensCreateResource :<|>
        EnterprisesEnrollmentTokensDeleteResource
+       :<|> EnterprisesWebAppsListResource
+       :<|> EnterprisesWebAppsPatchResource
+       :<|> EnterprisesWebAppsGetResource
+       :<|> EnterprisesWebAppsCreateResource
+       :<|> EnterprisesWebAppsDeleteResource
        :<|> EnterprisesWebTokensCreateResource
        :<|> EnterprisesDevicesOperationsListResource
        :<|> EnterprisesDevicesOperationsGetResource
diff --git a/gen/Network/Google/AndroidManagement/Types.hs b/gen/Network/Google/AndroidManagement/Types.hs
--- a/gen/Network/Google/AndroidManagement/Types.hs
+++ b/gen/Network/Google/AndroidManagement/Types.hs
@@ -94,6 +94,11 @@
     , policyOpenNetworkConfiguration
     , poncAddtional
 
+    -- * LaunchAppAction
+    , LaunchAppAction
+    , launchAppAction
+    , laaPackageName
+
     -- * CommandErrorCode
     , CommandErrorCode (..)
 
@@ -246,6 +251,9 @@
     , devEnrollmentTime
     , devDisplays
 
+    -- * WebAppDisplayMode
+    , WebAppDisplayMode (..)
+
     -- * ApplicationReportApplicationSource
     , ApplicationReportApplicationSource (..)
 
@@ -308,6 +316,7 @@
     , arVersionName
     , arPackageName
     , arPackageSha256Hash
+    , arKeyedAppStates
     , arApplicationSource
     , arEvents
     , arDisplayName
@@ -348,6 +357,7 @@
     , srsMemoryInfoEnabled
     , srsNetworkInfoEnabled
     , srsDeviceSettingsEnabled
+    , srsApplicationReportingSettings
 
     -- * CommandType
     , CommandType (..)
@@ -355,6 +365,11 @@
     -- * ApplicationPolicyDefaultPermissionPolicy
     , ApplicationPolicyDefaultPermissionPolicy (..)
 
+    -- * WebAppIcon
+    , WebAppIcon
+    , webAppIcon
+    , waiImageData
+
     -- * Xgafv
     , Xgafv (..)
 
@@ -504,6 +519,7 @@
     , pEnsureVerifyAppsEnabled
     , pSetWallpaperDisabled
     , pVPNConfigDisabled
+    , pSetupActions
     , pOpenNetworkConfiguration
     , pModifyAccountsDisabled
     , pBlockApplicationsEnabled
@@ -538,6 +554,16 @@
     , ncdcNonComplianceReason
     , ncdcSettingName
 
+    -- * KeyedAppState
+    , KeyedAppState
+    , keyedAppState
+    , kasData
+    , kasSeverity
+    , kasKey
+    , kasMessage
+    , kasLastUpdateTime
+    , kasCreateTime
+
     -- * OperationMetadata
     , OperationMetadata
     , operationMetadata
@@ -551,6 +577,9 @@
     , wtName
     , wtPermissions
 
+    -- * KeyedAppStateSeverity
+    , KeyedAppStateSeverity (..)
+
     -- * ComplianceRule
     , ComplianceRule
     , complianceRule
@@ -559,6 +588,12 @@
     , crPackageNamesToDisable
     , crNonComplianceDetailCondition
 
+    -- * ListWebAppsResponse
+    , ListWebAppsResponse
+    , listWebAppsResponse
+    , lwarNextPageToken
+    , lwarWebApps
+
     -- * PasswordRequirements
     , PasswordRequirements
     , passwordRequirements
@@ -628,6 +663,11 @@
     , siAndroidBuildNumber
     , siAndroidVersion
 
+    -- * ApplicationReportingSettings
+    , ApplicationReportingSettings
+    , applicationReportingSettings
+    , arsIncludeRemovedApps
+
     -- * MemoryEventEventType
     , MemoryEventEventType (..)
 
@@ -638,6 +678,23 @@
     , apDescription
     , apPermissionId
 
+    -- * SetupAction
+    , SetupAction
+    , setupAction
+    , saLaunchApp
+    , saTitle
+    , saDescription
+
+    -- * WebApp
+    , WebApp
+    , webApp
+    , waVersionCode
+    , waIcons
+    , waStartURL
+    , waDisplayMode
+    , waName
+    , waTitle
+
     -- * PasswordRequirementsPasswordQuality
     , PasswordRequirementsPasswordQuality (..)
     ) where
@@ -654,4 +711,4 @@
 
 -- | Manage Android devices and apps for your customers
 androidManagementScope :: Proxy '["https://www.googleapis.com/auth/androidmanagement"]
-androidManagementScope = Proxy;
+androidManagementScope = Proxy
diff --git a/gen/Network/Google/AndroidManagement/Types/Product.hs b/gen/Network/Google/AndroidManagement/Types/Product.hs
--- a/gen/Network/Google/AndroidManagement/Types/Product.hs
+++ b/gen/Network/Google/AndroidManagement/Types/Product.hs
@@ -56,5652 +56,6291 @@
 -- 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])
+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
+
+-- | An action to launch an app.
+--
+-- /See:/ 'launchAppAction' smart constructor.
+newtype LaunchAppAction =
+  LaunchAppAction'
+    { _laaPackageName :: Maybe Text
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'LaunchAppAction' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'laaPackageName'
+launchAppAction
+    :: LaunchAppAction
+launchAppAction = LaunchAppAction' {_laaPackageName = Nothing}
+
+
+-- | Package name of app to be launched
+laaPackageName :: Lens' LaunchAppAction (Maybe Text)
+laaPackageName
+  = lens _laaPackageName
+      (\ s a -> s{_laaPackageName = a})
+
+instance FromJSON LaunchAppAction where
+        parseJSON
+          = withObject "LaunchAppAction"
+              (\ o -> LaunchAppAction' <$> (o .:? "packageName"))
+
+instance ToJSON LaunchAppAction where
+        toJSON LaunchAppAction'{..}
+          = object
+              (catMaybes [("packageName" .=) <$> _laaPackageName])
+
+-- | 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)
+    , _arKeyedAppStates             :: !(Maybe [KeyedAppState])
+    , _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'
+--
+-- * 'arKeyedAppStates'
+--
+-- * 'arApplicationSource'
+--
+-- * 'arEvents'
+--
+-- * 'arDisplayName'
+--
+-- * 'arInstallerPackageName'
+applicationReport
+    :: ApplicationReport
+applicationReport =
+  ApplicationReport'
+    { _arVersionCode = Nothing
+    , _arSigningKeyCertFingerprints = Nothing
+    , _arState = Nothing
+    , _arVersionName = Nothing
+    , _arPackageName = Nothing
+    , _arPackageSha256Hash = Nothing
+    , _arKeyedAppStates = 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})
+
+-- | List of keyed app states reported by the app.
+arKeyedAppStates :: Lens' ApplicationReport [KeyedAppState]
+arKeyedAppStates
+  = lens _arKeyedAppStates
+      (\ s a -> s{_arKeyedAppStates = a})
+      . _Default
+      . _Coerce
+
+-- | 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 .:? "keyedAppStates" .!= mempty)
+                     <*> (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,
+                  ("keyedAppStates" .=) <$> _arKeyedAppStates,
+                  ("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)
+    , _srsApplicationReportingSettings :: !(Maybe ApplicationReportingSettings)
+    }
+  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'
+--
+-- * 'srsApplicationReportingSettings'
+statusReportingSettings
+    :: StatusReportingSettings
+statusReportingSettings =
+  StatusReportingSettings'
+    { _srsSoftwareInfoEnabled = Nothing
+    , _srsHardwareStatusEnabled = Nothing
+    , _srsPowerManagementEventsEnabled = Nothing
+    , _srsDisplayInfoEnabled = Nothing
+    , _srsApplicationReportsEnabled = Nothing
+    , _srsMemoryInfoEnabled = Nothing
+    , _srsNetworkInfoEnabled = Nothing
+    , _srsDeviceSettingsEnabled = Nothing
+    , _srsApplicationReportingSettings = 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})
+
+-- | Application reporting settings. Only applicable if
+-- application_reports_enabled is true.
+srsApplicationReportingSettings :: Lens' StatusReportingSettings (Maybe ApplicationReportingSettings)
+srsApplicationReportingSettings
+  = lens _srsApplicationReportingSettings
+      (\ s a -> s{_srsApplicationReportingSettings = 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")
+                     <*> (o .:? "applicationReportingSettings"))
+
+instance ToJSON StatusReportingSettings where
+        toJSON StatusReportingSettings'{..}
+          = object
+              (catMaybes
+                 [("softwareInfoEnabled" .=) <$>
+                    _srsSoftwareInfoEnabled,
+                  ("hardwareStatusEnabled" .=) <$>
+                    _srsHardwareStatusEnabled,
+                  ("powerManagementEventsEnabled" .=) <$>
+                    _srsPowerManagementEventsEnabled,
+                  ("displayInfoEnabled" .=) <$> _srsDisplayInfoEnabled,
+                  ("applicationReportsEnabled" .=) <$>
+                    _srsApplicationReportsEnabled,
+                  ("memoryInfoEnabled" .=) <$> _srsMemoryInfoEnabled,
+                  ("networkInfoEnabled" .=) <$> _srsNetworkInfoEnabled,
+                  ("deviceSettingsEnabled" .=) <$>
+                    _srsDeviceSettingsEnabled,
+                  ("applicationReportingSettings" .=) <$>
+                    _srsApplicationReportingSettings])
+
+-- | An icon for a web app. Supported formats are: png, jpg and webp.
+--
+-- /See:/ 'webAppIcon' smart constructor.
+newtype WebAppIcon =
+  WebAppIcon'
+    { _waiImageData :: Maybe Text
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'WebAppIcon' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'waiImageData'
+webAppIcon
+    :: WebAppIcon
+webAppIcon = WebAppIcon' {_waiImageData = Nothing}
+
+
+-- | The actual bytes of the image in a base64url encoded string (c.f.
+-- RFC4648, section 5 \"Base 64 Encoding with URL and Filename Safe
+-- Alphabet\").
+--
+-- -   The image type can be png or jpg.
+-- -   The image should ideally be square.
+-- -   The image should ideally have a size of 512x512.
+waiImageData :: Lens' WebAppIcon (Maybe Text)
+waiImageData
+  = lens _waiImageData (\ s a -> s{_waiImageData = a})
+
+instance FromJSON WebAppIcon where
+        parseJSON
+          = withObject "WebAppIcon"
+              (\ o -> WebAppIcon' <$> (o .:? "imageData"))
+
+instance ToJSON WebAppIcon where
+        toJSON WebAppIcon'{..}
+          = object
+              (catMaybes [("imageData" .=) <$> _waiImageData])
+
+-- | 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)
+    , _pSetupActions                       :: !(Maybe [SetupAction])
+    , _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'
+--
+-- * 'pSetupActions'
+--
+-- * '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
+    , _pSetupActions = 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})
+
+-- | DEPRECATED - Use wifi_config_disabled.
+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})
+
+-- | Actions to take during the setup process.
+pSetupActions :: Lens' Policy [SetupAction]
+pSetupActions
+  = lens _pSetupActions
+      (\ s a -> s{_pSetupActions = a})
+      . _Default
+      . _Coerce
+
+-- | 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 .:? "setupActions" .!= mempty)
+                     <*> (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,
+                  ("setupActions" .=) <$> _pSetupActions,
+                  ("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])
+
+-- | Keyed app state reported by the app.
+--
+-- /See:/ 'keyedAppState' smart constructor.
+data KeyedAppState =
+  KeyedAppState'
+    { _kasData           :: !(Maybe Text)
+    , _kasSeverity       :: !(Maybe KeyedAppStateSeverity)
+    , _kasKey            :: !(Maybe Text)
+    , _kasMessage        :: !(Maybe Text)
+    , _kasLastUpdateTime :: !(Maybe DateTime')
+    , _kasCreateTime     :: !(Maybe DateTime')
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'KeyedAppState' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'kasData'
+--
+-- * 'kasSeverity'
+--
+-- * 'kasKey'
+--
+-- * 'kasMessage'
+--
+-- * 'kasLastUpdateTime'
+--
+-- * 'kasCreateTime'
+keyedAppState
+    :: KeyedAppState
+keyedAppState =
+  KeyedAppState'
+    { _kasData = Nothing
+    , _kasSeverity = Nothing
+    , _kasKey = Nothing
+    , _kasMessage = Nothing
+    , _kasLastUpdateTime = Nothing
+    , _kasCreateTime = Nothing
+    }
+
+
+-- | Optionally, a machine-readable value to be read by the EMM. For example,
+-- setting values that the admin can choose to query against in the EMM
+-- console (e.g. “notify me if the battery_warning data \< 10”).
+kasData :: Lens' KeyedAppState (Maybe Text)
+kasData = lens _kasData (\ s a -> s{_kasData = a})
+
+-- | The severity of the app state.
+kasSeverity :: Lens' KeyedAppState (Maybe KeyedAppStateSeverity)
+kasSeverity
+  = lens _kasSeverity (\ s a -> s{_kasSeverity = a})
+
+-- | The key for the app state. Acts as a point of reference for what the app
+-- is providing state for. For example, when providing managed
+-- configuration feedback, this key could be the managed configuration key.
+kasKey :: Lens' KeyedAppState (Maybe Text)
+kasKey = lens _kasKey (\ s a -> s{_kasKey = a})
+
+-- | Optionally, a free-form message string to explain the app state. If the
+-- state was triggered by a particular value (e.g. a managed configuration
+-- value), it should be included in the message.
+kasMessage :: Lens' KeyedAppState (Maybe Text)
+kasMessage
+  = lens _kasMessage (\ s a -> s{_kasMessage = a})
+
+-- | The time the app state was most recently updated.
+kasLastUpdateTime :: Lens' KeyedAppState (Maybe UTCTime)
+kasLastUpdateTime
+  = lens _kasLastUpdateTime
+      (\ s a -> s{_kasLastUpdateTime = a})
+      . mapping _DateTime
+
+-- | The creation time of the app state on the device.
+kasCreateTime :: Lens' KeyedAppState (Maybe UTCTime)
+kasCreateTime
+  = lens _kasCreateTime
+      (\ s a -> s{_kasCreateTime = a})
+      . mapping _DateTime
+
+instance FromJSON KeyedAppState where
+        parseJSON
+          = withObject "KeyedAppState"
+              (\ o ->
+                 KeyedAppState' <$>
+                   (o .:? "data") <*> (o .:? "severity") <*>
+                     (o .:? "key")
+                     <*> (o .:? "message")
+                     <*> (o .:? "lastUpdateTime")
+                     <*> (o .:? "createTime"))
+
+instance ToJSON KeyedAppState where
+        toJSON KeyedAppState'{..}
+          = object
+              (catMaybes
+                 [("data" .=) <$> _kasData,
+                  ("severity" .=) <$> _kasSeverity,
+                  ("key" .=) <$> _kasKey,
+                  ("message" .=) <$> _kasMessage,
+                  ("lastUpdateTime" .=) <$> _kasLastUpdateTime,
+                  ("createTime" .=) <$> _kasCreateTime])
+
+-- | 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])
+
+-- | Response to a request to list web apps for a given enterprise.
+--
+-- /See:/ 'listWebAppsResponse' smart constructor.
+data ListWebAppsResponse =
+  ListWebAppsResponse'
+    { _lwarNextPageToken :: !(Maybe Text)
+    , _lwarWebApps       :: !(Maybe [WebApp])
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ListWebAppsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lwarNextPageToken'
+--
+-- * 'lwarWebApps'
+listWebAppsResponse
+    :: ListWebAppsResponse
+listWebAppsResponse =
+  ListWebAppsResponse' {_lwarNextPageToken = Nothing, _lwarWebApps = Nothing}
+
+
+-- | If there are more results, a token to retrieve next page of results.
+lwarNextPageToken :: Lens' ListWebAppsResponse (Maybe Text)
+lwarNextPageToken
+  = lens _lwarNextPageToken
+      (\ s a -> s{_lwarNextPageToken = a})
+
+-- | The list of web apps.
+lwarWebApps :: Lens' ListWebAppsResponse [WebApp]
+lwarWebApps
+  = lens _lwarWebApps (\ s a -> s{_lwarWebApps = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON ListWebAppsResponse where
+        parseJSON
+          = withObject "ListWebAppsResponse"
+              (\ o ->
+                 ListWebAppsResponse' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "webApps" .!= mempty))
+
+instance ToJSON ListWebAppsResponse where
+        toJSON ListWebAppsResponse'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _lwarNextPageToken,
+                  ("webApps" .=) <$> _lwarWebApps])
+
+-- | 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])
+
+-- | Settings controlling the behavior of application reports.
+--
+-- /See:/ 'applicationReportingSettings' smart constructor.
+newtype ApplicationReportingSettings =
+  ApplicationReportingSettings'
+    { _arsIncludeRemovedApps :: Maybe Bool
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ApplicationReportingSettings' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'arsIncludeRemovedApps'
+applicationReportingSettings
+    :: ApplicationReportingSettings
+applicationReportingSettings =
+  ApplicationReportingSettings' {_arsIncludeRemovedApps = Nothing}
+
+
+-- | Whether removed apps are included in application reports.
+arsIncludeRemovedApps :: Lens' ApplicationReportingSettings (Maybe Bool)
+arsIncludeRemovedApps
+  = lens _arsIncludeRemovedApps
+      (\ s a -> s{_arsIncludeRemovedApps = a})
+
+instance FromJSON ApplicationReportingSettings where
+        parseJSON
+          = withObject "ApplicationReportingSettings"
+              (\ o ->
+                 ApplicationReportingSettings' <$>
+                   (o .:? "includeRemovedApps"))
+
+instance ToJSON ApplicationReportingSettings where
+        toJSON ApplicationReportingSettings'{..}
+          = object
+              (catMaybes
+                 [("includeRemovedApps" .=) <$>
+                    _arsIncludeRemovedApps])
+
+-- | 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])
+
+-- | An action executed during setup.
+--
+-- /See:/ 'setupAction' smart constructor.
+data SetupAction =
+  SetupAction'
+    { _saLaunchApp   :: !(Maybe LaunchAppAction)
+    , _saTitle       :: !(Maybe UserFacingMessage)
+    , _saDescription :: !(Maybe UserFacingMessage)
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'SetupAction' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'saLaunchApp'
+--
+-- * 'saTitle'
+--
+-- * 'saDescription'
+setupAction
+    :: SetupAction
+setupAction =
+  SetupAction'
+    {_saLaunchApp = Nothing, _saTitle = Nothing, _saDescription = Nothing}
+
+
+-- | An action to launch an app.
+saLaunchApp :: Lens' SetupAction (Maybe LaunchAppAction)
+saLaunchApp
+  = lens _saLaunchApp (\ s a -> s{_saLaunchApp = a})
+
+-- | Title of this action.
+saTitle :: Lens' SetupAction (Maybe UserFacingMessage)
+saTitle = lens _saTitle (\ s a -> s{_saTitle = a})
+
+-- | Description of this action.
+saDescription :: Lens' SetupAction (Maybe UserFacingMessage)
+saDescription
+  = lens _saDescription
+      (\ s a -> s{_saDescription = a})
+
+instance FromJSON SetupAction where
+        parseJSON
+          = withObject "SetupAction"
+              (\ o ->
+                 SetupAction' <$>
+                   (o .:? "launchApp") <*> (o .:? "title") <*>
+                     (o .:? "description"))
+
+instance ToJSON SetupAction where
+        toJSON SetupAction'{..}
+          = object
+              (catMaybes
+                 [("launchApp" .=) <$> _saLaunchApp,
+                  ("title" .=) <$> _saTitle,
+                  ("description" .=) <$> _saDescription])
+
+-- | A web app.
+--
+-- /See:/ 'webApp' smart constructor.
+data WebApp =
+  WebApp'
+    { _waVersionCode :: !(Maybe (Textual Int64))
+    , _waIcons       :: !(Maybe [WebAppIcon])
+    , _waStartURL    :: !(Maybe Text)
+    , _waDisplayMode :: !(Maybe WebAppDisplayMode)
+    , _waName        :: !(Maybe Text)
+    , _waTitle       :: !(Maybe Text)
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'WebApp' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'waVersionCode'
+--
+-- * 'waIcons'
+--
+-- * 'waStartURL'
+--
+-- * 'waDisplayMode'
+--
+-- * 'waName'
+--
+-- * 'waTitle'
+webApp
+    :: WebApp
+webApp =
+  WebApp'
+    { _waVersionCode = Nothing
+    , _waIcons = Nothing
+    , _waStartURL = Nothing
+    , _waDisplayMode = Nothing
+    , _waName = Nothing
+    , _waTitle = Nothing
+    }
+
+
+-- | The current version of the app.
+--
+-- Note that the version can automatically increase during the lifetime of
+-- the web app, while Google does internal housekeeping to keep the web app
+-- up-to-date.
+waVersionCode :: Lens' WebApp (Maybe Int64)
+waVersionCode
+  = lens _waVersionCode
+      (\ s a -> s{_waVersionCode = a})
+      . mapping _Coerce
+
+-- | A list of icons for the web app. Must have at least one element.
+waIcons :: Lens' WebApp [WebAppIcon]
+waIcons
+  = lens _waIcons (\ s a -> s{_waIcons = a}) . _Default
+      . _Coerce
+
+-- | The start URL, i.e. the URL that should load when the user opens the
+-- application.
+waStartURL :: Lens' WebApp (Maybe Text)
+waStartURL
+  = lens _waStartURL (\ s a -> s{_waStartURL = a})
+
+-- | The display mode of the web app.
+waDisplayMode :: Lens' WebApp (Maybe WebAppDisplayMode)
+waDisplayMode
+  = lens _waDisplayMode
+      (\ s a -> s{_waDisplayMode = a})
+
+-- | The name of the web app, which is generated by the server during
+-- creation in the form
+-- enterprises\/{enterpriseId}\/webApps\/{packageName}.
+waName :: Lens' WebApp (Maybe Text)
+waName = lens _waName (\ s a -> s{_waName = a})
+
+-- | The title of the web app as displayed to the user (e.g., amongst a list
+-- of other applications, or as a label for an icon).
+waTitle :: Lens' WebApp (Maybe Text)
+waTitle = lens _waTitle (\ s a -> s{_waTitle = a})
+
+instance FromJSON WebApp where
+        parseJSON
+          = withObject "WebApp"
+              (\ o ->
+                 WebApp' <$>
+                   (o .:? "versionCode") <*> (o .:? "icons" .!= mempty)
+                     <*> (o .:? "startUrl")
+                     <*> (o .:? "displayMode")
+                     <*> (o .:? "name")
+                     <*> (o .:? "title"))
+
+instance ToJSON WebApp where
+        toJSON WebApp'{..}
+          = object
+              (catMaybes
+                 [("versionCode" .=) <$> _waVersionCode,
+                  ("icons" .=) <$> _waIcons,
+                  ("startUrl" .=) <$> _waStartURL,
+                  ("displayMode" .=) <$> _waDisplayMode,
+                  ("name" .=) <$> _waName, ("title" .=) <$> _waTitle])
diff --git a/gen/Network/Google/AndroidManagement/Types/Sum.hs b/gen/Network/Google/AndroidManagement/Types/Sum.hs
--- a/gen/Network/Google/AndroidManagement/Types/Sum.hs
+++ b/gen/Network/Google/AndroidManagement/Types/Sum.hs
@@ -320,7 +320,7 @@
     | 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.
+      -- should be explicitly marked as \'BLOCKED\' in the applications policy.
       deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
 
 instance Hashable PolicyPlayStoreMode
@@ -380,6 +380,51 @@
 instance ToJSON DeviceManagementMode where
     toJSON = toJSONText
 
+-- | The display mode of the web app.
+data WebAppDisplayMode
+    = DisplayModeUnspecified
+      -- ^ @DISPLAY_MODE_UNSPECIFIED@
+      -- Not used.
+    | MinimalUi
+      -- ^ @MINIMAL_UI@
+      -- Opens the web app with a minimal set of browser UI elements for
+      -- controlling navigation and viewing the page URL.
+    | Standalone
+      -- ^ @STANDALONE@
+      -- Opens the web app to look and feel like a standalone native application.
+      -- The browser UI elements and page URL are not visible, however the system
+      -- status bar and back button are visible.
+    | FullScreen
+      -- ^ @FULL_SCREEN@
+      -- Opens the web app in full screen without any visible controls. The
+      -- browser UI elements, page URL, system status bar and back button are not
+      -- visible, and the web app takes up the entirety of the available display
+      -- area.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable WebAppDisplayMode
+
+instance FromHttpApiData WebAppDisplayMode where
+    parseQueryParam = \case
+        "DISPLAY_MODE_UNSPECIFIED" -> Right DisplayModeUnspecified
+        "MINIMAL_UI" -> Right MinimalUi
+        "STANDALONE" -> Right Standalone
+        "FULL_SCREEN" -> Right FullScreen
+        x -> Left ("Unable to parse WebAppDisplayMode from: " <> x)
+
+instance ToHttpApiData WebAppDisplayMode where
+    toQueryParam = \case
+        DisplayModeUnspecified -> "DISPLAY_MODE_UNSPECIFIED"
+        MinimalUi -> "MINIMAL_UI"
+        Standalone -> "STANDALONE"
+        FullScreen -> "FULL_SCREEN"
+
+instance FromJSON WebAppDisplayMode where
+    parseJSON = parseJSONText "WebAppDisplayMode"
+
+instance ToJSON WebAppDisplayMode where
+    toJSON = toJSONText
+
 -- | The source of the package.
 data ApplicationReportApplicationSource
     = ApplicationSourceUnspecified
@@ -437,6 +482,10 @@
     | Available
       -- ^ @AVAILABLE@
       -- The app is available to install.
+    | RequiredForSetup
+      -- ^ @REQUIRED_FOR_SETUP@
+      -- The app is automatically installed and can\'t be removed by the user and
+      -- will prevent setup from completion until installation is complete.
       deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
 
 instance Hashable ApplicationPolicyInstallType
@@ -448,6 +497,7 @@
         "FORCE_INSTALLED" -> Right ForceInstalled
         "BLOCKED" -> Right Blocked
         "AVAILABLE" -> Right Available
+        "REQUIRED_FOR_SETUP" -> Right RequiredForSetup
         x -> Left ("Unable to parse ApplicationPolicyInstallType from: " <> x)
 
 instance ToHttpApiData ApplicationPolicyInstallType where
@@ -457,6 +507,7 @@
         ForceInstalled -> "FORCE_INSTALLED"
         Blocked -> "BLOCKED"
         Available -> "AVAILABLE"
+        RequiredForSetup -> "REQUIRED_FOR_SETUP"
 
 instance FromJSON ApplicationPolicyInstallType where
     parseJSON = parseJSONText "ApplicationPolicyInstallType"
@@ -1161,6 +1212,41 @@
     parseJSON = parseJSONText "PolicyDefaultPermissionPolicy"
 
 instance ToJSON PolicyDefaultPermissionPolicy where
+    toJSON = toJSONText
+
+-- | The severity of the app state.
+data KeyedAppStateSeverity
+    = SeverityUnspecified
+      -- ^ @SEVERITY_UNSPECIFIED@
+      -- Unspecified severity level.
+    | Info
+      -- ^ @INFO@
+      -- Information severity level.
+    | Error'
+      -- ^ @ERROR@
+      -- Error severity level. This should only be set for genuine error
+      -- conditions that a management organization needs to take action to fix.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable KeyedAppStateSeverity
+
+instance FromHttpApiData KeyedAppStateSeverity where
+    parseQueryParam = \case
+        "SEVERITY_UNSPECIFIED" -> Right SeverityUnspecified
+        "INFO" -> Right Info
+        "ERROR" -> Right Error'
+        x -> Left ("Unable to parse KeyedAppStateSeverity from: " <> x)
+
+instance ToHttpApiData KeyedAppStateSeverity where
+    toQueryParam = \case
+        SeverityUnspecified -> "SEVERITY_UNSPECIFIED"
+        Info -> "INFO"
+        Error' -> "ERROR"
+
+instance FromJSON KeyedAppStateSeverity where
+    parseJSON = parseJSONText "KeyedAppStateSeverity"
+
+instance ToJSON KeyedAppStateSeverity where
     toJSON = toJSONText
 
 -- | Application state.
diff --git a/gen/Network/Google/Resource/AndroidManagement/Enterprises/Applications/Get.hs b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Applications/Get.hs
--- a/gen/Network/Google/Resource/AndroidManagement/Enterprises/Applications/Get.hs
+++ b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Applications/Get.hs
@@ -61,7 +61,8 @@
 -- | Gets info about an application.
 --
 -- /See:/ 'enterprisesApplicationsGet' smart constructor.
-data EnterprisesApplicationsGet = EnterprisesApplicationsGet'
+data EnterprisesApplicationsGet =
+  EnterprisesApplicationsGet'
     { _eagXgafv          :: !(Maybe Xgafv)
     , _eagLanguageCode   :: !(Maybe Text)
     , _eagUploadProtocol :: !(Maybe Text)
@@ -69,8 +70,10 @@
     , _eagUploadType     :: !(Maybe Text)
     , _eagName           :: !Text
     , _eagCallback       :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
+    }
+  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:
@@ -92,7 +95,7 @@
     :: Text -- ^ 'eagName'
     -> EnterprisesApplicationsGet
 enterprisesApplicationsGet pEagName_ =
-    EnterprisesApplicationsGet'
+  EnterprisesApplicationsGet'
     { _eagXgafv = Nothing
     , _eagLanguageCode = Nothing
     , _eagUploadProtocol = Nothing
@@ -101,6 +104,7 @@
     , _eagName = pEagName_
     , _eagCallback = Nothing
     }
+
 
 -- | V1 error format.
 eagXgafv :: Lens' EnterprisesApplicationsGet (Maybe Xgafv)
diff --git a/gen/Network/Google/Resource/AndroidManagement/Enterprises/Create.hs b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Create.hs
--- a/gen/Network/Google/Resource/AndroidManagement/Enterprises/Create.hs
+++ b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Create.hs
@@ -68,7 +68,8 @@
 -- flow.
 --
 -- /See:/ 'enterprisesCreate' smart constructor.
-data EnterprisesCreate = EnterprisesCreate'
+data EnterprisesCreate =
+  EnterprisesCreate'
     { _ecXgafv           :: !(Maybe Xgafv)
     , _ecSignupURLName   :: !(Maybe Text)
     , _ecUploadProtocol  :: !(Maybe Text)
@@ -78,8 +79,10 @@
     , _ecProjectId       :: !(Maybe Text)
     , _ecEnterpriseToken :: !(Maybe Text)
     , _ecCallback        :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
+    }
+  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:
@@ -105,7 +108,7 @@
     :: Enterprise -- ^ 'ecPayload'
     -> EnterprisesCreate
 enterprisesCreate pEcPayload_ =
-    EnterprisesCreate'
+  EnterprisesCreate'
     { _ecXgafv = Nothing
     , _ecSignupURLName = Nothing
     , _ecUploadProtocol = Nothing
@@ -116,6 +119,7 @@
     , _ecEnterpriseToken = Nothing
     , _ecCallback = Nothing
     }
+
 
 -- | V1 error format.
 ecXgafv :: Lens' EnterprisesCreate (Maybe Xgafv)
diff --git a/gen/Network/Google/Resource/AndroidManagement/Enterprises/Devices/Delete.hs b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Devices/Delete.hs
--- a/gen/Network/Google/Resource/AndroidManagement/Enterprises/Devices/Delete.hs
+++ b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Devices/Delete.hs
@@ -61,7 +61,8 @@
 -- | Deletes a device. This operation wipes the device.
 --
 -- /See:/ 'enterprisesDevicesDelete' smart constructor.
-data EnterprisesDevicesDelete = EnterprisesDevicesDelete'
+data EnterprisesDevicesDelete =
+  EnterprisesDevicesDelete'
     { _eddXgafv          :: !(Maybe Xgafv)
     , _eddWipeDataFlags  :: !(Maybe [Text])
     , _eddUploadProtocol :: !(Maybe Text)
@@ -69,8 +70,10 @@
     , _eddUploadType     :: !(Maybe Text)
     , _eddName           :: !Text
     , _eddCallback       :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
+    }
+  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:
@@ -92,7 +95,7 @@
     :: Text -- ^ 'eddName'
     -> EnterprisesDevicesDelete
 enterprisesDevicesDelete pEddName_ =
-    EnterprisesDevicesDelete'
+  EnterprisesDevicesDelete'
     { _eddXgafv = Nothing
     , _eddWipeDataFlags = Nothing
     , _eddUploadProtocol = Nothing
@@ -101,6 +104,7 @@
     , _eddName = pEddName_
     , _eddCallback = Nothing
     }
+
 
 -- | V1 error format.
 eddXgafv :: Lens' EnterprisesDevicesDelete (Maybe Xgafv)
diff --git a/gen/Network/Google/Resource/AndroidManagement/Enterprises/Devices/Get.hs b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Devices/Get.hs
--- a/gen/Network/Google/Resource/AndroidManagement/Enterprises/Devices/Get.hs
+++ b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Devices/Get.hs
@@ -59,15 +59,18 @@
 -- | Gets a device.
 --
 -- /See:/ 'enterprisesDevicesGet' smart constructor.
-data EnterprisesDevicesGet = EnterprisesDevicesGet'
+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)
+    }
+  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:
@@ -87,7 +90,7 @@
     :: Text -- ^ 'edgName'
     -> EnterprisesDevicesGet
 enterprisesDevicesGet pEdgName_ =
-    EnterprisesDevicesGet'
+  EnterprisesDevicesGet'
     { _edgXgafv = Nothing
     , _edgUploadProtocol = Nothing
     , _edgAccessToken = Nothing
@@ -95,6 +98,7 @@
     , _edgName = pEdgName_
     , _edgCallback = Nothing
     }
+
 
 -- | V1 error format.
 edgXgafv :: Lens' EnterprisesDevicesGet (Maybe Xgafv)
diff --git a/gen/Network/Google/Resource/AndroidManagement/Enterprises/Devices/IssueCommand.hs b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Devices/IssueCommand.hs
--- a/gen/Network/Google/Resource/AndroidManagement/Enterprises/Devices/IssueCommand.hs
+++ b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Devices/IssueCommand.hs
@@ -65,7 +65,8 @@
 -- status of the command.
 --
 -- /See:/ 'enterprisesDevicesIssueCommand' smart constructor.
-data EnterprisesDevicesIssueCommand = EnterprisesDevicesIssueCommand'
+data EnterprisesDevicesIssueCommand =
+  EnterprisesDevicesIssueCommand'
     { _edicXgafv          :: !(Maybe Xgafv)
     , _edicUploadProtocol :: !(Maybe Text)
     , _edicAccessToken    :: !(Maybe Text)
@@ -73,8 +74,10 @@
     , _edicPayload        :: !Command
     , _edicName           :: !Text
     , _edicCallback       :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
+    }
+  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:
@@ -97,7 +100,7 @@
     -> Text -- ^ 'edicName'
     -> EnterprisesDevicesIssueCommand
 enterprisesDevicesIssueCommand pEdicPayload_ pEdicName_ =
-    EnterprisesDevicesIssueCommand'
+  EnterprisesDevicesIssueCommand'
     { _edicXgafv = Nothing
     , _edicUploadProtocol = Nothing
     , _edicAccessToken = Nothing
@@ -106,6 +109,7 @@
     , _edicName = pEdicName_
     , _edicCallback = Nothing
     }
+
 
 -- | V1 error format.
 edicXgafv :: Lens' EnterprisesDevicesIssueCommand (Maybe Xgafv)
diff --git a/gen/Network/Google/Resource/AndroidManagement/Enterprises/Devices/List.hs b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Devices/List.hs
--- a/gen/Network/Google/Resource/AndroidManagement/Enterprises/Devices/List.hs
+++ b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Devices/List.hs
@@ -65,7 +65,8 @@
 -- | Lists devices for a given enterprise.
 --
 -- /See:/ 'enterprisesDevicesList' smart constructor.
-data EnterprisesDevicesList = EnterprisesDevicesList'
+data EnterprisesDevicesList =
+  EnterprisesDevicesList'
     { _edlParent         :: !Text
     , _edlXgafv          :: !(Maybe Xgafv)
     , _edlUploadProtocol :: !(Maybe Text)
@@ -74,8 +75,10 @@
     , _edlPageToken      :: !(Maybe Text)
     , _edlPageSize       :: !(Maybe (Textual Int32))
     , _edlCallback       :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
+    }
+  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:
@@ -99,7 +102,7 @@
     :: Text -- ^ 'edlParent'
     -> EnterprisesDevicesList
 enterprisesDevicesList pEdlParent_ =
-    EnterprisesDevicesList'
+  EnterprisesDevicesList'
     { _edlParent = pEdlParent_
     , _edlXgafv = Nothing
     , _edlUploadProtocol = Nothing
@@ -109,6 +112,7 @@
     , _edlPageSize = Nothing
     , _edlCallback = Nothing
     }
+
 
 -- | The name of the enterprise in the form enterprises\/{enterpriseId}.
 edlParent :: Lens' EnterprisesDevicesList Text
diff --git a/gen/Network/Google/Resource/AndroidManagement/Enterprises/Devices/Operations/Cancel.hs b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Devices/Operations/Cancel.hs
--- a/gen/Network/Google/Resource/AndroidManagement/Enterprises/Devices/Operations/Cancel.hs
+++ b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Devices/Operations/Cancel.hs
@@ -75,15 +75,18 @@
 -- 1, corresponding to Code.CANCELLED.
 --
 -- /See:/ 'enterprisesDevicesOperationsCancel' smart constructor.
-data EnterprisesDevicesOperationsCancel = EnterprisesDevicesOperationsCancel'
+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)
+    }
+  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:
@@ -103,7 +106,7 @@
     :: Text -- ^ 'edocName'
     -> EnterprisesDevicesOperationsCancel
 enterprisesDevicesOperationsCancel pEdocName_ =
-    EnterprisesDevicesOperationsCancel'
+  EnterprisesDevicesOperationsCancel'
     { _edocXgafv = Nothing
     , _edocUploadProtocol = Nothing
     , _edocAccessToken = Nothing
@@ -112,6 +115,7 @@
     , _edocCallback = Nothing
     }
 
+
 -- | V1 error format.
 edocXgafv :: Lens' EnterprisesDevicesOperationsCancel (Maybe Xgafv)
 edocXgafv
@@ -145,7 +149,8 @@
   = lens _edocCallback (\ s a -> s{_edocCallback = a})
 
 instance GoogleRequest
-         EnterprisesDevicesOperationsCancel where
+           EnterprisesDevicesOperationsCancel
+         where
         type Rs EnterprisesDevicesOperationsCancel = Empty
         type Scopes EnterprisesDevicesOperationsCancel =
              '["https://www.googleapis.com/auth/androidmanagement"]
diff --git a/gen/Network/Google/Resource/AndroidManagement/Enterprises/Devices/Operations/Delete.hs b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Devices/Operations/Delete.hs
--- a/gen/Network/Google/Resource/AndroidManagement/Enterprises/Devices/Operations/Delete.hs
+++ b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Devices/Operations/Delete.hs
@@ -65,15 +65,18 @@
 -- google.rpc.Code.UNIMPLEMENTED.
 --
 -- /See:/ 'enterprisesDevicesOperationsDelete' smart constructor.
-data EnterprisesDevicesOperationsDelete = EnterprisesDevicesOperationsDelete'
+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)
+    }
+  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:
@@ -93,7 +96,7 @@
     :: Text -- ^ 'edodName'
     -> EnterprisesDevicesOperationsDelete
 enterprisesDevicesOperationsDelete pEdodName_ =
-    EnterprisesDevicesOperationsDelete'
+  EnterprisesDevicesOperationsDelete'
     { _edodXgafv = Nothing
     , _edodUploadProtocol = Nothing
     , _edodAccessToken = Nothing
@@ -102,6 +105,7 @@
     , _edodCallback = Nothing
     }
 
+
 -- | V1 error format.
 edodXgafv :: Lens' EnterprisesDevicesOperationsDelete (Maybe Xgafv)
 edodXgafv
@@ -135,7 +139,8 @@
   = lens _edodCallback (\ s a -> s{_edodCallback = a})
 
 instance GoogleRequest
-         EnterprisesDevicesOperationsDelete where
+           EnterprisesDevicesOperationsDelete
+         where
         type Rs EnterprisesDevicesOperationsDelete = Empty
         type Scopes EnterprisesDevicesOperationsDelete =
              '["https://www.googleapis.com/auth/androidmanagement"]
diff --git a/gen/Network/Google/Resource/AndroidManagement/Enterprises/Devices/Operations/Get.hs b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Devices/Operations/Get.hs
--- a/gen/Network/Google/Resource/AndroidManagement/Enterprises/Devices/Operations/Get.hs
+++ b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Devices/Operations/Get.hs
@@ -63,15 +63,18 @@
 -- API service.
 --
 -- /See:/ 'enterprisesDevicesOperationsGet' smart constructor.
-data EnterprisesDevicesOperationsGet = EnterprisesDevicesOperationsGet'
+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)
+    }
+  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:
@@ -91,7 +94,7 @@
     :: Text -- ^ 'edogName'
     -> EnterprisesDevicesOperationsGet
 enterprisesDevicesOperationsGet pEdogName_ =
-    EnterprisesDevicesOperationsGet'
+  EnterprisesDevicesOperationsGet'
     { _edogXgafv = Nothing
     , _edogUploadProtocol = Nothing
     , _edogAccessToken = Nothing
@@ -100,6 +103,7 @@
     , _edogCallback = Nothing
     }
 
+
 -- | V1 error format.
 edogXgafv :: Lens' EnterprisesDevicesOperationsGet (Maybe Xgafv)
 edogXgafv
@@ -133,7 +137,8 @@
   = lens _edogCallback (\ s a -> s{_edogCallback = a})
 
 instance GoogleRequest
-         EnterprisesDevicesOperationsGet where
+           EnterprisesDevicesOperationsGet
+         where
         type Rs EnterprisesDevicesOperationsGet = Operation
         type Scopes EnterprisesDevicesOperationsGet =
              '["https://www.googleapis.com/auth/androidmanagement"]
diff --git a/gen/Network/Google/Resource/AndroidManagement/Enterprises/Devices/Operations/List.hs b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Devices/Operations/List.hs
--- a/gen/Network/Google/Resource/AndroidManagement/Enterprises/Devices/Operations/List.hs
+++ b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Devices/Operations/List.hs
@@ -82,7 +82,8 @@
 -- the parent resource, without the operations collection id.
 --
 -- /See:/ 'enterprisesDevicesOperationsList' smart constructor.
-data EnterprisesDevicesOperationsList = EnterprisesDevicesOperationsList'
+data EnterprisesDevicesOperationsList =
+  EnterprisesDevicesOperationsList'
     { _edolXgafv          :: !(Maybe Xgafv)
     , _edolUploadProtocol :: !(Maybe Text)
     , _edolAccessToken    :: !(Maybe Text)
@@ -92,8 +93,10 @@
     , _edolPageToken      :: !(Maybe Text)
     , _edolPageSize       :: !(Maybe (Textual Int32))
     , _edolCallback       :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
+    }
+  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:
@@ -119,7 +122,7 @@
     :: Text -- ^ 'edolName'
     -> EnterprisesDevicesOperationsList
 enterprisesDevicesOperationsList pEdolName_ =
-    EnterprisesDevicesOperationsList'
+  EnterprisesDevicesOperationsList'
     { _edolXgafv = Nothing
     , _edolUploadProtocol = Nothing
     , _edolAccessToken = Nothing
@@ -131,6 +134,7 @@
     , _edolCallback = Nothing
     }
 
+
 -- | V1 error format.
 edolXgafv :: Lens' EnterprisesDevicesOperationsList (Maybe Xgafv)
 edolXgafv
@@ -181,7 +185,8 @@
   = lens _edolCallback (\ s a -> s{_edolCallback = a})
 
 instance GoogleRequest
-         EnterprisesDevicesOperationsList where
+           EnterprisesDevicesOperationsList
+         where
         type Rs EnterprisesDevicesOperationsList =
              ListOperationsResponse
         type Scopes EnterprisesDevicesOperationsList =
diff --git a/gen/Network/Google/Resource/AndroidManagement/Enterprises/Devices/Patch.hs b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Devices/Patch.hs
--- a/gen/Network/Google/Resource/AndroidManagement/Enterprises/Devices/Patch.hs
+++ b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Devices/Patch.hs
@@ -63,7 +63,8 @@
 -- | Updates a device.
 --
 -- /See:/ 'enterprisesDevicesPatch' smart constructor.
-data EnterprisesDevicesPatch = EnterprisesDevicesPatch'
+data EnterprisesDevicesPatch =
+  EnterprisesDevicesPatch'
     { _edpXgafv          :: !(Maybe Xgafv)
     , _edpUploadProtocol :: !(Maybe Text)
     , _edpUpdateMask     :: !(Maybe GFieldMask)
@@ -72,8 +73,10 @@
     , _edpPayload        :: !Device
     , _edpName           :: !Text
     , _edpCallback       :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
+    }
+  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:
@@ -98,7 +101,7 @@
     -> Text -- ^ 'edpName'
     -> EnterprisesDevicesPatch
 enterprisesDevicesPatch pEdpPayload_ pEdpName_ =
-    EnterprisesDevicesPatch'
+  EnterprisesDevicesPatch'
     { _edpXgafv = Nothing
     , _edpUploadProtocol = Nothing
     , _edpUpdateMask = Nothing
@@ -108,6 +111,7 @@
     , _edpName = pEdpName_
     , _edpCallback = Nothing
     }
+
 
 -- | V1 error format.
 edpXgafv :: Lens' EnterprisesDevicesPatch (Maybe Xgafv)
diff --git a/gen/Network/Google/Resource/AndroidManagement/Enterprises/EnrollmentTokens/Create.hs b/gen/Network/Google/Resource/AndroidManagement/Enterprises/EnrollmentTokens/Create.hs
--- a/gen/Network/Google/Resource/AndroidManagement/Enterprises/EnrollmentTokens/Create.hs
+++ b/gen/Network/Google/Resource/AndroidManagement/Enterprises/EnrollmentTokens/Create.hs
@@ -63,7 +63,8 @@
 -- | Creates an enrollment token for a given enterprise.
 --
 -- /See:/ 'enterprisesEnrollmentTokensCreate' smart constructor.
-data EnterprisesEnrollmentTokensCreate = EnterprisesEnrollmentTokensCreate'
+data EnterprisesEnrollmentTokensCreate =
+  EnterprisesEnrollmentTokensCreate'
     { _eetcParent         :: !Text
     , _eetcXgafv          :: !(Maybe Xgafv)
     , _eetcUploadProtocol :: !(Maybe Text)
@@ -71,8 +72,10 @@
     , _eetcUploadType     :: !(Maybe Text)
     , _eetcPayload        :: !EnrollmentToken
     , _eetcCallback       :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
+    }
+  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:
@@ -95,7 +98,7 @@
     -> EnrollmentToken -- ^ 'eetcPayload'
     -> EnterprisesEnrollmentTokensCreate
 enterprisesEnrollmentTokensCreate pEetcParent_ pEetcPayload_ =
-    EnterprisesEnrollmentTokensCreate'
+  EnterprisesEnrollmentTokensCreate'
     { _eetcParent = pEetcParent_
     , _eetcXgafv = Nothing
     , _eetcUploadProtocol = Nothing
@@ -105,6 +108,7 @@
     , _eetcCallback = Nothing
     }
 
+
 -- | The name of the enterprise in the form enterprises\/{enterpriseId}.
 eetcParent :: Lens' EnterprisesEnrollmentTokensCreate Text
 eetcParent
@@ -144,7 +148,8 @@
   = lens _eetcCallback (\ s a -> s{_eetcCallback = a})
 
 instance GoogleRequest
-         EnterprisesEnrollmentTokensCreate where
+           EnterprisesEnrollmentTokensCreate
+         where
         type Rs EnterprisesEnrollmentTokensCreate =
              EnrollmentToken
         type Scopes EnterprisesEnrollmentTokensCreate =
diff --git a/gen/Network/Google/Resource/AndroidManagement/Enterprises/EnrollmentTokens/Delete.hs b/gen/Network/Google/Resource/AndroidManagement/Enterprises/EnrollmentTokens/Delete.hs
--- a/gen/Network/Google/Resource/AndroidManagement/Enterprises/EnrollmentTokens/Delete.hs
+++ b/gen/Network/Google/Resource/AndroidManagement/Enterprises/EnrollmentTokens/Delete.hs
@@ -61,15 +61,18 @@
 -- preventing its future use.
 --
 -- /See:/ 'enterprisesEnrollmentTokensDelete' smart constructor.
-data EnterprisesEnrollmentTokensDelete = EnterprisesEnrollmentTokensDelete'
+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)
+    }
+  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:
@@ -89,7 +92,7 @@
     :: Text -- ^ 'eetdName'
     -> EnterprisesEnrollmentTokensDelete
 enterprisesEnrollmentTokensDelete pEetdName_ =
-    EnterprisesEnrollmentTokensDelete'
+  EnterprisesEnrollmentTokensDelete'
     { _eetdXgafv = Nothing
     , _eetdUploadProtocol = Nothing
     , _eetdAccessToken = Nothing
@@ -98,6 +101,7 @@
     , _eetdCallback = Nothing
     }
 
+
 -- | V1 error format.
 eetdXgafv :: Lens' EnterprisesEnrollmentTokensDelete (Maybe Xgafv)
 eetdXgafv
@@ -132,7 +136,8 @@
   = lens _eetdCallback (\ s a -> s{_eetdCallback = a})
 
 instance GoogleRequest
-         EnterprisesEnrollmentTokensDelete where
+           EnterprisesEnrollmentTokensDelete
+         where
         type Rs EnterprisesEnrollmentTokensDelete = Empty
         type Scopes EnterprisesEnrollmentTokensDelete =
              '["https://www.googleapis.com/auth/androidmanagement"]
diff --git a/gen/Network/Google/Resource/AndroidManagement/Enterprises/Get.hs b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Get.hs
--- a/gen/Network/Google/Resource/AndroidManagement/Enterprises/Get.hs
+++ b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Get.hs
@@ -59,15 +59,18 @@
 -- | Gets an enterprise.
 --
 -- /See:/ 'enterprisesGet' smart constructor.
-data EnterprisesGet = EnterprisesGet'
+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)
+    }
+  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:
@@ -87,7 +90,7 @@
     :: Text -- ^ 'egName'
     -> EnterprisesGet
 enterprisesGet pEgName_ =
-    EnterprisesGet'
+  EnterprisesGet'
     { _egXgafv = Nothing
     , _egUploadProtocol = Nothing
     , _egAccessToken = Nothing
@@ -95,6 +98,7 @@
     , _egName = pEgName_
     , _egCallback = Nothing
     }
+
 
 -- | V1 error format.
 egXgafv :: Lens' EnterprisesGet (Maybe Xgafv)
diff --git a/gen/Network/Google/Resource/AndroidManagement/Enterprises/Patch.hs b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Patch.hs
--- a/gen/Network/Google/Resource/AndroidManagement/Enterprises/Patch.hs
+++ b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Patch.hs
@@ -64,7 +64,8 @@
 -- | Updates an enterprise.
 --
 -- /See:/ 'enterprisesPatch' smart constructor.
-data EnterprisesPatch = EnterprisesPatch'
+data EnterprisesPatch =
+  EnterprisesPatch'
     { _epXgafv          :: !(Maybe Xgafv)
     , _epUploadProtocol :: !(Maybe Text)
     , _epUpdateMask     :: !(Maybe GFieldMask)
@@ -73,8 +74,10 @@
     , _epPayload        :: !Enterprise
     , _epName           :: !Text
     , _epCallback       :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
+    }
+  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:
@@ -99,7 +102,7 @@
     -> Text -- ^ 'epName'
     -> EnterprisesPatch
 enterprisesPatch pEpPayload_ pEpName_ =
-    EnterprisesPatch'
+  EnterprisesPatch'
     { _epXgafv = Nothing
     , _epUploadProtocol = Nothing
     , _epUpdateMask = Nothing
@@ -109,6 +112,7 @@
     , _epName = pEpName_
     , _epCallback = Nothing
     }
+
 
 -- | V1 error format.
 epXgafv :: Lens' EnterprisesPatch (Maybe Xgafv)
diff --git a/gen/Network/Google/Resource/AndroidManagement/Enterprises/Policies/Delete.hs b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Policies/Delete.hs
--- a/gen/Network/Google/Resource/AndroidManagement/Enterprises/Policies/Delete.hs
+++ b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Policies/Delete.hs
@@ -61,15 +61,18 @@
 -- currently referencing the policy.
 --
 -- /See:/ 'enterprisesPoliciesDelete' smart constructor.
-data EnterprisesPoliciesDelete = EnterprisesPoliciesDelete'
+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)
+    }
+  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:
@@ -89,7 +92,7 @@
     :: Text -- ^ 'epdName'
     -> EnterprisesPoliciesDelete
 enterprisesPoliciesDelete pEpdName_ =
-    EnterprisesPoliciesDelete'
+  EnterprisesPoliciesDelete'
     { _epdXgafv = Nothing
     , _epdUploadProtocol = Nothing
     , _epdAccessToken = Nothing
@@ -97,6 +100,7 @@
     , _epdName = pEpdName_
     , _epdCallback = Nothing
     }
+
 
 -- | V1 error format.
 epdXgafv :: Lens' EnterprisesPoliciesDelete (Maybe Xgafv)
diff --git a/gen/Network/Google/Resource/AndroidManagement/Enterprises/Policies/Get.hs b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Policies/Get.hs
--- a/gen/Network/Google/Resource/AndroidManagement/Enterprises/Policies/Get.hs
+++ b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Policies/Get.hs
@@ -59,15 +59,18 @@
 -- | Gets a policy.
 --
 -- /See:/ 'enterprisesPoliciesGet' smart constructor.
-data EnterprisesPoliciesGet = EnterprisesPoliciesGet'
+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)
+    }
+  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:
@@ -87,7 +90,7 @@
     :: Text -- ^ 'epgName'
     -> EnterprisesPoliciesGet
 enterprisesPoliciesGet pEpgName_ =
-    EnterprisesPoliciesGet'
+  EnterprisesPoliciesGet'
     { _epgXgafv = Nothing
     , _epgUploadProtocol = Nothing
     , _epgAccessToken = Nothing
@@ -95,6 +98,7 @@
     , _epgName = pEpgName_
     , _epgCallback = Nothing
     }
+
 
 -- | V1 error format.
 epgXgafv :: Lens' EnterprisesPoliciesGet (Maybe Xgafv)
diff --git a/gen/Network/Google/Resource/AndroidManagement/Enterprises/Policies/List.hs b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Policies/List.hs
--- a/gen/Network/Google/Resource/AndroidManagement/Enterprises/Policies/List.hs
+++ b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Policies/List.hs
@@ -65,7 +65,8 @@
 -- | Lists policies for a given enterprise.
 --
 -- /See:/ 'enterprisesPoliciesList' smart constructor.
-data EnterprisesPoliciesList = EnterprisesPoliciesList'
+data EnterprisesPoliciesList =
+  EnterprisesPoliciesList'
     { _eplParent         :: !Text
     , _eplXgafv          :: !(Maybe Xgafv)
     , _eplUploadProtocol :: !(Maybe Text)
@@ -74,8 +75,10 @@
     , _eplPageToken      :: !(Maybe Text)
     , _eplPageSize       :: !(Maybe (Textual Int32))
     , _eplCallback       :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
+    }
+  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:
@@ -99,7 +102,7 @@
     :: Text -- ^ 'eplParent'
     -> EnterprisesPoliciesList
 enterprisesPoliciesList pEplParent_ =
-    EnterprisesPoliciesList'
+  EnterprisesPoliciesList'
     { _eplParent = pEplParent_
     , _eplXgafv = Nothing
     , _eplUploadProtocol = Nothing
@@ -109,6 +112,7 @@
     , _eplPageSize = Nothing
     , _eplCallback = Nothing
     }
+
 
 -- | The name of the enterprise in the form enterprises\/{enterpriseId}.
 eplParent :: Lens' EnterprisesPoliciesList Text
diff --git a/gen/Network/Google/Resource/AndroidManagement/Enterprises/Policies/Patch.hs b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Policies/Patch.hs
--- a/gen/Network/Google/Resource/AndroidManagement/Enterprises/Policies/Patch.hs
+++ b/gen/Network/Google/Resource/AndroidManagement/Enterprises/Policies/Patch.hs
@@ -63,7 +63,8 @@
 -- | Updates or creates a policy.
 --
 -- /See:/ 'enterprisesPoliciesPatch' smart constructor.
-data EnterprisesPoliciesPatch = EnterprisesPoliciesPatch'
+data EnterprisesPoliciesPatch =
+  EnterprisesPoliciesPatch'
     { _eppXgafv          :: !(Maybe Xgafv)
     , _eppUploadProtocol :: !(Maybe Text)
     , _eppUpdateMask     :: !(Maybe GFieldMask)
@@ -72,8 +73,10 @@
     , _eppPayload        :: !Policy
     , _eppName           :: !Text
     , _eppCallback       :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
+    }
+  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:
@@ -98,7 +101,7 @@
     -> Text -- ^ 'eppName'
     -> EnterprisesPoliciesPatch
 enterprisesPoliciesPatch pEppPayload_ pEppName_ =
-    EnterprisesPoliciesPatch'
+  EnterprisesPoliciesPatch'
     { _eppXgafv = Nothing
     , _eppUploadProtocol = Nothing
     , _eppUpdateMask = Nothing
@@ -108,6 +111,7 @@
     , _eppName = pEppName_
     , _eppCallback = Nothing
     }
+
 
 -- | V1 error format.
 eppXgafv :: Lens' EnterprisesPoliciesPatch (Maybe Xgafv)
diff --git a/gen/Network/Google/Resource/AndroidManagement/Enterprises/WebApps/Create.hs b/gen/Network/Google/Resource/AndroidManagement/Enterprises/WebApps/Create.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidManagement/Enterprises/WebApps/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.WebApps.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 app.
+--
+-- /See:/ <https://developers.google.com/android/management Android Management API Reference> for @androidmanagement.enterprises.webApps.create@.
+module Network.Google.Resource.AndroidManagement.Enterprises.WebApps.Create
+    (
+    -- * REST Resource
+      EnterprisesWebAppsCreateResource
+
+    -- * Creating a Request
+    , enterprisesWebAppsCreate
+    , EnterprisesWebAppsCreate
+
+    -- * Request Lenses
+    , ewacParent
+    , ewacXgafv
+    , ewacUploadProtocol
+    , ewacAccessToken
+    , ewacUploadType
+    , ewacPayload
+    , ewacCallback
+    ) where
+
+import           Network.Google.AndroidManagement.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidmanagement.enterprises.webApps.create@ method which the
+-- 'EnterprisesWebAppsCreate' request conforms to.
+type EnterprisesWebAppsCreateResource =
+     "v1" :>
+       Capture "parent" Text :>
+         "webApps" :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "callback" Text :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON] WebApp :> Post '[JSON] WebApp
+
+-- | Creates a web app.
+--
+-- /See:/ 'enterprisesWebAppsCreate' smart constructor.
+data EnterprisesWebAppsCreate =
+  EnterprisesWebAppsCreate'
+    { _ewacParent         :: !Text
+    , _ewacXgafv          :: !(Maybe Xgafv)
+    , _ewacUploadProtocol :: !(Maybe Text)
+    , _ewacAccessToken    :: !(Maybe Text)
+    , _ewacUploadType     :: !(Maybe Text)
+    , _ewacPayload        :: !WebApp
+    , _ewacCallback       :: !(Maybe Text)
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'EnterprisesWebAppsCreate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ewacParent'
+--
+-- * 'ewacXgafv'
+--
+-- * 'ewacUploadProtocol'
+--
+-- * 'ewacAccessToken'
+--
+-- * 'ewacUploadType'
+--
+-- * 'ewacPayload'
+--
+-- * 'ewacCallback'
+enterprisesWebAppsCreate
+    :: Text -- ^ 'ewacParent'
+    -> WebApp -- ^ 'ewacPayload'
+    -> EnterprisesWebAppsCreate
+enterprisesWebAppsCreate pEwacParent_ pEwacPayload_ =
+  EnterprisesWebAppsCreate'
+    { _ewacParent = pEwacParent_
+    , _ewacXgafv = Nothing
+    , _ewacUploadProtocol = Nothing
+    , _ewacAccessToken = Nothing
+    , _ewacUploadType = Nothing
+    , _ewacPayload = pEwacPayload_
+    , _ewacCallback = Nothing
+    }
+
+
+-- | The name of the enterprise in the form enterprises\/{enterpriseId}.
+ewacParent :: Lens' EnterprisesWebAppsCreate Text
+ewacParent
+  = lens _ewacParent (\ s a -> s{_ewacParent = a})
+
+-- | V1 error format.
+ewacXgafv :: Lens' EnterprisesWebAppsCreate (Maybe Xgafv)
+ewacXgafv
+  = lens _ewacXgafv (\ s a -> s{_ewacXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+ewacUploadProtocol :: Lens' EnterprisesWebAppsCreate (Maybe Text)
+ewacUploadProtocol
+  = lens _ewacUploadProtocol
+      (\ s a -> s{_ewacUploadProtocol = a})
+
+-- | OAuth access token.
+ewacAccessToken :: Lens' EnterprisesWebAppsCreate (Maybe Text)
+ewacAccessToken
+  = lens _ewacAccessToken
+      (\ s a -> s{_ewacAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+ewacUploadType :: Lens' EnterprisesWebAppsCreate (Maybe Text)
+ewacUploadType
+  = lens _ewacUploadType
+      (\ s a -> s{_ewacUploadType = a})
+
+-- | Multipart request metadata.
+ewacPayload :: Lens' EnterprisesWebAppsCreate WebApp
+ewacPayload
+  = lens _ewacPayload (\ s a -> s{_ewacPayload = a})
+
+-- | JSONP
+ewacCallback :: Lens' EnterprisesWebAppsCreate (Maybe Text)
+ewacCallback
+  = lens _ewacCallback (\ s a -> s{_ewacCallback = a})
+
+instance GoogleRequest EnterprisesWebAppsCreate where
+        type Rs EnterprisesWebAppsCreate = WebApp
+        type Scopes EnterprisesWebAppsCreate =
+             '["https://www.googleapis.com/auth/androidmanagement"]
+        requestClient EnterprisesWebAppsCreate'{..}
+          = go _ewacParent _ewacXgafv _ewacUploadProtocol
+              _ewacAccessToken
+              _ewacUploadType
+              _ewacCallback
+              (Just AltJSON)
+              _ewacPayload
+              androidManagementService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy EnterprisesWebAppsCreateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidManagement/Enterprises/WebApps/Delete.hs b/gen/Network/Google/Resource/AndroidManagement/Enterprises/WebApps/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidManagement/Enterprises/WebApps/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.WebApps.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 web app.
+--
+-- /See:/ <https://developers.google.com/android/management Android Management API Reference> for @androidmanagement.enterprises.webApps.delete@.
+module Network.Google.Resource.AndroidManagement.Enterprises.WebApps.Delete
+    (
+    -- * REST Resource
+      EnterprisesWebAppsDeleteResource
+
+    -- * Creating a Request
+    , enterprisesWebAppsDelete
+    , EnterprisesWebAppsDelete
+
+    -- * Request Lenses
+    , ewadXgafv
+    , ewadUploadProtocol
+    , ewadAccessToken
+    , ewadUploadType
+    , ewadName
+    , ewadCallback
+    ) where
+
+import           Network.Google.AndroidManagement.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidmanagement.enterprises.webApps.delete@ method which the
+-- 'EnterprisesWebAppsDelete' request conforms to.
+type EnterprisesWebAppsDeleteResource =
+     "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 web app.
+--
+-- /See:/ 'enterprisesWebAppsDelete' smart constructor.
+data EnterprisesWebAppsDelete =
+  EnterprisesWebAppsDelete'
+    { _ewadXgafv          :: !(Maybe Xgafv)
+    , _ewadUploadProtocol :: !(Maybe Text)
+    , _ewadAccessToken    :: !(Maybe Text)
+    , _ewadUploadType     :: !(Maybe Text)
+    , _ewadName           :: !Text
+    , _ewadCallback       :: !(Maybe Text)
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'EnterprisesWebAppsDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ewadXgafv'
+--
+-- * 'ewadUploadProtocol'
+--
+-- * 'ewadAccessToken'
+--
+-- * 'ewadUploadType'
+--
+-- * 'ewadName'
+--
+-- * 'ewadCallback'
+enterprisesWebAppsDelete
+    :: Text -- ^ 'ewadName'
+    -> EnterprisesWebAppsDelete
+enterprisesWebAppsDelete pEwadName_ =
+  EnterprisesWebAppsDelete'
+    { _ewadXgafv = Nothing
+    , _ewadUploadProtocol = Nothing
+    , _ewadAccessToken = Nothing
+    , _ewadUploadType = Nothing
+    , _ewadName = pEwadName_
+    , _ewadCallback = Nothing
+    }
+
+
+-- | V1 error format.
+ewadXgafv :: Lens' EnterprisesWebAppsDelete (Maybe Xgafv)
+ewadXgafv
+  = lens _ewadXgafv (\ s a -> s{_ewadXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+ewadUploadProtocol :: Lens' EnterprisesWebAppsDelete (Maybe Text)
+ewadUploadProtocol
+  = lens _ewadUploadProtocol
+      (\ s a -> s{_ewadUploadProtocol = a})
+
+-- | OAuth access token.
+ewadAccessToken :: Lens' EnterprisesWebAppsDelete (Maybe Text)
+ewadAccessToken
+  = lens _ewadAccessToken
+      (\ s a -> s{_ewadAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+ewadUploadType :: Lens' EnterprisesWebAppsDelete (Maybe Text)
+ewadUploadType
+  = lens _ewadUploadType
+      (\ s a -> s{_ewadUploadType = a})
+
+-- | The name of the web app in the form
+-- enterprises\/{enterpriseId}\/webApps\/{packageName}.
+ewadName :: Lens' EnterprisesWebAppsDelete Text
+ewadName = lens _ewadName (\ s a -> s{_ewadName = a})
+
+-- | JSONP
+ewadCallback :: Lens' EnterprisesWebAppsDelete (Maybe Text)
+ewadCallback
+  = lens _ewadCallback (\ s a -> s{_ewadCallback = a})
+
+instance GoogleRequest EnterprisesWebAppsDelete where
+        type Rs EnterprisesWebAppsDelete = Empty
+        type Scopes EnterprisesWebAppsDelete =
+             '["https://www.googleapis.com/auth/androidmanagement"]
+        requestClient EnterprisesWebAppsDelete'{..}
+          = go _ewadName _ewadXgafv _ewadUploadProtocol
+              _ewadAccessToken
+              _ewadUploadType
+              _ewadCallback
+              (Just AltJSON)
+              androidManagementService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy EnterprisesWebAppsDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidManagement/Enterprises/WebApps/Get.hs b/gen/Network/Google/Resource/AndroidManagement/Enterprises/WebApps/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidManagement/Enterprises/WebApps/Get.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.WebApps.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 web app.
+--
+-- /See:/ <https://developers.google.com/android/management Android Management API Reference> for @androidmanagement.enterprises.webApps.get@.
+module Network.Google.Resource.AndroidManagement.Enterprises.WebApps.Get
+    (
+    -- * REST Resource
+      EnterprisesWebAppsGetResource
+
+    -- * Creating a Request
+    , enterprisesWebAppsGet
+    , EnterprisesWebAppsGet
+
+    -- * Request Lenses
+    , ewagXgafv
+    , ewagUploadProtocol
+    , ewagAccessToken
+    , ewagUploadType
+    , ewagName
+    , ewagCallback
+    ) where
+
+import           Network.Google.AndroidManagement.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidmanagement.enterprises.webApps.get@ method which the
+-- 'EnterprisesWebAppsGet' request conforms to.
+type EnterprisesWebAppsGetResource =
+     "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] WebApp
+
+-- | Gets a web app.
+--
+-- /See:/ 'enterprisesWebAppsGet' smart constructor.
+data EnterprisesWebAppsGet =
+  EnterprisesWebAppsGet'
+    { _ewagXgafv          :: !(Maybe Xgafv)
+    , _ewagUploadProtocol :: !(Maybe Text)
+    , _ewagAccessToken    :: !(Maybe Text)
+    , _ewagUploadType     :: !(Maybe Text)
+    , _ewagName           :: !Text
+    , _ewagCallback       :: !(Maybe Text)
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'EnterprisesWebAppsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ewagXgafv'
+--
+-- * 'ewagUploadProtocol'
+--
+-- * 'ewagAccessToken'
+--
+-- * 'ewagUploadType'
+--
+-- * 'ewagName'
+--
+-- * 'ewagCallback'
+enterprisesWebAppsGet
+    :: Text -- ^ 'ewagName'
+    -> EnterprisesWebAppsGet
+enterprisesWebAppsGet pEwagName_ =
+  EnterprisesWebAppsGet'
+    { _ewagXgafv = Nothing
+    , _ewagUploadProtocol = Nothing
+    , _ewagAccessToken = Nothing
+    , _ewagUploadType = Nothing
+    , _ewagName = pEwagName_
+    , _ewagCallback = Nothing
+    }
+
+
+-- | V1 error format.
+ewagXgafv :: Lens' EnterprisesWebAppsGet (Maybe Xgafv)
+ewagXgafv
+  = lens _ewagXgafv (\ s a -> s{_ewagXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+ewagUploadProtocol :: Lens' EnterprisesWebAppsGet (Maybe Text)
+ewagUploadProtocol
+  = lens _ewagUploadProtocol
+      (\ s a -> s{_ewagUploadProtocol = a})
+
+-- | OAuth access token.
+ewagAccessToken :: Lens' EnterprisesWebAppsGet (Maybe Text)
+ewagAccessToken
+  = lens _ewagAccessToken
+      (\ s a -> s{_ewagAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+ewagUploadType :: Lens' EnterprisesWebAppsGet (Maybe Text)
+ewagUploadType
+  = lens _ewagUploadType
+      (\ s a -> s{_ewagUploadType = a})
+
+-- | The name of the web app in the form
+-- enterprises\/{enterpriseId}\/webApp\/{packageName}.
+ewagName :: Lens' EnterprisesWebAppsGet Text
+ewagName = lens _ewagName (\ s a -> s{_ewagName = a})
+
+-- | JSONP
+ewagCallback :: Lens' EnterprisesWebAppsGet (Maybe Text)
+ewagCallback
+  = lens _ewagCallback (\ s a -> s{_ewagCallback = a})
+
+instance GoogleRequest EnterprisesWebAppsGet where
+        type Rs EnterprisesWebAppsGet = WebApp
+        type Scopes EnterprisesWebAppsGet =
+             '["https://www.googleapis.com/auth/androidmanagement"]
+        requestClient EnterprisesWebAppsGet'{..}
+          = go _ewagName _ewagXgafv _ewagUploadProtocol
+              _ewagAccessToken
+              _ewagUploadType
+              _ewagCallback
+              (Just AltJSON)
+              androidManagementService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy EnterprisesWebAppsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidManagement/Enterprises/WebApps/List.hs b/gen/Network/Google/Resource/AndroidManagement/Enterprises/WebApps/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidManagement/Enterprises/WebApps/List.hs
@@ -0,0 +1,179 @@
+{-# 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.WebApps.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 web apps for a given enterprise.
+--
+-- /See:/ <https://developers.google.com/android/management Android Management API Reference> for @androidmanagement.enterprises.webApps.list@.
+module Network.Google.Resource.AndroidManagement.Enterprises.WebApps.List
+    (
+    -- * REST Resource
+      EnterprisesWebAppsListResource
+
+    -- * Creating a Request
+    , enterprisesWebAppsList
+    , EnterprisesWebAppsList
+
+    -- * Request Lenses
+    , ewalParent
+    , ewalXgafv
+    , ewalUploadProtocol
+    , ewalAccessToken
+    , ewalUploadType
+    , ewalPageToken
+    , ewalPageSize
+    , ewalCallback
+    ) where
+
+import           Network.Google.AndroidManagement.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidmanagement.enterprises.webApps.list@ method which the
+-- 'EnterprisesWebAppsList' request conforms to.
+type EnterprisesWebAppsListResource =
+     "v1" :>
+       Capture "parent" Text :>
+         "webApps" :>
+           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] ListWebAppsResponse
+
+-- | Lists web apps for a given enterprise.
+--
+-- /See:/ 'enterprisesWebAppsList' smart constructor.
+data EnterprisesWebAppsList =
+  EnterprisesWebAppsList'
+    { _ewalParent         :: !Text
+    , _ewalXgafv          :: !(Maybe Xgafv)
+    , _ewalUploadProtocol :: !(Maybe Text)
+    , _ewalAccessToken    :: !(Maybe Text)
+    , _ewalUploadType     :: !(Maybe Text)
+    , _ewalPageToken      :: !(Maybe Text)
+    , _ewalPageSize       :: !(Maybe (Textual Int32))
+    , _ewalCallback       :: !(Maybe Text)
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'EnterprisesWebAppsList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ewalParent'
+--
+-- * 'ewalXgafv'
+--
+-- * 'ewalUploadProtocol'
+--
+-- * 'ewalAccessToken'
+--
+-- * 'ewalUploadType'
+--
+-- * 'ewalPageToken'
+--
+-- * 'ewalPageSize'
+--
+-- * 'ewalCallback'
+enterprisesWebAppsList
+    :: Text -- ^ 'ewalParent'
+    -> EnterprisesWebAppsList
+enterprisesWebAppsList pEwalParent_ =
+  EnterprisesWebAppsList'
+    { _ewalParent = pEwalParent_
+    , _ewalXgafv = Nothing
+    , _ewalUploadProtocol = Nothing
+    , _ewalAccessToken = Nothing
+    , _ewalUploadType = Nothing
+    , _ewalPageToken = Nothing
+    , _ewalPageSize = Nothing
+    , _ewalCallback = Nothing
+    }
+
+
+-- | The name of the enterprise in the form enterprises\/{enterpriseId}.
+ewalParent :: Lens' EnterprisesWebAppsList Text
+ewalParent
+  = lens _ewalParent (\ s a -> s{_ewalParent = a})
+
+-- | V1 error format.
+ewalXgafv :: Lens' EnterprisesWebAppsList (Maybe Xgafv)
+ewalXgafv
+  = lens _ewalXgafv (\ s a -> s{_ewalXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+ewalUploadProtocol :: Lens' EnterprisesWebAppsList (Maybe Text)
+ewalUploadProtocol
+  = lens _ewalUploadProtocol
+      (\ s a -> s{_ewalUploadProtocol = a})
+
+-- | OAuth access token.
+ewalAccessToken :: Lens' EnterprisesWebAppsList (Maybe Text)
+ewalAccessToken
+  = lens _ewalAccessToken
+      (\ s a -> s{_ewalAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+ewalUploadType :: Lens' EnterprisesWebAppsList (Maybe Text)
+ewalUploadType
+  = lens _ewalUploadType
+      (\ s a -> s{_ewalUploadType = a})
+
+-- | A token identifying a page of results returned by the server.
+ewalPageToken :: Lens' EnterprisesWebAppsList (Maybe Text)
+ewalPageToken
+  = lens _ewalPageToken
+      (\ s a -> s{_ewalPageToken = a})
+
+-- | The requested page size. The actual page size may be fixed to a min or
+-- max value.
+ewalPageSize :: Lens' EnterprisesWebAppsList (Maybe Int32)
+ewalPageSize
+  = lens _ewalPageSize (\ s a -> s{_ewalPageSize = a})
+      . mapping _Coerce
+
+-- | JSONP
+ewalCallback :: Lens' EnterprisesWebAppsList (Maybe Text)
+ewalCallback
+  = lens _ewalCallback (\ s a -> s{_ewalCallback = a})
+
+instance GoogleRequest EnterprisesWebAppsList where
+        type Rs EnterprisesWebAppsList = ListWebAppsResponse
+        type Scopes EnterprisesWebAppsList =
+             '["https://www.googleapis.com/auth/androidmanagement"]
+        requestClient EnterprisesWebAppsList'{..}
+          = go _ewalParent _ewalXgafv _ewalUploadProtocol
+              _ewalAccessToken
+              _ewalUploadType
+              _ewalPageToken
+              _ewalPageSize
+              _ewalCallback
+              (Just AltJSON)
+              androidManagementService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy EnterprisesWebAppsListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidManagement/Enterprises/WebApps/Patch.hs b/gen/Network/Google/Resource/AndroidManagement/Enterprises/WebApps/Patch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidManagement/Enterprises/WebApps/Patch.hs
@@ -0,0 +1,177 @@
+{-# 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.WebApps.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 web app.
+--
+-- /See:/ <https://developers.google.com/android/management Android Management API Reference> for @androidmanagement.enterprises.webApps.patch@.
+module Network.Google.Resource.AndroidManagement.Enterprises.WebApps.Patch
+    (
+    -- * REST Resource
+      EnterprisesWebAppsPatchResource
+
+    -- * Creating a Request
+    , enterprisesWebAppsPatch
+    , EnterprisesWebAppsPatch
+
+    -- * Request Lenses
+    , ewapXgafv
+    , ewapUploadProtocol
+    , ewapUpdateMask
+    , ewapAccessToken
+    , ewapUploadType
+    , ewapPayload
+    , ewapName
+    , ewapCallback
+    ) where
+
+import           Network.Google.AndroidManagement.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidmanagement.enterprises.webApps.patch@ method which the
+-- 'EnterprisesWebAppsPatch' request conforms to.
+type EnterprisesWebAppsPatchResource =
+     "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] WebApp :> Patch '[JSON] WebApp
+
+-- | Updates a web app.
+--
+-- /See:/ 'enterprisesWebAppsPatch' smart constructor.
+data EnterprisesWebAppsPatch =
+  EnterprisesWebAppsPatch'
+    { _ewapXgafv          :: !(Maybe Xgafv)
+    , _ewapUploadProtocol :: !(Maybe Text)
+    , _ewapUpdateMask     :: !(Maybe GFieldMask)
+    , _ewapAccessToken    :: !(Maybe Text)
+    , _ewapUploadType     :: !(Maybe Text)
+    , _ewapPayload        :: !WebApp
+    , _ewapName           :: !Text
+    , _ewapCallback       :: !(Maybe Text)
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'EnterprisesWebAppsPatch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ewapXgafv'
+--
+-- * 'ewapUploadProtocol'
+--
+-- * 'ewapUpdateMask'
+--
+-- * 'ewapAccessToken'
+--
+-- * 'ewapUploadType'
+--
+-- * 'ewapPayload'
+--
+-- * 'ewapName'
+--
+-- * 'ewapCallback'
+enterprisesWebAppsPatch
+    :: WebApp -- ^ 'ewapPayload'
+    -> Text -- ^ 'ewapName'
+    -> EnterprisesWebAppsPatch
+enterprisesWebAppsPatch pEwapPayload_ pEwapName_ =
+  EnterprisesWebAppsPatch'
+    { _ewapXgafv = Nothing
+    , _ewapUploadProtocol = Nothing
+    , _ewapUpdateMask = Nothing
+    , _ewapAccessToken = Nothing
+    , _ewapUploadType = Nothing
+    , _ewapPayload = pEwapPayload_
+    , _ewapName = pEwapName_
+    , _ewapCallback = Nothing
+    }
+
+
+-- | V1 error format.
+ewapXgafv :: Lens' EnterprisesWebAppsPatch (Maybe Xgafv)
+ewapXgafv
+  = lens _ewapXgafv (\ s a -> s{_ewapXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+ewapUploadProtocol :: Lens' EnterprisesWebAppsPatch (Maybe Text)
+ewapUploadProtocol
+  = lens _ewapUploadProtocol
+      (\ s a -> s{_ewapUploadProtocol = a})
+
+-- | The field mask indicating the fields to update. If not set, all
+-- modifiable fields will be modified.
+ewapUpdateMask :: Lens' EnterprisesWebAppsPatch (Maybe GFieldMask)
+ewapUpdateMask
+  = lens _ewapUpdateMask
+      (\ s a -> s{_ewapUpdateMask = a})
+
+-- | OAuth access token.
+ewapAccessToken :: Lens' EnterprisesWebAppsPatch (Maybe Text)
+ewapAccessToken
+  = lens _ewapAccessToken
+      (\ s a -> s{_ewapAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+ewapUploadType :: Lens' EnterprisesWebAppsPatch (Maybe Text)
+ewapUploadType
+  = lens _ewapUploadType
+      (\ s a -> s{_ewapUploadType = a})
+
+-- | Multipart request metadata.
+ewapPayload :: Lens' EnterprisesWebAppsPatch WebApp
+ewapPayload
+  = lens _ewapPayload (\ s a -> s{_ewapPayload = a})
+
+-- | The name of the web app in the form
+-- enterprises\/{enterpriseId}\/webApps\/{packageName}.
+ewapName :: Lens' EnterprisesWebAppsPatch Text
+ewapName = lens _ewapName (\ s a -> s{_ewapName = a})
+
+-- | JSONP
+ewapCallback :: Lens' EnterprisesWebAppsPatch (Maybe Text)
+ewapCallback
+  = lens _ewapCallback (\ s a -> s{_ewapCallback = a})
+
+instance GoogleRequest EnterprisesWebAppsPatch where
+        type Rs EnterprisesWebAppsPatch = WebApp
+        type Scopes EnterprisesWebAppsPatch =
+             '["https://www.googleapis.com/auth/androidmanagement"]
+        requestClient EnterprisesWebAppsPatch'{..}
+          = go _ewapName _ewapXgafv _ewapUploadProtocol
+              _ewapUpdateMask
+              _ewapAccessToken
+              _ewapUploadType
+              _ewapCallback
+              (Just AltJSON)
+              _ewapPayload
+              androidManagementService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy EnterprisesWebAppsPatchResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidManagement/Enterprises/WebTokens/Create.hs b/gen/Network/Google/Resource/AndroidManagement/Enterprises/WebTokens/Create.hs
--- a/gen/Network/Google/Resource/AndroidManagement/Enterprises/WebTokens/Create.hs
+++ b/gen/Network/Google/Resource/AndroidManagement/Enterprises/WebTokens/Create.hs
@@ -64,7 +64,8 @@
 -- for a given enterprise.
 --
 -- /See:/ 'enterprisesWebTokensCreate' smart constructor.
-data EnterprisesWebTokensCreate = EnterprisesWebTokensCreate'
+data EnterprisesWebTokensCreate =
+  EnterprisesWebTokensCreate'
     { _ewtcParent         :: !Text
     , _ewtcXgafv          :: !(Maybe Xgafv)
     , _ewtcUploadProtocol :: !(Maybe Text)
@@ -72,8 +73,10 @@
     , _ewtcUploadType     :: !(Maybe Text)
     , _ewtcPayload        :: !WebToken
     , _ewtcCallback       :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
+    }
+  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:
@@ -96,7 +99,7 @@
     -> WebToken -- ^ 'ewtcPayload'
     -> EnterprisesWebTokensCreate
 enterprisesWebTokensCreate pEwtcParent_ pEwtcPayload_ =
-    EnterprisesWebTokensCreate'
+  EnterprisesWebTokensCreate'
     { _ewtcParent = pEwtcParent_
     , _ewtcXgafv = Nothing
     , _ewtcUploadProtocol = Nothing
@@ -105,6 +108,7 @@
     , _ewtcPayload = pEwtcPayload_
     , _ewtcCallback = Nothing
     }
+
 
 -- | The name of the enterprise in the form enterprises\/{enterpriseId}.
 ewtcParent :: Lens' EnterprisesWebTokensCreate Text
diff --git a/gen/Network/Google/Resource/AndroidManagement/SignupURLs/Create.hs b/gen/Network/Google/Resource/AndroidManagement/SignupURLs/Create.hs
--- a/gen/Network/Google/Resource/AndroidManagement/SignupURLs/Create.hs
+++ b/gen/Network/Google/Resource/AndroidManagement/SignupURLs/Create.hs
@@ -62,7 +62,8 @@
 -- | Creates an enterprise signup URL.
 --
 -- /See:/ 'signupURLsCreate' smart constructor.
-data SignupURLsCreate = SignupURLsCreate'
+data SignupURLsCreate =
+  SignupURLsCreate'
     { _sucXgafv          :: !(Maybe Xgafv)
     , _sucUploadProtocol :: !(Maybe Text)
     , _sucCallbackURL    :: !(Maybe Text)
@@ -70,8 +71,10 @@
     , _sucUploadType     :: !(Maybe Text)
     , _sucProjectId      :: !(Maybe Text)
     , _sucCallback       :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
+    }
+  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:
@@ -92,7 +95,7 @@
 signupURLsCreate
     :: SignupURLsCreate
 signupURLsCreate =
-    SignupURLsCreate'
+  SignupURLsCreate'
     { _sucXgafv = Nothing
     , _sucUploadProtocol = Nothing
     , _sucCallbackURL = Nothing
@@ -101,6 +104,7 @@
     , _sucProjectId = Nothing
     , _sucCallback = Nothing
     }
+
 
 -- | V1 error format.
 sucXgafv :: Lens' SignupURLsCreate (Maybe Xgafv)
diff --git a/gogol-androidmanagement.cabal b/gogol-androidmanagement.cabal
--- a/gogol-androidmanagement.cabal
+++ b/gogol-androidmanagement.cabal
@@ -1,5 +1,5 @@
 name:                  gogol-androidmanagement
-version:               0.4.0
+version:               0.5.0
 synopsis:              Google Android Management SDK.
 homepage:              https://github.com/brendanhay/gogol
 bug-reports:           https://github.com/brendanhay/gogol/issues
@@ -55,6 +55,11 @@
         , 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.WebApps.Create
+        , Network.Google.Resource.AndroidManagement.Enterprises.WebApps.Delete
+        , Network.Google.Resource.AndroidManagement.Enterprises.WebApps.Get
+        , Network.Google.Resource.AndroidManagement.Enterprises.WebApps.List
+        , Network.Google.Resource.AndroidManagement.Enterprises.WebApps.Patch
         , Network.Google.Resource.AndroidManagement.Enterprises.WebTokens.Create
         , Network.Google.Resource.AndroidManagement.SignupURLs.Create
 
@@ -63,5 +68,5 @@
         , Network.Google.AndroidManagement.Types.Sum
 
     build-depends:
-          gogol-core == 0.4.0.*
+          gogol-core == 0.5.0.*
         , base       >= 4.7 && < 5
