{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}

-- Derived from AWS service descriptions, licensed under Apache 2.0.

-- |
-- Module      : Amazonka.S3.Types.RestoreRequest
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
module Amazonka.S3.Types.RestoreRequest where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import qualified Amazonka.Prelude as Prelude
import Amazonka.S3.Internal
import Amazonka.S3.Types.GlacierJobParameters
import Amazonka.S3.Types.OutputLocation
import Amazonka.S3.Types.RestoreRequestType
import Amazonka.S3.Types.SelectParameters
import Amazonka.S3.Types.Tier

-- | Container for restore job parameters.
--
-- /See:/ 'newRestoreRequest' smart constructor.
data RestoreRequest = RestoreRequest'
  { -- | Lifetime of the active copy in days. Do not use with restores that
    -- specify @OutputLocation@.
    --
    -- The Days element is required for regular restores, and must not be
    -- provided for select requests.
    RestoreRequest -> Maybe Int
days :: Prelude.Maybe Prelude.Int,
    -- | The optional description for the job.
    RestoreRequest -> Maybe Text
description :: Prelude.Maybe Prelude.Text,
    -- | S3 Glacier related parameters pertaining to this job. Do not use with
    -- restores that specify @OutputLocation@.
    RestoreRequest -> Maybe GlacierJobParameters
glacierJobParameters :: Prelude.Maybe GlacierJobParameters,
    -- | Describes the location where the restore job\'s output is stored.
    RestoreRequest -> Maybe OutputLocation
outputLocation :: Prelude.Maybe OutputLocation,
    -- | Describes the parameters for Select job types.
    RestoreRequest -> Maybe SelectParameters
selectParameters :: Prelude.Maybe SelectParameters,
    -- | Retrieval tier at which the restore will be processed.
    RestoreRequest -> Maybe Tier
tier :: Prelude.Maybe Tier,
    -- | Type of restore request.
    RestoreRequest -> Maybe RestoreRequestType
type' :: Prelude.Maybe RestoreRequestType
  }
  deriving (RestoreRequest -> RestoreRequest -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: RestoreRequest -> RestoreRequest -> Bool
$c/= :: RestoreRequest -> RestoreRequest -> Bool
== :: RestoreRequest -> RestoreRequest -> Bool
$c== :: RestoreRequest -> RestoreRequest -> Bool
Prelude.Eq, Int -> RestoreRequest -> ShowS
[RestoreRequest] -> ShowS
RestoreRequest -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [RestoreRequest] -> ShowS
$cshowList :: [RestoreRequest] -> ShowS
show :: RestoreRequest -> String
$cshow :: RestoreRequest -> String
showsPrec :: Int -> RestoreRequest -> ShowS
$cshowsPrec :: Int -> RestoreRequest -> ShowS
Prelude.Show, forall x. Rep RestoreRequest x -> RestoreRequest
forall x. RestoreRequest -> Rep RestoreRequest x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep RestoreRequest x -> RestoreRequest
$cfrom :: forall x. RestoreRequest -> Rep RestoreRequest x
Prelude.Generic)

-- |
-- Create a value of 'RestoreRequest' with all optional fields omitted.
--
-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
--
-- The following record fields are available, with the corresponding lenses provided
-- for backwards compatibility:
--
-- 'days', 'restoreRequest_days' - Lifetime of the active copy in days. Do not use with restores that
-- specify @OutputLocation@.
--
-- The Days element is required for regular restores, and must not be
-- provided for select requests.
--
-- 'description', 'restoreRequest_description' - The optional description for the job.
--
-- 'glacierJobParameters', 'restoreRequest_glacierJobParameters' - S3 Glacier related parameters pertaining to this job. Do not use with
-- restores that specify @OutputLocation@.
--
-- 'outputLocation', 'restoreRequest_outputLocation' - Describes the location where the restore job\'s output is stored.
--
-- 'selectParameters', 'restoreRequest_selectParameters' - Describes the parameters for Select job types.
--
-- 'tier', 'restoreRequest_tier' - Retrieval tier at which the restore will be processed.
--
-- 'type'', 'restoreRequest_type' - Type of restore request.
newRestoreRequest ::
  RestoreRequest
newRestoreRequest :: RestoreRequest
newRestoreRequest =
  RestoreRequest'
    { $sel:days:RestoreRequest' :: Maybe Int
days = forall a. Maybe a
Prelude.Nothing,
      $sel:description:RestoreRequest' :: Maybe Text
description = forall a. Maybe a
Prelude.Nothing,
      $sel:glacierJobParameters:RestoreRequest' :: Maybe GlacierJobParameters
glacierJobParameters = forall a. Maybe a
Prelude.Nothing,
      $sel:outputLocation:RestoreRequest' :: Maybe OutputLocation
outputLocation = forall a. Maybe a
Prelude.Nothing,
      $sel:selectParameters:RestoreRequest' :: Maybe SelectParameters
selectParameters = forall a. Maybe a
Prelude.Nothing,
      $sel:tier:RestoreRequest' :: Maybe Tier
tier = forall a. Maybe a
Prelude.Nothing,
      $sel:type':RestoreRequest' :: Maybe RestoreRequestType
type' = forall a. Maybe a
Prelude.Nothing
    }

-- | Lifetime of the active copy in days. Do not use with restores that
-- specify @OutputLocation@.
--
-- The Days element is required for regular restores, and must not be
-- provided for select requests.
restoreRequest_days :: Lens.Lens' RestoreRequest (Prelude.Maybe Prelude.Int)
restoreRequest_days :: Lens' RestoreRequest (Maybe Int)
restoreRequest_days = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RestoreRequest' {Maybe Int
days :: Maybe Int
$sel:days:RestoreRequest' :: RestoreRequest -> Maybe Int
days} -> Maybe Int
days) (\s :: RestoreRequest
s@RestoreRequest' {} Maybe Int
a -> RestoreRequest
s {$sel:days:RestoreRequest' :: Maybe Int
days = Maybe Int
a} :: RestoreRequest)

-- | The optional description for the job.
restoreRequest_description :: Lens.Lens' RestoreRequest (Prelude.Maybe Prelude.Text)
restoreRequest_description :: Lens' RestoreRequest (Maybe Text)
restoreRequest_description = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RestoreRequest' {Maybe Text
description :: Maybe Text
$sel:description:RestoreRequest' :: RestoreRequest -> Maybe Text
description} -> Maybe Text
description) (\s :: RestoreRequest
s@RestoreRequest' {} Maybe Text
a -> RestoreRequest
s {$sel:description:RestoreRequest' :: Maybe Text
description = Maybe Text
a} :: RestoreRequest)

-- | S3 Glacier related parameters pertaining to this job. Do not use with
-- restores that specify @OutputLocation@.
restoreRequest_glacierJobParameters :: Lens.Lens' RestoreRequest (Prelude.Maybe GlacierJobParameters)
restoreRequest_glacierJobParameters :: Lens' RestoreRequest (Maybe GlacierJobParameters)
restoreRequest_glacierJobParameters = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RestoreRequest' {Maybe GlacierJobParameters
glacierJobParameters :: Maybe GlacierJobParameters
$sel:glacierJobParameters:RestoreRequest' :: RestoreRequest -> Maybe GlacierJobParameters
glacierJobParameters} -> Maybe GlacierJobParameters
glacierJobParameters) (\s :: RestoreRequest
s@RestoreRequest' {} Maybe GlacierJobParameters
a -> RestoreRequest
s {$sel:glacierJobParameters:RestoreRequest' :: Maybe GlacierJobParameters
glacierJobParameters = Maybe GlacierJobParameters
a} :: RestoreRequest)

-- | Describes the location where the restore job\'s output is stored.
restoreRequest_outputLocation :: Lens.Lens' RestoreRequest (Prelude.Maybe OutputLocation)
restoreRequest_outputLocation :: Lens' RestoreRequest (Maybe OutputLocation)
restoreRequest_outputLocation = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RestoreRequest' {Maybe OutputLocation
outputLocation :: Maybe OutputLocation
$sel:outputLocation:RestoreRequest' :: RestoreRequest -> Maybe OutputLocation
outputLocation} -> Maybe OutputLocation
outputLocation) (\s :: RestoreRequest
s@RestoreRequest' {} Maybe OutputLocation
a -> RestoreRequest
s {$sel:outputLocation:RestoreRequest' :: Maybe OutputLocation
outputLocation = Maybe OutputLocation
a} :: RestoreRequest)

-- | Describes the parameters for Select job types.
restoreRequest_selectParameters :: Lens.Lens' RestoreRequest (Prelude.Maybe SelectParameters)
restoreRequest_selectParameters :: Lens' RestoreRequest (Maybe SelectParameters)
restoreRequest_selectParameters = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RestoreRequest' {Maybe SelectParameters
selectParameters :: Maybe SelectParameters
$sel:selectParameters:RestoreRequest' :: RestoreRequest -> Maybe SelectParameters
selectParameters} -> Maybe SelectParameters
selectParameters) (\s :: RestoreRequest
s@RestoreRequest' {} Maybe SelectParameters
a -> RestoreRequest
s {$sel:selectParameters:RestoreRequest' :: Maybe SelectParameters
selectParameters = Maybe SelectParameters
a} :: RestoreRequest)

-- | Retrieval tier at which the restore will be processed.
restoreRequest_tier :: Lens.Lens' RestoreRequest (Prelude.Maybe Tier)
restoreRequest_tier :: Lens' RestoreRequest (Maybe Tier)
restoreRequest_tier = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RestoreRequest' {Maybe Tier
tier :: Maybe Tier
$sel:tier:RestoreRequest' :: RestoreRequest -> Maybe Tier
tier} -> Maybe Tier
tier) (\s :: RestoreRequest
s@RestoreRequest' {} Maybe Tier
a -> RestoreRequest
s {$sel:tier:RestoreRequest' :: Maybe Tier
tier = Maybe Tier
a} :: RestoreRequest)

-- | Type of restore request.
restoreRequest_type :: Lens.Lens' RestoreRequest (Prelude.Maybe RestoreRequestType)
restoreRequest_type :: Lens' RestoreRequest (Maybe RestoreRequestType)
restoreRequest_type = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RestoreRequest' {Maybe RestoreRequestType
type' :: Maybe RestoreRequestType
$sel:type':RestoreRequest' :: RestoreRequest -> Maybe RestoreRequestType
type'} -> Maybe RestoreRequestType
type') (\s :: RestoreRequest
s@RestoreRequest' {} Maybe RestoreRequestType
a -> RestoreRequest
s {$sel:type':RestoreRequest' :: Maybe RestoreRequestType
type' = Maybe RestoreRequestType
a} :: RestoreRequest)

instance Prelude.Hashable RestoreRequest where
  hashWithSalt :: Int -> RestoreRequest -> Int
hashWithSalt Int
_salt RestoreRequest' {Maybe Int
Maybe Text
Maybe RestoreRequestType
Maybe SelectParameters
Maybe Tier
Maybe GlacierJobParameters
Maybe OutputLocation
type' :: Maybe RestoreRequestType
tier :: Maybe Tier
selectParameters :: Maybe SelectParameters
outputLocation :: Maybe OutputLocation
glacierJobParameters :: Maybe GlacierJobParameters
description :: Maybe Text
days :: Maybe Int
$sel:type':RestoreRequest' :: RestoreRequest -> Maybe RestoreRequestType
$sel:tier:RestoreRequest' :: RestoreRequest -> Maybe Tier
$sel:selectParameters:RestoreRequest' :: RestoreRequest -> Maybe SelectParameters
$sel:outputLocation:RestoreRequest' :: RestoreRequest -> Maybe OutputLocation
$sel:glacierJobParameters:RestoreRequest' :: RestoreRequest -> Maybe GlacierJobParameters
$sel:description:RestoreRequest' :: RestoreRequest -> Maybe Text
$sel:days:RestoreRequest' :: RestoreRequest -> Maybe Int
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Int
days
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
description
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe GlacierJobParameters
glacierJobParameters
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe OutputLocation
outputLocation
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe SelectParameters
selectParameters
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Tier
tier
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe RestoreRequestType
type'

instance Prelude.NFData RestoreRequest where
  rnf :: RestoreRequest -> ()
rnf RestoreRequest' {Maybe Int
Maybe Text
Maybe RestoreRequestType
Maybe SelectParameters
Maybe Tier
Maybe GlacierJobParameters
Maybe OutputLocation
type' :: Maybe RestoreRequestType
tier :: Maybe Tier
selectParameters :: Maybe SelectParameters
outputLocation :: Maybe OutputLocation
glacierJobParameters :: Maybe GlacierJobParameters
description :: Maybe Text
days :: Maybe Int
$sel:type':RestoreRequest' :: RestoreRequest -> Maybe RestoreRequestType
$sel:tier:RestoreRequest' :: RestoreRequest -> Maybe Tier
$sel:selectParameters:RestoreRequest' :: RestoreRequest -> Maybe SelectParameters
$sel:outputLocation:RestoreRequest' :: RestoreRequest -> Maybe OutputLocation
$sel:glacierJobParameters:RestoreRequest' :: RestoreRequest -> Maybe GlacierJobParameters
$sel:description:RestoreRequest' :: RestoreRequest -> Maybe Text
$sel:days:RestoreRequest' :: RestoreRequest -> Maybe Int
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Int
days
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
description
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe GlacierJobParameters
glacierJobParameters
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe OutputLocation
outputLocation
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe SelectParameters
selectParameters
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Tier
tier
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe RestoreRequestType
type'

instance Data.ToXML RestoreRequest where
  toXML :: RestoreRequest -> XML
toXML RestoreRequest' {Maybe Int
Maybe Text
Maybe RestoreRequestType
Maybe SelectParameters
Maybe Tier
Maybe GlacierJobParameters
Maybe OutputLocation
type' :: Maybe RestoreRequestType
tier :: Maybe Tier
selectParameters :: Maybe SelectParameters
outputLocation :: Maybe OutputLocation
glacierJobParameters :: Maybe GlacierJobParameters
description :: Maybe Text
days :: Maybe Int
$sel:type':RestoreRequest' :: RestoreRequest -> Maybe RestoreRequestType
$sel:tier:RestoreRequest' :: RestoreRequest -> Maybe Tier
$sel:selectParameters:RestoreRequest' :: RestoreRequest -> Maybe SelectParameters
$sel:outputLocation:RestoreRequest' :: RestoreRequest -> Maybe OutputLocation
$sel:glacierJobParameters:RestoreRequest' :: RestoreRequest -> Maybe GlacierJobParameters
$sel:description:RestoreRequest' :: RestoreRequest -> Maybe Text
$sel:days:RestoreRequest' :: RestoreRequest -> Maybe Int
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ Name
"Days" forall a. ToXML a => Name -> a -> XML
Data.@= Maybe Int
days,
        Name
"Description" forall a. ToXML a => Name -> a -> XML
Data.@= Maybe Text
description,
        Name
"GlacierJobParameters" forall a. ToXML a => Name -> a -> XML
Data.@= Maybe GlacierJobParameters
glacierJobParameters,
        Name
"OutputLocation" forall a. ToXML a => Name -> a -> XML
Data.@= Maybe OutputLocation
outputLocation,
        Name
"SelectParameters" forall a. ToXML a => Name -> a -> XML
Data.@= Maybe SelectParameters
selectParameters,
        Name
"Tier" forall a. ToXML a => Name -> a -> XML
Data.@= Maybe Tier
tier,
        Name
"Type" forall a. ToXML a => Name -> a -> XML
Data.@= Maybe RestoreRequestType
type'
      ]