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.Redis.Projects.Locations.Instances.Import
  -- 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)
  --
  -- Import a Redis RDB snapshot file from Cloud Storage into a Redis instance. Redis may stop serving during this operation. Instance state will be IMPORTING for entire operation. When complete, the instance will contain only data from the imported file. The returned operation is automatically deleted after a few hours, so there is no need to call DeleteOperation.
  --
  -- /See:/ <https://cloud.google.com/memorystore/docs/redis/ Google Cloud Memorystore for Redis API Reference> for @redis.projects.locations.instances.import@.
  module Gogol.Redis.Projects.Locations.Instances.Import
    ( -- * Resource
      RedisProjectsLocationsInstancesImportResource,
  
      -- ** Constructing a Request
      RedisProjectsLocationsInstancesImport (..),
      newRedisProjectsLocationsInstancesImport,
    )
  where
  
  import Gogol.Prelude qualified as Core
  import Gogol.Redis.Types
  
  -- | A resource alias for @redis.projects.locations.instances.import@ method which the
  -- 'RedisProjectsLocationsInstancesImport' request conforms to.
  type RedisProjectsLocationsInstancesImportResource =
    "v1"
      Core.:> Core.CaptureMode "name" "import" 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] ImportInstanceRequest
      Core.:> Core.Post '[Core.JSON] Operation
  
  -- | Import a Redis RDB snapshot file from Cloud Storage into a Redis instance. Redis may stop serving during this operation. Instance state will be IMPORTING for entire operation. When complete, the instance will contain only data from the imported file. The returned operation is automatically deleted after a few hours, so there is no need to call DeleteOperation.
  --
  -- /See:/ 'newRedisProjectsLocationsInstancesImport' smart constructor.
  data RedisProjectsLocationsInstancesImport = RedisProjectsLocationsInstancesImport
    { -- | V1 error format.
      xgafv :: (Core.Maybe Xgafv),
      -- | OAuth access token.
      accessToken :: (Core.Maybe Core.Text),
      -- | JSONP
      callback :: (Core.Maybe Core.Text),
      -- | Required. Redis instance resource name using the form: @projects\/{project_id}\/locations\/{location_id}\/instances\/{instance_id}@ where @location_id@ refers to a GCP region.
      name :: Core.Text,
      -- | Multipart request metadata.
      payload :: ImportInstanceRequest,
      -- | 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 'RedisProjectsLocationsInstancesImport' with the minimum fields required to make a request.
  newRedisProjectsLocationsInstancesImport ::
    -- |  Required. Redis instance resource name using the form: @projects\/{project_id}\/locations\/{location_id}\/instances\/{instance_id}@ where @location_id@ refers to a GCP region. See 'name'.
    Core.Text ->
    -- |  Multipart request metadata. See 'payload'.
    ImportInstanceRequest ->
    RedisProjectsLocationsInstancesImport
  newRedisProjectsLocationsInstancesImport name payload =
    RedisProjectsLocationsInstancesImport
      { xgafv = Core.Nothing,
        accessToken = Core.Nothing,
        callback = Core.Nothing,
        name = name,
        payload = payload,
        uploadType = Core.Nothing,
        uploadProtocol = Core.Nothing
      }
  
  instance Core.GoogleRequest RedisProjectsLocationsInstancesImport where
    type Rs RedisProjectsLocationsInstancesImport = Operation
    type
      Scopes RedisProjectsLocationsInstancesImport =
        '[CloudPlatform'FullControl]
    requestClient RedisProjectsLocationsInstancesImport {..} =
      go
        name
        xgafv
        accessToken
        callback
        uploadType
        uploadProtocol
        (Core.Just Core.AltJSON)
        payload
        redisService
      where
        go =
          Core.buildClient
            ( Core.Proxy ::
                Core.Proxy RedisProjectsLocationsInstancesImportResource
            )
            Core.mempty
  