packages feed

gogol-androiddeviceprovisioning-1.0.0: gen/Gogol/AndroidDeviceProvisioning/Internal/Product.hs

{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE ImportQualifiedPost #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE PatternSynonyms #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
{-# OPTIONS_GHC -fno-warn-name-shadowing #-}
{-# OPTIONS_GHC -fno-warn-unused-binds #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}

-- |
-- Module      : Gogol.AndroidDeviceProvisioning.Internal.Product
-- Copyright   : (c) 2015-2025 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay <brendan.g.hay+gogol@gmail.com>
--               Toni Cebrián <toni@tonicebrian.com>
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
module Gogol.AndroidDeviceProvisioning.Internal.Product
  ( -- * ClaimDeviceRequest
    ClaimDeviceRequest (..),
    newClaimDeviceRequest,

    -- * ClaimDeviceResponse
    ClaimDeviceResponse (..),
    newClaimDeviceResponse,

    -- * ClaimDevicesRequest
    ClaimDevicesRequest (..),
    newClaimDevicesRequest,

    -- * Company
    Company (..),
    newCompany,

    -- * Configuration
    Configuration (..),
    newConfiguration,

    -- * CreateCustomerRequest
    CreateCustomerRequest (..),
    newCreateCustomerRequest,

    -- * CustomerApplyConfigurationRequest
    CustomerApplyConfigurationRequest (..),
    newCustomerApplyConfigurationRequest,

    -- * CustomerListConfigurationsResponse
    CustomerListConfigurationsResponse (..),
    newCustomerListConfigurationsResponse,

    -- * CustomerListCustomersResponse
    CustomerListCustomersResponse (..),
    newCustomerListCustomersResponse,

    -- * CustomerListDevicesResponse
    CustomerListDevicesResponse (..),
    newCustomerListDevicesResponse,

    -- * CustomerListDpcsResponse
    CustomerListDpcsResponse (..),
    newCustomerListDpcsResponse,

    -- * CustomerRemoveConfigurationRequest
    CustomerRemoveConfigurationRequest (..),
    newCustomerRemoveConfigurationRequest,

    -- * CustomerUnclaimDeviceRequest
    CustomerUnclaimDeviceRequest (..),
    newCustomerUnclaimDeviceRequest,

    -- * Device
    Device (..),
    newDevice,

    -- * DeviceClaim
    DeviceClaim (..),
    newDeviceClaim,

    -- * DeviceIdentifier
    DeviceIdentifier (..),
    newDeviceIdentifier,

    -- * DeviceMetadata
    DeviceMetadata (..),
    newDeviceMetadata,

    -- * DeviceMetadata_Entries
    DeviceMetadata_Entries (..),
    newDeviceMetadata_Entries,

    -- * DeviceReference
    DeviceReference (..),
    newDeviceReference,

    -- * DevicesLongRunningOperationMetadata
    DevicesLongRunningOperationMetadata (..),
    newDevicesLongRunningOperationMetadata,

    -- * DevicesLongRunningOperationResponse
    DevicesLongRunningOperationResponse (..),
    newDevicesLongRunningOperationResponse,

    -- * Dpc
    Dpc (..),
    newDpc,

    -- * Empty
    Empty (..),
    newEmpty,

    -- * FindDevicesByDeviceIdentifierRequest
    FindDevicesByDeviceIdentifierRequest (..),
    newFindDevicesByDeviceIdentifierRequest,

    -- * FindDevicesByDeviceIdentifierResponse
    FindDevicesByDeviceIdentifierResponse (..),
    newFindDevicesByDeviceIdentifierResponse,

    -- * FindDevicesByOwnerRequest
    FindDevicesByOwnerRequest (..),
    newFindDevicesByOwnerRequest,

    -- * FindDevicesByOwnerResponse
    FindDevicesByOwnerResponse (..),
    newFindDevicesByOwnerResponse,

    -- * GetDeviceSimLockStateRequest
    GetDeviceSimLockStateRequest (..),
    newGetDeviceSimLockStateRequest,

    -- * GetDeviceSimLockStateResponse
    GetDeviceSimLockStateResponse (..),
    newGetDeviceSimLockStateResponse,

    -- * GoogleWorkspaceAccount
    GoogleWorkspaceAccount (..),
    newGoogleWorkspaceAccount,

    -- * ListCustomersResponse
    ListCustomersResponse (..),
    newListCustomersResponse,

    -- * ListVendorCustomersResponse
    ListVendorCustomersResponse (..),
    newListVendorCustomersResponse,

    -- * ListVendorsResponse
    ListVendorsResponse (..),
    newListVendorsResponse,

    -- * Operation
    Operation (..),
    newOperation,

    -- * Operation_Metadata
    Operation_Metadata (..),
    newOperation_Metadata,

    -- * Operation_Response
    Operation_Response (..),
    newOperation_Response,

    -- * OperationPerDevice
    OperationPerDevice (..),
    newOperationPerDevice,

    -- * PartnerClaim
    PartnerClaim (..),
    newPartnerClaim,

    -- * PartnerUnclaim
    PartnerUnclaim (..),
    newPartnerUnclaim,

    -- * PerDeviceStatusInBatch
    PerDeviceStatusInBatch (..),
    newPerDeviceStatusInBatch,

    -- * Status
    Status (..),
    newStatus,

    -- * Status_DetailsItem
    Status_DetailsItem (..),
    newStatus_DetailsItem,

    -- * UnclaimDeviceRequest
    UnclaimDeviceRequest (..),
    newUnclaimDeviceRequest,

    -- * UnclaimDevicesRequest
    UnclaimDevicesRequest (..),
    newUnclaimDevicesRequest,

    -- * UpdateDeviceMetadataInBatchRequest
    UpdateDeviceMetadataInBatchRequest (..),
    newUpdateDeviceMetadataInBatchRequest,

    -- * UpdateDeviceMetadataRequest
    UpdateDeviceMetadataRequest (..),
    newUpdateDeviceMetadataRequest,

    -- * UpdateMetadataArguments
    UpdateMetadataArguments (..),
    newUpdateMetadataArguments,
  )
where

import Gogol.AndroidDeviceProvisioning.Internal.Sum
import Gogol.Prelude qualified as Core

-- | Request message to claim a device on behalf of a customer.
--
-- /See:/ 'newClaimDeviceRequest' smart constructor.
data ClaimDeviceRequest = ClaimDeviceRequest
  { -- | Optional. The ID of the configuration applied to the device section.
    configurationId :: (Core.Maybe Core.Int64),
    -- | The ID of the customer for whom the device is being claimed.
    customerId :: (Core.Maybe Core.Int64),
    -- | Required. Required. The device identifier of the device to claim.
    deviceIdentifier :: (Core.Maybe DeviceIdentifier),
    -- | Optional. The metadata to attach to the device.
    deviceMetadata :: (Core.Maybe DeviceMetadata),
    -- | The Google Workspace customer ID.
    googleWorkspaceCustomerId :: (Core.Maybe Core.Text),
    -- | Optional. Must and can only be set for Chrome OS devices.
    preProvisioningToken :: (Core.Maybe Core.Text),
    -- | Required. The section type of the device\'s provisioning record.
    sectionType :: (Core.Maybe ClaimDeviceRequest_SectionType),
    -- | Optional. Must and can only be set when DeviceProvisioningSectionType is SECTION/TYPE/SIM_LOCK. The unique identifier of the SimLock profile.
    simlockProfileId :: (Core.Maybe Core.Int64)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ClaimDeviceRequest' with the minimum fields required to make a request.
newClaimDeviceRequest ::
  ClaimDeviceRequest
newClaimDeviceRequest =
  ClaimDeviceRequest
    { configurationId = Core.Nothing,
      customerId = Core.Nothing,
      deviceIdentifier = Core.Nothing,
      deviceMetadata = Core.Nothing,
      googleWorkspaceCustomerId = Core.Nothing,
      preProvisioningToken = Core.Nothing,
      sectionType = Core.Nothing,
      simlockProfileId = Core.Nothing
    }

instance Core.FromJSON ClaimDeviceRequest where
  parseJSON =
    Core.withObject
      "ClaimDeviceRequest"
      ( \o ->
          ClaimDeviceRequest
            Core.<$> (o Core..:? "configurationId" Core.<&> Core.fmap Core.fromAsText)
            Core.<*> (o Core..:? "customerId" Core.<&> Core.fmap Core.fromAsText)
            Core.<*> (o Core..:? "deviceIdentifier")
            Core.<*> (o Core..:? "deviceMetadata")
            Core.<*> (o Core..:? "googleWorkspaceCustomerId")
            Core.<*> (o Core..:? "preProvisioningToken")
            Core.<*> (o Core..:? "sectionType")
            Core.<*> (o Core..:? "simlockProfileId" Core.<&> Core.fmap Core.fromAsText)
      )

instance Core.ToJSON ClaimDeviceRequest where
  toJSON ClaimDeviceRequest {..} =
    Core.object
      ( Core.catMaybes
          [ ("configurationId" Core..=)
              Core.. Core.AsText
              Core.<$> configurationId,
            ("customerId" Core..=) Core.. Core.AsText Core.<$> customerId,
            ("deviceIdentifier" Core..=) Core.<$> deviceIdentifier,
            ("deviceMetadata" Core..=) Core.<$> deviceMetadata,
            ("googleWorkspaceCustomerId" Core..=)
              Core.<$> googleWorkspaceCustomerId,
            ("preProvisioningToken" Core..=) Core.<$> preProvisioningToken,
            ("sectionType" Core..=) Core.<$> sectionType,
            ("simlockProfileId" Core..=)
              Core.. Core.AsText
              Core.<$> simlockProfileId
          ]
      )

-- | Response message containing device id of the claim.
--
-- /See:/ 'newClaimDeviceResponse' smart constructor.
data ClaimDeviceResponse = ClaimDeviceResponse
  { -- | The device ID of the claimed device.
    deviceId :: (Core.Maybe Core.Int64),
    -- | The resource name of the device in the format @partners\/[PARTNER_ID]\/devices\/[DEVICE_ID]@.
    deviceName :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ClaimDeviceResponse' with the minimum fields required to make a request.
newClaimDeviceResponse ::
  ClaimDeviceResponse
newClaimDeviceResponse =
  ClaimDeviceResponse
    { deviceId = Core.Nothing,
      deviceName = Core.Nothing
    }

instance Core.FromJSON ClaimDeviceResponse where
  parseJSON =
    Core.withObject
      "ClaimDeviceResponse"
      ( \o ->
          ClaimDeviceResponse
            Core.<$> (o Core..:? "deviceId" Core.<&> Core.fmap Core.fromAsText)
            Core.<*> (o Core..:? "deviceName")
      )

instance Core.ToJSON ClaimDeviceResponse where
  toJSON ClaimDeviceResponse {..} =
    Core.object
      ( Core.catMaybes
          [ ("deviceId" Core..=) Core.. Core.AsText Core.<$> deviceId,
            ("deviceName" Core..=) Core.<$> deviceName
          ]
      )

-- | Request to claim devices asynchronously in batch. Claiming a device adds the device to zero-touch enrollment and shows the device in the customer\'s view of the portal.
--
-- /See:/ 'newClaimDevicesRequest' smart constructor.
newtype ClaimDevicesRequest = ClaimDevicesRequest
  { -- | Required. A list of device claims.
    claims :: (Core.Maybe [PartnerClaim])
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ClaimDevicesRequest' with the minimum fields required to make a request.
newClaimDevicesRequest ::
  ClaimDevicesRequest
newClaimDevicesRequest = ClaimDevicesRequest {claims = Core.Nothing}

instance Core.FromJSON ClaimDevicesRequest where
  parseJSON =
    Core.withObject
      "ClaimDevicesRequest"
      (\o -> ClaimDevicesRequest Core.<$> (o Core..:? "claims"))

instance Core.ToJSON ClaimDevicesRequest where
  toJSON ClaimDevicesRequest {..} =
    Core.object (Core.catMaybes [("claims" Core..=) Core.<$> claims])

-- | A reseller, vendor, or customer in the zero-touch reseller and customer APIs.
--
-- /See:/ 'newCompany' smart constructor.
data Company = Company
  { -- | Optional. Email address of customer\'s users in the admin role. Each email address must be associated with a Google Account.
    adminEmails :: (Core.Maybe [Core.Text]),
    -- | Output only. The ID of the company. Assigned by the server.
    companyId :: (Core.Maybe Core.Int64),
    -- | Required. The name of the company. For example /XYZ Corp/. Displayed to the company\'s employees in the zero-touch enrollment portal.
    companyName :: (Core.Maybe Core.Text),
    -- | Output only. The Google Workspace account associated with this customer. Only used for customer Companies.
    googleWorkspaceAccount :: (Core.Maybe GoogleWorkspaceAccount),
    -- | Input only. The preferred locale of the customer represented as a BCP47 language code. This field is validated on input and requests containing unsupported language codes will be rejected. Supported language codes: Arabic (ar) Chinese (Hong Kong) (zh-HK) Chinese (Simplified) (zh-CN) Chinese (Traditional) (zh-TW) Czech (cs) Danish (da) Dutch (nl) English (UK) (en-GB) English (US) (en-US) Filipino (fil) Finnish (fi) French (fr) German (de) Hebrew (iw) Hindi (hi) Hungarian (hu) Indonesian (id) Italian (it) Japanese (ja) Korean (ko) Norwegian (Bokmal) (no) Polish (pl) Portuguese (Brazil) (pt-BR) Portuguese (Portugal) (pt-PT) Russian (ru) Spanish (es) Spanish (Latin America) (es-419) Swedish (sv) Thai (th) Turkish (tr) Ukrainian (uk) Vietnamese (vi)
    languageCode :: (Core.Maybe Core.Text),
    -- | Output only. The API resource name of the company. The resource name is one of the following formats: * @partners\/[PARTNER_ID]\/customers\/[CUSTOMER_ID]@ * @partners\/[PARTNER_ID]\/vendors\/[VENDOR_ID]@ * @partners\/[PARTNER_ID]\/vendors\/[VENDOR_ID]\/customers\/[CUSTOMER_ID]@ Assigned by the server.
    name :: (Core.Maybe Core.Text),
    -- | Required. Input only. Email address of customer\'s users in the owner role. At least one @owner_email@ is required. Owners share the same access as admins but can also add, delete, and edit your organization\'s portal users.
    ownerEmails :: (Core.Maybe [Core.Text]),
    -- | Input only. If set to true, welcome email will not be sent to the customer. It is recommended to skip the welcome email if devices will be claimed with additional DEVICE_PROTECTION service, as the customer will receive separate emails at device claim time. This field is ignored if this is not a Zero-touch customer.
    skipWelcomeEmail :: (Core.Maybe Core.Bool),
    -- | Output only. Whether any user from the company has accepted the latest Terms of Service (ToS). See TermsStatus.
    termsStatus :: (Core.Maybe Company_TermsStatus)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Company' with the minimum fields required to make a request.
newCompany ::
  Company
newCompany =
  Company
    { adminEmails = Core.Nothing,
      companyId = Core.Nothing,
      companyName = Core.Nothing,
      googleWorkspaceAccount = Core.Nothing,
      languageCode = Core.Nothing,
      name = Core.Nothing,
      ownerEmails = Core.Nothing,
      skipWelcomeEmail = Core.Nothing,
      termsStatus = Core.Nothing
    }

instance Core.FromJSON Company where
  parseJSON =
    Core.withObject
      "Company"
      ( \o ->
          Company
            Core.<$> (o Core..:? "adminEmails")
            Core.<*> (o Core..:? "companyId" Core.<&> Core.fmap Core.fromAsText)
            Core.<*> (o Core..:? "companyName")
            Core.<*> (o Core..:? "googleWorkspaceAccount")
            Core.<*> (o Core..:? "languageCode")
            Core.<*> (o Core..:? "name")
            Core.<*> (o Core..:? "ownerEmails")
            Core.<*> (o Core..:? "skipWelcomeEmail")
            Core.<*> (o Core..:? "termsStatus")
      )

instance Core.ToJSON Company where
  toJSON Company {..} =
    Core.object
      ( Core.catMaybes
          [ ("adminEmails" Core..=) Core.<$> adminEmails,
            ("companyId" Core..=) Core.. Core.AsText Core.<$> companyId,
            ("companyName" Core..=) Core.<$> companyName,
            ("googleWorkspaceAccount" Core..=) Core.<$> googleWorkspaceAccount,
            ("languageCode" Core..=) Core.<$> languageCode,
            ("name" Core..=) Core.<$> name,
            ("ownerEmails" Core..=) Core.<$> ownerEmails,
            ("skipWelcomeEmail" Core..=) Core.<$> skipWelcomeEmail,
            ("termsStatus" Core..=) Core.<$> termsStatus
          ]
      )

-- | A configuration collects the provisioning options for Android devices. Each configuration combines the following: * The EMM device policy controller (DPC) installed on the devices. * EMM policies enforced on the devices. * Metadata displayed on the device to help users during setup. Customers can add as many configurations as they need. However, zero-touch enrollment works best when a customer sets a default configuration that\'s applied to any new devices the organization purchases.
--
-- /See:/ 'newConfiguration' smart constructor.
data Configuration = Configuration
  { -- | Required. The name of the organization. Zero-touch enrollment shows this organization name to device users during device provisioning.
    companyName :: (Core.Maybe Core.Text),
    -- | Output only. The ID of the configuration. Assigned by the server.
    configurationId :: (Core.Maybe Core.Int64),
    -- | Required. A short name that describes the configuration\'s purpose. For example, /Sales team/ or /Temporary employees/. The zero-touch enrollment portal displays this name to IT admins.
    configurationName :: (Core.Maybe Core.Text),
    -- | Required. The email address that device users can contact to get help. Zero-touch enrollment shows this email address to device users before device provisioning. The value is validated on input.
    contactEmail :: (Core.Maybe Core.Text),
    -- | Required. The telephone number that device users can call, using another device, to get help. Zero-touch enrollment shows this number to device users before device provisioning. Accepts numerals, spaces, the plus sign, hyphens, and parentheses.
    contactPhone :: (Core.Maybe Core.Text),
    -- | A message, containing one or two sentences, to help device users get help or give them more details about what’s happening to their device. Zero-touch enrollment shows this message before the device is provisioned.
    customMessage :: (Core.Maybe Core.Text),
    -- | The JSON-formatted EMM provisioning extras that are passed to the DPC.
    dpcExtras :: (Core.Maybe Core.Text),
    -- | Required. The resource name of the selected DPC (device policy controller) in the format @customers\/[CUSTOMER_ID]\/dpcs\/*@. To list the supported DPCs, call @customers.dpcs.list@.
    dpcResourcePath :: (Core.Maybe Core.Text),
    -- | Optional. The timeout before forcing factory reset the device if the device doesn\'t go through provisioning in the setup wizard, usually due to lack of network connectivity during setup wizard. Ranges from 0-6 hours, with 2 hours being the default if unset.
    forcedResetTime :: (Core.Maybe Core.Duration),
    -- | Required. Whether this is the default configuration that zero-touch enrollment applies to any new devices the organization purchases in the future. Only one customer configuration can be the default. Setting this value to @true@, changes the previous default configuration\'s @isDefault@ value to @false@.
    isDefault :: (Core.Maybe Core.Bool),
    -- | Output only. The API resource name in the format @customers\/[CUSTOMER_ID]\/configurations\/[CONFIGURATION_ID]@. Assigned by the server.
    name :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Configuration' with the minimum fields required to make a request.
newConfiguration ::
  Configuration
newConfiguration =
  Configuration
    { companyName = Core.Nothing,
      configurationId = Core.Nothing,
      configurationName = Core.Nothing,
      contactEmail = Core.Nothing,
      contactPhone = Core.Nothing,
      customMessage = Core.Nothing,
      dpcExtras = Core.Nothing,
      dpcResourcePath = Core.Nothing,
      forcedResetTime = Core.Nothing,
      isDefault = Core.Nothing,
      name = Core.Nothing
    }

instance Core.FromJSON Configuration where
  parseJSON =
    Core.withObject
      "Configuration"
      ( \o ->
          Configuration
            Core.<$> (o Core..:? "companyName")
            Core.<*> (o Core..:? "configurationId" Core.<&> Core.fmap Core.fromAsText)
            Core.<*> (o Core..:? "configurationName")
            Core.<*> (o Core..:? "contactEmail")
            Core.<*> (o Core..:? "contactPhone")
            Core.<*> (o Core..:? "customMessage")
            Core.<*> (o Core..:? "dpcExtras")
            Core.<*> (o Core..:? "dpcResourcePath")
            Core.<*> (o Core..:? "forcedResetTime")
            Core.<*> (o Core..:? "isDefault")
            Core.<*> (o Core..:? "name")
      )

instance Core.ToJSON Configuration where
  toJSON Configuration {..} =
    Core.object
      ( Core.catMaybes
          [ ("companyName" Core..=) Core.<$> companyName,
            ("configurationId" Core..=)
              Core.. Core.AsText
              Core.<$> configurationId,
            ("configurationName" Core..=) Core.<$> configurationName,
            ("contactEmail" Core..=) Core.<$> contactEmail,
            ("contactPhone" Core..=) Core.<$> contactPhone,
            ("customMessage" Core..=) Core.<$> customMessage,
            ("dpcExtras" Core..=) Core.<$> dpcExtras,
            ("dpcResourcePath" Core..=) Core.<$> dpcResourcePath,
            ("forcedResetTime" Core..=) Core.<$> forcedResetTime,
            ("isDefault" Core..=) Core.<$> isDefault,
            ("name" Core..=) Core.<$> name
          ]
      )

-- | Request message to create a customer.
--
-- /See:/ 'newCreateCustomerRequest' smart constructor.
newtype CreateCustomerRequest = CreateCustomerRequest
  { -- | Required. The company data to populate the new customer. Must contain a value for @companyName@ and at least one @owner_email@ that\'s associated with a Google Account. The values for @companyId@ and @name@ must be empty.
    customer :: (Core.Maybe Company)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'CreateCustomerRequest' with the minimum fields required to make a request.
newCreateCustomerRequest ::
  CreateCustomerRequest
newCreateCustomerRequest =
  CreateCustomerRequest {customer = Core.Nothing}

instance Core.FromJSON CreateCustomerRequest where
  parseJSON =
    Core.withObject
      "CreateCustomerRequest"
      (\o -> CreateCustomerRequest Core.<$> (o Core..:? "customer"))

instance Core.ToJSON CreateCustomerRequest where
  toJSON CreateCustomerRequest {..} =
    Core.object
      (Core.catMaybes [("customer" Core..=) Core.<$> customer])

-- | Request message for customer to assign a configuration to device.
--
-- /See:/ 'newCustomerApplyConfigurationRequest' smart constructor.
data CustomerApplyConfigurationRequest = CustomerApplyConfigurationRequest
  { -- | Required. The configuration applied to the device in the format @customers\/[CUSTOMER_ID]\/configurations\/[CONFIGURATION_ID]@.
    configuration :: (Core.Maybe Core.Text),
    -- | Required. The device the configuration is applied to. There are custom validations in ApplyConfigurationRequestValidator
    device :: (Core.Maybe DeviceReference)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'CustomerApplyConfigurationRequest' with the minimum fields required to make a request.
newCustomerApplyConfigurationRequest ::
  CustomerApplyConfigurationRequest
newCustomerApplyConfigurationRequest =
  CustomerApplyConfigurationRequest
    { configuration = Core.Nothing,
      device = Core.Nothing
    }

instance Core.FromJSON CustomerApplyConfigurationRequest where
  parseJSON =
    Core.withObject
      "CustomerApplyConfigurationRequest"
      ( \o ->
          CustomerApplyConfigurationRequest
            Core.<$> (o Core..:? "configuration")
            Core.<*> (o Core..:? "device")
      )

instance Core.ToJSON CustomerApplyConfigurationRequest where
  toJSON CustomerApplyConfigurationRequest {..} =
    Core.object
      ( Core.catMaybes
          [ ("configuration" Core..=) Core.<$> configuration,
            ("device" Core..=) Core.<$> device
          ]
      )

-- | Response message of customer\'s listing configuration.
--
-- /See:/ 'newCustomerListConfigurationsResponse' smart constructor.
newtype CustomerListConfigurationsResponse = CustomerListConfigurationsResponse
  { -- | The configurations.
    configurations :: (Core.Maybe [Configuration])
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'CustomerListConfigurationsResponse' with the minimum fields required to make a request.
newCustomerListConfigurationsResponse ::
  CustomerListConfigurationsResponse
newCustomerListConfigurationsResponse =
  CustomerListConfigurationsResponse {configurations = Core.Nothing}

instance Core.FromJSON CustomerListConfigurationsResponse where
  parseJSON =
    Core.withObject
      "CustomerListConfigurationsResponse"
      ( \o ->
          CustomerListConfigurationsResponse
            Core.<$> (o Core..:? "configurations")
      )

instance Core.ToJSON CustomerListConfigurationsResponse where
  toJSON CustomerListConfigurationsResponse {..} =
    Core.object
      ( Core.catMaybes
          [("configurations" Core..=) Core.<$> configurations]
      )

-- | Response message for listing my customers.
--
-- /See:/ 'newCustomerListCustomersResponse' smart constructor.
data CustomerListCustomersResponse = CustomerListCustomersResponse
  { -- | The customer accounts the calling user is a member of.
    customers :: (Core.Maybe [Company]),
    -- | A token used to access the next page of results. Omitted if no further results are available.
    nextPageToken :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'CustomerListCustomersResponse' with the minimum fields required to make a request.
newCustomerListCustomersResponse ::
  CustomerListCustomersResponse
newCustomerListCustomersResponse =
  CustomerListCustomersResponse
    { customers = Core.Nothing,
      nextPageToken = Core.Nothing
    }

instance Core.FromJSON CustomerListCustomersResponse where
  parseJSON =
    Core.withObject
      "CustomerListCustomersResponse"
      ( \o ->
          CustomerListCustomersResponse
            Core.<$> (o Core..:? "customers")
            Core.<*> (o Core..:? "nextPageToken")
      )

instance Core.ToJSON CustomerListCustomersResponse where
  toJSON CustomerListCustomersResponse {..} =
    Core.object
      ( Core.catMaybes
          [ ("customers" Core..=) Core.<$> customers,
            ("nextPageToken" Core..=) Core.<$> nextPageToken
          ]
      )

-- | Response message of customer\'s liting devices.
--
-- /See:/ 'newCustomerListDevicesResponse' smart constructor.
data CustomerListDevicesResponse = CustomerListDevicesResponse
  { -- | The customer\'s devices.
    devices :: (Core.Maybe [Device]),
    -- | A token used to access the next page of results. Omitted if no further results are available.
    nextPageToken :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'CustomerListDevicesResponse' with the minimum fields required to make a request.
newCustomerListDevicesResponse ::
  CustomerListDevicesResponse
newCustomerListDevicesResponse =
  CustomerListDevicesResponse
    { devices = Core.Nothing,
      nextPageToken = Core.Nothing
    }

instance Core.FromJSON CustomerListDevicesResponse where
  parseJSON =
    Core.withObject
      "CustomerListDevicesResponse"
      ( \o ->
          CustomerListDevicesResponse
            Core.<$> (o Core..:? "devices")
            Core.<*> (o Core..:? "nextPageToken")
      )

instance Core.ToJSON CustomerListDevicesResponse where
  toJSON CustomerListDevicesResponse {..} =
    Core.object
      ( Core.catMaybes
          [ ("devices" Core..=) Core.<$> devices,
            ("nextPageToken" Core..=) Core.<$> nextPageToken
          ]
      )

-- | Response message of customer\'s listing DPCs.
--
-- /See:/ 'newCustomerListDpcsResponse' smart constructor.
newtype CustomerListDpcsResponse = CustomerListDpcsResponse
  { -- | The list of DPCs available to the customer that support zero-touch enrollment.
    dpcs :: (Core.Maybe [Dpc])
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'CustomerListDpcsResponse' with the minimum fields required to make a request.
newCustomerListDpcsResponse ::
  CustomerListDpcsResponse
newCustomerListDpcsResponse =
  CustomerListDpcsResponse {dpcs = Core.Nothing}

instance Core.FromJSON CustomerListDpcsResponse where
  parseJSON =
    Core.withObject
      "CustomerListDpcsResponse"
      (\o -> CustomerListDpcsResponse Core.<$> (o Core..:? "dpcs"))

instance Core.ToJSON CustomerListDpcsResponse where
  toJSON CustomerListDpcsResponse {..} =
    Core.object (Core.catMaybes [("dpcs" Core..=) Core.<$> dpcs])

-- | Request message for customer to remove the configuration from device.
--
-- /See:/ 'newCustomerRemoveConfigurationRequest' smart constructor.
newtype CustomerRemoveConfigurationRequest = CustomerRemoveConfigurationRequest
  { -- | Required. The device to remove the configuration from. There are custom validations in RemoveConfigurationRequestValidator
    device :: (Core.Maybe DeviceReference)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'CustomerRemoveConfigurationRequest' with the minimum fields required to make a request.
newCustomerRemoveConfigurationRequest ::
  CustomerRemoveConfigurationRequest
newCustomerRemoveConfigurationRequest =
  CustomerRemoveConfigurationRequest {device = Core.Nothing}

instance Core.FromJSON CustomerRemoveConfigurationRequest where
  parseJSON =
    Core.withObject
      "CustomerRemoveConfigurationRequest"
      ( \o ->
          CustomerRemoveConfigurationRequest Core.<$> (o Core..:? "device")
      )

instance Core.ToJSON CustomerRemoveConfigurationRequest where
  toJSON CustomerRemoveConfigurationRequest {..} =
    Core.object (Core.catMaybes [("device" Core..=) Core.<$> device])

-- | Request message for customer to unclaim a device.
--
-- /See:/ 'newCustomerUnclaimDeviceRequest' smart constructor.
newtype CustomerUnclaimDeviceRequest = CustomerUnclaimDeviceRequest
  { -- | Required. The device to unclaim. There are custom validations in UnclaimDeviceRequestValidator.
    device :: (Core.Maybe DeviceReference)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'CustomerUnclaimDeviceRequest' with the minimum fields required to make a request.
newCustomerUnclaimDeviceRequest ::
  CustomerUnclaimDeviceRequest
newCustomerUnclaimDeviceRequest =
  CustomerUnclaimDeviceRequest {device = Core.Nothing}

instance Core.FromJSON CustomerUnclaimDeviceRequest where
  parseJSON =
    Core.withObject
      "CustomerUnclaimDeviceRequest"
      ( \o ->
          CustomerUnclaimDeviceRequest Core.<$> (o Core..:? "device")
      )

instance Core.ToJSON CustomerUnclaimDeviceRequest where
  toJSON CustomerUnclaimDeviceRequest {..} =
    Core.object (Core.catMaybes [("device" Core..=) Core.<$> device])

-- | An Android or Chrome OS device registered for zero-touch enrollment.
--
-- /See:/ 'newDevice' smart constructor.
data Device = Device
  { -- | Output only. The provisioning claims for a device. Devices claimed for zero-touch enrollment have a claim with the type @SECTION_TYPE_ZERO_TOUCH@. Call @partners.devices.unclaim@ or @partners.devices.unclaimAsync@ to remove the device from zero-touch enrollment.
    claims :: (Core.Maybe [DeviceClaim]),
    -- | Not available to resellers.
    configuration :: (Core.Maybe Core.Text),
    -- | Output only. The ID of the device. Assigned by the server.
    deviceId :: (Core.Maybe Core.Int64),
    -- | The hardware IDs that identify a manufactured device. To learn more, read <https://developers.google.com/zero-touch/guides/identifiers Identifiers>.
    deviceIdentifier :: (Core.Maybe DeviceIdentifier),
    -- | The metadata attached to the device. Structured as key-value pairs. To learn more, read <https://developers.google.com/zero-touch/guides/metadata Device metadata>.
    deviceMetadata :: (Core.Maybe DeviceMetadata),
    -- | Output only. The API resource name in the format @partners\/[PARTNER_ID]\/devices\/[DEVICE_ID]@. Assigned by the server.
    name :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Device' with the minimum fields required to make a request.
newDevice ::
  Device
newDevice =
  Device
    { claims = Core.Nothing,
      configuration = Core.Nothing,
      deviceId = Core.Nothing,
      deviceIdentifier = Core.Nothing,
      deviceMetadata = Core.Nothing,
      name = Core.Nothing
    }

instance Core.FromJSON Device where
  parseJSON =
    Core.withObject
      "Device"
      ( \o ->
          Device
            Core.<$> (o Core..:? "claims")
            Core.<*> (o Core..:? "configuration")
            Core.<*> (o Core..:? "deviceId" Core.<&> Core.fmap Core.fromAsText)
            Core.<*> (o Core..:? "deviceIdentifier")
            Core.<*> (o Core..:? "deviceMetadata")
            Core.<*> (o Core..:? "name")
      )

instance Core.ToJSON Device where
  toJSON Device {..} =
    Core.object
      ( Core.catMaybes
          [ ("claims" Core..=) Core.<$> claims,
            ("configuration" Core..=) Core.<$> configuration,
            ("deviceId" Core..=) Core.. Core.AsText Core.<$> deviceId,
            ("deviceIdentifier" Core..=) Core.<$> deviceIdentifier,
            ("deviceMetadata" Core..=) Core.<$> deviceMetadata,
            ("name" Core..=) Core.<$> name
          ]
      )

-- | A record of a device claimed by a reseller for a customer. Devices claimed for zero-touch enrollment have a claim with the type @SECTION_TYPE_ZERO_TOUCH@. To learn more, read </zero-touch/guides/how-it-works#claim Claim devices for customers>.
--
-- /See:/ 'newDeviceClaim' smart constructor.
data DeviceClaim = DeviceClaim
  { -- | The Additional service registered for the device.
    additionalService :: (Core.Maybe DeviceClaim_AdditionalService),
    -- | The ID of the Google Workspace account that owns the Chrome OS device.
    googleWorkspaceCustomerId :: (Core.Maybe Core.Text),
    -- | The ID of the Customer that purchased the device.
    ownerCompanyId :: (Core.Maybe Core.Int64),
    -- | The ID of the reseller that claimed the device.
    resellerId :: (Core.Maybe Core.Int64),
    -- | Output only. The type of claim made on the device.
    sectionType :: (Core.Maybe DeviceClaim_SectionType),
    -- | The timestamp when the device will exit ‘vacation mode’. This value is present iff the device is in \'vacation mode\'.
    vacationModeExpireTime :: (Core.Maybe Core.DateTime),
    -- | The timestamp when the device was put into ‘vacation mode’. This value is present iff the device is in \'vacation mode\'.
    vacationModeStartTime :: (Core.Maybe Core.DateTime)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'DeviceClaim' with the minimum fields required to make a request.
newDeviceClaim ::
  DeviceClaim
newDeviceClaim =
  DeviceClaim
    { additionalService = Core.Nothing,
      googleWorkspaceCustomerId = Core.Nothing,
      ownerCompanyId = Core.Nothing,
      resellerId = Core.Nothing,
      sectionType = Core.Nothing,
      vacationModeExpireTime = Core.Nothing,
      vacationModeStartTime = Core.Nothing
    }

instance Core.FromJSON DeviceClaim where
  parseJSON =
    Core.withObject
      "DeviceClaim"
      ( \o ->
          DeviceClaim
            Core.<$> (o Core..:? "additionalService")
            Core.<*> (o Core..:? "googleWorkspaceCustomerId")
            Core.<*> (o Core..:? "ownerCompanyId" Core.<&> Core.fmap Core.fromAsText)
            Core.<*> (o Core..:? "resellerId" Core.<&> Core.fmap Core.fromAsText)
            Core.<*> (o Core..:? "sectionType")
            Core.<*> (o Core..:? "vacationModeExpireTime")
            Core.<*> (o Core..:? "vacationModeStartTime")
      )

instance Core.ToJSON DeviceClaim where
  toJSON DeviceClaim {..} =
    Core.object
      ( Core.catMaybes
          [ ("additionalService" Core..=) Core.<$> additionalService,
            ("googleWorkspaceCustomerId" Core..=)
              Core.<$> googleWorkspaceCustomerId,
            ("ownerCompanyId" Core..=)
              Core.. Core.AsText
              Core.<$> ownerCompanyId,
            ("resellerId" Core..=) Core.. Core.AsText Core.<$> resellerId,
            ("sectionType" Core..=) Core.<$> sectionType,
            ("vacationModeExpireTime" Core..=) Core.<$> vacationModeExpireTime,
            ("vacationModeStartTime" Core..=) Core.<$> vacationModeStartTime
          ]
      )

-- | Encapsulates hardware and product IDs to identify a manufactured device. To understand requirements on identifier sets, read <https://developers.google.com/zero-touch/guides/identifiers Identifiers>.
--
-- /See:/ 'newDeviceIdentifier' smart constructor.
data DeviceIdentifier = DeviceIdentifier
  { -- | An identifier provided by OEMs, carried through the production and sales process. Only applicable to Chrome OS devices.
    chromeOsAttestedDeviceId :: (Core.Maybe Core.Text),
    -- | The type of the device
    deviceType :: (Core.Maybe DeviceIdentifier_DeviceType),
    -- | The device’s IMEI number. Validated on input.
    imei :: (Core.Maybe Core.Text),
    -- | The device’s second IMEI number.
    imei2 :: (Core.Maybe Core.Text),
    -- | The device manufacturer’s name. Matches the device\'s built-in value returned from @android.os.Build.MANUFACTURER@. Allowed values are listed in </zero-touch/resources/manufacturer-names#manufacturers-names Android manufacturers>.
    manufacturer :: (Core.Maybe Core.Text),
    -- | The device’s MEID number.
    meid :: (Core.Maybe Core.Text),
    -- | The device’s second MEID number.
    meid2 :: (Core.Maybe Core.Text),
    -- | The device model\'s name. Allowed values are listed in </zero-touch/resources/manufacturer-names#model-names Android models> and <https://support.google.com/chrome/a/answer/10130175#identify_compatible Chrome OS models>.
    model :: (Core.Maybe Core.Text),
    -- | The manufacturer\'s serial number for the device. This value might not be unique across different device models.
    serialNumber :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'DeviceIdentifier' with the minimum fields required to make a request.
newDeviceIdentifier ::
  DeviceIdentifier
newDeviceIdentifier =
  DeviceIdentifier
    { chromeOsAttestedDeviceId = Core.Nothing,
      deviceType = Core.Nothing,
      imei = Core.Nothing,
      imei2 = Core.Nothing,
      manufacturer = Core.Nothing,
      meid = Core.Nothing,
      meid2 = Core.Nothing,
      model = Core.Nothing,
      serialNumber = Core.Nothing
    }

instance Core.FromJSON DeviceIdentifier where
  parseJSON =
    Core.withObject
      "DeviceIdentifier"
      ( \o ->
          DeviceIdentifier
            Core.<$> (o Core..:? "chromeOsAttestedDeviceId")
            Core.<*> (o Core..:? "deviceType")
            Core.<*> (o Core..:? "imei")
            Core.<*> (o Core..:? "imei2")
            Core.<*> (o Core..:? "manufacturer")
            Core.<*> (o Core..:? "meid")
            Core.<*> (o Core..:? "meid2")
            Core.<*> (o Core..:? "model")
            Core.<*> (o Core..:? "serialNumber")
      )

instance Core.ToJSON DeviceIdentifier where
  toJSON DeviceIdentifier {..} =
    Core.object
      ( Core.catMaybes
          [ ("chromeOsAttestedDeviceId" Core..=)
              Core.<$> chromeOsAttestedDeviceId,
            ("deviceType" Core..=) Core.<$> deviceType,
            ("imei" Core..=) Core.<$> imei,
            ("imei2" Core..=) Core.<$> imei2,
            ("manufacturer" Core..=) Core.<$> manufacturer,
            ("meid" Core..=) Core.<$> meid,
            ("meid2" Core..=) Core.<$> meid2,
            ("model" Core..=) Core.<$> model,
            ("serialNumber" Core..=) Core.<$> serialNumber
          ]
      )

-- | Metadata entries that can be attached to a @Device@. To learn more, read <https://developers.google.com/zero-touch/guides/metadata Device metadata>.
--
-- /See:/ 'newDeviceMetadata' smart constructor.
newtype DeviceMetadata = DeviceMetadata
  { -- | Metadata entries recorded as key-value pairs.
    entries :: (Core.Maybe DeviceMetadata_Entries)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'DeviceMetadata' with the minimum fields required to make a request.
newDeviceMetadata ::
  DeviceMetadata
newDeviceMetadata = DeviceMetadata {entries = Core.Nothing}

instance Core.FromJSON DeviceMetadata where
  parseJSON =
    Core.withObject
      "DeviceMetadata"
      (\o -> DeviceMetadata Core.<$> (o Core..:? "entries"))

instance Core.ToJSON DeviceMetadata where
  toJSON DeviceMetadata {..} =
    Core.object
      (Core.catMaybes [("entries" Core..=) Core.<$> entries])

-- | Metadata entries recorded as key-value pairs.
--
-- /See:/ 'newDeviceMetadata_Entries' smart constructor.
newtype DeviceMetadata_Entries = DeviceMetadata_Entries
  { additional :: (Core.HashMap Core.Text Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'DeviceMetadata_Entries' with the minimum fields required to make a request.
newDeviceMetadata_Entries ::
  -- |  See 'additional'.
  Core.HashMap Core.Text Core.Text ->
  DeviceMetadata_Entries
newDeviceMetadata_Entries additional =
  DeviceMetadata_Entries {additional = additional}

instance Core.FromJSON DeviceMetadata_Entries where
  parseJSON =
    Core.withObject
      "DeviceMetadata_Entries"
      (\o -> DeviceMetadata_Entries Core.<$> (Core.parseJSONObject o))

instance Core.ToJSON DeviceMetadata_Entries where
  toJSON DeviceMetadata_Entries {..} = Core.toJSON additional

-- | A @DeviceReference@ is an API abstraction that lets you supply a /device/ argument to a method using one of the following identifier types: * A numeric API resource ID. * Real-world hardware IDs, such as IMEI number, belonging to the manufactured device. Methods that operate on devices take a @DeviceReference@ as a parameter type because it\'s more flexible for the caller. To learn more about device identifiers, read <https://developers.google.com/zero-touch/guides/identifiers Identifiers>.
--
-- /See:/ 'newDeviceReference' smart constructor.
data DeviceReference = DeviceReference
  { -- | The ID of the device.
    deviceId :: (Core.Maybe Core.Int64),
    -- | The hardware IDs of the device.
    deviceIdentifier :: (Core.Maybe DeviceIdentifier)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'DeviceReference' with the minimum fields required to make a request.
newDeviceReference ::
  DeviceReference
newDeviceReference =
  DeviceReference
    { deviceId = Core.Nothing,
      deviceIdentifier = Core.Nothing
    }

instance Core.FromJSON DeviceReference where
  parseJSON =
    Core.withObject
      "DeviceReference"
      ( \o ->
          DeviceReference
            Core.<$> (o Core..:? "deviceId" Core.<&> Core.fmap Core.fromAsText)
            Core.<*> (o Core..:? "deviceIdentifier")
      )

instance Core.ToJSON DeviceReference where
  toJSON DeviceReference {..} =
    Core.object
      ( Core.catMaybes
          [ ("deviceId" Core..=) Core.. Core.AsText Core.<$> deviceId,
            ("deviceIdentifier" Core..=) Core.<$> deviceIdentifier
          ]
      )

-- | Tracks the status of a long-running operation to asynchronously update a batch of reseller metadata attached to devices. To learn more, read </zero-touch/guides/how-it-works#operations Long‑running batch operations>.
--
-- /See:/ 'newDevicesLongRunningOperationMetadata' smart constructor.
data DevicesLongRunningOperationMetadata = DevicesLongRunningOperationMetadata
  { -- | The number of metadata updates in the operation. This might be different from the number of updates in the request if the API can\'t parse some of the updates.
    devicesCount :: (Core.Maybe Core.Int32),
    -- | The processing status of the operation.
    processingStatus :: (Core.Maybe DevicesLongRunningOperationMetadata_ProcessingStatus),
    -- | The processing progress of the operation. Measured as a number from 0 to 100. A value of 10O doesn\'t always mean the operation completed—check for the inclusion of a @done@ field.
    progress :: (Core.Maybe Core.Int32)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'DevicesLongRunningOperationMetadata' with the minimum fields required to make a request.
newDevicesLongRunningOperationMetadata ::
  DevicesLongRunningOperationMetadata
newDevicesLongRunningOperationMetadata =
  DevicesLongRunningOperationMetadata
    { devicesCount = Core.Nothing,
      processingStatus = Core.Nothing,
      progress = Core.Nothing
    }

instance Core.FromJSON DevicesLongRunningOperationMetadata where
  parseJSON =
    Core.withObject
      "DevicesLongRunningOperationMetadata"
      ( \o ->
          DevicesLongRunningOperationMetadata
            Core.<$> (o Core..:? "devicesCount")
            Core.<*> (o Core..:? "processingStatus")
            Core.<*> (o Core..:? "progress")
      )

instance Core.ToJSON DevicesLongRunningOperationMetadata where
  toJSON DevicesLongRunningOperationMetadata {..} =
    Core.object
      ( Core.catMaybes
          [ ("devicesCount" Core..=) Core.<$> devicesCount,
            ("processingStatus" Core..=) Core.<$> processingStatus,
            ("progress" Core..=) Core.<$> progress
          ]
      )

-- | Tracks the status of a long-running operation to claim, unclaim, or attach metadata to devices. To learn more, read </zero-touch/guides/how-it-works#operations Long‑running batch operations>.
--
-- /See:/ 'newDevicesLongRunningOperationResponse' smart constructor.
data DevicesLongRunningOperationResponse = DevicesLongRunningOperationResponse
  { -- | The processing status for each device in the operation. One @PerDeviceStatus@ per device. The list order matches the items in the original request.
    perDeviceStatus :: (Core.Maybe [OperationPerDevice]),
    -- | A summary of how many items in the operation the server processed successfully. Updated as the operation progresses.
    successCount :: (Core.Maybe Core.Int32)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'DevicesLongRunningOperationResponse' with the minimum fields required to make a request.
newDevicesLongRunningOperationResponse ::
  DevicesLongRunningOperationResponse
newDevicesLongRunningOperationResponse =
  DevicesLongRunningOperationResponse
    { perDeviceStatus =
        Core.Nothing,
      successCount = Core.Nothing
    }

instance Core.FromJSON DevicesLongRunningOperationResponse where
  parseJSON =
    Core.withObject
      "DevicesLongRunningOperationResponse"
      ( \o ->
          DevicesLongRunningOperationResponse
            Core.<$> (o Core..:? "perDeviceStatus")
            Core.<*> (o Core..:? "successCount")
      )

instance Core.ToJSON DevicesLongRunningOperationResponse where
  toJSON DevicesLongRunningOperationResponse {..} =
    Core.object
      ( Core.catMaybes
          [ ("perDeviceStatus" Core..=) Core.<$> perDeviceStatus,
            ("successCount" Core..=) Core.<$> successCount
          ]
      )

-- | An EMM\'s DPC (<http://developer.android.com/work/dpc/build-dpc.html device policy controller>). Zero-touch enrollment installs a DPC (listed in the @Configuration@) on a device to maintain the customer\'s mobile policies. All the DPCs listed by the API support zero-touch enrollment and are available in Google Play.
--
-- /See:/ 'newDpc' smart constructor.
data Dpc = Dpc
  { -- | Output only. The title of the DPC app in Google Play. For example, /Google Apps Device Policy/. Useful in an application\'s user interface.
    dpcName :: (Core.Maybe Core.Text),
    -- | Output only. The API resource name in the format @customers\/[CUSTOMER_ID]\/dpcs\/[DPC_ID]@. Assigned by the server. To maintain a reference to a DPC across customer accounts, persist and match the last path component (@DPC_ID@).
    name :: (Core.Maybe Core.Text),
    -- | Output only. The DPC\'s Android application ID that looks like a Java package name. Zero-touch enrollment installs the DPC app onto a device using this identifier.
    packageName :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Dpc' with the minimum fields required to make a request.
newDpc ::
  Dpc
newDpc =
  Dpc
    { dpcName = Core.Nothing,
      name = Core.Nothing,
      packageName = Core.Nothing
    }

instance Core.FromJSON Dpc where
  parseJSON =
    Core.withObject
      "Dpc"
      ( \o ->
          Dpc
            Core.<$> (o Core..:? "dpcName")
            Core.<*> (o Core..:? "name")
            Core.<*> (o Core..:? "packageName")
      )

instance Core.ToJSON Dpc where
  toJSON Dpc {..} =
    Core.object
      ( Core.catMaybes
          [ ("dpcName" Core..=) Core.<$> dpcName,
            ("name" Core..=) Core.<$> name,
            ("packageName" Core..=) Core.<$> packageName
          ]
      )

-- | 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); }
--
-- /See:/ 'newEmpty' smart constructor.
data Empty = Empty
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Empty' with the minimum fields required to make a request.
newEmpty ::
  Empty
newEmpty = Empty

instance Core.FromJSON Empty where
  parseJSON = Core.withObject "Empty" (\o -> Core.pure Empty)

instance Core.ToJSON Empty where
  toJSON = Core.const Core.emptyObject

-- | Request to find devices.
--
-- /See:/ 'newFindDevicesByDeviceIdentifierRequest' smart constructor.
data FindDevicesByDeviceIdentifierRequest = FindDevicesByDeviceIdentifierRequest
  { -- | Required. Required. The device identifier to search for.
    deviceIdentifier :: (Core.Maybe DeviceIdentifier),
    -- | Required. The maximum number of devices to show in a page of results. Must be between 1 and 100 inclusive.
    limit :: (Core.Maybe Core.Int64),
    -- | A token specifying which result page to return.
    pageToken :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'FindDevicesByDeviceIdentifierRequest' with the minimum fields required to make a request.
newFindDevicesByDeviceIdentifierRequest ::
  FindDevicesByDeviceIdentifierRequest
newFindDevicesByDeviceIdentifierRequest =
  FindDevicesByDeviceIdentifierRequest
    { deviceIdentifier =
        Core.Nothing,
      limit = Core.Nothing,
      pageToken = Core.Nothing
    }

instance Core.FromJSON FindDevicesByDeviceIdentifierRequest where
  parseJSON =
    Core.withObject
      "FindDevicesByDeviceIdentifierRequest"
      ( \o ->
          FindDevicesByDeviceIdentifierRequest
            Core.<$> (o Core..:? "deviceIdentifier")
            Core.<*> (o Core..:? "limit" Core.<&> Core.fmap Core.fromAsText)
            Core.<*> (o Core..:? "pageToken")
      )

instance Core.ToJSON FindDevicesByDeviceIdentifierRequest where
  toJSON FindDevicesByDeviceIdentifierRequest {..} =
    Core.object
      ( Core.catMaybes
          [ ("deviceIdentifier" Core..=) Core.<$> deviceIdentifier,
            ("limit" Core..=) Core.. Core.AsText Core.<$> limit,
            ("pageToken" Core..=) Core.<$> pageToken
          ]
      )

-- | Response containing found devices.
--
-- /See:/ 'newFindDevicesByDeviceIdentifierResponse' smart constructor.
data FindDevicesByDeviceIdentifierResponse = FindDevicesByDeviceIdentifierResponse
  { -- | Found devices.
    devices :: (Core.Maybe [Device]),
    -- | A token used to access the next page of results. Omitted if no further results are available.
    nextPageToken :: (Core.Maybe Core.Text),
    -- | The total count of items in the list irrespective of pagination.
    totalSize :: (Core.Maybe Core.Int32)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'FindDevicesByDeviceIdentifierResponse' with the minimum fields required to make a request.
newFindDevicesByDeviceIdentifierResponse ::
  FindDevicesByDeviceIdentifierResponse
newFindDevicesByDeviceIdentifierResponse =
  FindDevicesByDeviceIdentifierResponse
    { devices = Core.Nothing,
      nextPageToken = Core.Nothing,
      totalSize = Core.Nothing
    }

instance Core.FromJSON FindDevicesByDeviceIdentifierResponse where
  parseJSON =
    Core.withObject
      "FindDevicesByDeviceIdentifierResponse"
      ( \o ->
          FindDevicesByDeviceIdentifierResponse
            Core.<$> (o Core..:? "devices")
            Core.<*> (o Core..:? "nextPageToken")
            Core.<*> (o Core..:? "totalSize")
      )

instance Core.ToJSON FindDevicesByDeviceIdentifierResponse where
  toJSON FindDevicesByDeviceIdentifierResponse {..} =
    Core.object
      ( Core.catMaybes
          [ ("devices" Core..=) Core.<$> devices,
            ("nextPageToken" Core..=) Core.<$> nextPageToken,
            ("totalSize" Core..=) Core.<$> totalSize
          ]
      )

-- | Request to find devices by customers.
--
-- /See:/ 'newFindDevicesByOwnerRequest' smart constructor.
data FindDevicesByOwnerRequest = FindDevicesByOwnerRequest
  { -- | The list of customer IDs to search for.
    customerId :: (Core.Maybe [Core.Int64]),
    -- | The list of IDs of Google Workspace accounts to search for.
    googleWorkspaceCustomerId :: (Core.Maybe [Core.Text]),
    -- | Required. The maximum number of devices to show in a page of results. Must be between 1 and 100 inclusive.
    limit :: (Core.Maybe Core.Int64),
    -- | A token specifying which result page to return.
    pageToken :: (Core.Maybe Core.Text),
    -- | Required. The section type of the device\'s provisioning record.
    sectionType :: (Core.Maybe FindDevicesByOwnerRequest_SectionType)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'FindDevicesByOwnerRequest' with the minimum fields required to make a request.
newFindDevicesByOwnerRequest ::
  FindDevicesByOwnerRequest
newFindDevicesByOwnerRequest =
  FindDevicesByOwnerRequest
    { customerId = Core.Nothing,
      googleWorkspaceCustomerId = Core.Nothing,
      limit = Core.Nothing,
      pageToken = Core.Nothing,
      sectionType = Core.Nothing
    }

instance Core.FromJSON FindDevicesByOwnerRequest where
  parseJSON =
    Core.withObject
      "FindDevicesByOwnerRequest"
      ( \o ->
          FindDevicesByOwnerRequest
            Core.<$> ( o
                         Core..:? "customerId"
                         Core.<&> Core.fmap (Core.fmap Core.fromAsText)
                     )
            Core.<*> (o Core..:? "googleWorkspaceCustomerId")
            Core.<*> (o Core..:? "limit" Core.<&> Core.fmap Core.fromAsText)
            Core.<*> (o Core..:? "pageToken")
            Core.<*> (o Core..:? "sectionType")
      )

instance Core.ToJSON FindDevicesByOwnerRequest where
  toJSON FindDevicesByOwnerRequest {..} =
    Core.object
      ( Core.catMaybes
          [ ("customerId" Core..=)
              Core.. Core.fmap Core.AsText
              Core.<$> customerId,
            ("googleWorkspaceCustomerId" Core..=)
              Core.<$> googleWorkspaceCustomerId,
            ("limit" Core..=) Core.. Core.AsText Core.<$> limit,
            ("pageToken" Core..=) Core.<$> pageToken,
            ("sectionType" Core..=) Core.<$> sectionType
          ]
      )

-- | Response containing found devices.
--
-- /See:/ 'newFindDevicesByOwnerResponse' smart constructor.
data FindDevicesByOwnerResponse = FindDevicesByOwnerResponse
  { -- | The customer\'s devices.
    devices :: (Core.Maybe [Device]),
    -- | A token used to access the next page of results. Omitted if no further results are available.
    nextPageToken :: (Core.Maybe Core.Text),
    -- | The total count of items in the list irrespective of pagination.
    totalSize :: (Core.Maybe Core.Int32)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'FindDevicesByOwnerResponse' with the minimum fields required to make a request.
newFindDevicesByOwnerResponse ::
  FindDevicesByOwnerResponse
newFindDevicesByOwnerResponse =
  FindDevicesByOwnerResponse
    { devices = Core.Nothing,
      nextPageToken = Core.Nothing,
      totalSize = Core.Nothing
    }

instance Core.FromJSON FindDevicesByOwnerResponse where
  parseJSON =
    Core.withObject
      "FindDevicesByOwnerResponse"
      ( \o ->
          FindDevicesByOwnerResponse
            Core.<$> (o Core..:? "devices")
            Core.<*> (o Core..:? "nextPageToken")
            Core.<*> (o Core..:? "totalSize")
      )

instance Core.ToJSON FindDevicesByOwnerResponse where
  toJSON FindDevicesByOwnerResponse {..} =
    Core.object
      ( Core.catMaybes
          [ ("devices" Core..=) Core.<$> devices,
            ("nextPageToken" Core..=) Core.<$> nextPageToken,
            ("totalSize" Core..=) Core.<$> totalSize
          ]
      )

-- | Request to get a device\'s SIM lock status.
--
-- /See:/ 'newGetDeviceSimLockStateRequest' smart constructor.
newtype GetDeviceSimLockStateRequest = GetDeviceSimLockStateRequest
  { -- | Required. Required. The device identifier to search for.
    deviceIdentifier :: (Core.Maybe DeviceIdentifier)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'GetDeviceSimLockStateRequest' with the minimum fields required to make a request.
newGetDeviceSimLockStateRequest ::
  GetDeviceSimLockStateRequest
newGetDeviceSimLockStateRequest =
  GetDeviceSimLockStateRequest {deviceIdentifier = Core.Nothing}

instance Core.FromJSON GetDeviceSimLockStateRequest where
  parseJSON =
    Core.withObject
      "GetDeviceSimLockStateRequest"
      ( \o ->
          GetDeviceSimLockStateRequest
            Core.<$> (o Core..:? "deviceIdentifier")
      )

instance Core.ToJSON GetDeviceSimLockStateRequest where
  toJSON GetDeviceSimLockStateRequest {..} =
    Core.object
      ( Core.catMaybes
          [("deviceIdentifier" Core..=) Core.<$> deviceIdentifier]
      )

-- | Response containing a device\'s SimLock state.
--
-- /See:/ 'newGetDeviceSimLockStateResponse' smart constructor.
newtype GetDeviceSimLockStateResponse = GetDeviceSimLockStateResponse
  { simLockState :: (Core.Maybe GetDeviceSimLockStateResponse_SimLockState)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'GetDeviceSimLockStateResponse' with the minimum fields required to make a request.
newGetDeviceSimLockStateResponse ::
  GetDeviceSimLockStateResponse
newGetDeviceSimLockStateResponse =
  GetDeviceSimLockStateResponse {simLockState = Core.Nothing}

instance Core.FromJSON GetDeviceSimLockStateResponse where
  parseJSON =
    Core.withObject
      "GetDeviceSimLockStateResponse"
      ( \o ->
          GetDeviceSimLockStateResponse Core.<$> (o Core..:? "simLockState")
      )

instance Core.ToJSON GetDeviceSimLockStateResponse where
  toJSON GetDeviceSimLockStateResponse {..} =
    Core.object
      (Core.catMaybes [("simLockState" Core..=) Core.<$> simLockState])

-- | A Google Workspace customer.
--
-- /See:/ 'newGoogleWorkspaceAccount' smart constructor.
data GoogleWorkspaceAccount = GoogleWorkspaceAccount
  { -- | Required. The customer ID.
    customerId :: (Core.Maybe Core.Text),
    -- | Output only. The pre-provisioning tokens previously used to claim devices.
    preProvisioningTokens :: (Core.Maybe [Core.Text])
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'GoogleWorkspaceAccount' with the minimum fields required to make a request.
newGoogleWorkspaceAccount ::
  GoogleWorkspaceAccount
newGoogleWorkspaceAccount =
  GoogleWorkspaceAccount
    { customerId = Core.Nothing,
      preProvisioningTokens = Core.Nothing
    }

instance Core.FromJSON GoogleWorkspaceAccount where
  parseJSON =
    Core.withObject
      "GoogleWorkspaceAccount"
      ( \o ->
          GoogleWorkspaceAccount
            Core.<$> (o Core..:? "customerId")
            Core.<*> (o Core..:? "preProvisioningTokens")
      )

instance Core.ToJSON GoogleWorkspaceAccount where
  toJSON GoogleWorkspaceAccount {..} =
    Core.object
      ( Core.catMaybes
          [ ("customerId" Core..=) Core.<$> customerId,
            ("preProvisioningTokens" Core..=) Core.<$> preProvisioningTokens
          ]
      )

-- | Response message of all customers related to this partner.
--
-- /See:/ 'newListCustomersResponse' smart constructor.
data ListCustomersResponse = ListCustomersResponse
  { -- | List of customers related to this reseller partner.
    customers :: (Core.Maybe [Company]),
    -- | A token to retrieve the next page of results. Omitted if no further results are available.
    nextPageToken :: (Core.Maybe Core.Text),
    -- | The total count of items in the list irrespective of pagination.
    totalSize :: (Core.Maybe Core.Int32)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ListCustomersResponse' with the minimum fields required to make a request.
newListCustomersResponse ::
  ListCustomersResponse
newListCustomersResponse =
  ListCustomersResponse
    { customers = Core.Nothing,
      nextPageToken = Core.Nothing,
      totalSize = Core.Nothing
    }

instance Core.FromJSON ListCustomersResponse where
  parseJSON =
    Core.withObject
      "ListCustomersResponse"
      ( \o ->
          ListCustomersResponse
            Core.<$> (o Core..:? "customers")
            Core.<*> (o Core..:? "nextPageToken")
            Core.<*> (o Core..:? "totalSize")
      )

instance Core.ToJSON ListCustomersResponse where
  toJSON ListCustomersResponse {..} =
    Core.object
      ( Core.catMaybes
          [ ("customers" Core..=) Core.<$> customers,
            ("nextPageToken" Core..=) Core.<$> nextPageToken,
            ("totalSize" Core..=) Core.<$> totalSize
          ]
      )

-- | Response message to list customers of the vendor.
--
-- /See:/ 'newListVendorCustomersResponse' smart constructor.
data ListVendorCustomersResponse = ListVendorCustomersResponse
  { -- | List of customers of the vendor.
    customers :: (Core.Maybe [Company]),
    -- | A token to retrieve the next page of results. Omitted if no further results are available.
    nextPageToken :: (Core.Maybe Core.Text),
    -- | The total count of items in the list irrespective of pagination.
    totalSize :: (Core.Maybe Core.Int32)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ListVendorCustomersResponse' with the minimum fields required to make a request.
newListVendorCustomersResponse ::
  ListVendorCustomersResponse
newListVendorCustomersResponse =
  ListVendorCustomersResponse
    { customers = Core.Nothing,
      nextPageToken = Core.Nothing,
      totalSize = Core.Nothing
    }

instance Core.FromJSON ListVendorCustomersResponse where
  parseJSON =
    Core.withObject
      "ListVendorCustomersResponse"
      ( \o ->
          ListVendorCustomersResponse
            Core.<$> (o Core..:? "customers")
            Core.<*> (o Core..:? "nextPageToken")
            Core.<*> (o Core..:? "totalSize")
      )

instance Core.ToJSON ListVendorCustomersResponse where
  toJSON ListVendorCustomersResponse {..} =
    Core.object
      ( Core.catMaybes
          [ ("customers" Core..=) Core.<$> customers,
            ("nextPageToken" Core..=) Core.<$> nextPageToken,
            ("totalSize" Core..=) Core.<$> totalSize
          ]
      )

-- | Response message to list vendors of the partner.
--
-- /See:/ 'newListVendorsResponse' smart constructor.
data ListVendorsResponse = ListVendorsResponse
  { -- | A token to retrieve the next page of results. Omitted if no further results are available.
    nextPageToken :: (Core.Maybe Core.Text),
    -- | The total count of items in the list irrespective of pagination.
    totalSize :: (Core.Maybe Core.Int32),
    -- | List of vendors of the reseller partner. Fields @name@, @companyId@ and @companyName@ are populated to the Company object.
    vendors :: (Core.Maybe [Company])
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ListVendorsResponse' with the minimum fields required to make a request.
newListVendorsResponse ::
  ListVendorsResponse
newListVendorsResponse =
  ListVendorsResponse
    { nextPageToken = Core.Nothing,
      totalSize = Core.Nothing,
      vendors = Core.Nothing
    }

instance Core.FromJSON ListVendorsResponse where
  parseJSON =
    Core.withObject
      "ListVendorsResponse"
      ( \o ->
          ListVendorsResponse
            Core.<$> (o Core..:? "nextPageToken")
            Core.<*> (o Core..:? "totalSize")
            Core.<*> (o Core..:? "vendors")
      )

instance Core.ToJSON ListVendorsResponse where
  toJSON ListVendorsResponse {..} =
    Core.object
      ( Core.catMaybes
          [ ("nextPageToken" Core..=) Core.<$> nextPageToken,
            ("totalSize" Core..=) Core.<$> totalSize,
            ("vendors" Core..=) Core.<$> vendors
          ]
      )

-- | This resource represents a long-running operation that is the result of a network API call.
--
-- /See:/ 'newOperation' smart constructor.
data Operation = Operation
  { -- | 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.
    done :: (Core.Maybe Core.Bool),
    -- | This field will always be not set if the operation is created by @claimAsync@, @unclaimAsync@, or @updateMetadataAsync@. In this case, error information for each device is set in @response.perDeviceStatus.result.status@.
    error :: (Core.Maybe Status),
    -- | This field will contain a @DevicesLongRunningOperationMetadata@ object if the operation is created by @claimAsync@, @unclaimAsync@, or @updateMetadataAsync@.
    metadata :: (Core.Maybe Operation_Metadata),
    -- | 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 be a resource name ending with @operations\/{unique_id}@.
    name :: (Core.Maybe Core.Text),
    -- | This field will contain a @DevicesLongRunningOperationResponse@ object if the operation is created by @claimAsync@, @unclaimAsync@, or @updateMetadataAsync@.
    response :: (Core.Maybe Operation_Response)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Operation' with the minimum fields required to make a request.
newOperation ::
  Operation
newOperation =
  Operation
    { done = Core.Nothing,
      error = Core.Nothing,
      metadata = Core.Nothing,
      name = Core.Nothing,
      response = Core.Nothing
    }

instance Core.FromJSON Operation where
  parseJSON =
    Core.withObject
      "Operation"
      ( \o ->
          Operation
            Core.<$> (o Core..:? "done")
            Core.<*> (o Core..:? "error")
            Core.<*> (o Core..:? "metadata")
            Core.<*> (o Core..:? "name")
            Core.<*> (o Core..:? "response")
      )

instance Core.ToJSON Operation where
  toJSON Operation {..} =
    Core.object
      ( Core.catMaybes
          [ ("done" Core..=) Core.<$> done,
            ("error" Core..=) Core.<$> error,
            ("metadata" Core..=) Core.<$> metadata,
            ("name" Core..=) Core.<$> name,
            ("response" Core..=) Core.<$> response
          ]
      )

-- | This field will contain a @DevicesLongRunningOperationMetadata@ object if the operation is created by @claimAsync@, @unclaimAsync@, or @updateMetadataAsync@.
--
-- /See:/ 'newOperation_Metadata' smart constructor.
newtype Operation_Metadata = Operation_Metadata
  { -- | Properties of the object. Contains field \@type with type URL.
    additional :: (Core.HashMap Core.Text Core.Value)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Operation_Metadata' with the minimum fields required to make a request.
newOperation_Metadata ::
  -- |  Properties of the object. Contains field \@type with type URL. See 'additional'.
  Core.HashMap Core.Text Core.Value ->
  Operation_Metadata
newOperation_Metadata additional =
  Operation_Metadata {additional = additional}

instance Core.FromJSON Operation_Metadata where
  parseJSON =
    Core.withObject
      "Operation_Metadata"
      (\o -> Operation_Metadata Core.<$> (Core.parseJSONObject o))

instance Core.ToJSON Operation_Metadata where
  toJSON Operation_Metadata {..} = Core.toJSON additional

-- | This field will contain a @DevicesLongRunningOperationResponse@ object if the operation is created by @claimAsync@, @unclaimAsync@, or @updateMetadataAsync@.
--
-- /See:/ 'newOperation_Response' smart constructor.
newtype Operation_Response = Operation_Response
  { -- | Properties of the object. Contains field \@type with type URL.
    additional :: (Core.HashMap Core.Text Core.Value)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Operation_Response' with the minimum fields required to make a request.
newOperation_Response ::
  -- |  Properties of the object. Contains field \@type with type URL. See 'additional'.
  Core.HashMap Core.Text Core.Value ->
  Operation_Response
newOperation_Response additional =
  Operation_Response {additional = additional}

instance Core.FromJSON Operation_Response where
  parseJSON =
    Core.withObject
      "Operation_Response"
      (\o -> Operation_Response Core.<$> (Core.parseJSONObject o))

instance Core.ToJSON Operation_Response where
  toJSON Operation_Response {..} = Core.toJSON additional

-- | A task for each device in the operation. Corresponds to each device change in the request.
--
-- /See:/ 'newOperationPerDevice' smart constructor.
data OperationPerDevice = OperationPerDevice
  { -- | A copy of the original device-claim request received by the server.
    claim :: (Core.Maybe PartnerClaim),
    -- | The processing result for each device.
    result :: (Core.Maybe PerDeviceStatusInBatch),
    -- | A copy of the original device-unclaim request received by the server.
    unclaim :: (Core.Maybe PartnerUnclaim),
    -- | A copy of the original metadata-update request received by the server.
    updateMetadata :: (Core.Maybe UpdateMetadataArguments)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'OperationPerDevice' with the minimum fields required to make a request.
newOperationPerDevice ::
  OperationPerDevice
newOperationPerDevice =
  OperationPerDevice
    { claim = Core.Nothing,
      result = Core.Nothing,
      unclaim = Core.Nothing,
      updateMetadata = Core.Nothing
    }

instance Core.FromJSON OperationPerDevice where
  parseJSON =
    Core.withObject
      "OperationPerDevice"
      ( \o ->
          OperationPerDevice
            Core.<$> (o Core..:? "claim")
            Core.<*> (o Core..:? "result")
            Core.<*> (o Core..:? "unclaim")
            Core.<*> (o Core..:? "updateMetadata")
      )

instance Core.ToJSON OperationPerDevice where
  toJSON OperationPerDevice {..} =
    Core.object
      ( Core.catMaybes
          [ ("claim" Core..=) Core.<$> claim,
            ("result" Core..=) Core.<$> result,
            ("unclaim" Core..=) Core.<$> unclaim,
            ("updateMetadata" Core..=) Core.<$> updateMetadata
          ]
      )

-- | Identifies one claim request.
--
-- /See:/ 'newPartnerClaim' smart constructor.
data PartnerClaim = PartnerClaim
  { -- | Optional. The ID of the configuration applied to the device section.
    configurationId :: (Core.Maybe Core.Int64),
    -- | The ID of the customer for whom the device is being claimed.
    customerId :: (Core.Maybe Core.Int64),
    -- | Required. Required. Device identifier of the device.
    deviceIdentifier :: (Core.Maybe DeviceIdentifier),
    -- | Required. The metadata to attach to the device at claim.
    deviceMetadata :: (Core.Maybe DeviceMetadata),
    -- | The Google Workspace customer ID.
    googleWorkspaceCustomerId :: (Core.Maybe Core.Text),
    -- | Optional. Must and can only be set for Chrome OS devices.
    preProvisioningToken :: (Core.Maybe Core.Text),
    -- | Required. The section type of the device\'s provisioning record.
    sectionType :: (Core.Maybe PartnerClaim_SectionType),
    -- | Optional. Must and can only be set when DeviceProvisioningSectionType is SECTION/TYPE/SIM_LOCK. The unique identifier of the SimLock profile.
    simlockProfileId :: (Core.Maybe Core.Int64)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'PartnerClaim' with the minimum fields required to make a request.
newPartnerClaim ::
  PartnerClaim
newPartnerClaim =
  PartnerClaim
    { configurationId = Core.Nothing,
      customerId = Core.Nothing,
      deviceIdentifier = Core.Nothing,
      deviceMetadata = Core.Nothing,
      googleWorkspaceCustomerId = Core.Nothing,
      preProvisioningToken = Core.Nothing,
      sectionType = Core.Nothing,
      simlockProfileId = Core.Nothing
    }

instance Core.FromJSON PartnerClaim where
  parseJSON =
    Core.withObject
      "PartnerClaim"
      ( \o ->
          PartnerClaim
            Core.<$> (o Core..:? "configurationId" Core.<&> Core.fmap Core.fromAsText)
            Core.<*> (o Core..:? "customerId" Core.<&> Core.fmap Core.fromAsText)
            Core.<*> (o Core..:? "deviceIdentifier")
            Core.<*> (o Core..:? "deviceMetadata")
            Core.<*> (o Core..:? "googleWorkspaceCustomerId")
            Core.<*> (o Core..:? "preProvisioningToken")
            Core.<*> (o Core..:? "sectionType")
            Core.<*> (o Core..:? "simlockProfileId" Core.<&> Core.fmap Core.fromAsText)
      )

instance Core.ToJSON PartnerClaim where
  toJSON PartnerClaim {..} =
    Core.object
      ( Core.catMaybes
          [ ("configurationId" Core..=)
              Core.. Core.AsText
              Core.<$> configurationId,
            ("customerId" Core..=) Core.. Core.AsText Core.<$> customerId,
            ("deviceIdentifier" Core..=) Core.<$> deviceIdentifier,
            ("deviceMetadata" Core..=) Core.<$> deviceMetadata,
            ("googleWorkspaceCustomerId" Core..=)
              Core.<$> googleWorkspaceCustomerId,
            ("preProvisioningToken" Core..=) Core.<$> preProvisioningToken,
            ("sectionType" Core..=) Core.<$> sectionType,
            ("simlockProfileId" Core..=)
              Core.. Core.AsText
              Core.<$> simlockProfileId
          ]
      )

-- | Identifies one unclaim request.
--
-- /See:/ 'newPartnerUnclaim' smart constructor.
data PartnerUnclaim = PartnerUnclaim
  { -- | Required. Device ID of the device.
    deviceId :: (Core.Maybe Core.Int64),
    -- | Required. Device identifier of the device.
    deviceIdentifier :: (Core.Maybe DeviceIdentifier),
    -- | Required. The section type of the device\'s provisioning record.
    sectionType :: (Core.Maybe PartnerUnclaim_SectionType),
    -- | Optional. The duration of the vacation unlock starting from when the request is processed. (1 day is treated as 24 hours)
    vacationModeDays :: (Core.Maybe Core.Int32),
    -- | Optional. The expiration time of the vacation unlock.
    vacationModeExpireTime :: (Core.Maybe Core.DateTime)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'PartnerUnclaim' with the minimum fields required to make a request.
newPartnerUnclaim ::
  PartnerUnclaim
newPartnerUnclaim =
  PartnerUnclaim
    { deviceId = Core.Nothing,
      deviceIdentifier = Core.Nothing,
      sectionType = Core.Nothing,
      vacationModeDays = Core.Nothing,
      vacationModeExpireTime = Core.Nothing
    }

instance Core.FromJSON PartnerUnclaim where
  parseJSON =
    Core.withObject
      "PartnerUnclaim"
      ( \o ->
          PartnerUnclaim
            Core.<$> (o Core..:? "deviceId" Core.<&> Core.fmap Core.fromAsText)
            Core.<*> (o Core..:? "deviceIdentifier")
            Core.<*> (o Core..:? "sectionType")
            Core.<*> (o Core..:? "vacationModeDays")
            Core.<*> (o Core..:? "vacationModeExpireTime")
      )

instance Core.ToJSON PartnerUnclaim where
  toJSON PartnerUnclaim {..} =
    Core.object
      ( Core.catMaybes
          [ ("deviceId" Core..=) Core.. Core.AsText Core.<$> deviceId,
            ("deviceIdentifier" Core..=) Core.<$> deviceIdentifier,
            ("sectionType" Core..=) Core.<$> sectionType,
            ("vacationModeDays" Core..=) Core.<$> vacationModeDays,
            ("vacationModeExpireTime" Core..=)
              Core.<$> vacationModeExpireTime
          ]
      )

-- | Captures the processing status for each device in the operation.
--
-- /See:/ 'newPerDeviceStatusInBatch' smart constructor.
data PerDeviceStatusInBatch = PerDeviceStatusInBatch
  { -- | If processing succeeds, the device ID of the device.
    deviceId :: (Core.Maybe Core.Int64),
    -- | If processing fails, the error type.
    errorIdentifier :: (Core.Maybe Core.Text),
    -- | If processing fails, a developer message explaining what went wrong.
    errorMessage :: (Core.Maybe Core.Text),
    -- | The result status of the device after processing.
    status :: (Core.Maybe PerDeviceStatusInBatch_Status)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'PerDeviceStatusInBatch' with the minimum fields required to make a request.
newPerDeviceStatusInBatch ::
  PerDeviceStatusInBatch
newPerDeviceStatusInBatch =
  PerDeviceStatusInBatch
    { deviceId = Core.Nothing,
      errorIdentifier = Core.Nothing,
      errorMessage = Core.Nothing,
      status = Core.Nothing
    }

instance Core.FromJSON PerDeviceStatusInBatch where
  parseJSON =
    Core.withObject
      "PerDeviceStatusInBatch"
      ( \o ->
          PerDeviceStatusInBatch
            Core.<$> (o Core..:? "deviceId" Core.<&> Core.fmap Core.fromAsText)
            Core.<*> (o Core..:? "errorIdentifier")
            Core.<*> (o Core..:? "errorMessage")
            Core.<*> (o Core..:? "status")
      )

instance Core.ToJSON PerDeviceStatusInBatch where
  toJSON PerDeviceStatusInBatch {..} =
    Core.object
      ( Core.catMaybes
          [ ("deviceId" Core..=) Core.. Core.AsText Core.<$> deviceId,
            ("errorIdentifier" Core..=) Core.<$> errorIdentifier,
            ("errorMessage" Core..=) Core.<$> errorMessage,
            ("status" Core..=) Core.<$> status
          ]
      )

-- | The @Status@ type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by <https://github.com/grpc gRPC>. Each @Status@ message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the <https://cloud.google.com/apis/design/errors API Design Guide>.
--
-- /See:/ 'newStatus' smart constructor.
data Status = Status
  { -- | The status code, which should be an enum value of google.rpc.Code.
    code :: (Core.Maybe Core.Int32),
    -- | A list of messages that carry the error details. There is a common set of message types for APIs to use.
    details :: (Core.Maybe [Status_DetailsItem]),
    -- | 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.
    message :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Status' with the minimum fields required to make a request.
newStatus ::
  Status
newStatus =
  Status
    { code = Core.Nothing,
      details = Core.Nothing,
      message = Core.Nothing
    }

instance Core.FromJSON Status where
  parseJSON =
    Core.withObject
      "Status"
      ( \o ->
          Status
            Core.<$> (o Core..:? "code")
            Core.<*> (o Core..:? "details")
            Core.<*> (o Core..:? "message")
      )

instance Core.ToJSON Status where
  toJSON Status {..} =
    Core.object
      ( Core.catMaybes
          [ ("code" Core..=) Core.<$> code,
            ("details" Core..=) Core.<$> details,
            ("message" Core..=) Core.<$> message
          ]
      )

--
-- /See:/ 'newStatus_DetailsItem' smart constructor.
newtype Status_DetailsItem = Status_DetailsItem
  { -- | Properties of the object. Contains field \@type with type URL.
    additional :: (Core.HashMap Core.Text Core.Value)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Status_DetailsItem' with the minimum fields required to make a request.
newStatus_DetailsItem ::
  -- |  Properties of the object. Contains field \@type with type URL. See 'additional'.
  Core.HashMap Core.Text Core.Value ->
  Status_DetailsItem
newStatus_DetailsItem additional =
  Status_DetailsItem {additional = additional}

instance Core.FromJSON Status_DetailsItem where
  parseJSON =
    Core.withObject
      "Status_DetailsItem"
      (\o -> Status_DetailsItem Core.<$> (Core.parseJSONObject o))

instance Core.ToJSON Status_DetailsItem where
  toJSON Status_DetailsItem {..} = Core.toJSON additional

-- | Request message to unclaim a device.
--
-- /See:/ 'newUnclaimDeviceRequest' smart constructor.
data UnclaimDeviceRequest = UnclaimDeviceRequest
  { -- | Required. The device ID returned by @ClaimDevice@.
    deviceId :: (Core.Maybe Core.Int64),
    -- | Required. The device identifier you used when you claimed this device.
    deviceIdentifier :: (Core.Maybe DeviceIdentifier),
    -- | Required. The section type of the device\'s provisioning record.
    sectionType :: (Core.Maybe UnclaimDeviceRequest_SectionType),
    -- | The duration of the vacation unlock starting from when the request is processed. (1 day is treated as 24 hours)
    vacationModeDays :: (Core.Maybe Core.Int32),
    -- | The expiration time of the vacation unlock.
    vacationModeExpireTime :: (Core.Maybe Core.DateTime)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'UnclaimDeviceRequest' with the minimum fields required to make a request.
newUnclaimDeviceRequest ::
  UnclaimDeviceRequest
newUnclaimDeviceRequest =
  UnclaimDeviceRequest
    { deviceId = Core.Nothing,
      deviceIdentifier = Core.Nothing,
      sectionType = Core.Nothing,
      vacationModeDays = Core.Nothing,
      vacationModeExpireTime = Core.Nothing
    }

instance Core.FromJSON UnclaimDeviceRequest where
  parseJSON =
    Core.withObject
      "UnclaimDeviceRequest"
      ( \o ->
          UnclaimDeviceRequest
            Core.<$> (o Core..:? "deviceId" Core.<&> Core.fmap Core.fromAsText)
            Core.<*> (o Core..:? "deviceIdentifier")
            Core.<*> (o Core..:? "sectionType")
            Core.<*> (o Core..:? "vacationModeDays")
            Core.<*> (o Core..:? "vacationModeExpireTime")
      )

instance Core.ToJSON UnclaimDeviceRequest where
  toJSON UnclaimDeviceRequest {..} =
    Core.object
      ( Core.catMaybes
          [ ("deviceId" Core..=) Core.. Core.AsText Core.<$> deviceId,
            ("deviceIdentifier" Core..=) Core.<$> deviceIdentifier,
            ("sectionType" Core..=) Core.<$> sectionType,
            ("vacationModeDays" Core..=) Core.<$> vacationModeDays,
            ("vacationModeExpireTime" Core..=)
              Core.<$> vacationModeExpireTime
          ]
      )

-- | Request to unclaim devices asynchronously in batch.
--
-- /See:/ 'newUnclaimDevicesRequest' smart constructor.
newtype UnclaimDevicesRequest = UnclaimDevicesRequest
  { -- | Required. The list of devices to unclaim.
    unclaims :: (Core.Maybe [PartnerUnclaim])
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'UnclaimDevicesRequest' with the minimum fields required to make a request.
newUnclaimDevicesRequest ::
  UnclaimDevicesRequest
newUnclaimDevicesRequest =
  UnclaimDevicesRequest {unclaims = Core.Nothing}

instance Core.FromJSON UnclaimDevicesRequest where
  parseJSON =
    Core.withObject
      "UnclaimDevicesRequest"
      (\o -> UnclaimDevicesRequest Core.<$> (o Core..:? "unclaims"))

instance Core.ToJSON UnclaimDevicesRequest where
  toJSON UnclaimDevicesRequest {..} =
    Core.object
      (Core.catMaybes [("unclaims" Core..=) Core.<$> unclaims])

-- | Request to update device metadata in batch.
--
-- /See:/ 'newUpdateDeviceMetadataInBatchRequest' smart constructor.
newtype UpdateDeviceMetadataInBatchRequest = UpdateDeviceMetadataInBatchRequest
  { -- | Required. The list of metadata updates.
    updates :: (Core.Maybe [UpdateMetadataArguments])
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'UpdateDeviceMetadataInBatchRequest' with the minimum fields required to make a request.
newUpdateDeviceMetadataInBatchRequest ::
  UpdateDeviceMetadataInBatchRequest
newUpdateDeviceMetadataInBatchRequest =
  UpdateDeviceMetadataInBatchRequest {updates = Core.Nothing}

instance Core.FromJSON UpdateDeviceMetadataInBatchRequest where
  parseJSON =
    Core.withObject
      "UpdateDeviceMetadataInBatchRequest"
      ( \o ->
          UpdateDeviceMetadataInBatchRequest Core.<$> (o Core..:? "updates")
      )

instance Core.ToJSON UpdateDeviceMetadataInBatchRequest where
  toJSON UpdateDeviceMetadataInBatchRequest {..} =
    Core.object
      (Core.catMaybes [("updates" Core..=) Core.<$> updates])

-- | Request to set metadata for a device.
--
-- /See:/ 'newUpdateDeviceMetadataRequest' smart constructor.
newtype UpdateDeviceMetadataRequest = UpdateDeviceMetadataRequest
  { -- | Required. The metadata to attach to the device.
    deviceMetadata :: (Core.Maybe DeviceMetadata)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'UpdateDeviceMetadataRequest' with the minimum fields required to make a request.
newUpdateDeviceMetadataRequest ::
  UpdateDeviceMetadataRequest
newUpdateDeviceMetadataRequest =
  UpdateDeviceMetadataRequest {deviceMetadata = Core.Nothing}

instance Core.FromJSON UpdateDeviceMetadataRequest where
  parseJSON =
    Core.withObject
      "UpdateDeviceMetadataRequest"
      ( \o ->
          UpdateDeviceMetadataRequest Core.<$> (o Core..:? "deviceMetadata")
      )

instance Core.ToJSON UpdateDeviceMetadataRequest where
  toJSON UpdateDeviceMetadataRequest {..} =
    Core.object
      ( Core.catMaybes
          [("deviceMetadata" Core..=) Core.<$> deviceMetadata]
      )

-- | Identifies metadata updates to one device.
--
-- /See:/ 'newUpdateMetadataArguments' smart constructor.
data UpdateMetadataArguments = UpdateMetadataArguments
  { -- | Required. Device ID of the device.
    deviceId :: (Core.Maybe Core.Int64),
    -- | Required. Device identifier.
    deviceIdentifier :: (Core.Maybe DeviceIdentifier),
    -- | Required. The metadata to update.
    deviceMetadata :: (Core.Maybe DeviceMetadata)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'UpdateMetadataArguments' with the minimum fields required to make a request.
newUpdateMetadataArguments ::
  UpdateMetadataArguments
newUpdateMetadataArguments =
  UpdateMetadataArguments
    { deviceId = Core.Nothing,
      deviceIdentifier = Core.Nothing,
      deviceMetadata = Core.Nothing
    }

instance Core.FromJSON UpdateMetadataArguments where
  parseJSON =
    Core.withObject
      "UpdateMetadataArguments"
      ( \o ->
          UpdateMetadataArguments
            Core.<$> (o Core..:? "deviceId" Core.<&> Core.fmap Core.fromAsText)
            Core.<*> (o Core..:? "deviceIdentifier")
            Core.<*> (o Core..:? "deviceMetadata")
      )

instance Core.ToJSON UpdateMetadataArguments where
  toJSON UpdateMetadataArguments {..} =
    Core.object
      ( Core.catMaybes
          [ ("deviceId" Core..=) Core.. Core.AsText Core.<$> deviceId,
            ("deviceIdentifier" Core..=) Core.<$> deviceIdentifier,
            ("deviceMetadata" Core..=) Core.<$> deviceMetadata
          ]
      )