packages feed

gogol-cloudidentity-1.0.0: gen/Gogol/CloudIdentity/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.CloudIdentity.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.CloudIdentity.Internal.Product
  ( -- * AddIdpCredentialOperationMetadata
    AddIdpCredentialOperationMetadata (..),
    newAddIdpCredentialOperationMetadata,

    -- * AddIdpCredentialRequest
    AddIdpCredentialRequest (..),
    newAddIdpCredentialRequest,

    -- * CancelUserInvitationRequest
    CancelUserInvitationRequest (..),
    newCancelUserInvitationRequest,

    -- * CheckTransitiveMembershipResponse
    CheckTransitiveMembershipResponse (..),
    newCheckTransitiveMembershipResponse,

    -- * CreateGroupMetadata
    CreateGroupMetadata (..),
    newCreateGroupMetadata,

    -- * CreateInboundSamlSsoProfileOperationMetadata
    CreateInboundSamlSsoProfileOperationMetadata (..),
    newCreateInboundSamlSsoProfileOperationMetadata,

    -- * CreateInboundSsoAssignmentOperationMetadata
    CreateInboundSsoAssignmentOperationMetadata (..),
    newCreateInboundSsoAssignmentOperationMetadata,

    -- * CreateMembershipMetadata
    CreateMembershipMetadata (..),
    newCreateMembershipMetadata,

    -- * DeleteGroupMetadata
    DeleteGroupMetadata (..),
    newDeleteGroupMetadata,

    -- * DeleteIdpCredentialOperationMetadata
    DeleteIdpCredentialOperationMetadata (..),
    newDeleteIdpCredentialOperationMetadata,

    -- * DeleteInboundSamlSsoProfileOperationMetadata
    DeleteInboundSamlSsoProfileOperationMetadata (..),
    newDeleteInboundSamlSsoProfileOperationMetadata,

    -- * DeleteInboundSsoAssignmentOperationMetadata
    DeleteInboundSsoAssignmentOperationMetadata (..),
    newDeleteInboundSsoAssignmentOperationMetadata,

    -- * DeleteMembershipMetadata
    DeleteMembershipMetadata (..),
    newDeleteMembershipMetadata,

    -- * DsaPublicKeyInfo
    DsaPublicKeyInfo (..),
    newDsaPublicKeyInfo,

    -- * DynamicGroupMetadata
    DynamicGroupMetadata (..),
    newDynamicGroupMetadata,

    -- * DynamicGroupQuery
    DynamicGroupQuery (..),
    newDynamicGroupQuery,

    -- * DynamicGroupStatus
    DynamicGroupStatus (..),
    newDynamicGroupStatus,

    -- * EntityKey
    EntityKey (..),
    newEntityKey,

    -- * ExpiryDetail
    ExpiryDetail (..),
    newExpiryDetail,

    -- * GetMembershipGraphMetadata
    GetMembershipGraphMetadata (..),
    newGetMembershipGraphMetadata,

    -- * GetMembershipGraphResponse
    GetMembershipGraphResponse (..),
    newGetMembershipGraphResponse,

    -- * GoogleAppsCloudidentityDevicesV1AndroidAttributes
    GoogleAppsCloudidentityDevicesV1AndroidAttributes (..),
    newGoogleAppsCloudidentityDevicesV1AndroidAttributes,

    -- * GoogleAppsCloudidentityDevicesV1ApproveDeviceUserMetadata
    GoogleAppsCloudidentityDevicesV1ApproveDeviceUserMetadata (..),
    newGoogleAppsCloudidentityDevicesV1ApproveDeviceUserMetadata,

    -- * GoogleAppsCloudidentityDevicesV1ApproveDeviceUserRequest
    GoogleAppsCloudidentityDevicesV1ApproveDeviceUserRequest (..),
    newGoogleAppsCloudidentityDevicesV1ApproveDeviceUserRequest,

    -- * GoogleAppsCloudidentityDevicesV1ApproveDeviceUserResponse
    GoogleAppsCloudidentityDevicesV1ApproveDeviceUserResponse (..),
    newGoogleAppsCloudidentityDevicesV1ApproveDeviceUserResponse,

    -- * GoogleAppsCloudidentityDevicesV1BlockDeviceUserMetadata
    GoogleAppsCloudidentityDevicesV1BlockDeviceUserMetadata (..),
    newGoogleAppsCloudidentityDevicesV1BlockDeviceUserMetadata,

    -- * GoogleAppsCloudidentityDevicesV1BlockDeviceUserRequest
    GoogleAppsCloudidentityDevicesV1BlockDeviceUserRequest (..),
    newGoogleAppsCloudidentityDevicesV1BlockDeviceUserRequest,

    -- * GoogleAppsCloudidentityDevicesV1BlockDeviceUserResponse
    GoogleAppsCloudidentityDevicesV1BlockDeviceUserResponse (..),
    newGoogleAppsCloudidentityDevicesV1BlockDeviceUserResponse,

    -- * GoogleAppsCloudidentityDevicesV1BrowserAttributes
    GoogleAppsCloudidentityDevicesV1BrowserAttributes (..),
    newGoogleAppsCloudidentityDevicesV1BrowserAttributes,

    -- * GoogleAppsCloudidentityDevicesV1BrowserInfo
    GoogleAppsCloudidentityDevicesV1BrowserInfo (..),
    newGoogleAppsCloudidentityDevicesV1BrowserInfo,

    -- * GoogleAppsCloudidentityDevicesV1CancelWipeDeviceMetadata
    GoogleAppsCloudidentityDevicesV1CancelWipeDeviceMetadata (..),
    newGoogleAppsCloudidentityDevicesV1CancelWipeDeviceMetadata,

    -- * GoogleAppsCloudidentityDevicesV1CancelWipeDeviceRequest
    GoogleAppsCloudidentityDevicesV1CancelWipeDeviceRequest (..),
    newGoogleAppsCloudidentityDevicesV1CancelWipeDeviceRequest,

    -- * GoogleAppsCloudidentityDevicesV1CancelWipeDeviceResponse
    GoogleAppsCloudidentityDevicesV1CancelWipeDeviceResponse (..),
    newGoogleAppsCloudidentityDevicesV1CancelWipeDeviceResponse,

    -- * GoogleAppsCloudidentityDevicesV1CancelWipeDeviceUserMetadata
    GoogleAppsCloudidentityDevicesV1CancelWipeDeviceUserMetadata (..),
    newGoogleAppsCloudidentityDevicesV1CancelWipeDeviceUserMetadata,

    -- * GoogleAppsCloudidentityDevicesV1CancelWipeDeviceUserRequest
    GoogleAppsCloudidentityDevicesV1CancelWipeDeviceUserRequest (..),
    newGoogleAppsCloudidentityDevicesV1CancelWipeDeviceUserRequest,

    -- * GoogleAppsCloudidentityDevicesV1CancelWipeDeviceUserResponse
    GoogleAppsCloudidentityDevicesV1CancelWipeDeviceUserResponse (..),
    newGoogleAppsCloudidentityDevicesV1CancelWipeDeviceUserResponse,

    -- * GoogleAppsCloudidentityDevicesV1CertificateAttributes
    GoogleAppsCloudidentityDevicesV1CertificateAttributes (..),
    newGoogleAppsCloudidentityDevicesV1CertificateAttributes,

    -- * GoogleAppsCloudidentityDevicesV1CertificateTemplate
    GoogleAppsCloudidentityDevicesV1CertificateTemplate (..),
    newGoogleAppsCloudidentityDevicesV1CertificateTemplate,

    -- * GoogleAppsCloudidentityDevicesV1ClientState
    GoogleAppsCloudidentityDevicesV1ClientState (..),
    newGoogleAppsCloudidentityDevicesV1ClientState,

    -- * GoogleAppsCloudidentityDevicesV1ClientState_KeyValuePairs
    GoogleAppsCloudidentityDevicesV1ClientState_KeyValuePairs (..),
    newGoogleAppsCloudidentityDevicesV1ClientState_KeyValuePairs,

    -- * GoogleAppsCloudidentityDevicesV1CreateDeviceMetadata
    GoogleAppsCloudidentityDevicesV1CreateDeviceMetadata (..),
    newGoogleAppsCloudidentityDevicesV1CreateDeviceMetadata,

    -- * GoogleAppsCloudidentityDevicesV1CustomAttributeValue
    GoogleAppsCloudidentityDevicesV1CustomAttributeValue (..),
    newGoogleAppsCloudidentityDevicesV1CustomAttributeValue,

    -- * GoogleAppsCloudidentityDevicesV1DeleteDeviceMetadata
    GoogleAppsCloudidentityDevicesV1DeleteDeviceMetadata (..),
    newGoogleAppsCloudidentityDevicesV1DeleteDeviceMetadata,

    -- * GoogleAppsCloudidentityDevicesV1DeleteDeviceUserMetadata
    GoogleAppsCloudidentityDevicesV1DeleteDeviceUserMetadata (..),
    newGoogleAppsCloudidentityDevicesV1DeleteDeviceUserMetadata,

    -- * GoogleAppsCloudidentityDevicesV1Device
    GoogleAppsCloudidentityDevicesV1Device (..),
    newGoogleAppsCloudidentityDevicesV1Device,

    -- * GoogleAppsCloudidentityDevicesV1DeviceUser
    GoogleAppsCloudidentityDevicesV1DeviceUser (..),
    newGoogleAppsCloudidentityDevicesV1DeviceUser,

    -- * GoogleAppsCloudidentityDevicesV1EndpointVerificationSpecificAttributes
    GoogleAppsCloudidentityDevicesV1EndpointVerificationSpecificAttributes (..),
    newGoogleAppsCloudidentityDevicesV1EndpointVerificationSpecificAttributes,

    -- * GoogleAppsCloudidentityDevicesV1EndpointVerificationSpecificAttributes_AdditionalSignals
    GoogleAppsCloudidentityDevicesV1EndpointVerificationSpecificAttributes_AdditionalSignals (..),
    newGoogleAppsCloudidentityDevicesV1EndpointVerificationSpecificAttributes_AdditionalSignals,

    -- * GoogleAppsCloudidentityDevicesV1ListClientStatesResponse
    GoogleAppsCloudidentityDevicesV1ListClientStatesResponse (..),
    newGoogleAppsCloudidentityDevicesV1ListClientStatesResponse,

    -- * GoogleAppsCloudidentityDevicesV1ListDeviceUsersResponse
    GoogleAppsCloudidentityDevicesV1ListDeviceUsersResponse (..),
    newGoogleAppsCloudidentityDevicesV1ListDeviceUsersResponse,

    -- * GoogleAppsCloudidentityDevicesV1ListDevicesResponse
    GoogleAppsCloudidentityDevicesV1ListDevicesResponse (..),
    newGoogleAppsCloudidentityDevicesV1ListDevicesResponse,

    -- * GoogleAppsCloudidentityDevicesV1ListEndpointAppsMetadata
    GoogleAppsCloudidentityDevicesV1ListEndpointAppsMetadata (..),
    newGoogleAppsCloudidentityDevicesV1ListEndpointAppsMetadata,

    -- * GoogleAppsCloudidentityDevicesV1LookupSelfDeviceUsersResponse
    GoogleAppsCloudidentityDevicesV1LookupSelfDeviceUsersResponse (..),
    newGoogleAppsCloudidentityDevicesV1LookupSelfDeviceUsersResponse,

    -- * GoogleAppsCloudidentityDevicesV1SignoutDeviceUserMetadata
    GoogleAppsCloudidentityDevicesV1SignoutDeviceUserMetadata (..),
    newGoogleAppsCloudidentityDevicesV1SignoutDeviceUserMetadata,

    -- * GoogleAppsCloudidentityDevicesV1UpdateClientStateMetadata
    GoogleAppsCloudidentityDevicesV1UpdateClientStateMetadata (..),
    newGoogleAppsCloudidentityDevicesV1UpdateClientStateMetadata,

    -- * GoogleAppsCloudidentityDevicesV1UpdateDeviceMetadata
    GoogleAppsCloudidentityDevicesV1UpdateDeviceMetadata (..),
    newGoogleAppsCloudidentityDevicesV1UpdateDeviceMetadata,

    -- * GoogleAppsCloudidentityDevicesV1WipeDeviceMetadata
    GoogleAppsCloudidentityDevicesV1WipeDeviceMetadata (..),
    newGoogleAppsCloudidentityDevicesV1WipeDeviceMetadata,

    -- * GoogleAppsCloudidentityDevicesV1WipeDeviceRequest
    GoogleAppsCloudidentityDevicesV1WipeDeviceRequest (..),
    newGoogleAppsCloudidentityDevicesV1WipeDeviceRequest,

    -- * GoogleAppsCloudidentityDevicesV1WipeDeviceResponse
    GoogleAppsCloudidentityDevicesV1WipeDeviceResponse (..),
    newGoogleAppsCloudidentityDevicesV1WipeDeviceResponse,

    -- * GoogleAppsCloudidentityDevicesV1WipeDeviceUserMetadata
    GoogleAppsCloudidentityDevicesV1WipeDeviceUserMetadata (..),
    newGoogleAppsCloudidentityDevicesV1WipeDeviceUserMetadata,

    -- * GoogleAppsCloudidentityDevicesV1WipeDeviceUserRequest
    GoogleAppsCloudidentityDevicesV1WipeDeviceUserRequest (..),
    newGoogleAppsCloudidentityDevicesV1WipeDeviceUserRequest,

    -- * GoogleAppsCloudidentityDevicesV1WipeDeviceUserResponse
    GoogleAppsCloudidentityDevicesV1WipeDeviceUserResponse (..),
    newGoogleAppsCloudidentityDevicesV1WipeDeviceUserResponse,

    -- * Group
    Group (..),
    newGroup,

    -- * Group_Labels
    Group_Labels (..),
    newGroup_Labels,

    -- * GroupRelation
    GroupRelation (..),
    newGroupRelation,

    -- * GroupRelation_Labels
    GroupRelation_Labels (..),
    newGroupRelation_Labels,

    -- * IdpCredential
    IdpCredential (..),
    newIdpCredential,

    -- * InboundSamlSsoProfile
    InboundSamlSsoProfile (..),
    newInboundSamlSsoProfile,

    -- * InboundSsoAssignment
    InboundSsoAssignment (..),
    newInboundSsoAssignment,

    -- * IsInvitableUserResponse
    IsInvitableUserResponse (..),
    newIsInvitableUserResponse,

    -- * ListGroupsResponse
    ListGroupsResponse (..),
    newListGroupsResponse,

    -- * ListIdpCredentialsResponse
    ListIdpCredentialsResponse (..),
    newListIdpCredentialsResponse,

    -- * ListInboundSamlSsoProfilesResponse
    ListInboundSamlSsoProfilesResponse (..),
    newListInboundSamlSsoProfilesResponse,

    -- * ListInboundSsoAssignmentsResponse
    ListInboundSsoAssignmentsResponse (..),
    newListInboundSsoAssignmentsResponse,

    -- * ListMembershipsResponse
    ListMembershipsResponse (..),
    newListMembershipsResponse,

    -- * ListPoliciesResponse
    ListPoliciesResponse (..),
    newListPoliciesResponse,

    -- * ListUserInvitationsResponse
    ListUserInvitationsResponse (..),
    newListUserInvitationsResponse,

    -- * LookupGroupNameResponse
    LookupGroupNameResponse (..),
    newLookupGroupNameResponse,

    -- * LookupMembershipNameResponse
    LookupMembershipNameResponse (..),
    newLookupMembershipNameResponse,

    -- * MemberRelation
    MemberRelation (..),
    newMemberRelation,

    -- * MemberRestriction
    MemberRestriction (..),
    newMemberRestriction,

    -- * Membership
    Membership (..),
    newMembership,

    -- * MembershipAdjacencyList
    MembershipAdjacencyList (..),
    newMembershipAdjacencyList,

    -- * MembershipRelation
    MembershipRelation (..),
    newMembershipRelation,

    -- * MembershipRelation_Labels
    MembershipRelation_Labels (..),
    newMembershipRelation_Labels,

    -- * MembershipRole
    MembershipRole (..),
    newMembershipRole,

    -- * MembershipRoleRestrictionEvaluation
    MembershipRoleRestrictionEvaluation (..),
    newMembershipRoleRestrictionEvaluation,

    -- * ModifyMembershipRolesRequest
    ModifyMembershipRolesRequest (..),
    newModifyMembershipRolesRequest,

    -- * ModifyMembershipRolesResponse
    ModifyMembershipRolesResponse (..),
    newModifyMembershipRolesResponse,

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

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

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

    -- * Policy
    Policy (..),
    newPolicy,

    -- * PolicyQuery
    PolicyQuery (..),
    newPolicyQuery,

    -- * RestrictionEvaluation
    RestrictionEvaluation (..),
    newRestrictionEvaluation,

    -- * RestrictionEvaluations
    RestrictionEvaluations (..),
    newRestrictionEvaluations,

    -- * RsaPublicKeyInfo
    RsaPublicKeyInfo (..),
    newRsaPublicKeyInfo,

    -- * SamlIdpConfig
    SamlIdpConfig (..),
    newSamlIdpConfig,

    -- * SamlSpConfig
    SamlSpConfig (..),
    newSamlSpConfig,

    -- * SamlSsoInfo
    SamlSsoInfo (..),
    newSamlSsoInfo,

    -- * SearchDirectGroupsResponse
    SearchDirectGroupsResponse (..),
    newSearchDirectGroupsResponse,

    -- * SearchGroupsResponse
    SearchGroupsResponse (..),
    newSearchGroupsResponse,

    -- * SearchTransitiveGroupsResponse
    SearchTransitiveGroupsResponse (..),
    newSearchTransitiveGroupsResponse,

    -- * SearchTransitiveMembershipsResponse
    SearchTransitiveMembershipsResponse (..),
    newSearchTransitiveMembershipsResponse,

    -- * SecuritySettings
    SecuritySettings (..),
    newSecuritySettings,

    -- * SendUserInvitationRequest
    SendUserInvitationRequest (..),
    newSendUserInvitationRequest,

    -- * Setting
    Setting (..),
    newSetting,

    -- * Setting_Value
    Setting_Value (..),
    newSetting_Value,

    -- * SignInBehavior
    SignInBehavior (..),
    newSignInBehavior,

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

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

    -- * TransitiveMembershipRole
    TransitiveMembershipRole (..),
    newTransitiveMembershipRole,

    -- * UpdateGroupMetadata
    UpdateGroupMetadata (..),
    newUpdateGroupMetadata,

    -- * UpdateInboundSamlSsoProfileOperationMetadata
    UpdateInboundSamlSsoProfileOperationMetadata (..),
    newUpdateInboundSamlSsoProfileOperationMetadata,

    -- * UpdateInboundSsoAssignmentOperationMetadata
    UpdateInboundSsoAssignmentOperationMetadata (..),
    newUpdateInboundSsoAssignmentOperationMetadata,

    -- * UpdateMembershipMetadata
    UpdateMembershipMetadata (..),
    newUpdateMembershipMetadata,

    -- * UpdateMembershipRolesParams
    UpdateMembershipRolesParams (..),
    newUpdateMembershipRolesParams,

    -- * UserInvitation
    UserInvitation (..),
    newUserInvitation,
  )
where

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

-- | LRO response metadata for InboundSamlSsoProfilesService.AddIdpCredential.
--
-- /See:/ 'newAddIdpCredentialOperationMetadata' smart constructor.
newtype AddIdpCredentialOperationMetadata = AddIdpCredentialOperationMetadata
  { -- | State of this Operation Will be \"awaiting-multi-party-approval\" when the operation is deferred due to the target customer having enabled <https://support.google.com/a/answer/13790448 Multi-party approval for sensitive actions>.
    state :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'AddIdpCredentialOperationMetadata' with the minimum fields required to make a request.
newAddIdpCredentialOperationMetadata ::
  AddIdpCredentialOperationMetadata
newAddIdpCredentialOperationMetadata =
  AddIdpCredentialOperationMetadata {state = Core.Nothing}

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

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

-- | The request for creating an IdpCredential with its associated payload. An InboundSamlSsoProfile can own up to 2 credentials.
--
-- /See:/ 'newAddIdpCredentialRequest' smart constructor.
newtype AddIdpCredentialRequest = AddIdpCredentialRequest
  { -- | PEM encoded x509 certificate containing the public key for verifying IdP signatures.
    pemData :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'AddIdpCredentialRequest' with the minimum fields required to make a request.
newAddIdpCredentialRequest ::
  AddIdpCredentialRequest
newAddIdpCredentialRequest =
  AddIdpCredentialRequest {pemData = Core.Nothing}

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

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

-- | Request to cancel sent invitation for target email in UserInvitation.
--
-- /See:/ 'newCancelUserInvitationRequest' smart constructor.
data CancelUserInvitationRequest = CancelUserInvitationRequest
  deriving (Core.Eq, Core.Show, Core.Generic)

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

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

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

-- | The response message for MembershipsService.CheckTransitiveMembership.
--
-- /See:/ 'newCheckTransitiveMembershipResponse' smart constructor.
newtype CheckTransitiveMembershipResponse = CheckTransitiveMembershipResponse
  { -- | Response does not include the possible roles of a member since the behavior of this rpc is not all-or-nothing unlike the other rpcs. So, it may not be possible to list all the roles definitively, due to possible lack of authorization in some of the paths.
    hasMembership :: (Core.Maybe Core.Bool)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'CheckTransitiveMembershipResponse' with the minimum fields required to make a request.
newCheckTransitiveMembershipResponse ::
  CheckTransitiveMembershipResponse
newCheckTransitiveMembershipResponse =
  CheckTransitiveMembershipResponse {hasMembership = Core.Nothing}

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

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

-- | Metadata for CreateGroup LRO.
--
-- /See:/ 'newCreateGroupMetadata' smart constructor.
data CreateGroupMetadata = CreateGroupMetadata
  deriving (Core.Eq, Core.Show, Core.Generic)

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

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

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

-- | LRO response metadata for InboundSamlSsoProfilesService.CreateInboundSamlSsoProfile.
--
-- /See:/ 'newCreateInboundSamlSsoProfileOperationMetadata' smart constructor.
newtype CreateInboundSamlSsoProfileOperationMetadata = CreateInboundSamlSsoProfileOperationMetadata
  { -- | State of this Operation Will be \"awaiting-multi-party-approval\" when the operation is deferred due to the target customer having enabled <https://support.google.com/a/answer/13790448 Multi-party approval for sensitive actions>.
    state :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'CreateInboundSamlSsoProfileOperationMetadata' with the minimum fields required to make a request.
newCreateInboundSamlSsoProfileOperationMetadata ::
  CreateInboundSamlSsoProfileOperationMetadata
newCreateInboundSamlSsoProfileOperationMetadata =
  CreateInboundSamlSsoProfileOperationMetadata
    { state =
        Core.Nothing
    }

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

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

-- | LRO response metadata for InboundSsoAssignmentsService.CreateInboundSsoAssignment.
--
-- /See:/ 'newCreateInboundSsoAssignmentOperationMetadata' smart constructor.
data CreateInboundSsoAssignmentOperationMetadata = CreateInboundSsoAssignmentOperationMetadata
  deriving (Core.Eq, Core.Show, Core.Generic)

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

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

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

-- | Metadata for CreateMembership LRO.
--
-- /See:/ 'newCreateMembershipMetadata' smart constructor.
data CreateMembershipMetadata = CreateMembershipMetadata
  deriving (Core.Eq, Core.Show, Core.Generic)

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

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

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

-- | Metadata for DeleteGroup LRO.
--
-- /See:/ 'newDeleteGroupMetadata' smart constructor.
data DeleteGroupMetadata = DeleteGroupMetadata
  deriving (Core.Eq, Core.Show, Core.Generic)

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

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

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

-- | LRO response metadata for InboundSamlSsoProfilesService.DeleteIdpCredential.
--
-- /See:/ 'newDeleteIdpCredentialOperationMetadata' smart constructor.
data DeleteIdpCredentialOperationMetadata = DeleteIdpCredentialOperationMetadata
  deriving (Core.Eq, Core.Show, Core.Generic)

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

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

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

-- | LRO response metadata for InboundSamlSsoProfilesService.DeleteInboundSamlSsoProfile.
--
-- /See:/ 'newDeleteInboundSamlSsoProfileOperationMetadata' smart constructor.
data DeleteInboundSamlSsoProfileOperationMetadata = DeleteInboundSamlSsoProfileOperationMetadata
  deriving (Core.Eq, Core.Show, Core.Generic)

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

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

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

-- | LRO response metadata for InboundSsoAssignmentsService.DeleteInboundSsoAssignment.
--
-- /See:/ 'newDeleteInboundSsoAssignmentOperationMetadata' smart constructor.
data DeleteInboundSsoAssignmentOperationMetadata = DeleteInboundSsoAssignmentOperationMetadata
  deriving (Core.Eq, Core.Show, Core.Generic)

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

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

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

-- | Metadata for DeleteMembership LRO.
--
-- /See:/ 'newDeleteMembershipMetadata' smart constructor.
data DeleteMembershipMetadata = DeleteMembershipMetadata
  deriving (Core.Eq, Core.Show, Core.Generic)

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

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

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

-- | Information of a DSA public key.
--
-- /See:/ 'newDsaPublicKeyInfo' smart constructor.
newtype DsaPublicKeyInfo = DsaPublicKeyInfo
  { -- | Key size in bits (size of parameter P).
    keySize :: (Core.Maybe Core.Int32)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'DsaPublicKeyInfo' with the minimum fields required to make a request.
newDsaPublicKeyInfo ::
  DsaPublicKeyInfo
newDsaPublicKeyInfo = DsaPublicKeyInfo {keySize = Core.Nothing}

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

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

-- | Dynamic group metadata like queries and status.
--
-- /See:/ 'newDynamicGroupMetadata' smart constructor.
data DynamicGroupMetadata = DynamicGroupMetadata
  { -- | Memberships will be the union of all queries. Only one entry with USER resource is currently supported. Customers can create up to 500 dynamic groups.
    queries :: (Core.Maybe [DynamicGroupQuery]),
    -- | Output only. Status of the dynamic group.
    status :: (Core.Maybe DynamicGroupStatus)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'DynamicGroupMetadata' with the minimum fields required to make a request.
newDynamicGroupMetadata ::
  DynamicGroupMetadata
newDynamicGroupMetadata =
  DynamicGroupMetadata
    { queries = Core.Nothing,
      status = Core.Nothing
    }

instance Core.FromJSON DynamicGroupMetadata where
  parseJSON =
    Core.withObject
      "DynamicGroupMetadata"
      ( \o ->
          DynamicGroupMetadata
            Core.<$> (o Core..:? "queries")
            Core.<*> (o Core..:? "status")
      )

instance Core.ToJSON DynamicGroupMetadata where
  toJSON DynamicGroupMetadata {..} =
    Core.object
      ( Core.catMaybes
          [ ("queries" Core..=) Core.<$> queries,
            ("status" Core..=) Core.<$> status
          ]
      )

-- | Defines a query on a resource.
--
-- /See:/ 'newDynamicGroupQuery' smart constructor.
data DynamicGroupQuery = DynamicGroupQuery
  { -- | Query that determines the memberships of the dynamic group. Examples: All users with at least one @organizations.department@ of engineering. @user.organizations.exists(org, org.department==\'engineering\')@ All users with at least one location that has @area@ of @foo@ and @building_id@ of @bar@. @user.locations.exists(loc, loc.area==\'foo\' && loc.building_id==\'bar\')@ All users with any variation of the name John Doe (case-insensitive queries add @equalsIgnoreCase()@ to the value being queried). @user.name.value.equalsIgnoreCase(\'jOhn DoE\')@
    query :: (Core.Maybe Core.Text),
    -- | Resource type for the Dynamic Group Query
    resourceType :: (Core.Maybe DynamicGroupQuery_ResourceType)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'DynamicGroupQuery' with the minimum fields required to make a request.
newDynamicGroupQuery ::
  DynamicGroupQuery
newDynamicGroupQuery =
  DynamicGroupQuery
    { query = Core.Nothing,
      resourceType = Core.Nothing
    }

instance Core.FromJSON DynamicGroupQuery where
  parseJSON =
    Core.withObject
      "DynamicGroupQuery"
      ( \o ->
          DynamicGroupQuery
            Core.<$> (o Core..:? "query")
            Core.<*> (o Core..:? "resourceType")
      )

instance Core.ToJSON DynamicGroupQuery where
  toJSON DynamicGroupQuery {..} =
    Core.object
      ( Core.catMaybes
          [ ("query" Core..=) Core.<$> query,
            ("resourceType" Core..=) Core.<$> resourceType
          ]
      )

-- | The current status of a dynamic group along with timestamp.
--
-- /See:/ 'newDynamicGroupStatus' smart constructor.
data DynamicGroupStatus = DynamicGroupStatus
  { -- | Status of the dynamic group.
    status :: (Core.Maybe DynamicGroupStatus_Status),
    -- | The latest time at which the dynamic group is guaranteed to be in the given status. If status is @UP_TO_DATE@, the latest time at which the dynamic group was confirmed to be up-to-date. If status is @UPDATING_MEMBERSHIPS@, the time at which dynamic group was created.
    statusTime :: (Core.Maybe Core.DateTime)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'DynamicGroupStatus' with the minimum fields required to make a request.
newDynamicGroupStatus ::
  DynamicGroupStatus
newDynamicGroupStatus =
  DynamicGroupStatus
    { status = Core.Nothing,
      statusTime = Core.Nothing
    }

instance Core.FromJSON DynamicGroupStatus where
  parseJSON =
    Core.withObject
      "DynamicGroupStatus"
      ( \o ->
          DynamicGroupStatus
            Core.<$> (o Core..:? "status")
            Core.<*> (o Core..:? "statusTime")
      )

instance Core.ToJSON DynamicGroupStatus where
  toJSON DynamicGroupStatus {..} =
    Core.object
      ( Core.catMaybes
          [ ("status" Core..=) Core.<$> status,
            ("statusTime" Core..=) Core.<$> statusTime
          ]
      )

-- | A unique identifier for an entity in the Cloud Identity Groups API. An entity can represent either a group with an optional @namespace@ or a user without a @namespace@. The combination of @id@ and @namespace@ must be unique; however, the same @id@ can be used with different @namespace@s.
--
-- /See:/ 'newEntityKey' smart constructor.
data EntityKey = EntityKey
  { -- | The ID of the entity. For Google-managed entities, the @id@ should be the email address of an existing group or user. Email addresses need to adhere to <https://support.google.com/a/answer/9193374 name guidelines for users and groups>. For external-identity-mapped entities, the @id@ must be a string conforming to the Identity Source\'s requirements. Must be unique within a @namespace@.
    id :: (Core.Maybe Core.Text),
    -- | The namespace in which the entity exists. If not specified, the @EntityKey@ represents a Google-managed entity such as a Google user or a Google Group. If specified, the @EntityKey@ represents an external-identity-mapped group. The namespace must correspond to an identity source created in Admin Console and must be in the form of @identitysources\/{identity_source}@.
    namespace :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'EntityKey' with the minimum fields required to make a request.
newEntityKey ::
  EntityKey
newEntityKey =
  EntityKey {id = Core.Nothing, namespace = Core.Nothing}

instance Core.FromJSON EntityKey where
  parseJSON =
    Core.withObject
      "EntityKey"
      ( \o ->
          EntityKey
            Core.<$> (o Core..:? "id")
            Core.<*> (o Core..:? "namespace")
      )

instance Core.ToJSON EntityKey where
  toJSON EntityKey {..} =
    Core.object
      ( Core.catMaybes
          [ ("id" Core..=) Core.<$> id,
            ("namespace" Core..=) Core.<$> namespace
          ]
      )

-- | The @MembershipRole@ expiry details.
--
-- /See:/ 'newExpiryDetail' smart constructor.
newtype ExpiryDetail = ExpiryDetail
  { -- | The time at which the @MembershipRole@ will expire.
    expireTime :: (Core.Maybe Core.DateTime)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ExpiryDetail' with the minimum fields required to make a request.
newExpiryDetail ::
  ExpiryDetail
newExpiryDetail = ExpiryDetail {expireTime = Core.Nothing}

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

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

-- | Metadata of GetMembershipGraphResponse LRO. This is currently empty to permit future extensibility.
--
-- /See:/ 'newGetMembershipGraphMetadata' smart constructor.
data GetMembershipGraphMetadata = GetMembershipGraphMetadata
  deriving (Core.Eq, Core.Show, Core.Generic)

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

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

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

-- | The response message for MembershipsService.GetMembershipGraph.
--
-- /See:/ 'newGetMembershipGraphResponse' smart constructor.
data GetMembershipGraphResponse = GetMembershipGraphResponse
  { -- | The membership graph\'s path information represented as an adjacency list.
    adjacencyList :: (Core.Maybe [MembershipAdjacencyList]),
    -- | The resources representing each group in the adjacency list. Each group in this list can be correlated to a \'group\' of the MembershipAdjacencyList using the \'name\' of the Group resource.
    groups :: (Core.Maybe [Group])
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'GetMembershipGraphResponse' with the minimum fields required to make a request.
newGetMembershipGraphResponse ::
  GetMembershipGraphResponse
newGetMembershipGraphResponse =
  GetMembershipGraphResponse
    { adjacencyList = Core.Nothing,
      groups = Core.Nothing
    }

instance Core.FromJSON GetMembershipGraphResponse where
  parseJSON =
    Core.withObject
      "GetMembershipGraphResponse"
      ( \o ->
          GetMembershipGraphResponse
            Core.<$> (o Core..:? "adjacencyList")
            Core.<*> (o Core..:? "groups")
      )

instance Core.ToJSON GetMembershipGraphResponse where
  toJSON GetMembershipGraphResponse {..} =
    Core.object
      ( Core.catMaybes
          [ ("adjacencyList" Core..=) Core.<$> adjacencyList,
            ("groups" Core..=) Core.<$> groups
          ]
      )

-- | Resource representing the Android specific attributes of a Device.
--
-- /See:/ 'newGoogleAppsCloudidentityDevicesV1AndroidAttributes' smart constructor.
data GoogleAppsCloudidentityDevicesV1AndroidAttributes = GoogleAppsCloudidentityDevicesV1AndroidAttributes
  { -- | Whether the device passes Android CTS compliance.
    ctsProfileMatch :: (Core.Maybe Core.Bool),
    -- | Whether applications from unknown sources can be installed on device.
    enabledUnknownSources :: (Core.Maybe Core.Bool),
    -- | Whether any potentially harmful apps were detected on the device.
    hasPotentiallyHarmfulApps :: (Core.Maybe Core.Bool),
    -- | Whether this account is on an owner\/primary profile. For phones, only true for owner profiles. Android 4+ devices can have secondary or restricted user profiles.
    ownerProfileAccount :: (Core.Maybe Core.Bool),
    -- | Ownership privileges on device.
    ownershipPrivilege ::
      ( Core.Maybe
          GoogleAppsCloudidentityDevicesV1AndroidAttributes_OwnershipPrivilege
      ),
    -- | Whether device supports Android work profiles. If false, this service will not block access to corp data even if an administrator turns on the \"Enforce Work Profile\" policy.
    supportsWorkProfile :: (Core.Maybe Core.Bool),
    -- | Whether Android verified boot status is GREEN.
    verifiedBoot :: (Core.Maybe Core.Bool),
    -- | Whether Google Play Protect Verify Apps is enabled.
    verifyAppsEnabled :: (Core.Maybe Core.Bool)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'GoogleAppsCloudidentityDevicesV1AndroidAttributes' with the minimum fields required to make a request.
newGoogleAppsCloudidentityDevicesV1AndroidAttributes ::
  GoogleAppsCloudidentityDevicesV1AndroidAttributes
newGoogleAppsCloudidentityDevicesV1AndroidAttributes =
  GoogleAppsCloudidentityDevicesV1AndroidAttributes
    { ctsProfileMatch =
        Core.Nothing,
      enabledUnknownSources = Core.Nothing,
      hasPotentiallyHarmfulApps = Core.Nothing,
      ownerProfileAccount = Core.Nothing,
      ownershipPrivilege = Core.Nothing,
      supportsWorkProfile = Core.Nothing,
      verifiedBoot = Core.Nothing,
      verifyAppsEnabled = Core.Nothing
    }

instance
  Core.FromJSON
    GoogleAppsCloudidentityDevicesV1AndroidAttributes
  where
  parseJSON =
    Core.withObject
      "GoogleAppsCloudidentityDevicesV1AndroidAttributes"
      ( \o ->
          GoogleAppsCloudidentityDevicesV1AndroidAttributes
            Core.<$> (o Core..:? "ctsProfileMatch")
            Core.<*> (o Core..:? "enabledUnknownSources")
            Core.<*> (o Core..:? "hasPotentiallyHarmfulApps")
            Core.<*> (o Core..:? "ownerProfileAccount")
            Core.<*> (o Core..:? "ownershipPrivilege")
            Core.<*> (o Core..:? "supportsWorkProfile")
            Core.<*> (o Core..:? "verifiedBoot")
            Core.<*> (o Core..:? "verifyAppsEnabled")
      )

instance
  Core.ToJSON
    GoogleAppsCloudidentityDevicesV1AndroidAttributes
  where
  toJSON GoogleAppsCloudidentityDevicesV1AndroidAttributes {..} =
    Core.object
      ( Core.catMaybes
          [ ("ctsProfileMatch" Core..=) Core.<$> ctsProfileMatch,
            ("enabledUnknownSources" Core..=) Core.<$> enabledUnknownSources,
            ("hasPotentiallyHarmfulApps" Core..=)
              Core.<$> hasPotentiallyHarmfulApps,
            ("ownerProfileAccount" Core..=) Core.<$> ownerProfileAccount,
            ("ownershipPrivilege" Core..=) Core.<$> ownershipPrivilege,
            ("supportsWorkProfile" Core..=) Core.<$> supportsWorkProfile,
            ("verifiedBoot" Core..=) Core.<$> verifiedBoot,
            ("verifyAppsEnabled" Core..=) Core.<$> verifyAppsEnabled
          ]
      )

-- | Metadata for ApproveDeviceUser LRO.
--
-- /See:/ 'newGoogleAppsCloudidentityDevicesV1ApproveDeviceUserMetadata' smart constructor.
data GoogleAppsCloudidentityDevicesV1ApproveDeviceUserMetadata = GoogleAppsCloudidentityDevicesV1ApproveDeviceUserMetadata
  deriving (Core.Eq, Core.Show, Core.Generic)

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

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

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

-- | Request message for approving the device to access user data.
--
-- /See:/ 'newGoogleAppsCloudidentityDevicesV1ApproveDeviceUserRequest' smart constructor.
newtype GoogleAppsCloudidentityDevicesV1ApproveDeviceUserRequest = GoogleAppsCloudidentityDevicesV1ApproveDeviceUserRequest
  { -- | Optional. <https://cloud.google.com/apis/design/resource_names Resource name> of the customer. If you\'re using this API for your own organization, use @customers\/my_customer@ If you\'re using this API to manage another organization, use @customers\/{customer}@, where customer is the customer to whom the device belongs.
    customer :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

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

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

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

-- | Response message for approving the device to access user data.
--
-- /See:/ 'newGoogleAppsCloudidentityDevicesV1ApproveDeviceUserResponse' smart constructor.
newtype GoogleAppsCloudidentityDevicesV1ApproveDeviceUserResponse = GoogleAppsCloudidentityDevicesV1ApproveDeviceUserResponse
  { -- | Resultant DeviceUser object for the action.
    deviceUser :: (Core.Maybe GoogleAppsCloudidentityDevicesV1DeviceUser)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'GoogleAppsCloudidentityDevicesV1ApproveDeviceUserResponse' with the minimum fields required to make a request.
newGoogleAppsCloudidentityDevicesV1ApproveDeviceUserResponse ::
  GoogleAppsCloudidentityDevicesV1ApproveDeviceUserResponse
newGoogleAppsCloudidentityDevicesV1ApproveDeviceUserResponse =
  GoogleAppsCloudidentityDevicesV1ApproveDeviceUserResponse
    { deviceUser =
        Core.Nothing
    }

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

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

-- | Metadata for BlockDeviceUser LRO.
--
-- /See:/ 'newGoogleAppsCloudidentityDevicesV1BlockDeviceUserMetadata' smart constructor.
data GoogleAppsCloudidentityDevicesV1BlockDeviceUserMetadata = GoogleAppsCloudidentityDevicesV1BlockDeviceUserMetadata
  deriving (Core.Eq, Core.Show, Core.Generic)

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

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

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

-- | Request message for blocking account on device.
--
-- /See:/ 'newGoogleAppsCloudidentityDevicesV1BlockDeviceUserRequest' smart constructor.
newtype GoogleAppsCloudidentityDevicesV1BlockDeviceUserRequest = GoogleAppsCloudidentityDevicesV1BlockDeviceUserRequest
  { -- | Optional. <https://cloud.google.com/apis/design/resource_names Resource name> of the customer. If you\'re using this API for your own organization, use @customers\/my_customer@ If you\'re using this API to manage another organization, use @customers\/{customer}@, where customer is the customer to whom the device belongs.
    customer :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

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

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

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

-- | Response message for blocking the device from accessing user data.
--
-- /See:/ 'newGoogleAppsCloudidentityDevicesV1BlockDeviceUserResponse' smart constructor.
newtype GoogleAppsCloudidentityDevicesV1BlockDeviceUserResponse = GoogleAppsCloudidentityDevicesV1BlockDeviceUserResponse
  { -- | Resultant DeviceUser object for the action.
    deviceUser :: (Core.Maybe GoogleAppsCloudidentityDevicesV1DeviceUser)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'GoogleAppsCloudidentityDevicesV1BlockDeviceUserResponse' with the minimum fields required to make a request.
newGoogleAppsCloudidentityDevicesV1BlockDeviceUserResponse ::
  GoogleAppsCloudidentityDevicesV1BlockDeviceUserResponse
newGoogleAppsCloudidentityDevicesV1BlockDeviceUserResponse =
  GoogleAppsCloudidentityDevicesV1BlockDeviceUserResponse
    { deviceUser =
        Core.Nothing
    }

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

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

-- | Contains information about browser profiles reported by the <https://chromewebstore.google.com/detail/endpoint-verification/callobklhcbilhphinckomhgkigmfocg?pli=1 Endpoint Verification extension>.
--
-- /See:/ 'newGoogleAppsCloudidentityDevicesV1BrowserAttributes' smart constructor.
data GoogleAppsCloudidentityDevicesV1BrowserAttributes = GoogleAppsCloudidentityDevicesV1BrowserAttributes
  { -- | Represents the current state of the <https://cloud.google.com/access-context-manager/docs/browser-attributes Chrome browser attributes> sent by the <https://chromewebstore.google.com/detail/endpoint-verification/callobklhcbilhphinckomhgkigmfocg?pli=1 Endpoint Verification extension>.
    chromeBrowserInfo :: (Core.Maybe GoogleAppsCloudidentityDevicesV1BrowserInfo),
    -- | Chrome profile ID that is exposed by the Chrome API. It is unique for each device.
    chromeProfileId :: (Core.Maybe Core.Text),
    -- | Timestamp in milliseconds since the Unix epoch when the profile\/gcm id was last synced.
    lastProfileSyncTime :: (Core.Maybe Core.DateTime)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'GoogleAppsCloudidentityDevicesV1BrowserAttributes' with the minimum fields required to make a request.
newGoogleAppsCloudidentityDevicesV1BrowserAttributes ::
  GoogleAppsCloudidentityDevicesV1BrowserAttributes
newGoogleAppsCloudidentityDevicesV1BrowserAttributes =
  GoogleAppsCloudidentityDevicesV1BrowserAttributes
    { chromeBrowserInfo =
        Core.Nothing,
      chromeProfileId = Core.Nothing,
      lastProfileSyncTime = Core.Nothing
    }

instance
  Core.FromJSON
    GoogleAppsCloudidentityDevicesV1BrowserAttributes
  where
  parseJSON =
    Core.withObject
      "GoogleAppsCloudidentityDevicesV1BrowserAttributes"
      ( \o ->
          GoogleAppsCloudidentityDevicesV1BrowserAttributes
            Core.<$> (o Core..:? "chromeBrowserInfo")
            Core.<*> (o Core..:? "chromeProfileId")
            Core.<*> (o Core..:? "lastProfileSyncTime")
      )

instance
  Core.ToJSON
    GoogleAppsCloudidentityDevicesV1BrowserAttributes
  where
  toJSON GoogleAppsCloudidentityDevicesV1BrowserAttributes {..} =
    Core.object
      ( Core.catMaybes
          [ ("chromeBrowserInfo" Core..=) Core.<$> chromeBrowserInfo,
            ("chromeProfileId" Core..=) Core.<$> chromeProfileId,
            ("lastProfileSyncTime" Core..=) Core.<$> lastProfileSyncTime
          ]
      )

-- | Browser-specific fields reported by the <https://chromewebstore.google.com/detail/endpoint-verification/callobklhcbilhphinckomhgkigmfocg?pli=1 Endpoint Verification extension>.
--
-- /See:/ 'newGoogleAppsCloudidentityDevicesV1BrowserInfo' smart constructor.
data GoogleAppsCloudidentityDevicesV1BrowserInfo = GoogleAppsCloudidentityDevicesV1BrowserInfo
  { -- | Output only. Browser\'s management state.
    browserManagementState ::
      ( Core.Maybe
          GoogleAppsCloudidentityDevicesV1BrowserInfo_BrowserManagementState
      ),
    -- | Version of the request initiating browser. E.g. @91.0.4442.4@.
    browserVersion :: (Core.Maybe Core.Text),
    -- | Current state of <https://chromeenterprise.google/policies/#BuiltInDnsClientEnabled built-in DNS client>.
    isBuiltInDnsClientEnabled :: (Core.Maybe Core.Bool),
    -- | Current state of <https://chromeenterprise.google/policies/#OnBulkDataEntryEnterpriseConnector bulk data analysis>. Set to true if provider list from Chrome is non-empty.
    isBulkDataEntryAnalysisEnabled :: (Core.Maybe Core.Bool),
    -- | Current state of <https://chromeenterprise.google/policies/#ChromeCleanupEnabled Chrome Cleanup>.
    isChromeCleanupEnabled :: (Core.Maybe Core.Bool),
    -- | Current state of <https://chromeenterprise.google/policies/#URLBlocklist Chrome Remote Desktop app>.
    isChromeRemoteDesktopAppBlocked :: (Core.Maybe Core.Bool),
    -- | Current state of <https://chromeenterprise.google/policies/#OnFileDownloadedEnterpriseConnector file download analysis>. Set to true if provider list from Chrome is non-empty.
    isFileDownloadAnalysisEnabled :: (Core.Maybe Core.Bool),
    -- | Current state of <https://chromeenterprise.google/policies/#OnFileAttachedEnterpriseConnector file upload analysis>. Set to true if provider list from Chrome is non-empty.
    isFileUploadAnalysisEnabled :: (Core.Maybe Core.Bool),
    -- | Current state of <https://chromeenterprise.google/policies/#EnterpriseRealTimeUrlCheckMode real-time URL check>. Set to true if provider list from Chrome is non-empty.
    isRealtimeUrlCheckEnabled :: (Core.Maybe Core.Bool),
    -- | Current state of <https://chromeenterprise.google/policies/#OnSecurityEventEnterpriseConnector security event analysis>. Set to true if provider list from Chrome is non-empty.
    isSecurityEventAnalysisEnabled :: (Core.Maybe Core.Bool),
    -- | Current state of <https://chromeenterprise.google/policies/?policy=IsolateOrigins site isolation>.
    isSiteIsolationEnabled :: (Core.Maybe Core.Bool),
    -- | Current state of <https://chromeenterprise.google/policies/#ThirdPartyBlockingEnabled third-party blocking>.
    isThirdPartyBlockingEnabled :: (Core.Maybe Core.Bool),
    -- | Current state of <https://chromeenterprise.google/policies/#PasswordProtectionWarningTrigger password protection trigger>.
    passwordProtectionWarningTrigger ::
      ( Core.Maybe
          GoogleAppsCloudidentityDevicesV1BrowserInfo_PasswordProtectionWarningTrigger
      ),
    -- | Current state of <https://chromeenterprise.google/policies/#SafeBrowsingProtectionLevel Safe Browsing protection level>.
    safeBrowsingProtectionLevel ::
      ( Core.Maybe
          GoogleAppsCloudidentityDevicesV1BrowserInfo_SafeBrowsingProtectionLevel
      )
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'GoogleAppsCloudidentityDevicesV1BrowserInfo' with the minimum fields required to make a request.
newGoogleAppsCloudidentityDevicesV1BrowserInfo ::
  GoogleAppsCloudidentityDevicesV1BrowserInfo
newGoogleAppsCloudidentityDevicesV1BrowserInfo =
  GoogleAppsCloudidentityDevicesV1BrowserInfo
    { browserManagementState =
        Core.Nothing,
      browserVersion = Core.Nothing,
      isBuiltInDnsClientEnabled = Core.Nothing,
      isBulkDataEntryAnalysisEnabled = Core.Nothing,
      isChromeCleanupEnabled = Core.Nothing,
      isChromeRemoteDesktopAppBlocked = Core.Nothing,
      isFileDownloadAnalysisEnabled = Core.Nothing,
      isFileUploadAnalysisEnabled = Core.Nothing,
      isRealtimeUrlCheckEnabled = Core.Nothing,
      isSecurityEventAnalysisEnabled = Core.Nothing,
      isSiteIsolationEnabled = Core.Nothing,
      isThirdPartyBlockingEnabled = Core.Nothing,
      passwordProtectionWarningTrigger = Core.Nothing,
      safeBrowsingProtectionLevel = Core.Nothing
    }

instance Core.FromJSON GoogleAppsCloudidentityDevicesV1BrowserInfo where
  parseJSON =
    Core.withObject
      "GoogleAppsCloudidentityDevicesV1BrowserInfo"
      ( \o ->
          GoogleAppsCloudidentityDevicesV1BrowserInfo
            Core.<$> (o Core..:? "browserManagementState")
            Core.<*> (o Core..:? "browserVersion")
            Core.<*> (o Core..:? "isBuiltInDnsClientEnabled")
            Core.<*> (o Core..:? "isBulkDataEntryAnalysisEnabled")
            Core.<*> (o Core..:? "isChromeCleanupEnabled")
            Core.<*> (o Core..:? "isChromeRemoteDesktopAppBlocked")
            Core.<*> (o Core..:? "isFileDownloadAnalysisEnabled")
            Core.<*> (o Core..:? "isFileUploadAnalysisEnabled")
            Core.<*> (o Core..:? "isRealtimeUrlCheckEnabled")
            Core.<*> (o Core..:? "isSecurityEventAnalysisEnabled")
            Core.<*> (o Core..:? "isSiteIsolationEnabled")
            Core.<*> (o Core..:? "isThirdPartyBlockingEnabled")
            Core.<*> (o Core..:? "passwordProtectionWarningTrigger")
            Core.<*> (o Core..:? "safeBrowsingProtectionLevel")
      )

instance Core.ToJSON GoogleAppsCloudidentityDevicesV1BrowserInfo where
  toJSON GoogleAppsCloudidentityDevicesV1BrowserInfo {..} =
    Core.object
      ( Core.catMaybes
          [ ("browserManagementState" Core..=)
              Core.<$> browserManagementState,
            ("browserVersion" Core..=) Core.<$> browserVersion,
            ("isBuiltInDnsClientEnabled" Core..=)
              Core.<$> isBuiltInDnsClientEnabled,
            ("isBulkDataEntryAnalysisEnabled" Core..=)
              Core.<$> isBulkDataEntryAnalysisEnabled,
            ("isChromeCleanupEnabled" Core..=) Core.<$> isChromeCleanupEnabled,
            ("isChromeRemoteDesktopAppBlocked" Core..=)
              Core.<$> isChromeRemoteDesktopAppBlocked,
            ("isFileDownloadAnalysisEnabled" Core..=)
              Core.<$> isFileDownloadAnalysisEnabled,
            ("isFileUploadAnalysisEnabled" Core..=)
              Core.<$> isFileUploadAnalysisEnabled,
            ("isRealtimeUrlCheckEnabled" Core..=)
              Core.<$> isRealtimeUrlCheckEnabled,
            ("isSecurityEventAnalysisEnabled" Core..=)
              Core.<$> isSecurityEventAnalysisEnabled,
            ("isSiteIsolationEnabled" Core..=) Core.<$> isSiteIsolationEnabled,
            ("isThirdPartyBlockingEnabled" Core..=)
              Core.<$> isThirdPartyBlockingEnabled,
            ("passwordProtectionWarningTrigger" Core..=)
              Core.<$> passwordProtectionWarningTrigger,
            ("safeBrowsingProtectionLevel" Core..=)
              Core.<$> safeBrowsingProtectionLevel
          ]
      )

-- | Metadata for CancelWipeDevice LRO.
--
-- /See:/ 'newGoogleAppsCloudidentityDevicesV1CancelWipeDeviceMetadata' smart constructor.
data GoogleAppsCloudidentityDevicesV1CancelWipeDeviceMetadata = GoogleAppsCloudidentityDevicesV1CancelWipeDeviceMetadata
  deriving (Core.Eq, Core.Show, Core.Generic)

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

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

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

-- | Request message for cancelling an unfinished device wipe.
--
-- /See:/ 'newGoogleAppsCloudidentityDevicesV1CancelWipeDeviceRequest' smart constructor.
newtype GoogleAppsCloudidentityDevicesV1CancelWipeDeviceRequest = GoogleAppsCloudidentityDevicesV1CancelWipeDeviceRequest
  { -- | Optional. <https://cloud.google.com/apis/design/resource_names Resource name> of the customer. If you\'re using this API for your own organization, use @customers\/my_customer@ If you\'re using this API to manage another organization, use @customers\/{customer}@, where customer is the customer to whom the device belongs.
    customer :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

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

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

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

-- | Response message for cancelling an unfinished device wipe.
--
-- /See:/ 'newGoogleAppsCloudidentityDevicesV1CancelWipeDeviceResponse' smart constructor.
newtype GoogleAppsCloudidentityDevicesV1CancelWipeDeviceResponse = GoogleAppsCloudidentityDevicesV1CancelWipeDeviceResponse
  { -- | Resultant Device object for the action. Note that asset tags will not be returned in the device object.
    device :: (Core.Maybe GoogleAppsCloudidentityDevicesV1Device)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

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

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

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

-- | Metadata for CancelWipeDeviceUser LRO.
--
-- /See:/ 'newGoogleAppsCloudidentityDevicesV1CancelWipeDeviceUserMetadata' smart constructor.
data GoogleAppsCloudidentityDevicesV1CancelWipeDeviceUserMetadata = GoogleAppsCloudidentityDevicesV1CancelWipeDeviceUserMetadata
  deriving (Core.Eq, Core.Show, Core.Generic)

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

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

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

-- | Request message for cancelling an unfinished user account wipe.
--
-- /See:/ 'newGoogleAppsCloudidentityDevicesV1CancelWipeDeviceUserRequest' smart constructor.
newtype GoogleAppsCloudidentityDevicesV1CancelWipeDeviceUserRequest = GoogleAppsCloudidentityDevicesV1CancelWipeDeviceUserRequest
  { -- | Optional. <https://cloud.google.com/apis/design/resource_names Resource name> of the customer. If you\'re using this API for your own organization, use @customers\/my_customer@ If you\'re using this API to manage another organization, use @customers\/{customer}@, where customer is the customer to whom the device belongs.
    customer :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

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

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

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

-- | Response message for cancelling an unfinished user account wipe.
--
-- /See:/ 'newGoogleAppsCloudidentityDevicesV1CancelWipeDeviceUserResponse' smart constructor.
newtype GoogleAppsCloudidentityDevicesV1CancelWipeDeviceUserResponse = GoogleAppsCloudidentityDevicesV1CancelWipeDeviceUserResponse
  { -- | Resultant DeviceUser object for the action.
    deviceUser :: (Core.Maybe GoogleAppsCloudidentityDevicesV1DeviceUser)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'GoogleAppsCloudidentityDevicesV1CancelWipeDeviceUserResponse' with the minimum fields required to make a request.
newGoogleAppsCloudidentityDevicesV1CancelWipeDeviceUserResponse ::
  GoogleAppsCloudidentityDevicesV1CancelWipeDeviceUserResponse
newGoogleAppsCloudidentityDevicesV1CancelWipeDeviceUserResponse =
  GoogleAppsCloudidentityDevicesV1CancelWipeDeviceUserResponse
    { deviceUser =
        Core.Nothing
    }

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

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

-- | Stores information about a certificate.
--
-- /See:/ 'newGoogleAppsCloudidentityDevicesV1CertificateAttributes' smart constructor.
data GoogleAppsCloudidentityDevicesV1CertificateAttributes = GoogleAppsCloudidentityDevicesV1CertificateAttributes
  { -- | The X.509 extension for CertificateTemplate.
    certificateTemplate :: (Core.Maybe GoogleAppsCloudidentityDevicesV1CertificateTemplate),
    -- | The encoded certificate fingerprint.
    fingerprint :: (Core.Maybe Core.Text),
    -- | The name of the issuer of this certificate.
    issuer :: (Core.Maybe Core.Text),
    -- | Serial number of the certificate, Example: \"123456789\".
    serialNumber :: (Core.Maybe Core.Text),
    -- | The subject name of this certificate.
    subject :: (Core.Maybe Core.Text),
    -- | The certificate thumbprint.
    thumbprint :: (Core.Maybe Core.Text),
    -- | Output only. Validation state of this certificate.
    validationState ::
      ( Core.Maybe
          GoogleAppsCloudidentityDevicesV1CertificateAttributes_ValidationState
      ),
    -- | Certificate not valid at or after this timestamp.
    validityExpirationTime :: (Core.Maybe Core.DateTime),
    -- | Certificate not valid before this timestamp.
    validityStartTime :: (Core.Maybe Core.DateTime)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'GoogleAppsCloudidentityDevicesV1CertificateAttributes' with the minimum fields required to make a request.
newGoogleAppsCloudidentityDevicesV1CertificateAttributes ::
  GoogleAppsCloudidentityDevicesV1CertificateAttributes
newGoogleAppsCloudidentityDevicesV1CertificateAttributes =
  GoogleAppsCloudidentityDevicesV1CertificateAttributes
    { certificateTemplate =
        Core.Nothing,
      fingerprint = Core.Nothing,
      issuer = Core.Nothing,
      serialNumber = Core.Nothing,
      subject = Core.Nothing,
      thumbprint = Core.Nothing,
      validationState = Core.Nothing,
      validityExpirationTime = Core.Nothing,
      validityStartTime = Core.Nothing
    }

instance
  Core.FromJSON
    GoogleAppsCloudidentityDevicesV1CertificateAttributes
  where
  parseJSON =
    Core.withObject
      "GoogleAppsCloudidentityDevicesV1CertificateAttributes"
      ( \o ->
          GoogleAppsCloudidentityDevicesV1CertificateAttributes
            Core.<$> (o Core..:? "certificateTemplate")
            Core.<*> (o Core..:? "fingerprint")
            Core.<*> (o Core..:? "issuer")
            Core.<*> (o Core..:? "serialNumber")
            Core.<*> (o Core..:? "subject")
            Core.<*> (o Core..:? "thumbprint")
            Core.<*> (o Core..:? "validationState")
            Core.<*> (o Core..:? "validityExpirationTime")
            Core.<*> (o Core..:? "validityStartTime")
      )

instance
  Core.ToJSON
    GoogleAppsCloudidentityDevicesV1CertificateAttributes
  where
  toJSON GoogleAppsCloudidentityDevicesV1CertificateAttributes {..} =
    Core.object
      ( Core.catMaybes
          [ ("certificateTemplate" Core..=) Core.<$> certificateTemplate,
            ("fingerprint" Core..=) Core.<$> fingerprint,
            ("issuer" Core..=) Core.<$> issuer,
            ("serialNumber" Core..=) Core.<$> serialNumber,
            ("subject" Core..=) Core.<$> subject,
            ("thumbprint" Core..=) Core.<$> thumbprint,
            ("validationState" Core..=) Core.<$> validationState,
            ("validityExpirationTime" Core..=) Core.<$> validityExpirationTime,
            ("validityStartTime" Core..=) Core.<$> validityStartTime
          ]
      )

-- | CertificateTemplate (v3 Extension in X.509).
--
-- /See:/ 'newGoogleAppsCloudidentityDevicesV1CertificateTemplate' smart constructor.
data GoogleAppsCloudidentityDevicesV1CertificateTemplate = GoogleAppsCloudidentityDevicesV1CertificateTemplate
  { -- | The template id of the template. Example: \"1.3.6.1.4.1.311.21.8.15608621.11768144.5720724.16068415.6889630.81.2472537.7784047\".
    id :: (Core.Maybe Core.Text),
    -- | The Major version of the template. Example: 100.
    majorVersion :: (Core.Maybe Core.Int32),
    -- | The minor version of the template. Example: 12.
    minorVersion :: (Core.Maybe Core.Int32)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'GoogleAppsCloudidentityDevicesV1CertificateTemplate' with the minimum fields required to make a request.
newGoogleAppsCloudidentityDevicesV1CertificateTemplate ::
  GoogleAppsCloudidentityDevicesV1CertificateTemplate
newGoogleAppsCloudidentityDevicesV1CertificateTemplate =
  GoogleAppsCloudidentityDevicesV1CertificateTemplate
    { id =
        Core.Nothing,
      majorVersion = Core.Nothing,
      minorVersion = Core.Nothing
    }

instance
  Core.FromJSON
    GoogleAppsCloudidentityDevicesV1CertificateTemplate
  where
  parseJSON =
    Core.withObject
      "GoogleAppsCloudidentityDevicesV1CertificateTemplate"
      ( \o ->
          GoogleAppsCloudidentityDevicesV1CertificateTemplate
            Core.<$> (o Core..:? "id")
            Core.<*> (o Core..:? "majorVersion")
            Core.<*> (o Core..:? "minorVersion")
      )

instance
  Core.ToJSON
    GoogleAppsCloudidentityDevicesV1CertificateTemplate
  where
  toJSON GoogleAppsCloudidentityDevicesV1CertificateTemplate {..} =
    Core.object
      ( Core.catMaybes
          [ ("id" Core..=) Core.<$> id,
            ("majorVersion" Core..=) Core.<$> majorVersion,
            ("minorVersion" Core..=) Core.<$> minorVersion
          ]
      )

-- | Represents the state associated with an API client calling the Devices API. Resource representing ClientState and supports updates from API users
--
-- /See:/ 'newGoogleAppsCloudidentityDevicesV1ClientState' smart constructor.
data GoogleAppsCloudidentityDevicesV1ClientState = GoogleAppsCloudidentityDevicesV1ClientState
  { -- | The caller can specify asset tags for this resource
    assetTags :: (Core.Maybe [Core.Text]),
    -- | The compliance state of the resource as specified by the API client.
    complianceState ::
      ( Core.Maybe
          GoogleAppsCloudidentityDevicesV1ClientState_ComplianceState
      ),
    -- | Output only. The time the client state data was created.
    createTime :: (Core.Maybe Core.DateTime),
    -- | This field may be used to store a unique identifier for the API resource within which these CustomAttributes are a field.
    customId :: (Core.Maybe Core.Text),
    -- | The token that needs to be passed back for concurrency control in updates. Token needs to be passed back in UpdateRequest
    etag :: (Core.Maybe Core.Text),
    -- | The Health score of the resource. The Health score is the callers specification of the condition of the device from a usability point of view. For example, a third-party device management provider may specify a health score based on its compliance with organizational policies.
    healthScore ::
      ( Core.Maybe
          GoogleAppsCloudidentityDevicesV1ClientState_HealthScore
      ),
    -- | The map of key-value attributes stored by callers specific to a device. The total serialized length of this map may not exceed 10KB. No limit is placed on the number of attributes in a map.
    keyValuePairs ::
      ( Core.Maybe
          GoogleAppsCloudidentityDevicesV1ClientState_KeyValuePairs
      ),
    -- | Output only. The time the client state data was last updated.
    lastUpdateTime :: (Core.Maybe Core.DateTime),
    -- | The management state of the resource as specified by the API client.
    managed :: (Core.Maybe GoogleAppsCloudidentityDevicesV1ClientState_Managed),
    -- | Output only. <https://cloud.google.com/apis/design/resource_names Resource name> of the ClientState in format: @devices\/{device}\/deviceUsers\/{device_user}\/clientState\/{partner}@, where partner corresponds to the partner storing the data. For partners belonging to the \"BeyondCorp Alliance\", this is the partner ID specified to you by Google. For all other callers, this is a string of the form: @{customer}-suffix@, where @customer@ is your customer ID. The /suffix/ is any string the caller specifies. This string will be displayed verbatim in the administration console. This suffix is used in setting up Custom Access Levels in Context-Aware Access. Your organization\'s customer ID can be obtained from the URL: @GET https:\/\/www.googleapis.com\/admin\/directory\/v1\/customers\/my_customer@ The @id@ field in the response contains the customer ID starting with the letter \'C\'. The customer ID to be used in this API is the string after the letter \'C\' (not including \'C\')
    name :: (Core.Maybe Core.Text),
    -- | Output only. The owner of the ClientState
    ownerType :: (Core.Maybe GoogleAppsCloudidentityDevicesV1ClientState_OwnerType),
    -- | A descriptive cause of the health score.
    scoreReason :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'GoogleAppsCloudidentityDevicesV1ClientState' with the minimum fields required to make a request.
newGoogleAppsCloudidentityDevicesV1ClientState ::
  GoogleAppsCloudidentityDevicesV1ClientState
newGoogleAppsCloudidentityDevicesV1ClientState =
  GoogleAppsCloudidentityDevicesV1ClientState
    { assetTags =
        Core.Nothing,
      complianceState = Core.Nothing,
      createTime = Core.Nothing,
      customId = Core.Nothing,
      etag = Core.Nothing,
      healthScore = Core.Nothing,
      keyValuePairs = Core.Nothing,
      lastUpdateTime = Core.Nothing,
      managed = Core.Nothing,
      name = Core.Nothing,
      ownerType = Core.Nothing,
      scoreReason = Core.Nothing
    }

instance Core.FromJSON GoogleAppsCloudidentityDevicesV1ClientState where
  parseJSON =
    Core.withObject
      "GoogleAppsCloudidentityDevicesV1ClientState"
      ( \o ->
          GoogleAppsCloudidentityDevicesV1ClientState
            Core.<$> (o Core..:? "assetTags")
            Core.<*> (o Core..:? "complianceState")
            Core.<*> (o Core..:? "createTime")
            Core.<*> (o Core..:? "customId")
            Core.<*> (o Core..:? "etag")
            Core.<*> (o Core..:? "healthScore")
            Core.<*> (o Core..:? "keyValuePairs")
            Core.<*> (o Core..:? "lastUpdateTime")
            Core.<*> (o Core..:? "managed")
            Core.<*> (o Core..:? "name")
            Core.<*> (o Core..:? "ownerType")
            Core.<*> (o Core..:? "scoreReason")
      )

instance Core.ToJSON GoogleAppsCloudidentityDevicesV1ClientState where
  toJSON GoogleAppsCloudidentityDevicesV1ClientState {..} =
    Core.object
      ( Core.catMaybes
          [ ("assetTags" Core..=) Core.<$> assetTags,
            ("complianceState" Core..=) Core.<$> complianceState,
            ("createTime" Core..=) Core.<$> createTime,
            ("customId" Core..=) Core.<$> customId,
            ("etag" Core..=) Core.<$> etag,
            ("healthScore" Core..=) Core.<$> healthScore,
            ("keyValuePairs" Core..=) Core.<$> keyValuePairs,
            ("lastUpdateTime" Core..=) Core.<$> lastUpdateTime,
            ("managed" Core..=) Core.<$> managed,
            ("name" Core..=) Core.<$> name,
            ("ownerType" Core..=) Core.<$> ownerType,
            ("scoreReason" Core..=) Core.<$> scoreReason
          ]
      )

-- | The map of key-value attributes stored by callers specific to a device. The total serialized length of this map may not exceed 10KB. No limit is placed on the number of attributes in a map.
--
-- /See:/ 'newGoogleAppsCloudidentityDevicesV1ClientState_KeyValuePairs' smart constructor.
newtype GoogleAppsCloudidentityDevicesV1ClientState_KeyValuePairs = GoogleAppsCloudidentityDevicesV1ClientState_KeyValuePairs
  { additional ::
      ( Core.HashMap
          Core.Text
          GoogleAppsCloudidentityDevicesV1CustomAttributeValue
      )
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

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

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

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

-- | Metadata for CreateDevice LRO.
--
-- /See:/ 'newGoogleAppsCloudidentityDevicesV1CreateDeviceMetadata' smart constructor.
data GoogleAppsCloudidentityDevicesV1CreateDeviceMetadata = GoogleAppsCloudidentityDevicesV1CreateDeviceMetadata
  deriving (Core.Eq, Core.Show, Core.Generic)

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

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

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

-- | Additional custom attribute values may be one of these types
--
-- /See:/ 'newGoogleAppsCloudidentityDevicesV1CustomAttributeValue' smart constructor.
data GoogleAppsCloudidentityDevicesV1CustomAttributeValue = GoogleAppsCloudidentityDevicesV1CustomAttributeValue
  { -- | Represents a boolean value.
    boolValue :: (Core.Maybe Core.Bool),
    -- | Represents a double value.
    numberValue :: (Core.Maybe Core.Double),
    -- | Represents a string value.
    stringValue :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'GoogleAppsCloudidentityDevicesV1CustomAttributeValue' with the minimum fields required to make a request.
newGoogleAppsCloudidentityDevicesV1CustomAttributeValue ::
  GoogleAppsCloudidentityDevicesV1CustomAttributeValue
newGoogleAppsCloudidentityDevicesV1CustomAttributeValue =
  GoogleAppsCloudidentityDevicesV1CustomAttributeValue
    { boolValue =
        Core.Nothing,
      numberValue = Core.Nothing,
      stringValue = Core.Nothing
    }

instance
  Core.FromJSON
    GoogleAppsCloudidentityDevicesV1CustomAttributeValue
  where
  parseJSON =
    Core.withObject
      "GoogleAppsCloudidentityDevicesV1CustomAttributeValue"
      ( \o ->
          GoogleAppsCloudidentityDevicesV1CustomAttributeValue
            Core.<$> (o Core..:? "boolValue")
            Core.<*> (o Core..:? "numberValue")
            Core.<*> (o Core..:? "stringValue")
      )

instance
  Core.ToJSON
    GoogleAppsCloudidentityDevicesV1CustomAttributeValue
  where
  toJSON GoogleAppsCloudidentityDevicesV1CustomAttributeValue {..} =
    Core.object
      ( Core.catMaybes
          [ ("boolValue" Core..=) Core.<$> boolValue,
            ("numberValue" Core..=) Core.<$> numberValue,
            ("stringValue" Core..=) Core.<$> stringValue
          ]
      )

-- | Metadata for DeleteDevice LRO.
--
-- /See:/ 'newGoogleAppsCloudidentityDevicesV1DeleteDeviceMetadata' smart constructor.
data GoogleAppsCloudidentityDevicesV1DeleteDeviceMetadata = GoogleAppsCloudidentityDevicesV1DeleteDeviceMetadata
  deriving (Core.Eq, Core.Show, Core.Generic)

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

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

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

-- | Metadata for DeleteDeviceUser LRO.
--
-- /See:/ 'newGoogleAppsCloudidentityDevicesV1DeleteDeviceUserMetadata' smart constructor.
data GoogleAppsCloudidentityDevicesV1DeleteDeviceUserMetadata = GoogleAppsCloudidentityDevicesV1DeleteDeviceUserMetadata
  deriving (Core.Eq, Core.Show, Core.Generic)

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

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

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

-- | A Device within the Cloud Identity Devices API. Represents a Device known to Google Cloud, independent of the device ownership, type, and whether it is assigned or in use by a user.
--
-- /See:/ 'newGoogleAppsCloudidentityDevicesV1Device' smart constructor.
data GoogleAppsCloudidentityDevicesV1Device = GoogleAppsCloudidentityDevicesV1Device
  { -- | Output only. Attributes specific to Android devices.
    androidSpecificAttributes :: (Core.Maybe GoogleAppsCloudidentityDevicesV1AndroidAttributes),
    -- | Asset tag of the device.
    assetTag :: (Core.Maybe Core.Text),
    -- | Output only. Baseband version of the device.
    basebandVersion :: (Core.Maybe Core.Text),
    -- | Output only. Device bootloader version. Example: 0.6.7.
    bootloaderVersion :: (Core.Maybe Core.Text),
    -- | Output only. Device brand. Example: Samsung.
    brand :: (Core.Maybe Core.Text),
    -- | Output only. Build number of the device.
    buildNumber :: (Core.Maybe Core.Text),
    -- | Output only. Represents whether the Device is compromised.
    compromisedState ::
      ( Core.Maybe
          GoogleAppsCloudidentityDevicesV1Device_CompromisedState
      ),
    -- | Output only. When the Company-Owned device was imported. This field is empty for BYOD devices.
    createTime :: (Core.Maybe Core.DateTime),
    -- | Unique identifier for the device.
    deviceId :: (Core.Maybe Core.Text),
    -- | Output only. Type of device.
    deviceType :: (Core.Maybe GoogleAppsCloudidentityDevicesV1Device_DeviceType),
    -- | Output only. Whether developer options is enabled on device.
    enabledDeveloperOptions :: (Core.Maybe Core.Bool),
    -- | Output only. Whether USB debugging is enabled on device.
    enabledUsbDebugging :: (Core.Maybe Core.Bool),
    -- | Output only. Device encryption state.
    encryptionState :: (Core.Maybe GoogleAppsCloudidentityDevicesV1Device_EncryptionState),
    -- | Output only. Attributes specific to <https://cloud.google.com/endpoint-verification/docs/overview Endpoint Verification> devices.
    endpointVerificationSpecificAttributes ::
      ( Core.Maybe
          GoogleAppsCloudidentityDevicesV1EndpointVerificationSpecificAttributes
      ),
    -- | Host name of the device.
    hostname :: (Core.Maybe Core.Text),
    -- | Output only. IMEI number of device if GSM device; empty otherwise.
    imei :: (Core.Maybe Core.Text),
    -- | Output only. Kernel version of the device.
    kernelVersion :: (Core.Maybe Core.Text),
    -- | Most recent time when device synced with this service.
    lastSyncTime :: (Core.Maybe Core.DateTime),
    -- | Output only. Management state of the device
    managementState :: (Core.Maybe GoogleAppsCloudidentityDevicesV1Device_ManagementState),
    -- | Output only. Device manufacturer. Example: Motorola.
    manufacturer :: (Core.Maybe Core.Text),
    -- | Output only. MEID number of device if CDMA device; empty otherwise.
    meid :: (Core.Maybe Core.Text),
    -- | Output only. Model name of device. Example: Pixel 3.
    model :: (Core.Maybe Core.Text),
    -- | Output only. <https://cloud.google.com/apis/design/resource_names Resource name> of the Device in format: @devices\/{device}@, where device is the unique id assigned to the Device. Important: Device API scopes require that you use domain-wide delegation to access the API. For more information, see <https://cloud.google.com/identity/docs/how-to/setup-devices Set up the Devices API>.
    name :: (Core.Maybe Core.Text),
    -- | Output only. Mobile or network operator of device, if available.
    networkOperator :: (Core.Maybe Core.Text),
    -- | Output only. OS version of the device. Example: Android 8.1.0.
    osVersion :: (Core.Maybe Core.Text),
    -- | Output only. Domain name for Google accounts on device. Type for other accounts on device. On Android, will only be populated if |ownership/privilege| is |PROFILE/OWNER| or |DEVICE_OWNER|. Does not include the account signed in to the device policy app if that account\'s domain has only one account. Examples: \"com.example\", \"xyz.com\".
    otherAccounts :: (Core.Maybe [Core.Text]),
    -- | Output only. Whether the device is owned by the company or an individual
    ownerType :: (Core.Maybe GoogleAppsCloudidentityDevicesV1Device_OwnerType),
    -- | Output only. OS release version. Example: 6.0.
    releaseVersion :: (Core.Maybe Core.Text),
    -- | Output only. OS security patch update time on device.
    securityPatchTime :: (Core.Maybe Core.DateTime),
    -- | Serial Number of device. Example: HT82V1A01076.
    serialNumber :: (Core.Maybe Core.Text),
    -- | Output only. Unified device id of the device.
    unifiedDeviceId :: (Core.Maybe Core.Text),
    -- | WiFi MAC addresses of device.
    wifiMacAddresses :: (Core.Maybe [Core.Text])
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'GoogleAppsCloudidentityDevicesV1Device' with the minimum fields required to make a request.
newGoogleAppsCloudidentityDevicesV1Device ::
  GoogleAppsCloudidentityDevicesV1Device
newGoogleAppsCloudidentityDevicesV1Device =
  GoogleAppsCloudidentityDevicesV1Device
    { androidSpecificAttributes =
        Core.Nothing,
      assetTag = Core.Nothing,
      basebandVersion = Core.Nothing,
      bootloaderVersion = Core.Nothing,
      brand = Core.Nothing,
      buildNumber = Core.Nothing,
      compromisedState = Core.Nothing,
      createTime = Core.Nothing,
      deviceId = Core.Nothing,
      deviceType = Core.Nothing,
      enabledDeveloperOptions = Core.Nothing,
      enabledUsbDebugging = Core.Nothing,
      encryptionState = Core.Nothing,
      endpointVerificationSpecificAttributes = Core.Nothing,
      hostname = Core.Nothing,
      imei = Core.Nothing,
      kernelVersion = Core.Nothing,
      lastSyncTime = Core.Nothing,
      managementState = Core.Nothing,
      manufacturer = Core.Nothing,
      meid = Core.Nothing,
      model = Core.Nothing,
      name = Core.Nothing,
      networkOperator = Core.Nothing,
      osVersion = Core.Nothing,
      otherAccounts = Core.Nothing,
      ownerType = Core.Nothing,
      releaseVersion = Core.Nothing,
      securityPatchTime = Core.Nothing,
      serialNumber = Core.Nothing,
      unifiedDeviceId = Core.Nothing,
      wifiMacAddresses = Core.Nothing
    }

instance Core.FromJSON GoogleAppsCloudidentityDevicesV1Device where
  parseJSON =
    Core.withObject
      "GoogleAppsCloudidentityDevicesV1Device"
      ( \o ->
          GoogleAppsCloudidentityDevicesV1Device
            Core.<$> (o Core..:? "androidSpecificAttributes")
            Core.<*> (o Core..:? "assetTag")
            Core.<*> (o Core..:? "basebandVersion")
            Core.<*> (o Core..:? "bootloaderVersion")
            Core.<*> (o Core..:? "brand")
            Core.<*> (o Core..:? "buildNumber")
            Core.<*> (o Core..:? "compromisedState")
            Core.<*> (o Core..:? "createTime")
            Core.<*> (o Core..:? "deviceId")
            Core.<*> (o Core..:? "deviceType")
            Core.<*> (o Core..:? "enabledDeveloperOptions")
            Core.<*> (o Core..:? "enabledUsbDebugging")
            Core.<*> (o Core..:? "encryptionState")
            Core.<*> (o Core..:? "endpointVerificationSpecificAttributes")
            Core.<*> (o Core..:? "hostname")
            Core.<*> (o Core..:? "imei")
            Core.<*> (o Core..:? "kernelVersion")
            Core.<*> (o Core..:? "lastSyncTime")
            Core.<*> (o Core..:? "managementState")
            Core.<*> (o Core..:? "manufacturer")
            Core.<*> (o Core..:? "meid")
            Core.<*> (o Core..:? "model")
            Core.<*> (o Core..:? "name")
            Core.<*> (o Core..:? "networkOperator")
            Core.<*> (o Core..:? "osVersion")
            Core.<*> (o Core..:? "otherAccounts")
            Core.<*> (o Core..:? "ownerType")
            Core.<*> (o Core..:? "releaseVersion")
            Core.<*> (o Core..:? "securityPatchTime")
            Core.<*> (o Core..:? "serialNumber")
            Core.<*> (o Core..:? "unifiedDeviceId")
            Core.<*> (o Core..:? "wifiMacAddresses")
      )

instance Core.ToJSON GoogleAppsCloudidentityDevicesV1Device where
  toJSON GoogleAppsCloudidentityDevicesV1Device {..} =
    Core.object
      ( Core.catMaybes
          [ ("androidSpecificAttributes" Core..=)
              Core.<$> androidSpecificAttributes,
            ("assetTag" Core..=) Core.<$> assetTag,
            ("basebandVersion" Core..=) Core.<$> basebandVersion,
            ("bootloaderVersion" Core..=) Core.<$> bootloaderVersion,
            ("brand" Core..=) Core.<$> brand,
            ("buildNumber" Core..=) Core.<$> buildNumber,
            ("compromisedState" Core..=) Core.<$> compromisedState,
            ("createTime" Core..=) Core.<$> createTime,
            ("deviceId" Core..=) Core.<$> deviceId,
            ("deviceType" Core..=) Core.<$> deviceType,
            ("enabledDeveloperOptions" Core..=)
              Core.<$> enabledDeveloperOptions,
            ("enabledUsbDebugging" Core..=) Core.<$> enabledUsbDebugging,
            ("encryptionState" Core..=) Core.<$> encryptionState,
            ("endpointVerificationSpecificAttributes" Core..=)
              Core.<$> endpointVerificationSpecificAttributes,
            ("hostname" Core..=) Core.<$> hostname,
            ("imei" Core..=) Core.<$> imei,
            ("kernelVersion" Core..=) Core.<$> kernelVersion,
            ("lastSyncTime" Core..=) Core.<$> lastSyncTime,
            ("managementState" Core..=) Core.<$> managementState,
            ("manufacturer" Core..=) Core.<$> manufacturer,
            ("meid" Core..=) Core.<$> meid,
            ("model" Core..=) Core.<$> model,
            ("name" Core..=) Core.<$> name,
            ("networkOperator" Core..=) Core.<$> networkOperator,
            ("osVersion" Core..=) Core.<$> osVersion,
            ("otherAccounts" Core..=) Core.<$> otherAccounts,
            ("ownerType" Core..=) Core.<$> ownerType,
            ("releaseVersion" Core..=) Core.<$> releaseVersion,
            ("securityPatchTime" Core..=) Core.<$> securityPatchTime,
            ("serialNumber" Core..=) Core.<$> serialNumber,
            ("unifiedDeviceId" Core..=) Core.<$> unifiedDeviceId,
            ("wifiMacAddresses" Core..=) Core.<$> wifiMacAddresses
          ]
      )

-- | Represents a user\'s use of a Device in the Cloud Identity Devices API. A DeviceUser is a resource representing a user\'s use of a Device
--
-- /See:/ 'newGoogleAppsCloudidentityDevicesV1DeviceUser' smart constructor.
data GoogleAppsCloudidentityDevicesV1DeviceUser = GoogleAppsCloudidentityDevicesV1DeviceUser
  { -- | Compromised State of the DeviceUser object
    compromisedState ::
      ( Core.Maybe
          GoogleAppsCloudidentityDevicesV1DeviceUser_CompromisedState
      ),
    -- | When the user first signed in to the device
    createTime :: (Core.Maybe Core.DateTime),
    -- | Output only. Most recent time when user registered with this service.
    firstSyncTime :: (Core.Maybe Core.DateTime),
    -- | Output only. Default locale used on device, in IETF BCP-47 format.
    languageCode :: (Core.Maybe Core.Text),
    -- | Output only. Last time when user synced with policies.
    lastSyncTime :: (Core.Maybe Core.DateTime),
    -- | Output only. Management state of the user on the device.
    managementState ::
      ( Core.Maybe
          GoogleAppsCloudidentityDevicesV1DeviceUser_ManagementState
      ),
    -- | Output only. <https://cloud.google.com/apis/design/resource_names Resource name> of the DeviceUser in format: @devices\/{device}\/deviceUsers\/{device_user}@, where @device_user@ uniquely identifies a user\'s use of a device.
    name :: (Core.Maybe Core.Text),
    -- | Password state of the DeviceUser object
    passwordState ::
      ( Core.Maybe
          GoogleAppsCloudidentityDevicesV1DeviceUser_PasswordState
      ),
    -- | Output only. User agent on the device for this specific user
    userAgent :: (Core.Maybe Core.Text),
    -- | Email address of the user registered on the device.
    userEmail :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'GoogleAppsCloudidentityDevicesV1DeviceUser' with the minimum fields required to make a request.
newGoogleAppsCloudidentityDevicesV1DeviceUser ::
  GoogleAppsCloudidentityDevicesV1DeviceUser
newGoogleAppsCloudidentityDevicesV1DeviceUser =
  GoogleAppsCloudidentityDevicesV1DeviceUser
    { compromisedState =
        Core.Nothing,
      createTime = Core.Nothing,
      firstSyncTime = Core.Nothing,
      languageCode = Core.Nothing,
      lastSyncTime = Core.Nothing,
      managementState = Core.Nothing,
      name = Core.Nothing,
      passwordState = Core.Nothing,
      userAgent = Core.Nothing,
      userEmail = Core.Nothing
    }

instance Core.FromJSON GoogleAppsCloudidentityDevicesV1DeviceUser where
  parseJSON =
    Core.withObject
      "GoogleAppsCloudidentityDevicesV1DeviceUser"
      ( \o ->
          GoogleAppsCloudidentityDevicesV1DeviceUser
            Core.<$> (o Core..:? "compromisedState")
            Core.<*> (o Core..:? "createTime")
            Core.<*> (o Core..:? "firstSyncTime")
            Core.<*> (o Core..:? "languageCode")
            Core.<*> (o Core..:? "lastSyncTime")
            Core.<*> (o Core..:? "managementState")
            Core.<*> (o Core..:? "name")
            Core.<*> (o Core..:? "passwordState")
            Core.<*> (o Core..:? "userAgent")
            Core.<*> (o Core..:? "userEmail")
      )

instance Core.ToJSON GoogleAppsCloudidentityDevicesV1DeviceUser where
  toJSON GoogleAppsCloudidentityDevicesV1DeviceUser {..} =
    Core.object
      ( Core.catMaybes
          [ ("compromisedState" Core..=) Core.<$> compromisedState,
            ("createTime" Core..=) Core.<$> createTime,
            ("firstSyncTime" Core..=) Core.<$> firstSyncTime,
            ("languageCode" Core..=) Core.<$> languageCode,
            ("lastSyncTime" Core..=) Core.<$> lastSyncTime,
            ("managementState" Core..=) Core.<$> managementState,
            ("name" Core..=) Core.<$> name,
            ("passwordState" Core..=) Core.<$> passwordState,
            ("userAgent" Core..=) Core.<$> userAgent,
            ("userEmail" Core..=) Core.<$> userEmail
          ]
      )

-- | Resource representing the <https://cloud.google.com/endpoint-verification/docs/device-information Endpoint Verification-specific attributes> of a device.
--
-- /See:/ 'newGoogleAppsCloudidentityDevicesV1EndpointVerificationSpecificAttributes' smart constructor.
data GoogleAppsCloudidentityDevicesV1EndpointVerificationSpecificAttributes = GoogleAppsCloudidentityDevicesV1EndpointVerificationSpecificAttributes
  { -- | <https://cloud.google.com/endpoint-verification/docs/device-information Additional signals> reported by Endpoint Verification. It includes the following attributes: * Non-configurable attributes: hotfixes, av/installed, av/enabled, windows/domain/name, is/os/native/firewall/enabled, and is/secure/boot_enabled. * <https://cloud.google.com/endpoint-verification/docs/collect-config-attributes Configurable attributes>: file, folder, and binary attributes; registry entries; and properties in a plist.
    additionalSignals ::
      ( Core.Maybe
          GoogleAppsCloudidentityDevicesV1EndpointVerificationSpecificAttributes_AdditionalSignals
      ),
    -- | Details of browser profiles reported by Endpoint Verification.
    browserAttributes :: (Core.Maybe [GoogleAppsCloudidentityDevicesV1BrowserAttributes]),
    -- | Details of certificates.
    certificateAttributes ::
      ( Core.Maybe
          [GoogleAppsCloudidentityDevicesV1CertificateAttributes]
      )
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'GoogleAppsCloudidentityDevicesV1EndpointVerificationSpecificAttributes' with the minimum fields required to make a request.
newGoogleAppsCloudidentityDevicesV1EndpointVerificationSpecificAttributes ::
  GoogleAppsCloudidentityDevicesV1EndpointVerificationSpecificAttributes
newGoogleAppsCloudidentityDevicesV1EndpointVerificationSpecificAttributes =
  GoogleAppsCloudidentityDevicesV1EndpointVerificationSpecificAttributes
    { additionalSignals =
        Core.Nothing,
      browserAttributes =
        Core.Nothing,
      certificateAttributes =
        Core.Nothing
    }

instance
  Core.FromJSON
    GoogleAppsCloudidentityDevicesV1EndpointVerificationSpecificAttributes
  where
  parseJSON =
    Core.withObject
      "GoogleAppsCloudidentityDevicesV1EndpointVerificationSpecificAttributes"
      ( \o ->
          GoogleAppsCloudidentityDevicesV1EndpointVerificationSpecificAttributes
            Core.<$> (o Core..:? "additionalSignals")
            Core.<*> (o Core..:? "browserAttributes")
            Core.<*> (o Core..:? "certificateAttributes")
      )

instance
  Core.ToJSON
    GoogleAppsCloudidentityDevicesV1EndpointVerificationSpecificAttributes
  where
  toJSON
    GoogleAppsCloudidentityDevicesV1EndpointVerificationSpecificAttributes {..} =
      Core.object
        ( Core.catMaybes
            [ ("additionalSignals" Core..=) Core.<$> additionalSignals,
              ("browserAttributes" Core..=) Core.<$> browserAttributes,
              ("certificateAttributes" Core..=) Core.<$> certificateAttributes
            ]
        )

-- | <https://cloud.google.com/endpoint-verification/docs/device-information Additional signals> reported by Endpoint Verification. It includes the following attributes: * Non-configurable attributes: hotfixes, av/installed, av/enabled, windows/domain/name, is/os/native/firewall/enabled, and is/secure/boot_enabled. * <https://cloud.google.com/endpoint-verification/docs/collect-config-attributes Configurable attributes>: file, folder, and binary attributes; registry entries; and properties in a plist.
--
-- /See:/ 'newGoogleAppsCloudidentityDevicesV1EndpointVerificationSpecificAttributes_AdditionalSignals' smart constructor.
newtype GoogleAppsCloudidentityDevicesV1EndpointVerificationSpecificAttributes_AdditionalSignals = GoogleAppsCloudidentityDevicesV1EndpointVerificationSpecificAttributes_AdditionalSignals
  { -- | Properties of the object.
    additional :: (Core.HashMap Core.Text Core.Value)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'GoogleAppsCloudidentityDevicesV1EndpointVerificationSpecificAttributes_AdditionalSignals' with the minimum fields required to make a request.
newGoogleAppsCloudidentityDevicesV1EndpointVerificationSpecificAttributes_AdditionalSignals ::
  -- |  Properties of the object. See 'additional'.
  Core.HashMap
    Core.Text
    Core.Value ->
  GoogleAppsCloudidentityDevicesV1EndpointVerificationSpecificAttributes_AdditionalSignals
newGoogleAppsCloudidentityDevicesV1EndpointVerificationSpecificAttributes_AdditionalSignals
  additional =
    GoogleAppsCloudidentityDevicesV1EndpointVerificationSpecificAttributes_AdditionalSignals
      { additional =
          additional
      }

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

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

-- | Response message that is returned in ListClientStates.
--
-- /See:/ 'newGoogleAppsCloudidentityDevicesV1ListClientStatesResponse' smart constructor.
data GoogleAppsCloudidentityDevicesV1ListClientStatesResponse = GoogleAppsCloudidentityDevicesV1ListClientStatesResponse
  { -- | Client states meeting the list restrictions.
    clientStates :: (Core.Maybe [GoogleAppsCloudidentityDevicesV1ClientState]),
    -- | Token to retrieve the next page of results. Empty if there are no more results.
    nextPageToken :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

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

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

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

-- | Response message that is returned from the ListDeviceUsers method.
--
-- /See:/ 'newGoogleAppsCloudidentityDevicesV1ListDeviceUsersResponse' smart constructor.
data GoogleAppsCloudidentityDevicesV1ListDeviceUsersResponse = GoogleAppsCloudidentityDevicesV1ListDeviceUsersResponse
  { -- | Devices meeting the list restrictions.
    deviceUsers :: (Core.Maybe [GoogleAppsCloudidentityDevicesV1DeviceUser]),
    -- | Token to retrieve the next page of results. Empty if there are no more results.
    nextPageToken :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

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

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

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

-- | Response message that is returned from the ListDevices method.
--
-- /See:/ 'newGoogleAppsCloudidentityDevicesV1ListDevicesResponse' smart constructor.
data GoogleAppsCloudidentityDevicesV1ListDevicesResponse = GoogleAppsCloudidentityDevicesV1ListDevicesResponse
  { -- | Devices meeting the list restrictions.
    devices :: (Core.Maybe [GoogleAppsCloudidentityDevicesV1Device]),
    -- | Token to retrieve the next page of results. Empty if there are no more results.
    nextPageToken :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

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

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

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

-- | Metadata for ListEndpointApps LRO.
--
-- /See:/ 'newGoogleAppsCloudidentityDevicesV1ListEndpointAppsMetadata' smart constructor.
data GoogleAppsCloudidentityDevicesV1ListEndpointAppsMetadata = GoogleAppsCloudidentityDevicesV1ListEndpointAppsMetadata
  deriving (Core.Eq, Core.Show, Core.Generic)

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

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

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

-- | Response containing resource names of the DeviceUsers associated with the caller\'s credentials.
--
-- /See:/ 'newGoogleAppsCloudidentityDevicesV1LookupSelfDeviceUsersResponse' smart constructor.
data GoogleAppsCloudidentityDevicesV1LookupSelfDeviceUsersResponse = GoogleAppsCloudidentityDevicesV1LookupSelfDeviceUsersResponse
  { -- | The customer resource name that may be passed back to other Devices API methods such as List, Get, etc.
    customer :: (Core.Maybe Core.Text),
    -- | <https://cloud.google.com/apis/design/resource_names Resource names> of the DeviceUsers in the format: @devices\/{device}\/deviceUsers\/{user_resource}@, where device is the unique ID assigned to a Device and user_resource is the unique user ID
    names :: (Core.Maybe [Core.Text]),
    -- | Token to retrieve the next page of results. Empty if there are no more results.
    nextPageToken :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'GoogleAppsCloudidentityDevicesV1LookupSelfDeviceUsersResponse' with the minimum fields required to make a request.
newGoogleAppsCloudidentityDevicesV1LookupSelfDeviceUsersResponse ::
  GoogleAppsCloudidentityDevicesV1LookupSelfDeviceUsersResponse
newGoogleAppsCloudidentityDevicesV1LookupSelfDeviceUsersResponse =
  GoogleAppsCloudidentityDevicesV1LookupSelfDeviceUsersResponse
    { customer =
        Core.Nothing,
      names = Core.Nothing,
      nextPageToken = Core.Nothing
    }

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

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

-- | Metadata for SignoutDeviceUser LRO.
--
-- /See:/ 'newGoogleAppsCloudidentityDevicesV1SignoutDeviceUserMetadata' smart constructor.
data GoogleAppsCloudidentityDevicesV1SignoutDeviceUserMetadata = GoogleAppsCloudidentityDevicesV1SignoutDeviceUserMetadata
  deriving (Core.Eq, Core.Show, Core.Generic)

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

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

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

-- | Metadata for UpdateClientState LRO.
--
-- /See:/ 'newGoogleAppsCloudidentityDevicesV1UpdateClientStateMetadata' smart constructor.
data GoogleAppsCloudidentityDevicesV1UpdateClientStateMetadata = GoogleAppsCloudidentityDevicesV1UpdateClientStateMetadata
  deriving (Core.Eq, Core.Show, Core.Generic)

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

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

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

-- | Metadata for UpdateDevice LRO.
--
-- /See:/ 'newGoogleAppsCloudidentityDevicesV1UpdateDeviceMetadata' smart constructor.
data GoogleAppsCloudidentityDevicesV1UpdateDeviceMetadata = GoogleAppsCloudidentityDevicesV1UpdateDeviceMetadata
  deriving (Core.Eq, Core.Show, Core.Generic)

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

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

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

-- | Metadata for WipeDevice LRO.
--
-- /See:/ 'newGoogleAppsCloudidentityDevicesV1WipeDeviceMetadata' smart constructor.
data GoogleAppsCloudidentityDevicesV1WipeDeviceMetadata = GoogleAppsCloudidentityDevicesV1WipeDeviceMetadata
  deriving (Core.Eq, Core.Show, Core.Generic)

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

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

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

-- | Request message for wiping all data on the device.
--
-- /See:/ 'newGoogleAppsCloudidentityDevicesV1WipeDeviceRequest' smart constructor.
data GoogleAppsCloudidentityDevicesV1WipeDeviceRequest = GoogleAppsCloudidentityDevicesV1WipeDeviceRequest
  { -- | Optional. <https://cloud.google.com/apis/design/resource_names Resource name> of the customer. If you\'re using this API for your own organization, use @customers\/my_customer@ If you\'re using this API to manage another organization, use @customers\/{customer}@, where customer is the customer to whom the device belongs.
    customer :: (Core.Maybe Core.Text),
    -- | Optional. Specifies if a user is able to factory reset a device after a Device Wipe. On iOS, this is called \"Activation Lock\", while on Android, this is known as \"Factory Reset Protection\". If true, this protection will be removed from the device, so that a user can successfully factory reset. If false, the setting is untouched on the device.
    removeResetLock :: (Core.Maybe Core.Bool)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'GoogleAppsCloudidentityDevicesV1WipeDeviceRequest' with the minimum fields required to make a request.
newGoogleAppsCloudidentityDevicesV1WipeDeviceRequest ::
  GoogleAppsCloudidentityDevicesV1WipeDeviceRequest
newGoogleAppsCloudidentityDevicesV1WipeDeviceRequest =
  GoogleAppsCloudidentityDevicesV1WipeDeviceRequest
    { customer =
        Core.Nothing,
      removeResetLock = Core.Nothing
    }

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

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

-- | Response message for wiping all data on the device.
--
-- /See:/ 'newGoogleAppsCloudidentityDevicesV1WipeDeviceResponse' smart constructor.
newtype GoogleAppsCloudidentityDevicesV1WipeDeviceResponse = GoogleAppsCloudidentityDevicesV1WipeDeviceResponse
  { -- | Resultant Device object for the action. Note that asset tags will not be returned in the device object.
    device :: (Core.Maybe GoogleAppsCloudidentityDevicesV1Device)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

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

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

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

-- | Metadata for WipeDeviceUser LRO.
--
-- /See:/ 'newGoogleAppsCloudidentityDevicesV1WipeDeviceUserMetadata' smart constructor.
data GoogleAppsCloudidentityDevicesV1WipeDeviceUserMetadata = GoogleAppsCloudidentityDevicesV1WipeDeviceUserMetadata
  deriving (Core.Eq, Core.Show, Core.Generic)

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

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

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

-- | Request message for starting an account wipe on device.
--
-- /See:/ 'newGoogleAppsCloudidentityDevicesV1WipeDeviceUserRequest' smart constructor.
newtype GoogleAppsCloudidentityDevicesV1WipeDeviceUserRequest = GoogleAppsCloudidentityDevicesV1WipeDeviceUserRequest
  { -- | Optional. <https://cloud.google.com/apis/design/resource_names Resource name> of the customer. If you\'re using this API for your own organization, use @customers\/my_customer@ If you\'re using this API to manage another organization, use @customers\/{customer}@, where customer is the customer to whom the device belongs.
    customer :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

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

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

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

-- | Response message for wiping the user\'s account from the device.
--
-- /See:/ 'newGoogleAppsCloudidentityDevicesV1WipeDeviceUserResponse' smart constructor.
newtype GoogleAppsCloudidentityDevicesV1WipeDeviceUserResponse = GoogleAppsCloudidentityDevicesV1WipeDeviceUserResponse
  { -- | Resultant DeviceUser object for the action.
    deviceUser :: (Core.Maybe GoogleAppsCloudidentityDevicesV1DeviceUser)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'GoogleAppsCloudidentityDevicesV1WipeDeviceUserResponse' with the minimum fields required to make a request.
newGoogleAppsCloudidentityDevicesV1WipeDeviceUserResponse ::
  GoogleAppsCloudidentityDevicesV1WipeDeviceUserResponse
newGoogleAppsCloudidentityDevicesV1WipeDeviceUserResponse =
  GoogleAppsCloudidentityDevicesV1WipeDeviceUserResponse
    { deviceUser =
        Core.Nothing
    }

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

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

-- | A group within the Cloud Identity Groups API. A @Group@ is a collection of entities, where each entity is either a user, another group, or a service account.
--
-- /See:/ 'newGroup' smart constructor.
data Group = Group
  { -- | Output only. Additional group keys associated with the Group.
    additionalGroupKeys :: (Core.Maybe [EntityKey]),
    -- | Output only. The time when the @Group@ was created.
    createTime :: (Core.Maybe Core.DateTime),
    -- | An extended description to help users determine the purpose of a @Group@. Must not be longer than 4,096 characters.
    description :: (Core.Maybe Core.Text),
    -- | The display name of the @Group@.
    displayName :: (Core.Maybe Core.Text),
    -- | Optional. Dynamic group metadata like queries and status.
    dynamicGroupMetadata :: (Core.Maybe DynamicGroupMetadata),
    -- | Required. The @EntityKey@ of the @Group@.
    groupKey :: (Core.Maybe EntityKey),
    -- | Required. One or more label entries that apply to the Group. Currently supported labels contain a key with an empty value. Google Groups are the default type of group and have a label with a key of @cloudidentity.googleapis.com\/groups.discussion_forum@ and an empty value. Existing Google Groups can have an additional label with a key of @cloudidentity.googleapis.com\/groups.security@ and an empty value added to them. __This is an immutable change and the security label cannot be removed once added.__ Dynamic groups have a label with a key of @cloudidentity.googleapis.com\/groups.dynamic@. Identity-mapped groups for Cloud Search have a label with a key of @system\/groups\/external@ and an empty value.
    labels :: (Core.Maybe Group_Labels),
    -- | Output only. The <https://cloud.google.com/apis/design/resource_names resource name> of the @Group@. Shall be of the form @groups\/{group}@.
    name :: (Core.Maybe Core.Text),
    -- | Required. Immutable. The resource name of the entity under which this @Group@ resides in the Cloud Identity resource hierarchy. Must be of the form @identitysources\/{identity_source}@ for external <https://support.google.com/a/answer/9039510 identity-mapped groups> or @customers\/{customer_id}@ for Google Groups. The @customer_id@ must begin with \"C\" (for example, \'C046psxkn\'). [Find your customer ID.] (https:\/\/support.google.com\/cloudidentity\/answer\/10070793)
    parent :: (Core.Maybe Core.Text),
    -- | Output only. The time when the @Group@ was last updated.
    updateTime :: (Core.Maybe Core.DateTime)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Group' with the minimum fields required to make a request.
newGroup ::
  Group
newGroup =
  Group
    { additionalGroupKeys = Core.Nothing,
      createTime = Core.Nothing,
      description = Core.Nothing,
      displayName = Core.Nothing,
      dynamicGroupMetadata = Core.Nothing,
      groupKey = Core.Nothing,
      labels = Core.Nothing,
      name = Core.Nothing,
      parent = Core.Nothing,
      updateTime = Core.Nothing
    }

instance Core.FromJSON Group where
  parseJSON =
    Core.withObject
      "Group"
      ( \o ->
          Group
            Core.<$> (o Core..:? "additionalGroupKeys")
            Core.<*> (o Core..:? "createTime")
            Core.<*> (o Core..:? "description")
            Core.<*> (o Core..:? "displayName")
            Core.<*> (o Core..:? "dynamicGroupMetadata")
            Core.<*> (o Core..:? "groupKey")
            Core.<*> (o Core..:? "labels")
            Core.<*> (o Core..:? "name")
            Core.<*> (o Core..:? "parent")
            Core.<*> (o Core..:? "updateTime")
      )

instance Core.ToJSON Group where
  toJSON Group {..} =
    Core.object
      ( Core.catMaybes
          [ ("additionalGroupKeys" Core..=) Core.<$> additionalGroupKeys,
            ("createTime" Core..=) Core.<$> createTime,
            ("description" Core..=) Core.<$> description,
            ("displayName" Core..=) Core.<$> displayName,
            ("dynamicGroupMetadata" Core..=) Core.<$> dynamicGroupMetadata,
            ("groupKey" Core..=) Core.<$> groupKey,
            ("labels" Core..=) Core.<$> labels,
            ("name" Core..=) Core.<$> name,
            ("parent" Core..=) Core.<$> parent,
            ("updateTime" Core..=) Core.<$> updateTime
          ]
      )

-- | Required. One or more label entries that apply to the Group. Currently supported labels contain a key with an empty value. Google Groups are the default type of group and have a label with a key of @cloudidentity.googleapis.com\/groups.discussion_forum@ and an empty value. Existing Google Groups can have an additional label with a key of @cloudidentity.googleapis.com\/groups.security@ and an empty value added to them. __This is an immutable change and the security label cannot be removed once added.__ Dynamic groups have a label with a key of @cloudidentity.googleapis.com\/groups.dynamic@. Identity-mapped groups for Cloud Search have a label with a key of @system\/groups\/external@ and an empty value.
--
-- /See:/ 'newGroup_Labels' smart constructor.
newtype Group_Labels = Group_Labels
  { additional :: (Core.HashMap Core.Text Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

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

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

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

-- | Message representing a transitive group of a user or a group.
--
-- /See:/ 'newGroupRelation' smart constructor.
data GroupRelation = GroupRelation
  { -- | Display name for this group.
    displayName :: (Core.Maybe Core.Text),
    -- | Resource name for this group.
    group' :: (Core.Maybe Core.Text),
    -- | Entity key has an id and a namespace. In case of discussion forums, the id will be an email address without a namespace.
    groupKey :: (Core.Maybe EntityKey),
    -- | Labels for Group resource.
    labels :: (Core.Maybe GroupRelation_Labels),
    -- | The relation between the member and the transitive group.
    relationType :: (Core.Maybe GroupRelation_RelationType),
    -- | Membership roles of the member for the group.
    roles :: (Core.Maybe [TransitiveMembershipRole])
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'GroupRelation' with the minimum fields required to make a request.
newGroupRelation ::
  GroupRelation
newGroupRelation =
  GroupRelation
    { displayName = Core.Nothing,
      group' = Core.Nothing,
      groupKey = Core.Nothing,
      labels = Core.Nothing,
      relationType = Core.Nothing,
      roles = Core.Nothing
    }

instance Core.FromJSON GroupRelation where
  parseJSON =
    Core.withObject
      "GroupRelation"
      ( \o ->
          GroupRelation
            Core.<$> (o Core..:? "displayName")
            Core.<*> (o Core..:? "group")
            Core.<*> (o Core..:? "groupKey")
            Core.<*> (o Core..:? "labels")
            Core.<*> (o Core..:? "relationType")
            Core.<*> (o Core..:? "roles")
      )

instance Core.ToJSON GroupRelation where
  toJSON GroupRelation {..} =
    Core.object
      ( Core.catMaybes
          [ ("displayName" Core..=) Core.<$> displayName,
            ("group" Core..=) Core.<$> group',
            ("groupKey" Core..=) Core.<$> groupKey,
            ("labels" Core..=) Core.<$> labels,
            ("relationType" Core..=) Core.<$> relationType,
            ("roles" Core..=) Core.<$> roles
          ]
      )

-- | Labels for Group resource.
--
-- /See:/ 'newGroupRelation_Labels' smart constructor.
newtype GroupRelation_Labels = GroupRelation_Labels
  { additional :: (Core.HashMap Core.Text Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

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

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

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

-- | Credential for verifying signatures produced by the Identity Provider.
--
-- /See:/ 'newIdpCredential' smart constructor.
data IdpCredential = IdpCredential
  { -- | Output only. Information of a DSA public key.
    dsaKeyInfo :: (Core.Maybe DsaPublicKeyInfo),
    -- | Output only. <https://cloud.google.com/apis/design/resource_names Resource name> of the credential.
    name :: (Core.Maybe Core.Text),
    -- | Output only. Information of a RSA public key.
    rsaKeyInfo :: (Core.Maybe RsaPublicKeyInfo),
    -- | Output only. Time when the @IdpCredential@ was last updated.
    updateTime :: (Core.Maybe Core.DateTime)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'IdpCredential' with the minimum fields required to make a request.
newIdpCredential ::
  IdpCredential
newIdpCredential =
  IdpCredential
    { dsaKeyInfo = Core.Nothing,
      name = Core.Nothing,
      rsaKeyInfo = Core.Nothing,
      updateTime = Core.Nothing
    }

instance Core.FromJSON IdpCredential where
  parseJSON =
    Core.withObject
      "IdpCredential"
      ( \o ->
          IdpCredential
            Core.<$> (o Core..:? "dsaKeyInfo")
            Core.<*> (o Core..:? "name")
            Core.<*> (o Core..:? "rsaKeyInfo")
            Core.<*> (o Core..:? "updateTime")
      )

instance Core.ToJSON IdpCredential where
  toJSON IdpCredential {..} =
    Core.object
      ( Core.catMaybes
          [ ("dsaKeyInfo" Core..=) Core.<$> dsaKeyInfo,
            ("name" Core..=) Core.<$> name,
            ("rsaKeyInfo" Core..=) Core.<$> rsaKeyInfo,
            ("updateTime" Core..=) Core.<$> updateTime
          ]
      )

-- | A <https://www.oasis-open.org/standards#samlv2.0 SAML 2.0> federation between a Google enterprise customer and a SAML identity provider.
--
-- /See:/ 'newInboundSamlSsoProfile' smart constructor.
data InboundSamlSsoProfile = InboundSamlSsoProfile
  { -- | Immutable. The customer. For example: @customers\/C0123abc@.
    customer :: (Core.Maybe Core.Text),
    -- | Human-readable name of the SAML SSO profile.
    displayName :: (Core.Maybe Core.Text),
    -- | SAML identity provider configuration.
    idpConfig :: (Core.Maybe SamlIdpConfig),
    -- | Output only. <https://cloud.google.com/apis/design/resource_names Resource name> of the SAML SSO profile.
    name :: (Core.Maybe Core.Text),
    -- | SAML service provider configuration for this SAML SSO profile. These are the service provider details provided by Google that should be configured on the corresponding identity provider.
    spConfig :: (Core.Maybe SamlSpConfig)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'InboundSamlSsoProfile' with the minimum fields required to make a request.
newInboundSamlSsoProfile ::
  InboundSamlSsoProfile
newInboundSamlSsoProfile =
  InboundSamlSsoProfile
    { customer = Core.Nothing,
      displayName = Core.Nothing,
      idpConfig = Core.Nothing,
      name = Core.Nothing,
      spConfig = Core.Nothing
    }

instance Core.FromJSON InboundSamlSsoProfile where
  parseJSON =
    Core.withObject
      "InboundSamlSsoProfile"
      ( \o ->
          InboundSamlSsoProfile
            Core.<$> (o Core..:? "customer")
            Core.<*> (o Core..:? "displayName")
            Core.<*> (o Core..:? "idpConfig")
            Core.<*> (o Core..:? "name")
            Core.<*> (o Core..:? "spConfig")
      )

instance Core.ToJSON InboundSamlSsoProfile where
  toJSON InboundSamlSsoProfile {..} =
    Core.object
      ( Core.catMaybes
          [ ("customer" Core..=) Core.<$> customer,
            ("displayName" Core..=) Core.<$> displayName,
            ("idpConfig" Core..=) Core.<$> idpConfig,
            ("name" Core..=) Core.<$> name,
            ("spConfig" Core..=) Core.<$> spConfig
          ]
      )

-- | Targets with \"set\" SSO assignments and their respective assignments.
--
-- /See:/ 'newInboundSsoAssignment' smart constructor.
data InboundSsoAssignment = InboundSsoAssignment
  { -- | Immutable. The customer. For example: @customers\/C0123abc@.
    customer :: (Core.Maybe Core.Text),
    -- | Output only. <https://cloud.google.com/apis/design/resource_names Resource name> of the Inbound SSO Assignment.
    name :: (Core.Maybe Core.Text),
    -- | Must be zero (which is the default value so it can be omitted) for assignments with @target_org_unit@ set and must be greater-than-or-equal-to one for assignments with @target_group@ set.
    rank :: (Core.Maybe Core.Int32),
    -- | SAML SSO details. Must be set if and only if @sso_mode@ is set to @SAML_SSO@.
    samlSsoInfo :: (Core.Maybe SamlSsoInfo),
    -- | Assertions about users assigned to an IdP will always be accepted from that IdP. This controls whether\/when Google should redirect a user to the IdP. Unset (defaults) is the recommended configuration.
    signInBehavior :: (Core.Maybe SignInBehavior),
    -- | Inbound SSO behavior.
    ssoMode :: (Core.Maybe InboundSsoAssignment_SsoMode),
    -- | Immutable. Must be of the form @groups\/{group}@.
    targetGroup :: (Core.Maybe Core.Text),
    -- | Immutable. Must be of the form @orgUnits\/{org_unit}@.
    targetOrgUnit :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'InboundSsoAssignment' with the minimum fields required to make a request.
newInboundSsoAssignment ::
  InboundSsoAssignment
newInboundSsoAssignment =
  InboundSsoAssignment
    { customer = Core.Nothing,
      name = Core.Nothing,
      rank = Core.Nothing,
      samlSsoInfo = Core.Nothing,
      signInBehavior = Core.Nothing,
      ssoMode = Core.Nothing,
      targetGroup = Core.Nothing,
      targetOrgUnit = Core.Nothing
    }

instance Core.FromJSON InboundSsoAssignment where
  parseJSON =
    Core.withObject
      "InboundSsoAssignment"
      ( \o ->
          InboundSsoAssignment
            Core.<$> (o Core..:? "customer")
            Core.<*> (o Core..:? "name")
            Core.<*> (o Core..:? "rank")
            Core.<*> (o Core..:? "samlSsoInfo")
            Core.<*> (o Core..:? "signInBehavior")
            Core.<*> (o Core..:? "ssoMode")
            Core.<*> (o Core..:? "targetGroup")
            Core.<*> (o Core..:? "targetOrgUnit")
      )

instance Core.ToJSON InboundSsoAssignment where
  toJSON InboundSsoAssignment {..} =
    Core.object
      ( Core.catMaybes
          [ ("customer" Core..=) Core.<$> customer,
            ("name" Core..=) Core.<$> name,
            ("rank" Core..=) Core.<$> rank,
            ("samlSsoInfo" Core..=) Core.<$> samlSsoInfo,
            ("signInBehavior" Core..=) Core.<$> signInBehavior,
            ("ssoMode" Core..=) Core.<$> ssoMode,
            ("targetGroup" Core..=) Core.<$> targetGroup,
            ("targetOrgUnit" Core..=) Core.<$> targetOrgUnit
          ]
      )

-- | Response for IsInvitableUser RPC.
--
-- /See:/ 'newIsInvitableUserResponse' smart constructor.
newtype IsInvitableUserResponse = IsInvitableUserResponse
  { -- | Returns true if the email address is invitable.
    isInvitableUser :: (Core.Maybe Core.Bool)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'IsInvitableUserResponse' with the minimum fields required to make a request.
newIsInvitableUserResponse ::
  IsInvitableUserResponse
newIsInvitableUserResponse =
  IsInvitableUserResponse {isInvitableUser = Core.Nothing}

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

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

-- | Response message for ListGroups operation.
--
-- /See:/ 'newListGroupsResponse' smart constructor.
data ListGroupsResponse = ListGroupsResponse
  { -- | Groups returned in response to list request. The results are not sorted.
    groups :: (Core.Maybe [Group]),
    -- | Token to retrieve the next page of results, or empty if there are no more results available for listing.
    nextPageToken :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

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

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

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

-- | Response of the InboundSamlSsoProfilesService.ListIdpCredentials method.
--
-- /See:/ 'newListIdpCredentialsResponse' smart constructor.
data ListIdpCredentialsResponse = ListIdpCredentialsResponse
  { -- | The IdpCredentials from the specified InboundSamlSsoProfile.
    idpCredentials :: (Core.Maybe [IdpCredential]),
    -- | A token, which can be sent as @page_token@ to retrieve the next page. If this field is omitted, there are no subsequent pages.
    nextPageToken :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

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

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

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

-- | Response of the InboundSamlSsoProfilesService.ListInboundSamlSsoProfiles method.
--
-- /See:/ 'newListInboundSamlSsoProfilesResponse' smart constructor.
data ListInboundSamlSsoProfilesResponse = ListInboundSamlSsoProfilesResponse
  { -- | List of InboundSamlSsoProfiles.
    inboundSamlSsoProfiles :: (Core.Maybe [InboundSamlSsoProfile]),
    -- | A token, which can be sent as @page_token@ to retrieve the next page. If this field is omitted, there are no subsequent pages.
    nextPageToken :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

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

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

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

-- | Response of the InboundSsoAssignmentsService.ListInboundSsoAssignments method.
--
-- /See:/ 'newListInboundSsoAssignmentsResponse' smart constructor.
data ListInboundSsoAssignmentsResponse = ListInboundSsoAssignmentsResponse
  { -- | The assignments.
    inboundSsoAssignments :: (Core.Maybe [InboundSsoAssignment]),
    -- | A token, which can be sent as @page_token@ to retrieve the next page. If this field is omitted, there are no subsequent pages.
    nextPageToken :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

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

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

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

-- | The response message for MembershipsService.ListMemberships.
--
-- /See:/ 'newListMembershipsResponse' smart constructor.
data ListMembershipsResponse = ListMembershipsResponse
  { -- | The @Membership@s under the specified @parent@.
    memberships :: (Core.Maybe [Membership]),
    -- | A continuation token to retrieve the next page of results, or empty if there are no more results available.
    nextPageToken :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

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

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

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

-- | The response message for PoliciesService.ListPolicies.
--
-- /See:/ 'newListPoliciesResponse' smart constructor.
data ListPoliciesResponse = ListPoliciesResponse
  { -- | The pagination token to retrieve the next page of results. If this field is empty, there are no subsequent pages.
    nextPageToken :: (Core.Maybe Core.Text),
    -- | The results
    policies :: (Core.Maybe [Policy])
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

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

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

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

-- | Response message for UserInvitation listing request.
--
-- /See:/ 'newListUserInvitationsResponse' smart constructor.
data ListUserInvitationsResponse = ListUserInvitationsResponse
  { -- | The token for the next page. If not empty, indicates that there may be more @UserInvitation@ resources that match the listing request; this value can be used in a subsequent ListUserInvitationsRequest to get continued results with the current list call.
    nextPageToken :: (Core.Maybe Core.Text),
    -- | The list of UserInvitation resources.
    userInvitations :: (Core.Maybe [UserInvitation])
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

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

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

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

-- | The response message for GroupsService.LookupGroupName.
--
-- /See:/ 'newLookupGroupNameResponse' smart constructor.
newtype LookupGroupNameResponse = LookupGroupNameResponse
  { -- | The <https://cloud.google.com/apis/design/resource_names resource name> of the looked-up @Group@.
    name :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'LookupGroupNameResponse' with the minimum fields required to make a request.
newLookupGroupNameResponse ::
  LookupGroupNameResponse
newLookupGroupNameResponse =
  LookupGroupNameResponse {name = Core.Nothing}

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

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

-- | The response message for MembershipsService.LookupMembershipName.
--
-- /See:/ 'newLookupMembershipNameResponse' smart constructor.
newtype LookupMembershipNameResponse = LookupMembershipNameResponse
  { -- | The <https://cloud.google.com/apis/design/resource_names resource name> of the looked-up @Membership@. Must be of the form @groups\/{group}\/memberships\/{membership}@.
    name :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'LookupMembershipNameResponse' with the minimum fields required to make a request.
newLookupMembershipNameResponse ::
  LookupMembershipNameResponse
newLookupMembershipNameResponse =
  LookupMembershipNameResponse {name = Core.Nothing}

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

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

-- | Message representing a transitive membership of a group.
--
-- /See:/ 'newMemberRelation' smart constructor.
data MemberRelation = MemberRelation
  { -- | Resource name for this member.
    member :: (Core.Maybe Core.Text),
    -- | Entity key has an id and a namespace. In case of discussion forums, the id will be an email address without a namespace.
    preferredMemberKey :: (Core.Maybe [EntityKey]),
    -- | The relation between the group and the transitive member.
    relationType :: (Core.Maybe MemberRelation_RelationType),
    -- | The membership role details (i.e name of role and expiry time).
    roles :: (Core.Maybe [TransitiveMembershipRole])
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'MemberRelation' with the minimum fields required to make a request.
newMemberRelation ::
  MemberRelation
newMemberRelation =
  MemberRelation
    { member = Core.Nothing,
      preferredMemberKey = Core.Nothing,
      relationType = Core.Nothing,
      roles = Core.Nothing
    }

instance Core.FromJSON MemberRelation where
  parseJSON =
    Core.withObject
      "MemberRelation"
      ( \o ->
          MemberRelation
            Core.<$> (o Core..:? "member")
            Core.<*> (o Core..:? "preferredMemberKey")
            Core.<*> (o Core..:? "relationType")
            Core.<*> (o Core..:? "roles")
      )

instance Core.ToJSON MemberRelation where
  toJSON MemberRelation {..} =
    Core.object
      ( Core.catMaybes
          [ ("member" Core..=) Core.<$> member,
            ("preferredMemberKey" Core..=) Core.<$> preferredMemberKey,
            ("relationType" Core..=) Core.<$> relationType,
            ("roles" Core..=) Core.<$> roles
          ]
      )

-- | The definition of MemberRestriction
--
-- /See:/ 'newMemberRestriction' smart constructor.
data MemberRestriction = MemberRestriction
  { -- | The evaluated state of this restriction on a group.
    evaluation :: (Core.Maybe RestrictionEvaluation),
    -- | Member Restriction as defined by CEL expression. Supported restrictions are: @member.customer_id@ and @member.type@. Valid values for @member.type@ are @1@, @2@ and @3@. They correspond to USER, SERVICE_ACCOUNT, and GROUP respectively. The value for @member.customer_id@ only supports @groupCustomerId()@ currently which means the customer id of the group will be used for restriction. Supported operators are @&&@, @||@ and @==@, corresponding to AND, OR, and EQUAL. Examples: Allow only service accounts of given customer to be members. @member.type == 2 && member.customer_id == groupCustomerId()@ Allow only users or groups to be members. @member.type == 1 || member.type == 3@
    query :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'MemberRestriction' with the minimum fields required to make a request.
newMemberRestriction ::
  MemberRestriction
newMemberRestriction =
  MemberRestriction
    { evaluation = Core.Nothing,
      query = Core.Nothing
    }

instance Core.FromJSON MemberRestriction where
  parseJSON =
    Core.withObject
      "MemberRestriction"
      ( \o ->
          MemberRestriction
            Core.<$> (o Core..:? "evaluation")
            Core.<*> (o Core..:? "query")
      )

instance Core.ToJSON MemberRestriction where
  toJSON MemberRestriction {..} =
    Core.object
      ( Core.catMaybes
          [ ("evaluation" Core..=) Core.<$> evaluation,
            ("query" Core..=) Core.<$> query
          ]
      )

-- | A membership within the Cloud Identity Groups API. A @Membership@ defines a relationship between a @Group@ and an entity belonging to that @Group@, referred to as a \"member\".
--
-- /See:/ 'newMembership' smart constructor.
data Membership = Membership
  { -- | Output only. The time when the @Membership@ was created.
    createTime :: (Core.Maybe Core.DateTime),
    -- | Output only. Delivery setting associated with the membership.
    deliverySetting :: (Core.Maybe Membership_DeliverySetting),
    -- | Output only. The <https://cloud.google.com/apis/design/resource_names resource name> of the @Membership@. Shall be of the form @groups\/{group}\/memberships\/{membership}@.
    name :: (Core.Maybe Core.Text),
    -- | Required. Immutable. The @EntityKey@ of the member.
    preferredMemberKey :: (Core.Maybe EntityKey),
    -- | The @MembershipRole@s that apply to the @Membership@. If unspecified, defaults to a single @MembershipRole@ with @name@ @MEMBER@. Must not contain duplicate @MembershipRole@s with the same @name@.
    roles :: (Core.Maybe [MembershipRole]),
    -- | Output only. The type of the membership.
    type' :: (Core.Maybe Membership_Type),
    -- | Output only. The time when the @Membership@ was last updated.
    updateTime :: (Core.Maybe Core.DateTime)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Membership' with the minimum fields required to make a request.
newMembership ::
  Membership
newMembership =
  Membership
    { createTime = Core.Nothing,
      deliverySetting = Core.Nothing,
      name = Core.Nothing,
      preferredMemberKey = Core.Nothing,
      roles = Core.Nothing,
      type' = Core.Nothing,
      updateTime = Core.Nothing
    }

instance Core.FromJSON Membership where
  parseJSON =
    Core.withObject
      "Membership"
      ( \o ->
          Membership
            Core.<$> (o Core..:? "createTime")
            Core.<*> (o Core..:? "deliverySetting")
            Core.<*> (o Core..:? "name")
            Core.<*> (o Core..:? "preferredMemberKey")
            Core.<*> (o Core..:? "roles")
            Core.<*> (o Core..:? "type")
            Core.<*> (o Core..:? "updateTime")
      )

instance Core.ToJSON Membership where
  toJSON Membership {..} =
    Core.object
      ( Core.catMaybes
          [ ("createTime" Core..=) Core.<$> createTime,
            ("deliverySetting" Core..=) Core.<$> deliverySetting,
            ("name" Core..=) Core.<$> name,
            ("preferredMemberKey" Core..=) Core.<$> preferredMemberKey,
            ("roles" Core..=) Core.<$> roles,
            ("type" Core..=) Core.<$> type',
            ("updateTime" Core..=) Core.<$> updateTime
          ]
      )

-- | Membership graph\'s path information as an adjacency list.
--
-- /See:/ 'newMembershipAdjacencyList' smart constructor.
data MembershipAdjacencyList = MembershipAdjacencyList
  { -- | Each edge contains information about the member that belongs to this group. Note: Fields returned here will help identify the specific Membership resource (e.g @name@, @preferred_member_key@ and @role@), but may not be a comprehensive list of all fields.
    edges :: (Core.Maybe [Membership]),
    -- | Resource name of the group that the members belong to.
    group' :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'MembershipAdjacencyList' with the minimum fields required to make a request.
newMembershipAdjacencyList ::
  MembershipAdjacencyList
newMembershipAdjacencyList =
  MembershipAdjacencyList
    { edges = Core.Nothing,
      group' = Core.Nothing
    }

instance Core.FromJSON MembershipAdjacencyList where
  parseJSON =
    Core.withObject
      "MembershipAdjacencyList"
      ( \o ->
          MembershipAdjacencyList
            Core.<$> (o Core..:? "edges")
            Core.<*> (o Core..:? "group")
      )

instance Core.ToJSON MembershipAdjacencyList where
  toJSON MembershipAdjacencyList {..} =
    Core.object
      ( Core.catMaybes
          [ ("edges" Core..=) Core.<$> edges,
            ("group" Core..=) Core.<$> group'
          ]
      )

-- | Message containing membership relation.
--
-- /See:/ 'newMembershipRelation' smart constructor.
data MembershipRelation = MembershipRelation
  { -- | An extended description to help users determine the purpose of a @Group@.
    description :: (Core.Maybe Core.Text),
    -- | The display name of the @Group@.
    displayName :: (Core.Maybe Core.Text),
    -- | The <https://cloud.google.com/apis/design/resource_names resource name> of the @Group@. Shall be of the form @groups\/{group_id}@.
    group' :: (Core.Maybe Core.Text),
    -- | The @EntityKey@ of the @Group@.
    groupKey :: (Core.Maybe EntityKey),
    -- | One or more label entries that apply to the Group. Currently supported labels contain a key with an empty value.
    labels :: (Core.Maybe MembershipRelation_Labels),
    -- | The <https://cloud.google.com/apis/design/resource_names resource name> of the @Membership@. Shall be of the form @groups\/{group_id}\/memberships\/{membership_id}@.
    membership :: (Core.Maybe Core.Text),
    -- | The @MembershipRole@s that apply to the @Membership@.
    roles :: (Core.Maybe [MembershipRole])
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'MembershipRelation' with the minimum fields required to make a request.
newMembershipRelation ::
  MembershipRelation
newMembershipRelation =
  MembershipRelation
    { description = Core.Nothing,
      displayName = Core.Nothing,
      group' = Core.Nothing,
      groupKey = Core.Nothing,
      labels = Core.Nothing,
      membership = Core.Nothing,
      roles = Core.Nothing
    }

instance Core.FromJSON MembershipRelation where
  parseJSON =
    Core.withObject
      "MembershipRelation"
      ( \o ->
          MembershipRelation
            Core.<$> (o Core..:? "description")
            Core.<*> (o Core..:? "displayName")
            Core.<*> (o Core..:? "group")
            Core.<*> (o Core..:? "groupKey")
            Core.<*> (o Core..:? "labels")
            Core.<*> (o Core..:? "membership")
            Core.<*> (o Core..:? "roles")
      )

instance Core.ToJSON MembershipRelation where
  toJSON MembershipRelation {..} =
    Core.object
      ( Core.catMaybes
          [ ("description" Core..=) Core.<$> description,
            ("displayName" Core..=) Core.<$> displayName,
            ("group" Core..=) Core.<$> group',
            ("groupKey" Core..=) Core.<$> groupKey,
            ("labels" Core..=) Core.<$> labels,
            ("membership" Core..=) Core.<$> membership,
            ("roles" Core..=) Core.<$> roles
          ]
      )

-- | One or more label entries that apply to the Group. Currently supported labels contain a key with an empty value.
--
-- /See:/ 'newMembershipRelation_Labels' smart constructor.
newtype MembershipRelation_Labels = MembershipRelation_Labels
  { additional :: (Core.HashMap Core.Text Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

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

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

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

-- | A membership role within the Cloud Identity Groups API. A @MembershipRole@ defines the privileges granted to a @Membership@.
--
-- /See:/ 'newMembershipRole' smart constructor.
data MembershipRole = MembershipRole
  { -- | The expiry details of the @MembershipRole@. Expiry details are only supported for @MEMBER@ @MembershipRoles@. May be set if @name@ is @MEMBER@. Must not be set if @name@ is any other value.
    expiryDetail :: (Core.Maybe ExpiryDetail),
    -- | The name of the @MembershipRole@. Must be one of @OWNER@, @MANAGER@, @MEMBER@.
    name :: (Core.Maybe Core.Text),
    -- | Evaluations of restrictions applied to parent group on this membership.
    restrictionEvaluations :: (Core.Maybe RestrictionEvaluations)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'MembershipRole' with the minimum fields required to make a request.
newMembershipRole ::
  MembershipRole
newMembershipRole =
  MembershipRole
    { expiryDetail = Core.Nothing,
      name = Core.Nothing,
      restrictionEvaluations = Core.Nothing
    }

instance Core.FromJSON MembershipRole where
  parseJSON =
    Core.withObject
      "MembershipRole"
      ( \o ->
          MembershipRole
            Core.<$> (o Core..:? "expiryDetail")
            Core.<*> (o Core..:? "name")
            Core.<*> (o Core..:? "restrictionEvaluations")
      )

instance Core.ToJSON MembershipRole where
  toJSON MembershipRole {..} =
    Core.object
      ( Core.catMaybes
          [ ("expiryDetail" Core..=) Core.<$> expiryDetail,
            ("name" Core..=) Core.<$> name,
            ("restrictionEvaluations" Core..=)
              Core.<$> restrictionEvaluations
          ]
      )

-- | The evaluated state of this restriction.
--
-- /See:/ 'newMembershipRoleRestrictionEvaluation' smart constructor.
newtype MembershipRoleRestrictionEvaluation = MembershipRoleRestrictionEvaluation
  { -- | Output only. The current state of the restriction
    state :: (Core.Maybe MembershipRoleRestrictionEvaluation_State)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'MembershipRoleRestrictionEvaluation' with the minimum fields required to make a request.
newMembershipRoleRestrictionEvaluation ::
  MembershipRoleRestrictionEvaluation
newMembershipRoleRestrictionEvaluation =
  MembershipRoleRestrictionEvaluation {state = Core.Nothing}

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

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

-- | The request message for MembershipsService.ModifyMembershipRoles.
--
-- /See:/ 'newModifyMembershipRolesRequest' smart constructor.
data ModifyMembershipRolesRequest = ModifyMembershipRolesRequest
  { -- | The @MembershipRole@s to be added. Adding or removing roles in the same request as updating roles is not supported. Must not be set if @update_roles_params@ is set.
    addRoles :: (Core.Maybe [MembershipRole]),
    -- | The @name@s of the @MembershipRole@s to be removed. Adding or removing roles in the same request as updating roles is not supported. It is not possible to remove the @MEMBER@ @MembershipRole@. If you wish to delete a @Membership@, call MembershipsService.DeleteMembership instead. Must not contain @MEMBER@. Must not be set if @update_roles_params@ is set.
    removeRoles :: (Core.Maybe [Core.Text]),
    -- | The @MembershipRole@s to be updated. Updating roles in the same request as adding or removing roles is not supported. Must not be set if either @add_roles@ or @remove_roles@ is set.
    updateRolesParams :: (Core.Maybe [UpdateMembershipRolesParams])
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ModifyMembershipRolesRequest' with the minimum fields required to make a request.
newModifyMembershipRolesRequest ::
  ModifyMembershipRolesRequest
newModifyMembershipRolesRequest =
  ModifyMembershipRolesRequest
    { addRoles = Core.Nothing,
      removeRoles = Core.Nothing,
      updateRolesParams = Core.Nothing
    }

instance Core.FromJSON ModifyMembershipRolesRequest where
  parseJSON =
    Core.withObject
      "ModifyMembershipRolesRequest"
      ( \o ->
          ModifyMembershipRolesRequest
            Core.<$> (o Core..:? "addRoles")
            Core.<*> (o Core..:? "removeRoles")
            Core.<*> (o Core..:? "updateRolesParams")
      )

instance Core.ToJSON ModifyMembershipRolesRequest where
  toJSON ModifyMembershipRolesRequest {..} =
    Core.object
      ( Core.catMaybes
          [ ("addRoles" Core..=) Core.<$> addRoles,
            ("removeRoles" Core..=) Core.<$> removeRoles,
            ("updateRolesParams" Core..=) Core.<$> updateRolesParams
          ]
      )

-- | The response message for MembershipsService.ModifyMembershipRoles.
--
-- /See:/ 'newModifyMembershipRolesResponse' smart constructor.
newtype ModifyMembershipRolesResponse = ModifyMembershipRolesResponse
  { -- | The @Membership@ resource after modifying its @MembershipRole@s.
    membership :: (Core.Maybe Membership)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ModifyMembershipRolesResponse' with the minimum fields required to make a request.
newModifyMembershipRolesResponse ::
  ModifyMembershipRolesResponse
newModifyMembershipRolesResponse =
  ModifyMembershipRolesResponse {membership = Core.Nothing}

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

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

-- | 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),
    -- | The error result of the operation in case of failure or cancellation.
    error :: (Core.Maybe Status),
    -- | 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.
    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),
    -- | The normal, successful response of the operation. 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@.
    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
          ]
      )

-- | 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:/ '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

-- | The normal, successful response of the operation. 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:/ '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 Policy resource binds an instance of a single Setting with the scope of a PolicyQuery. The Setting instance will be applied to all entities that satisfy the query.
--
-- /See:/ 'newPolicy' smart constructor.
data Policy = Policy
  { -- | Immutable. Customer that the Policy belongs to. The value is in the format \'customers\/{customerId}\'. The @customerId@ must begin with \"C\" To find your customer ID in Admin Console see https:\/\/support.google.com\/a\/answer\/10070793.
    customer :: (Core.Maybe Core.Text),
    -- | Output only. Identifier. The <https://cloud.google.com/apis/design/resource_names resource name> of the Policy. Format: policies\/{policy}.
    name :: (Core.Maybe Core.Text),
    -- | Required. The PolicyQuery the Setting applies to.
    policyQuery :: (Core.Maybe PolicyQuery),
    -- | Required. The Setting configured by this Policy.
    setting :: (Core.Maybe Setting),
    -- | Output only. The type of the policy.
    type' :: (Core.Maybe Policy_Type)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Policy' with the minimum fields required to make a request.
newPolicy ::
  Policy
newPolicy =
  Policy
    { customer = Core.Nothing,
      name = Core.Nothing,
      policyQuery = Core.Nothing,
      setting = Core.Nothing,
      type' = Core.Nothing
    }

instance Core.FromJSON Policy where
  parseJSON =
    Core.withObject
      "Policy"
      ( \o ->
          Policy
            Core.<$> (o Core..:? "customer")
            Core.<*> (o Core..:? "name")
            Core.<*> (o Core..:? "policyQuery")
            Core.<*> (o Core..:? "setting")
            Core.<*> (o Core..:? "type")
      )

instance Core.ToJSON Policy where
  toJSON Policy {..} =
    Core.object
      ( Core.catMaybes
          [ ("customer" Core..=) Core.<$> customer,
            ("name" Core..=) Core.<$> name,
            ("policyQuery" Core..=) Core.<$> policyQuery,
            ("setting" Core..=) Core.<$> setting,
            ("type" Core..=) Core.<$> type'
          ]
      )

-- | PolicyQuery
--
-- /See:/ 'newPolicyQuery' smart constructor.
data PolicyQuery = PolicyQuery
  { -- | Immutable. The group that the query applies to. This field is only set if there is a single value for group that satisfies all clauses of the query. If no group applies, this will be the empty string.
    group' :: (Core.Maybe Core.Text),
    -- | Required. Immutable. Non-empty default. The OrgUnit the query applies to. This field is only set if there is a single value for org_unit that satisfies all clauses of the query.
    orgUnit :: (Core.Maybe Core.Text),
    -- | Immutable. The CEL query that defines which entities the Policy applies to (ex. a User entity). For details about CEL see https:\/\/opensource.google.com\/projects\/cel. The OrgUnits the Policy applies to are represented by a clause like so: entity.org/units.exists(org/unit, org/unit.org/unit/id == orgUnitId(\'{orgUnitId}\')) The Group the Policy applies to are represented by a clause like so: entity.groups.exists(group, group.group/id == groupId(\'{groupId}\')) The Licenses the Policy applies to are represented by a clause like so: entity.licenses.exists(license, license in [\'\/product\/{productId}\/sku\/{skuId}\']) The above clauses can be present in any combination, and used in conjunction with the &&, || and ! operators. The org_unit and group fields below are helper fields that contain the corresponding value(s) as the query to make the query easier to use.
    query :: (Core.Maybe Core.Text),
    -- | Output only. The decimal sort order of this PolicyQuery. The value is relative to all other policies with the same setting type for the customer. (There are no duplicates within this set).
    sortOrder :: (Core.Maybe Core.Double)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'PolicyQuery' with the minimum fields required to make a request.
newPolicyQuery ::
  PolicyQuery
newPolicyQuery =
  PolicyQuery
    { group' = Core.Nothing,
      orgUnit = Core.Nothing,
      query = Core.Nothing,
      sortOrder = Core.Nothing
    }

instance Core.FromJSON PolicyQuery where
  parseJSON =
    Core.withObject
      "PolicyQuery"
      ( \o ->
          PolicyQuery
            Core.<$> (o Core..:? "group")
            Core.<*> (o Core..:? "orgUnit")
            Core.<*> (o Core..:? "query")
            Core.<*> (o Core..:? "sortOrder")
      )

instance Core.ToJSON PolicyQuery where
  toJSON PolicyQuery {..} =
    Core.object
      ( Core.catMaybes
          [ ("group" Core..=) Core.<$> group',
            ("orgUnit" Core..=) Core.<$> orgUnit,
            ("query" Core..=) Core.<$> query,
            ("sortOrder" Core..=) Core.<$> sortOrder
          ]
      )

-- | The evaluated state of this restriction.
--
-- /See:/ 'newRestrictionEvaluation' smart constructor.
newtype RestrictionEvaluation = RestrictionEvaluation
  { -- | Output only. The current state of the restriction
    state :: (Core.Maybe RestrictionEvaluation_State)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'RestrictionEvaluation' with the minimum fields required to make a request.
newRestrictionEvaluation ::
  RestrictionEvaluation
newRestrictionEvaluation =
  RestrictionEvaluation {state = Core.Nothing}

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

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

-- | Evaluations of restrictions applied to parent group on this membership.
--
-- /See:/ 'newRestrictionEvaluations' smart constructor.
newtype RestrictionEvaluations = RestrictionEvaluations
  { -- | Evaluation of the member restriction applied to this membership. Empty if the user lacks permission to view the restriction evaluation.
    memberRestrictionEvaluation :: (Core.Maybe MembershipRoleRestrictionEvaluation)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'RestrictionEvaluations' with the minimum fields required to make a request.
newRestrictionEvaluations ::
  RestrictionEvaluations
newRestrictionEvaluations =
  RestrictionEvaluations
    { memberRestrictionEvaluation =
        Core.Nothing
    }

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

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

-- | Information of a RSA public key.
--
-- /See:/ 'newRsaPublicKeyInfo' smart constructor.
newtype RsaPublicKeyInfo = RsaPublicKeyInfo
  { -- | Key size in bits (size of the modulus).
    keySize :: (Core.Maybe Core.Int32)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'RsaPublicKeyInfo' with the minimum fields required to make a request.
newRsaPublicKeyInfo ::
  RsaPublicKeyInfo
newRsaPublicKeyInfo = RsaPublicKeyInfo {keySize = Core.Nothing}

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

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

-- | SAML IDP (identity provider) configuration.
--
-- /See:/ 'newSamlIdpConfig' smart constructor.
data SamlIdpConfig = SamlIdpConfig
  { -- | The __Change Password URL__ of the identity provider. Users will be sent to this URL when changing their passwords at @myaccount.google.com@. This takes precedence over the change password URL configured at customer-level. Must use @HTTPS@.
    changePasswordUri :: (Core.Maybe Core.Text),
    -- | Required. The SAML __Entity ID__ of the identity provider.
    entityId :: (Core.Maybe Core.Text),
    -- | The __Logout Redirect URL__ (sign-out page URL) of the identity provider. When a user clicks the sign-out link on a Google page, they will be redirected to this URL. This is a pure redirect with no attached SAML @LogoutRequest@ i.e. SAML single logout is not supported. Must use @HTTPS@.
    logoutRedirectUri :: (Core.Maybe Core.Text),
    -- | Required. The @SingleSignOnService@ endpoint location (sign-in page URL) of the identity provider. This is the URL where the @AuthnRequest@ will be sent. Must use @HTTPS@. Assumed to accept the @HTTP-Redirect@ binding.
    singleSignOnServiceUri :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'SamlIdpConfig' with the minimum fields required to make a request.
newSamlIdpConfig ::
  SamlIdpConfig
newSamlIdpConfig =
  SamlIdpConfig
    { changePasswordUri = Core.Nothing,
      entityId = Core.Nothing,
      logoutRedirectUri = Core.Nothing,
      singleSignOnServiceUri = Core.Nothing
    }

instance Core.FromJSON SamlIdpConfig where
  parseJSON =
    Core.withObject
      "SamlIdpConfig"
      ( \o ->
          SamlIdpConfig
            Core.<$> (o Core..:? "changePasswordUri")
            Core.<*> (o Core..:? "entityId")
            Core.<*> (o Core..:? "logoutRedirectUri")
            Core.<*> (o Core..:? "singleSignOnServiceUri")
      )

instance Core.ToJSON SamlIdpConfig where
  toJSON SamlIdpConfig {..} =
    Core.object
      ( Core.catMaybes
          [ ("changePasswordUri" Core..=) Core.<$> changePasswordUri,
            ("entityId" Core..=) Core.<$> entityId,
            ("logoutRedirectUri" Core..=) Core.<$> logoutRedirectUri,
            ("singleSignOnServiceUri" Core..=)
              Core.<$> singleSignOnServiceUri
          ]
      )

-- | SAML SP (service provider) configuration.
--
-- /See:/ 'newSamlSpConfig' smart constructor.
data SamlSpConfig = SamlSpConfig
  { -- | Output only. The SAML __Assertion Consumer Service (ACS) URL__ to be used for the IDP-initiated login. Assumed to accept response messages via the @HTTP-POST@ binding.
    assertionConsumerServiceUri :: (Core.Maybe Core.Text),
    -- | Output only. The SAML __Entity ID__ for this service provider.
    entityId :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'SamlSpConfig' with the minimum fields required to make a request.
newSamlSpConfig ::
  SamlSpConfig
newSamlSpConfig =
  SamlSpConfig
    { assertionConsumerServiceUri = Core.Nothing,
      entityId = Core.Nothing
    }

instance Core.FromJSON SamlSpConfig where
  parseJSON =
    Core.withObject
      "SamlSpConfig"
      ( \o ->
          SamlSpConfig
            Core.<$> (o Core..:? "assertionConsumerServiceUri")
            Core.<*> (o Core..:? "entityId")
      )

instance Core.ToJSON SamlSpConfig where
  toJSON SamlSpConfig {..} =
    Core.object
      ( Core.catMaybes
          [ ("assertionConsumerServiceUri" Core..=)
              Core.<$> assertionConsumerServiceUri,
            ("entityId" Core..=) Core.<$> entityId
          ]
      )

-- | Details that are applicable when @sso_mode@ == @SAML_SSO@.
--
-- /See:/ 'newSamlSsoInfo' smart constructor.
newtype SamlSsoInfo = SamlSsoInfo
  { -- | Required. Name of the @InboundSamlSsoProfile@ to use. Must be of the form @inboundSamlSsoProfiles\/{inbound_saml_sso_profile}@.
    inboundSamlSsoProfile :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'SamlSsoInfo' with the minimum fields required to make a request.
newSamlSsoInfo ::
  SamlSsoInfo
newSamlSsoInfo = SamlSsoInfo {inboundSamlSsoProfile = Core.Nothing}

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

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

-- | The response message for MembershipsService.SearchDirectGroups.
--
-- /See:/ 'newSearchDirectGroupsResponse' smart constructor.
data SearchDirectGroupsResponse = SearchDirectGroupsResponse
  { -- | List of direct groups satisfying the query.
    memberships :: (Core.Maybe [MembershipRelation]),
    -- | Token to retrieve the next page of results, or empty if there are no more results available for listing.
    nextPageToken :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

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

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

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

-- | The response message for GroupsService.SearchGroups.
--
-- /See:/ 'newSearchGroupsResponse' smart constructor.
data SearchGroupsResponse = SearchGroupsResponse
  { -- | The @Group@ resources that match the search query.
    groups :: (Core.Maybe [Group]),
    -- | A continuation token to retrieve the next page of results, or empty if there are no more results available.
    nextPageToken :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

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

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

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

-- | The response message for MembershipsService.SearchTransitiveGroups.
--
-- /See:/ 'newSearchTransitiveGroupsResponse' smart constructor.
data SearchTransitiveGroupsResponse = SearchTransitiveGroupsResponse
  { -- | List of transitive groups satisfying the query.
    memberships :: (Core.Maybe [GroupRelation]),
    -- | Token to retrieve the next page of results, or empty if there are no more results available for listing.
    nextPageToken :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

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

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

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

-- | The response message for MembershipsService.SearchTransitiveMemberships.
--
-- /See:/ 'newSearchTransitiveMembershipsResponse' smart constructor.
data SearchTransitiveMembershipsResponse = SearchTransitiveMembershipsResponse
  { -- | List of transitive members satisfying the query.
    memberships :: (Core.Maybe [MemberRelation]),
    -- | Token to retrieve the next page of results, or empty if there are no more results.
    nextPageToken :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

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

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

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

-- | The definition of security settings.
--
-- /See:/ 'newSecuritySettings' smart constructor.
data SecuritySettings = SecuritySettings
  { -- | The Member Restriction value
    memberRestriction :: (Core.Maybe MemberRestriction),
    -- | Output only. The resource name of the security settings. Shall be of the form @groups\/{group_id}\/securitySettings@.
    name :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'SecuritySettings' with the minimum fields required to make a request.
newSecuritySettings ::
  SecuritySettings
newSecuritySettings =
  SecuritySettings
    { memberRestriction = Core.Nothing,
      name = Core.Nothing
    }

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

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

-- | A request to send email for inviting target user corresponding to the UserInvitation.
--
-- /See:/ 'newSendUserInvitationRequest' smart constructor.
data SendUserInvitationRequest = SendUserInvitationRequest
  deriving (Core.Eq, Core.Show, Core.Generic)

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

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

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

-- | Setting
--
-- /See:/ 'newSetting' smart constructor.
data Setting = Setting
  { -- | Required. Immutable. The type of the Setting. .
    type' :: (Core.Maybe Core.Text),
    -- | Required. The value of the Setting.
    value :: (Core.Maybe Setting_Value)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Setting' with the minimum fields required to make a request.
newSetting ::
  Setting
newSetting = Setting {type' = Core.Nothing, value = Core.Nothing}

instance Core.FromJSON Setting where
  parseJSON =
    Core.withObject
      "Setting"
      ( \o ->
          Setting Core.<$> (o Core..:? "type") Core.<*> (o Core..:? "value")
      )

instance Core.ToJSON Setting where
  toJSON Setting {..} =
    Core.object
      ( Core.catMaybes
          [ ("type" Core..=) Core.<$> type',
            ("value" Core..=) Core.<$> value
          ]
      )

-- | Required. The value of the Setting.
--
-- /See:/ 'newSetting_Value' smart constructor.
newtype Setting_Value = Setting_Value
  { -- | Properties of the object.
    additional :: (Core.HashMap Core.Text Core.Value)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Setting_Value' with the minimum fields required to make a request.
newSetting_Value ::
  -- |  Properties of the object. See 'additional'.
  Core.HashMap Core.Text Core.Value ->
  Setting_Value
newSetting_Value additional =
  Setting_Value {additional = additional}

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

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

-- | Controls sign-in behavior.
--
-- /See:/ 'newSignInBehavior' smart constructor.
newtype SignInBehavior = SignInBehavior
  { -- | When to redirect sign-ins to the IdP.
    redirectCondition :: (Core.Maybe SignInBehavior_RedirectCondition)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'SignInBehavior' with the minimum fields required to make a request.
newSignInBehavior ::
  SignInBehavior
newSignInBehavior =
  SignInBehavior {redirectCondition = Core.Nothing}

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

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

-- | 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

-- | Message representing the role of a TransitiveMembership.
--
-- /See:/ 'newTransitiveMembershipRole' smart constructor.
newtype TransitiveMembershipRole = TransitiveMembershipRole
  { -- | TransitiveMembershipRole in string format. Currently supported TransitiveMembershipRoles: @\"MEMBER\"@, @\"OWNER\"@, and @\"MANAGER\"@.
    role' :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'TransitiveMembershipRole' with the minimum fields required to make a request.
newTransitiveMembershipRole ::
  TransitiveMembershipRole
newTransitiveMembershipRole =
  TransitiveMembershipRole {role' = Core.Nothing}

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

instance Core.ToJSON TransitiveMembershipRole where
  toJSON TransitiveMembershipRole {..} =
    Core.object (Core.catMaybes [("role" Core..=) Core.<$> role'])

-- | Metadata for UpdateGroup LRO.
--
-- /See:/ 'newUpdateGroupMetadata' smart constructor.
data UpdateGroupMetadata = UpdateGroupMetadata
  deriving (Core.Eq, Core.Show, Core.Generic)

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

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

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

-- | LRO response metadata for InboundSamlSsoProfilesService.UpdateInboundSamlSsoProfile.
--
-- /See:/ 'newUpdateInboundSamlSsoProfileOperationMetadata' smart constructor.
newtype UpdateInboundSamlSsoProfileOperationMetadata = UpdateInboundSamlSsoProfileOperationMetadata
  { -- | State of this Operation Will be \"awaiting-multi-party-approval\" when the operation is deferred due to the target customer having enabled <https://support.google.com/a/answer/13790448 Multi-party approval for sensitive actions>.
    state :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'UpdateInboundSamlSsoProfileOperationMetadata' with the minimum fields required to make a request.
newUpdateInboundSamlSsoProfileOperationMetadata ::
  UpdateInboundSamlSsoProfileOperationMetadata
newUpdateInboundSamlSsoProfileOperationMetadata =
  UpdateInboundSamlSsoProfileOperationMetadata
    { state =
        Core.Nothing
    }

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

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

-- | LRO response metadata for InboundSsoAssignmentsService.UpdateInboundSsoAssignment.
--
-- /See:/ 'newUpdateInboundSsoAssignmentOperationMetadata' smart constructor.
data UpdateInboundSsoAssignmentOperationMetadata = UpdateInboundSsoAssignmentOperationMetadata
  deriving (Core.Eq, Core.Show, Core.Generic)

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

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

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

-- | Metadata for UpdateMembership LRO.
--
-- /See:/ 'newUpdateMembershipMetadata' smart constructor.
data UpdateMembershipMetadata = UpdateMembershipMetadata
  deriving (Core.Eq, Core.Show, Core.Generic)

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

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

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

-- | The details of an update to a @MembershipRole@.
--
-- /See:/ 'newUpdateMembershipRolesParams' smart constructor.
data UpdateMembershipRolesParams = UpdateMembershipRolesParams
  { -- | The fully-qualified names of fields to update. May only contain the field @expiry_detail.expire_time@.
    fieldMask :: (Core.Maybe Core.FieldMask),
    -- | The @MembershipRole@s to be updated. Only @MEMBER@ @MembershipRole@ can currently be updated.
    membershipRole :: (Core.Maybe MembershipRole)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'UpdateMembershipRolesParams' with the minimum fields required to make a request.
newUpdateMembershipRolesParams ::
  UpdateMembershipRolesParams
newUpdateMembershipRolesParams =
  UpdateMembershipRolesParams
    { fieldMask = Core.Nothing,
      membershipRole = Core.Nothing
    }

instance Core.FromJSON UpdateMembershipRolesParams where
  parseJSON =
    Core.withObject
      "UpdateMembershipRolesParams"
      ( \o ->
          UpdateMembershipRolesParams
            Core.<$> (o Core..:? "fieldMask")
            Core.<*> (o Core..:? "membershipRole")
      )

instance Core.ToJSON UpdateMembershipRolesParams where
  toJSON UpdateMembershipRolesParams {..} =
    Core.object
      ( Core.catMaybes
          [ ("fieldMask" Core..=) Core.<$> fieldMask,
            ("membershipRole" Core..=) Core.<$> membershipRole
          ]
      )

-- | The @UserInvitation@ resource represents an email that can be sent to an unmanaged user account inviting them to join the customer\'s Google Workspace or Cloud Identity account. An unmanaged account shares an email address domain with the Google Workspace or Cloud Identity account but is not managed by it yet. If the user accepts the @UserInvitation@, the user account will become managed.
--
-- /See:/ 'newUserInvitation' smart constructor.
data UserInvitation = UserInvitation
  { -- | Number of invitation emails sent to the user.
    mailsSentCount :: (Core.Maybe Core.Int64),
    -- | Shall be of the form @customers\/{customer}\/userinvitations\/{user_email_address}@.
    name :: (Core.Maybe Core.Text),
    -- | State of the @UserInvitation@.
    state :: (Core.Maybe UserInvitation_State),
    -- | Time when the @UserInvitation@ was last updated.
    updateTime :: (Core.Maybe Core.DateTime)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'UserInvitation' with the minimum fields required to make a request.
newUserInvitation ::
  UserInvitation
newUserInvitation =
  UserInvitation
    { mailsSentCount = Core.Nothing,
      name = Core.Nothing,
      state = Core.Nothing,
      updateTime = Core.Nothing
    }

instance Core.FromJSON UserInvitation where
  parseJSON =
    Core.withObject
      "UserInvitation"
      ( \o ->
          UserInvitation
            Core.<$> (o Core..:? "mailsSentCount" Core.<&> Core.fmap Core.fromAsText)
            Core.<*> (o Core..:? "name")
            Core.<*> (o Core..:? "state")
            Core.<*> (o Core..:? "updateTime")
      )

instance Core.ToJSON UserInvitation where
  toJSON UserInvitation {..} =
    Core.object
      ( Core.catMaybes
          [ ("mailsSentCount" Core..=)
              Core.. Core.AsText
              Core.<$> mailsSentCount,
            ("name" Core..=) Core.<$> name,
            ("state" Core..=) Core.<$> state,
            ("updateTime" Core..=) Core.<$> updateTime
          ]
      )