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

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

-- |
-- Module      : Amazonka.Glacier.GetJobOutput
-- Copyright   : (c) 2013-2021 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- This operation downloads the output of the job you initiated using
-- InitiateJob. Depending on the job type you specified when you initiated
-- the job, the output will be either the content of an archive or a vault
-- inventory.
--
-- You can download all the job output or download a portion of the output
-- by specifying a byte range. In the case of an archive retrieval job,
-- depending on the byte range you specify, Amazon S3 Glacier (Glacier)
-- returns the checksum for the portion of the data. You can compute the
-- checksum on the client and verify that the values match to ensure the
-- portion you downloaded is the correct data.
--
-- A job ID will not expire for at least 24 hours after Glacier completes
-- the job. That a byte range. For both archive and inventory retrieval
-- jobs, you should verify the downloaded size against the size returned in
-- the headers from the __Get Job Output__ response.
--
-- For archive retrieval jobs, you should also verify that the size is what
-- you expected. If you download a portion of the output, the expected size
-- is based on the range of bytes you specified. For example, if you
-- specify a range of @bytes=0-1048575@, you should verify your download
-- size is 1,048,576 bytes. If you download an entire archive, the expected
-- size is the size of the archive when you uploaded it to Amazon S3
-- Glacier The expected size is also returned in the headers from the __Get
-- Job Output__ response.
--
-- In the case of an archive retrieval job, depending on the byte range you
-- specify, Glacier returns the checksum for the portion of the data. To
-- ensure the portion you downloaded is the correct data, compute the
-- checksum on the client, verify that the values match, and verify that
-- the size is what you expected.
--
-- A job ID does not expire for at least 24 hours after Glacier completes
-- the job. That is, you can download the job output within the 24 hours
-- period after Amazon Glacier completes the job.
--
-- An AWS account has full permission to perform all operations (actions).
-- However, AWS Identity and Access Management (IAM) users don\'t have any
-- permissions by default. You must grant them explicit permission to
-- perform specific actions. For more information, see
-- <https://docs.aws.amazon.com/amazonglacier/latest/dev/using-iam-with-amazon-glacier.html Access Control Using AWS Identity and Access Management (IAM)>.
--
-- For conceptual information and the underlying REST API, see
-- <https://docs.aws.amazon.com/amazonglacier/latest/dev/vault-inventory.html Downloading a Vault Inventory>,
-- <https://docs.aws.amazon.com/amazonglacier/latest/dev/downloading-an-archive.html Downloading an Archive>,
-- and
-- <https://docs.aws.amazon.com/amazonglacier/latest/dev/api-job-output-get.html Get Job Output>
module Amazonka.Glacier.GetJobOutput
  ( -- * Creating a Request
    GetJobOutput (..),
    newGetJobOutput,

    -- * Request Lenses
    getJobOutput_range,
    getJobOutput_accountId,
    getJobOutput_vaultName,
    getJobOutput_jobId,

    -- * Destructuring the Response
    GetJobOutputResponse (..),
    newGetJobOutputResponse,

    -- * Response Lenses
    getJobOutputResponse_checksum,
    getJobOutputResponse_acceptRanges,
    getJobOutputResponse_archiveDescription,
    getJobOutputResponse_contentRange,
    getJobOutputResponse_contentType,
    getJobOutputResponse_status,
    getJobOutputResponse_body,
  )
where

import qualified Amazonka.Core as Core
import Amazonka.Glacier.Types
import qualified Amazonka.Lens as Lens
import qualified Amazonka.Prelude as Prelude
import qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response

-- | Provides options for downloading output of an Amazon S3 Glacier job.
--
-- /See:/ 'newGetJobOutput' smart constructor.
data GetJobOutput = GetJobOutput'
  { -- | The range of bytes to retrieve from the output. For example, if you want
    -- to download the first 1,048,576 bytes, specify the range as
    -- @bytes=0-1048575@. By default, this operation downloads the entire
    -- output.
    --
    -- If the job output is large, then you can use a range to retrieve a
    -- portion of the output. This allows you to download the entire output in
    -- smaller chunks of bytes. For example, suppose you have 1 GB of job
    -- output you want to download and you decide to download 128 MB chunks of
    -- data at a time, which is a total of eight Get Job Output requests. You
    -- use the following process to download the job output:
    --
    -- 1.  Download a 128 MB chunk of output by specifying the appropriate byte
    --     range. Verify that all 128 MB of data was received.
    --
    -- 2.  Along with the data, the response includes a SHA256 tree hash of the
    --     payload. You compute the checksum of the payload on the client and
    --     compare it with the checksum you received in the response to ensure
    --     you received all the expected data.
    --
    -- 3.  Repeat steps 1 and 2 for all the eight 128 MB chunks of output data,
    --     each time specifying the appropriate byte range.
    --
    -- 4.  After downloading all the parts of the job output, you have a list
    --     of eight checksum values. Compute the tree hash of these values to
    --     find the checksum of the entire output. Using the DescribeJob API,
    --     obtain job information of the job that provided you the output. The
    --     response includes the checksum of the entire archive stored in
    --     Amazon S3 Glacier. You compare this value with the checksum you
    --     computed to ensure you have downloaded the entire archive content
    --     with no errors.
    GetJobOutput -> Maybe Text
range :: Prelude.Maybe Prelude.Text,
    -- | The @AccountId@ value is the AWS account ID of the account that owns the
    -- vault. You can either specify an AWS account ID or optionally a single
    -- \'@-@\' (hyphen), in which case Amazon S3 Glacier uses the AWS account
    -- ID associated with the credentials used to sign the request. If you use
    -- an account ID, do not include any hyphens (\'-\') in the ID.
    GetJobOutput -> Text
accountId :: Prelude.Text,
    -- | The name of the vault.
    GetJobOutput -> Text
vaultName :: Prelude.Text,
    -- | The job ID whose data is downloaded.
    GetJobOutput -> Text
jobId :: Prelude.Text
  }
  deriving (GetJobOutput -> GetJobOutput -> Bool
(GetJobOutput -> GetJobOutput -> Bool)
-> (GetJobOutput -> GetJobOutput -> Bool) -> Eq GetJobOutput
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetJobOutput -> GetJobOutput -> Bool
$c/= :: GetJobOutput -> GetJobOutput -> Bool
== :: GetJobOutput -> GetJobOutput -> Bool
$c== :: GetJobOutput -> GetJobOutput -> Bool
Prelude.Eq, ReadPrec [GetJobOutput]
ReadPrec GetJobOutput
Int -> ReadS GetJobOutput
ReadS [GetJobOutput]
(Int -> ReadS GetJobOutput)
-> ReadS [GetJobOutput]
-> ReadPrec GetJobOutput
-> ReadPrec [GetJobOutput]
-> Read GetJobOutput
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetJobOutput]
$creadListPrec :: ReadPrec [GetJobOutput]
readPrec :: ReadPrec GetJobOutput
$creadPrec :: ReadPrec GetJobOutput
readList :: ReadS [GetJobOutput]
$creadList :: ReadS [GetJobOutput]
readsPrec :: Int -> ReadS GetJobOutput
$creadsPrec :: Int -> ReadS GetJobOutput
Prelude.Read, Int -> GetJobOutput -> ShowS
[GetJobOutput] -> ShowS
GetJobOutput -> String
(Int -> GetJobOutput -> ShowS)
-> (GetJobOutput -> String)
-> ([GetJobOutput] -> ShowS)
-> Show GetJobOutput
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetJobOutput] -> ShowS
$cshowList :: [GetJobOutput] -> ShowS
show :: GetJobOutput -> String
$cshow :: GetJobOutput -> String
showsPrec :: Int -> GetJobOutput -> ShowS
$cshowsPrec :: Int -> GetJobOutput -> ShowS
Prelude.Show, (forall x. GetJobOutput -> Rep GetJobOutput x)
-> (forall x. Rep GetJobOutput x -> GetJobOutput)
-> Generic GetJobOutput
forall x. Rep GetJobOutput x -> GetJobOutput
forall x. GetJobOutput -> Rep GetJobOutput x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep GetJobOutput x -> GetJobOutput
$cfrom :: forall x. GetJobOutput -> Rep GetJobOutput x
Prelude.Generic)

-- |
-- Create a value of 'GetJobOutput' 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:
--
-- 'range', 'getJobOutput_range' - The range of bytes to retrieve from the output. For example, if you want
-- to download the first 1,048,576 bytes, specify the range as
-- @bytes=0-1048575@. By default, this operation downloads the entire
-- output.
--
-- If the job output is large, then you can use a range to retrieve a
-- portion of the output. This allows you to download the entire output in
-- smaller chunks of bytes. For example, suppose you have 1 GB of job
-- output you want to download and you decide to download 128 MB chunks of
-- data at a time, which is a total of eight Get Job Output requests. You
-- use the following process to download the job output:
--
-- 1.  Download a 128 MB chunk of output by specifying the appropriate byte
--     range. Verify that all 128 MB of data was received.
--
-- 2.  Along with the data, the response includes a SHA256 tree hash of the
--     payload. You compute the checksum of the payload on the client and
--     compare it with the checksum you received in the response to ensure
--     you received all the expected data.
--
-- 3.  Repeat steps 1 and 2 for all the eight 128 MB chunks of output data,
--     each time specifying the appropriate byte range.
--
-- 4.  After downloading all the parts of the job output, you have a list
--     of eight checksum values. Compute the tree hash of these values to
--     find the checksum of the entire output. Using the DescribeJob API,
--     obtain job information of the job that provided you the output. The
--     response includes the checksum of the entire archive stored in
--     Amazon S3 Glacier. You compare this value with the checksum you
--     computed to ensure you have downloaded the entire archive content
--     with no errors.
--
-- 'accountId', 'getJobOutput_accountId' - The @AccountId@ value is the AWS account ID of the account that owns the
-- vault. You can either specify an AWS account ID or optionally a single
-- \'@-@\' (hyphen), in which case Amazon S3 Glacier uses the AWS account
-- ID associated with the credentials used to sign the request. If you use
-- an account ID, do not include any hyphens (\'-\') in the ID.
--
-- 'vaultName', 'getJobOutput_vaultName' - The name of the vault.
--
-- 'jobId', 'getJobOutput_jobId' - The job ID whose data is downloaded.
newGetJobOutput ::
  -- | 'accountId'
  Prelude.Text ->
  -- | 'vaultName'
  Prelude.Text ->
  -- | 'jobId'
  Prelude.Text ->
  GetJobOutput
newGetJobOutput :: Text -> Text -> Text -> GetJobOutput
newGetJobOutput Text
pAccountId_ Text
pVaultName_ Text
pJobId_ =
  GetJobOutput' :: Maybe Text -> Text -> Text -> Text -> GetJobOutput
GetJobOutput'
    { $sel:range:GetJobOutput' :: Maybe Text
range = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:accountId:GetJobOutput' :: Text
accountId = Text
pAccountId_,
      $sel:vaultName:GetJobOutput' :: Text
vaultName = Text
pVaultName_,
      $sel:jobId:GetJobOutput' :: Text
jobId = Text
pJobId_
    }

-- | The range of bytes to retrieve from the output. For example, if you want
-- to download the first 1,048,576 bytes, specify the range as
-- @bytes=0-1048575@. By default, this operation downloads the entire
-- output.
--
-- If the job output is large, then you can use a range to retrieve a
-- portion of the output. This allows you to download the entire output in
-- smaller chunks of bytes. For example, suppose you have 1 GB of job
-- output you want to download and you decide to download 128 MB chunks of
-- data at a time, which is a total of eight Get Job Output requests. You
-- use the following process to download the job output:
--
-- 1.  Download a 128 MB chunk of output by specifying the appropriate byte
--     range. Verify that all 128 MB of data was received.
--
-- 2.  Along with the data, the response includes a SHA256 tree hash of the
--     payload. You compute the checksum of the payload on the client and
--     compare it with the checksum you received in the response to ensure
--     you received all the expected data.
--
-- 3.  Repeat steps 1 and 2 for all the eight 128 MB chunks of output data,
--     each time specifying the appropriate byte range.
--
-- 4.  After downloading all the parts of the job output, you have a list
--     of eight checksum values. Compute the tree hash of these values to
--     find the checksum of the entire output. Using the DescribeJob API,
--     obtain job information of the job that provided you the output. The
--     response includes the checksum of the entire archive stored in
--     Amazon S3 Glacier. You compare this value with the checksum you
--     computed to ensure you have downloaded the entire archive content
--     with no errors.
getJobOutput_range :: Lens.Lens' GetJobOutput (Prelude.Maybe Prelude.Text)
getJobOutput_range :: (Maybe Text -> f (Maybe Text)) -> GetJobOutput -> f GetJobOutput
getJobOutput_range = (GetJobOutput -> Maybe Text)
-> (GetJobOutput -> Maybe Text -> GetJobOutput)
-> Lens GetJobOutput GetJobOutput (Maybe Text) (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetJobOutput' {Maybe Text
range :: Maybe Text
$sel:range:GetJobOutput' :: GetJobOutput -> Maybe Text
range} -> Maybe Text
range) (\s :: GetJobOutput
s@GetJobOutput' {} Maybe Text
a -> GetJobOutput
s {$sel:range:GetJobOutput' :: Maybe Text
range = Maybe Text
a} :: GetJobOutput)

-- | The @AccountId@ value is the AWS account ID of the account that owns the
-- vault. You can either specify an AWS account ID or optionally a single
-- \'@-@\' (hyphen), in which case Amazon S3 Glacier uses the AWS account
-- ID associated with the credentials used to sign the request. If you use
-- an account ID, do not include any hyphens (\'-\') in the ID.
getJobOutput_accountId :: Lens.Lens' GetJobOutput Prelude.Text
getJobOutput_accountId :: (Text -> f Text) -> GetJobOutput -> f GetJobOutput
getJobOutput_accountId = (GetJobOutput -> Text)
-> (GetJobOutput -> Text -> GetJobOutput)
-> Lens GetJobOutput GetJobOutput Text Text
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetJobOutput' {Text
accountId :: Text
$sel:accountId:GetJobOutput' :: GetJobOutput -> Text
accountId} -> Text
accountId) (\s :: GetJobOutput
s@GetJobOutput' {} Text
a -> GetJobOutput
s {$sel:accountId:GetJobOutput' :: Text
accountId = Text
a} :: GetJobOutput)

-- | The name of the vault.
getJobOutput_vaultName :: Lens.Lens' GetJobOutput Prelude.Text
getJobOutput_vaultName :: (Text -> f Text) -> GetJobOutput -> f GetJobOutput
getJobOutput_vaultName = (GetJobOutput -> Text)
-> (GetJobOutput -> Text -> GetJobOutput)
-> Lens GetJobOutput GetJobOutput Text Text
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetJobOutput' {Text
vaultName :: Text
$sel:vaultName:GetJobOutput' :: GetJobOutput -> Text
vaultName} -> Text
vaultName) (\s :: GetJobOutput
s@GetJobOutput' {} Text
a -> GetJobOutput
s {$sel:vaultName:GetJobOutput' :: Text
vaultName = Text
a} :: GetJobOutput)

-- | The job ID whose data is downloaded.
getJobOutput_jobId :: Lens.Lens' GetJobOutput Prelude.Text
getJobOutput_jobId :: (Text -> f Text) -> GetJobOutput -> f GetJobOutput
getJobOutput_jobId = (GetJobOutput -> Text)
-> (GetJobOutput -> Text -> GetJobOutput)
-> Lens GetJobOutput GetJobOutput Text Text
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetJobOutput' {Text
jobId :: Text
$sel:jobId:GetJobOutput' :: GetJobOutput -> Text
jobId} -> Text
jobId) (\s :: GetJobOutput
s@GetJobOutput' {} Text
a -> GetJobOutput
s {$sel:jobId:GetJobOutput' :: Text
jobId = Text
a} :: GetJobOutput)

instance Core.AWSRequest GetJobOutput where
  type AWSResponse GetJobOutput = GetJobOutputResponse
  request :: GetJobOutput -> Request GetJobOutput
request =
    ByteString -> Request GetJobOutput -> Request GetJobOutput
forall a. ByteString -> Request a -> Request a
Request.glacierVersionHeader (Service -> ByteString
Core._serviceVersion Service
defaultService)
      (Request GetJobOutput -> Request GetJobOutput)
-> (GetJobOutput -> Request GetJobOutput)
-> GetJobOutput
-> Request GetJobOutput
forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. Service -> GetJobOutput -> Request GetJobOutput
forall a. ToRequest a => Service -> a -> Request a
Request.get Service
defaultService
  response :: Logger
-> Service
-> Proxy GetJobOutput
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse GetJobOutput)))
response =
    (Int
 -> ResponseHeaders
 -> ResponseBody
 -> Either String (AWSResponse GetJobOutput))
-> Logger
-> Service
-> Proxy GetJobOutput
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse GetJobOutput)))
forall (m :: * -> *) a.
MonadResource m =>
(Int
 -> ResponseHeaders
 -> ResponseBody
 -> Either String (AWSResponse a))
-> Logger
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveBody
      ( \Int
s ResponseHeaders
h ResponseBody
x ->
          Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Int
-> ResponseBody
-> GetJobOutputResponse
GetJobOutputResponse'
            (Maybe Text
 -> Maybe Text
 -> Maybe Text
 -> Maybe Text
 -> Maybe Text
 -> Int
 -> ResponseBody
 -> GetJobOutputResponse)
-> Either String (Maybe Text)
-> Either
     String
     (Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Int
      -> ResponseBody
      -> GetJobOutputResponse)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (ResponseHeaders
h ResponseHeaders -> HeaderName -> Either String (Maybe Text)
forall a.
FromText a =>
ResponseHeaders -> HeaderName -> Either String (Maybe a)
Core..#? HeaderName
"x-amz-sha256-tree-hash")
            Either
  String
  (Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Int
   -> ResponseBody
   -> GetJobOutputResponse)
-> Either String (Maybe Text)
-> Either
     String
     (Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Int
      -> ResponseBody
      -> GetJobOutputResponse)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (ResponseHeaders
h ResponseHeaders -> HeaderName -> Either String (Maybe Text)
forall a.
FromText a =>
ResponseHeaders -> HeaderName -> Either String (Maybe a)
Core..#? HeaderName
"Accept-Ranges")
            Either
  String
  (Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Int
   -> ResponseBody
   -> GetJobOutputResponse)
-> Either String (Maybe Text)
-> Either
     String
     (Maybe Text
      -> Maybe Text -> Int -> ResponseBody -> GetJobOutputResponse)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (ResponseHeaders
h ResponseHeaders -> HeaderName -> Either String (Maybe Text)
forall a.
FromText a =>
ResponseHeaders -> HeaderName -> Either String (Maybe a)
Core..#? HeaderName
"x-amz-archive-description")
            Either
  String
  (Maybe Text
   -> Maybe Text -> Int -> ResponseBody -> GetJobOutputResponse)
-> Either String (Maybe Text)
-> Either
     String (Maybe Text -> Int -> ResponseBody -> GetJobOutputResponse)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (ResponseHeaders
h ResponseHeaders -> HeaderName -> Either String (Maybe Text)
forall a.
FromText a =>
ResponseHeaders -> HeaderName -> Either String (Maybe a)
Core..#? HeaderName
"Content-Range")
            Either
  String (Maybe Text -> Int -> ResponseBody -> GetJobOutputResponse)
-> Either String (Maybe Text)
-> Either String (Int -> ResponseBody -> GetJobOutputResponse)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (ResponseHeaders
h ResponseHeaders -> HeaderName -> Either String (Maybe Text)
forall a.
FromText a =>
ResponseHeaders -> HeaderName -> Either String (Maybe a)
Core..#? HeaderName
"Content-Type")
            Either String (Int -> ResponseBody -> GetJobOutputResponse)
-> Either String Int
-> Either String (ResponseBody -> GetJobOutputResponse)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Int -> Either String Int
forall (f :: * -> *) a. Applicative f => a -> f a
Prelude.pure (Int -> Int
forall a. Enum a => a -> Int
Prelude.fromEnum Int
s))
            Either String (ResponseBody -> GetJobOutputResponse)
-> Either String ResponseBody -> Either String GetJobOutputResponse
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (ResponseBody -> Either String ResponseBody
forall (f :: * -> *) a. Applicative f => a -> f a
Prelude.pure ResponseBody
x)
      )

instance Prelude.Hashable GetJobOutput

instance Prelude.NFData GetJobOutput

instance Core.ToHeaders GetJobOutput where
  toHeaders :: GetJobOutput -> ResponseHeaders
toHeaders GetJobOutput' {Maybe Text
Text
jobId :: Text
vaultName :: Text
accountId :: Text
range :: Maybe Text
$sel:jobId:GetJobOutput' :: GetJobOutput -> Text
$sel:vaultName:GetJobOutput' :: GetJobOutput -> Text
$sel:accountId:GetJobOutput' :: GetJobOutput -> Text
$sel:range:GetJobOutput' :: GetJobOutput -> Maybe Text
..} =
    [ResponseHeaders] -> ResponseHeaders
forall a. Monoid a => [a] -> a
Prelude.mconcat [HeaderName
"Range" HeaderName -> Maybe Text -> ResponseHeaders
forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Core.=# Maybe Text
range]

instance Core.ToPath GetJobOutput where
  toPath :: GetJobOutput -> ByteString
toPath GetJobOutput' {Maybe Text
Text
jobId :: Text
vaultName :: Text
accountId :: Text
range :: Maybe Text
$sel:jobId:GetJobOutput' :: GetJobOutput -> Text
$sel:vaultName:GetJobOutput' :: GetJobOutput -> Text
$sel:accountId:GetJobOutput' :: GetJobOutput -> Text
$sel:range:GetJobOutput' :: GetJobOutput -> Maybe Text
..} =
    [ByteString] -> ByteString
forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"/",
        Text -> ByteString
forall a. ToByteString a => a -> ByteString
Core.toBS Text
accountId,
        ByteString
"/vaults/",
        Text -> ByteString
forall a. ToByteString a => a -> ByteString
Core.toBS Text
vaultName,
        ByteString
"/jobs/",
        Text -> ByteString
forall a. ToByteString a => a -> ByteString
Core.toBS Text
jobId,
        ByteString
"/output"
      ]

instance Core.ToQuery GetJobOutput where
  toQuery :: GetJobOutput -> QueryString
toQuery = QueryString -> GetJobOutput -> QueryString
forall a b. a -> b -> a
Prelude.const QueryString
forall a. Monoid a => a
Prelude.mempty

-- | Contains the Amazon S3 Glacier response to your request.
--
-- /See:/ 'newGetJobOutputResponse' smart constructor.
data GetJobOutputResponse = GetJobOutputResponse'
  { -- | The checksum of the data in the response. This header is returned only
    -- when retrieving the output for an archive retrieval job. Furthermore,
    -- this header appears only under the following conditions:
    --
    -- -   You get the entire range of the archive.
    --
    -- -   You request a range to return of the archive that starts and ends on
    --     a multiple of 1 MB. For example, if you have an 3.1 MB archive and
    --     you specify a range to return that starts at 1 MB and ends at 2 MB,
    --     then the x-amz-sha256-tree-hash is returned as a response header.
    --
    -- -   You request a range of the archive to return that starts on a
    --     multiple of 1 MB and goes to the end of the archive. For example, if
    --     you have a 3.1 MB archive and you specify a range that starts at 2
    --     MB and ends at 3.1 MB (the end of the archive), then the
    --     x-amz-sha256-tree-hash is returned as a response header.
    GetJobOutputResponse -> Maybe Text
checksum :: Prelude.Maybe Prelude.Text,
    -- | Indicates the range units accepted. For more information, see
    -- <http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html RFC2616>.
    GetJobOutputResponse -> Maybe Text
acceptRanges :: Prelude.Maybe Prelude.Text,
    -- | The description of an archive.
    GetJobOutputResponse -> Maybe Text
archiveDescription :: Prelude.Maybe Prelude.Text,
    -- | The range of bytes returned by Amazon S3 Glacier. If only partial output
    -- is downloaded, the response provides the range of bytes Amazon S3
    -- Glacier returned. For example, bytes 0-1048575\/8388608 returns the
    -- first 1 MB from 8 MB.
    GetJobOutputResponse -> Maybe Text
contentRange :: Prelude.Maybe Prelude.Text,
    -- | The Content-Type depends on whether the job output is an archive or a
    -- vault inventory. For archive data, the Content-Type is
    -- application\/octet-stream. For vault inventory, if you requested CSV
    -- format when you initiated the job, the Content-Type is text\/csv.
    -- Otherwise, by default, vault inventory is returned as JSON, and the
    -- Content-Type is application\/json.
    GetJobOutputResponse -> Maybe Text
contentType :: Prelude.Maybe Prelude.Text,
    -- | The HTTP response code for a job output request. The value depends on
    -- whether a range was specified in the request.
    GetJobOutputResponse -> Int
status :: Prelude.Int,
    -- | The job data, either archive data or inventory data.
    GetJobOutputResponse -> ResponseBody
body :: Core.ResponseBody
  }
  deriving (Int -> GetJobOutputResponse -> ShowS
[GetJobOutputResponse] -> ShowS
GetJobOutputResponse -> String
(Int -> GetJobOutputResponse -> ShowS)
-> (GetJobOutputResponse -> String)
-> ([GetJobOutputResponse] -> ShowS)
-> Show GetJobOutputResponse
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetJobOutputResponse] -> ShowS
$cshowList :: [GetJobOutputResponse] -> ShowS
show :: GetJobOutputResponse -> String
$cshow :: GetJobOutputResponse -> String
showsPrec :: Int -> GetJobOutputResponse -> ShowS
$cshowsPrec :: Int -> GetJobOutputResponse -> ShowS
Prelude.Show, (forall x. GetJobOutputResponse -> Rep GetJobOutputResponse x)
-> (forall x. Rep GetJobOutputResponse x -> GetJobOutputResponse)
-> Generic GetJobOutputResponse
forall x. Rep GetJobOutputResponse x -> GetJobOutputResponse
forall x. GetJobOutputResponse -> Rep GetJobOutputResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep GetJobOutputResponse x -> GetJobOutputResponse
$cfrom :: forall x. GetJobOutputResponse -> Rep GetJobOutputResponse x
Prelude.Generic)

-- |
-- Create a value of 'GetJobOutputResponse' 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:
--
-- 'checksum', 'getJobOutputResponse_checksum' - The checksum of the data in the response. This header is returned only
-- when retrieving the output for an archive retrieval job. Furthermore,
-- this header appears only under the following conditions:
--
-- -   You get the entire range of the archive.
--
-- -   You request a range to return of the archive that starts and ends on
--     a multiple of 1 MB. For example, if you have an 3.1 MB archive and
--     you specify a range to return that starts at 1 MB and ends at 2 MB,
--     then the x-amz-sha256-tree-hash is returned as a response header.
--
-- -   You request a range of the archive to return that starts on a
--     multiple of 1 MB and goes to the end of the archive. For example, if
--     you have a 3.1 MB archive and you specify a range that starts at 2
--     MB and ends at 3.1 MB (the end of the archive), then the
--     x-amz-sha256-tree-hash is returned as a response header.
--
-- 'acceptRanges', 'getJobOutputResponse_acceptRanges' - Indicates the range units accepted. For more information, see
-- <http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html RFC2616>.
--
-- 'archiveDescription', 'getJobOutputResponse_archiveDescription' - The description of an archive.
--
-- 'contentRange', 'getJobOutputResponse_contentRange' - The range of bytes returned by Amazon S3 Glacier. If only partial output
-- is downloaded, the response provides the range of bytes Amazon S3
-- Glacier returned. For example, bytes 0-1048575\/8388608 returns the
-- first 1 MB from 8 MB.
--
-- 'contentType', 'getJobOutputResponse_contentType' - The Content-Type depends on whether the job output is an archive or a
-- vault inventory. For archive data, the Content-Type is
-- application\/octet-stream. For vault inventory, if you requested CSV
-- format when you initiated the job, the Content-Type is text\/csv.
-- Otherwise, by default, vault inventory is returned as JSON, and the
-- Content-Type is application\/json.
--
-- 'status', 'getJobOutputResponse_status' - The HTTP response code for a job output request. The value depends on
-- whether a range was specified in the request.
--
-- 'body', 'getJobOutputResponse_body' - The job data, either archive data or inventory data.
newGetJobOutputResponse ::
  -- | 'status'
  Prelude.Int ->
  -- | 'body'
  Core.ResponseBody ->
  GetJobOutputResponse
newGetJobOutputResponse :: Int -> ResponseBody -> GetJobOutputResponse
newGetJobOutputResponse Int
pStatus_ ResponseBody
pBody_ =
  GetJobOutputResponse' :: Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Int
-> ResponseBody
-> GetJobOutputResponse
GetJobOutputResponse'
    { $sel:checksum:GetJobOutputResponse' :: Maybe Text
checksum = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:acceptRanges:GetJobOutputResponse' :: Maybe Text
acceptRanges = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:archiveDescription:GetJobOutputResponse' :: Maybe Text
archiveDescription = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:contentRange:GetJobOutputResponse' :: Maybe Text
contentRange = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:contentType:GetJobOutputResponse' :: Maybe Text
contentType = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:status:GetJobOutputResponse' :: Int
status = Int
pStatus_,
      $sel:body:GetJobOutputResponse' :: ResponseBody
body = ResponseBody
pBody_
    }

-- | The checksum of the data in the response. This header is returned only
-- when retrieving the output for an archive retrieval job. Furthermore,
-- this header appears only under the following conditions:
--
-- -   You get the entire range of the archive.
--
-- -   You request a range to return of the archive that starts and ends on
--     a multiple of 1 MB. For example, if you have an 3.1 MB archive and
--     you specify a range to return that starts at 1 MB and ends at 2 MB,
--     then the x-amz-sha256-tree-hash is returned as a response header.
--
-- -   You request a range of the archive to return that starts on a
--     multiple of 1 MB and goes to the end of the archive. For example, if
--     you have a 3.1 MB archive and you specify a range that starts at 2
--     MB and ends at 3.1 MB (the end of the archive), then the
--     x-amz-sha256-tree-hash is returned as a response header.
getJobOutputResponse_checksum :: Lens.Lens' GetJobOutputResponse (Prelude.Maybe Prelude.Text)
getJobOutputResponse_checksum :: (Maybe Text -> f (Maybe Text))
-> GetJobOutputResponse -> f GetJobOutputResponse
getJobOutputResponse_checksum = (GetJobOutputResponse -> Maybe Text)
-> (GetJobOutputResponse -> Maybe Text -> GetJobOutputResponse)
-> Lens
     GetJobOutputResponse GetJobOutputResponse (Maybe Text) (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetJobOutputResponse' {Maybe Text
checksum :: Maybe Text
$sel:checksum:GetJobOutputResponse' :: GetJobOutputResponse -> Maybe Text
checksum} -> Maybe Text
checksum) (\s :: GetJobOutputResponse
s@GetJobOutputResponse' {} Maybe Text
a -> GetJobOutputResponse
s {$sel:checksum:GetJobOutputResponse' :: Maybe Text
checksum = Maybe Text
a} :: GetJobOutputResponse)

-- | Indicates the range units accepted. For more information, see
-- <http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html RFC2616>.
getJobOutputResponse_acceptRanges :: Lens.Lens' GetJobOutputResponse (Prelude.Maybe Prelude.Text)
getJobOutputResponse_acceptRanges :: (Maybe Text -> f (Maybe Text))
-> GetJobOutputResponse -> f GetJobOutputResponse
getJobOutputResponse_acceptRanges = (GetJobOutputResponse -> Maybe Text)
-> (GetJobOutputResponse -> Maybe Text -> GetJobOutputResponse)
-> Lens
     GetJobOutputResponse GetJobOutputResponse (Maybe Text) (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetJobOutputResponse' {Maybe Text
acceptRanges :: Maybe Text
$sel:acceptRanges:GetJobOutputResponse' :: GetJobOutputResponse -> Maybe Text
acceptRanges} -> Maybe Text
acceptRanges) (\s :: GetJobOutputResponse
s@GetJobOutputResponse' {} Maybe Text
a -> GetJobOutputResponse
s {$sel:acceptRanges:GetJobOutputResponse' :: Maybe Text
acceptRanges = Maybe Text
a} :: GetJobOutputResponse)

-- | The description of an archive.
getJobOutputResponse_archiveDescription :: Lens.Lens' GetJobOutputResponse (Prelude.Maybe Prelude.Text)
getJobOutputResponse_archiveDescription :: (Maybe Text -> f (Maybe Text))
-> GetJobOutputResponse -> f GetJobOutputResponse
getJobOutputResponse_archiveDescription = (GetJobOutputResponse -> Maybe Text)
-> (GetJobOutputResponse -> Maybe Text -> GetJobOutputResponse)
-> Lens
     GetJobOutputResponse GetJobOutputResponse (Maybe Text) (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetJobOutputResponse' {Maybe Text
archiveDescription :: Maybe Text
$sel:archiveDescription:GetJobOutputResponse' :: GetJobOutputResponse -> Maybe Text
archiveDescription} -> Maybe Text
archiveDescription) (\s :: GetJobOutputResponse
s@GetJobOutputResponse' {} Maybe Text
a -> GetJobOutputResponse
s {$sel:archiveDescription:GetJobOutputResponse' :: Maybe Text
archiveDescription = Maybe Text
a} :: GetJobOutputResponse)

-- | The range of bytes returned by Amazon S3 Glacier. If only partial output
-- is downloaded, the response provides the range of bytes Amazon S3
-- Glacier returned. For example, bytes 0-1048575\/8388608 returns the
-- first 1 MB from 8 MB.
getJobOutputResponse_contentRange :: Lens.Lens' GetJobOutputResponse (Prelude.Maybe Prelude.Text)
getJobOutputResponse_contentRange :: (Maybe Text -> f (Maybe Text))
-> GetJobOutputResponse -> f GetJobOutputResponse
getJobOutputResponse_contentRange = (GetJobOutputResponse -> Maybe Text)
-> (GetJobOutputResponse -> Maybe Text -> GetJobOutputResponse)
-> Lens
     GetJobOutputResponse GetJobOutputResponse (Maybe Text) (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetJobOutputResponse' {Maybe Text
contentRange :: Maybe Text
$sel:contentRange:GetJobOutputResponse' :: GetJobOutputResponse -> Maybe Text
contentRange} -> Maybe Text
contentRange) (\s :: GetJobOutputResponse
s@GetJobOutputResponse' {} Maybe Text
a -> GetJobOutputResponse
s {$sel:contentRange:GetJobOutputResponse' :: Maybe Text
contentRange = Maybe Text
a} :: GetJobOutputResponse)

-- | The Content-Type depends on whether the job output is an archive or a
-- vault inventory. For archive data, the Content-Type is
-- application\/octet-stream. For vault inventory, if you requested CSV
-- format when you initiated the job, the Content-Type is text\/csv.
-- Otherwise, by default, vault inventory is returned as JSON, and the
-- Content-Type is application\/json.
getJobOutputResponse_contentType :: Lens.Lens' GetJobOutputResponse (Prelude.Maybe Prelude.Text)
getJobOutputResponse_contentType :: (Maybe Text -> f (Maybe Text))
-> GetJobOutputResponse -> f GetJobOutputResponse
getJobOutputResponse_contentType = (GetJobOutputResponse -> Maybe Text)
-> (GetJobOutputResponse -> Maybe Text -> GetJobOutputResponse)
-> Lens
     GetJobOutputResponse GetJobOutputResponse (Maybe Text) (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetJobOutputResponse' {Maybe Text
contentType :: Maybe Text
$sel:contentType:GetJobOutputResponse' :: GetJobOutputResponse -> Maybe Text
contentType} -> Maybe Text
contentType) (\s :: GetJobOutputResponse
s@GetJobOutputResponse' {} Maybe Text
a -> GetJobOutputResponse
s {$sel:contentType:GetJobOutputResponse' :: Maybe Text
contentType = Maybe Text
a} :: GetJobOutputResponse)

-- | The HTTP response code for a job output request. The value depends on
-- whether a range was specified in the request.
getJobOutputResponse_status :: Lens.Lens' GetJobOutputResponse Prelude.Int
getJobOutputResponse_status :: (Int -> f Int) -> GetJobOutputResponse -> f GetJobOutputResponse
getJobOutputResponse_status = (GetJobOutputResponse -> Int)
-> (GetJobOutputResponse -> Int -> GetJobOutputResponse)
-> Lens GetJobOutputResponse GetJobOutputResponse Int Int
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetJobOutputResponse' {Int
status :: Int
$sel:status:GetJobOutputResponse' :: GetJobOutputResponse -> Int
status} -> Int
status) (\s :: GetJobOutputResponse
s@GetJobOutputResponse' {} Int
a -> GetJobOutputResponse
s {$sel:status:GetJobOutputResponse' :: Int
status = Int
a} :: GetJobOutputResponse)

-- | The job data, either archive data or inventory data.
getJobOutputResponse_body :: Lens.Lens' GetJobOutputResponse Core.ResponseBody
getJobOutputResponse_body :: (ResponseBody -> f ResponseBody)
-> GetJobOutputResponse -> f GetJobOutputResponse
getJobOutputResponse_body = (GetJobOutputResponse -> ResponseBody)
-> (GetJobOutputResponse -> ResponseBody -> GetJobOutputResponse)
-> Lens
     GetJobOutputResponse GetJobOutputResponse ResponseBody ResponseBody
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetJobOutputResponse' {ResponseBody
body :: ResponseBody
$sel:body:GetJobOutputResponse' :: GetJobOutputResponse -> ResponseBody
body} -> ResponseBody
body) (\s :: GetJobOutputResponse
s@GetJobOutputResponse' {} ResponseBody
a -> GetJobOutputResponse
s {$sel:body:GetJobOutputResponse' :: ResponseBody
body = ResponseBody
a} :: GetJobOutputResponse)