content: {-# 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.Monitoring.Projects.NotificationChannels.GetVerificationCode
  -- 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)
  --
  -- Requests a verification code for an already verified channel that can then be used in a call to VerifyNotificationChannel() on a different channel with an equivalent identity in the same or in a different project. This makes it possible to copy a channel between projects without requiring manual reverification of the channel. If the channel is not in the verified state, this method will fail (in other words, this may only be used if the SendNotificationChannelVerificationCode and VerifyNotificationChannel paths have already been used to put the given channel into the verified state).There is no guarantee that the verification codes returned by this method will be of a similar structure or form as the ones that are delivered to the channel via SendNotificationChannelVerificationCode; while VerifyNotificationChannel() will recognize both the codes delivered via SendNotificationChannelVerificationCode() and returned from GetNotificationChannelVerificationCode(), it is typically the case that the verification
  -- codes delivered via SendNotificationChannelVerificationCode() will be shorter and also have a shorter expiration (e.g. codes such as \"G-123456\") whereas GetVerificationCode() will typically return a much longer, websafe base 64 encoded string that has a longer expiration time.
  --
  -- /See:/ <https://cloud.google.com/monitoring/api/ Cloud Monitoring API Reference> for @monitoring.projects.notificationChannels.getVerificationCode@.
  module Gogol.Monitoring.Projects.NotificationChannels.GetVerificationCode
    ( -- * Resource
      MonitoringProjectsNotificationChannelsGetVerificationCodeResource,
  
      -- ** Constructing a Request
      MonitoringProjectsNotificationChannelsGetVerificationCode (..),
      newMonitoringProjectsNotificationChannelsGetVerificationCode,
    )
  where
  
  import Gogol.Monitoring.Types
  import Gogol.Prelude qualified as Core
  
  -- | A resource alias for @monitoring.projects.notificationChannels.getVerificationCode@ method which the
  -- 'MonitoringProjectsNotificationChannelsGetVerificationCode' request conforms to.
  type MonitoringProjectsNotificationChannelsGetVerificationCodeResource =
    "v3"
      Core.:> Core.CaptureMode "name" "getVerificationCode" Core.Text
      Core.:> Core.QueryParam "$.xgafv" Xgafv
      Core.:> Core.QueryParam "access_token" Core.Text
      Core.:> Core.QueryParam "callback" Core.Text
      Core.:> Core.QueryParam "uploadType" Core.Text
      Core.:> Core.QueryParam "upload_protocol" Core.Text
      Core.:> Core.QueryParam "alt" Core.AltJSON
      Core.:> Core.ReqBody
                '[Core.JSON]
                GetNotificationChannelVerificationCodeRequest
      Core.:> Core.Post
                '[Core.JSON]
                GetNotificationChannelVerificationCodeResponse
  
  -- | Requests a verification code for an already verified channel that can then be used in a call to VerifyNotificationChannel() on a different channel with an equivalent identity in the same or in a different project. This makes it possible to copy a channel between projects without requiring manual reverification of the channel. If the channel is not in the verified state, this method will fail (in other words, this may only be used if the SendNotificationChannelVerificationCode and VerifyNotificationChannel paths have already been used to put the given channel into the verified state).There is no guarantee that the verification codes returned by this method will be of a similar structure or form as the ones that are delivered to the channel via SendNotificationChannelVerificationCode; while VerifyNotificationChannel() will recognize both the codes delivered via SendNotificationChannelVerificationCode() and returned from GetNotificationChannelVerificationCode(), it is typically the case that the verification
  -- codes delivered via SendNotificationChannelVerificationCode() will be shorter and also have a shorter expiration (e.g. codes such as \"G-123456\") whereas GetVerificationCode() will typically return a much longer, websafe base 64 encoded string that has a longer expiration time.
  --
  -- /See:/ 'newMonitoringProjectsNotificationChannelsGetVerificationCode' smart constructor.
  data MonitoringProjectsNotificationChannelsGetVerificationCode = MonitoringProjectsNotificationChannelsGetVerificationCode
    { -- | V1 error format.
      xgafv :: (Core.Maybe Xgafv),
      -- | OAuth access token.
      accessToken :: (Core.Maybe Core.Text),
      -- | JSONP
      callback :: (Core.Maybe Core.Text),
      -- | Required. The notification channel for which a verification code is to be generated and retrieved. This must name a channel that is already verified; if the specified channel is not verified, the request will fail.
      name :: Core.Text,
      -- | Multipart request metadata.
      payload :: GetNotificationChannelVerificationCodeRequest,
      -- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
      uploadType :: (Core.Maybe Core.Text),
      -- | Upload protocol for media (e.g. \"raw\", \"multipart\").
      uploadProtocol :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'MonitoringProjectsNotificationChannelsGetVerificationCode' with the minimum fields required to make a request.
  newMonitoringProjectsNotificationChannelsGetVerificationCode ::
    -- |  Required. The notification channel for which a verification code is to be generated and retrieved. This must name a channel that is already verified; if the specified channel is not verified, the request will fail. See 'name'.
    Core.Text ->
    -- |  Multipart request metadata. See 'payload'.
    GetNotificationChannelVerificationCodeRequest ->
    MonitoringProjectsNotificationChannelsGetVerificationCode
  newMonitoringProjectsNotificationChannelsGetVerificationCode
    name
    payload =
      MonitoringProjectsNotificationChannelsGetVerificationCode
        { xgafv =
            Core.Nothing,
          accessToken = Core.Nothing,
          callback = Core.Nothing,
          name = name,
          payload = payload,
          uploadType = Core.Nothing,
          uploadProtocol = Core.Nothing
        }
  
  instance
    Core.GoogleRequest
      MonitoringProjectsNotificationChannelsGetVerificationCode
    where
    type
      Rs MonitoringProjectsNotificationChannelsGetVerificationCode =
        GetNotificationChannelVerificationCodeResponse
    type
      Scopes
        MonitoringProjectsNotificationChannelsGetVerificationCode =
        '[CloudPlatform'FullControl, Monitoring'FullControl]
    requestClient
      MonitoringProjectsNotificationChannelsGetVerificationCode {..} =
        go
          name
          xgafv
          accessToken
          callback
          uploadType
          uploadProtocol
          (Core.Just Core.AltJSON)
          payload
          monitoringService
        where
          go =
            Core.buildClient
              ( Core.Proxy ::
                  Core.Proxy
                    MonitoringProjectsNotificationChannelsGetVerificationCodeResource
              )
              Core.mempty
  