{-# 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.Omics.GetReference
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Gets a reference file.
module Amazonka.Omics.GetReference
  ( -- * Creating a Request
    GetReference (..),
    newGetReference,

    -- * Request Lenses
    getReference_file,
    getReference_range,
    getReference_id,
    getReference_partNumber,
    getReference_referenceStoreId,

    -- * Destructuring the Response
    GetReferenceResponse (..),
    newGetReferenceResponse,

    -- * Response Lenses
    getReferenceResponse_httpStatus,
    getReferenceResponse_payload,
  )
where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.Omics.Types
import qualified Amazonka.Prelude as Prelude
import qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response

-- | /See:/ 'newGetReference' smart constructor.
data GetReference = GetReference'
  { -- | The file to retrieve.
    GetReference -> Maybe ReferenceFile
file :: Prelude.Maybe ReferenceFile,
    -- | The range to retrieve.
    GetReference -> Maybe Text
range :: Prelude.Maybe Prelude.Text,
    -- | The reference\'s ID.
    GetReference -> Text
id :: Prelude.Text,
    -- | The part number to retrieve.
    GetReference -> Natural
partNumber :: Prelude.Natural,
    -- | The reference\'s store ID.
    GetReference -> Text
referenceStoreId :: Prelude.Text
  }
  deriving (GetReference -> GetReference -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetReference -> GetReference -> Bool
$c/= :: GetReference -> GetReference -> Bool
== :: GetReference -> GetReference -> Bool
$c== :: GetReference -> GetReference -> Bool
Prelude.Eq, ReadPrec [GetReference]
ReadPrec GetReference
Int -> ReadS GetReference
ReadS [GetReference]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetReference]
$creadListPrec :: ReadPrec [GetReference]
readPrec :: ReadPrec GetReference
$creadPrec :: ReadPrec GetReference
readList :: ReadS [GetReference]
$creadList :: ReadS [GetReference]
readsPrec :: Int -> ReadS GetReference
$creadsPrec :: Int -> ReadS GetReference
Prelude.Read, Int -> GetReference -> ShowS
[GetReference] -> ShowS
GetReference -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetReference] -> ShowS
$cshowList :: [GetReference] -> ShowS
show :: GetReference -> String
$cshow :: GetReference -> String
showsPrec :: Int -> GetReference -> ShowS
$cshowsPrec :: Int -> GetReference -> ShowS
Prelude.Show, forall x. Rep GetReference x -> GetReference
forall x. GetReference -> Rep GetReference x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep GetReference x -> GetReference
$cfrom :: forall x. GetReference -> Rep GetReference x
Prelude.Generic)

-- |
-- Create a value of 'GetReference' 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:
--
-- 'file', 'getReference_file' - The file to retrieve.
--
-- 'range', 'getReference_range' - The range to retrieve.
--
-- 'id', 'getReference_id' - The reference\'s ID.
--
-- 'partNumber', 'getReference_partNumber' - The part number to retrieve.
--
-- 'referenceStoreId', 'getReference_referenceStoreId' - The reference\'s store ID.
newGetReference ::
  -- | 'id'
  Prelude.Text ->
  -- | 'partNumber'
  Prelude.Natural ->
  -- | 'referenceStoreId'
  Prelude.Text ->
  GetReference
newGetReference :: Text -> Natural -> Text -> GetReference
newGetReference Text
pId_ Natural
pPartNumber_ Text
pReferenceStoreId_ =
  GetReference'
    { $sel:file:GetReference' :: Maybe ReferenceFile
file = forall a. Maybe a
Prelude.Nothing,
      $sel:range:GetReference' :: Maybe Text
range = forall a. Maybe a
Prelude.Nothing,
      $sel:id:GetReference' :: Text
id = Text
pId_,
      $sel:partNumber:GetReference' :: Natural
partNumber = Natural
pPartNumber_,
      $sel:referenceStoreId:GetReference' :: Text
referenceStoreId = Text
pReferenceStoreId_
    }

-- | The file to retrieve.
getReference_file :: Lens.Lens' GetReference (Prelude.Maybe ReferenceFile)
getReference_file :: Lens' GetReference (Maybe ReferenceFile)
getReference_file = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetReference' {Maybe ReferenceFile
file :: Maybe ReferenceFile
$sel:file:GetReference' :: GetReference -> Maybe ReferenceFile
file} -> Maybe ReferenceFile
file) (\s :: GetReference
s@GetReference' {} Maybe ReferenceFile
a -> GetReference
s {$sel:file:GetReference' :: Maybe ReferenceFile
file = Maybe ReferenceFile
a} :: GetReference)

-- | The range to retrieve.
getReference_range :: Lens.Lens' GetReference (Prelude.Maybe Prelude.Text)
getReference_range :: Lens' GetReference (Maybe Text)
getReference_range = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetReference' {Maybe Text
range :: Maybe Text
$sel:range:GetReference' :: GetReference -> Maybe Text
range} -> Maybe Text
range) (\s :: GetReference
s@GetReference' {} Maybe Text
a -> GetReference
s {$sel:range:GetReference' :: Maybe Text
range = Maybe Text
a} :: GetReference)

-- | The reference\'s ID.
getReference_id :: Lens.Lens' GetReference Prelude.Text
getReference_id :: Lens' GetReference Text
getReference_id = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetReference' {Text
id :: Text
$sel:id:GetReference' :: GetReference -> Text
id} -> Text
id) (\s :: GetReference
s@GetReference' {} Text
a -> GetReference
s {$sel:id:GetReference' :: Text
id = Text
a} :: GetReference)

-- | The part number to retrieve.
getReference_partNumber :: Lens.Lens' GetReference Prelude.Natural
getReference_partNumber :: Lens' GetReference Natural
getReference_partNumber = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetReference' {Natural
partNumber :: Natural
$sel:partNumber:GetReference' :: GetReference -> Natural
partNumber} -> Natural
partNumber) (\s :: GetReference
s@GetReference' {} Natural
a -> GetReference
s {$sel:partNumber:GetReference' :: Natural
partNumber = Natural
a} :: GetReference)

-- | The reference\'s store ID.
getReference_referenceStoreId :: Lens.Lens' GetReference Prelude.Text
getReference_referenceStoreId :: Lens' GetReference Text
getReference_referenceStoreId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetReference' {Text
referenceStoreId :: Text
$sel:referenceStoreId:GetReference' :: GetReference -> Text
referenceStoreId} -> Text
referenceStoreId) (\s :: GetReference
s@GetReference' {} Text
a -> GetReference
s {$sel:referenceStoreId:GetReference' :: Text
referenceStoreId = Text
a} :: GetReference)

instance Core.AWSRequest GetReference where
  type AWSResponse GetReference = GetReferenceResponse
  request :: (Service -> Service) -> GetReference -> Request GetReference
request Service -> Service
overrides =
    forall a. ToRequest a => Service -> a -> Request a
Request.get (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy GetReference
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse GetReference)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
(Int
 -> ResponseHeaders
 -> ResponseBody
 -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveBody
      ( \Int
s ResponseHeaders
h ResponseBody
x ->
          Int -> ResponseBody -> GetReferenceResponse
GetReferenceResponse'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (forall (f :: * -> *) a. Applicative f => a -> f a
Prelude.pure (forall a. Enum a => a -> Int
Prelude.fromEnum Int
s))
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (forall (f :: * -> *) a. Applicative f => a -> f a
Prelude.pure ResponseBody
x)
      )

instance Prelude.Hashable GetReference where
  hashWithSalt :: Int -> GetReference -> Int
hashWithSalt Int
_salt GetReference' {Natural
Maybe Text
Maybe ReferenceFile
Text
referenceStoreId :: Text
partNumber :: Natural
id :: Text
range :: Maybe Text
file :: Maybe ReferenceFile
$sel:referenceStoreId:GetReference' :: GetReference -> Text
$sel:partNumber:GetReference' :: GetReference -> Natural
$sel:id:GetReference' :: GetReference -> Text
$sel:range:GetReference' :: GetReference -> Maybe Text
$sel:file:GetReference' :: GetReference -> Maybe ReferenceFile
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ReferenceFile
file
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
range
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
id
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Natural
partNumber
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
referenceStoreId

instance Prelude.NFData GetReference where
  rnf :: GetReference -> ()
rnf GetReference' {Natural
Maybe Text
Maybe ReferenceFile
Text
referenceStoreId :: Text
partNumber :: Natural
id :: Text
range :: Maybe Text
file :: Maybe ReferenceFile
$sel:referenceStoreId:GetReference' :: GetReference -> Text
$sel:partNumber:GetReference' :: GetReference -> Natural
$sel:id:GetReference' :: GetReference -> Text
$sel:range:GetReference' :: GetReference -> Maybe Text
$sel:file:GetReference' :: GetReference -> Maybe ReferenceFile
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe ReferenceFile
file
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
range
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
id
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Natural
partNumber
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
referenceStoreId

instance Data.ToHeaders GetReference where
  toHeaders :: GetReference -> ResponseHeaders
toHeaders GetReference' {Natural
Maybe Text
Maybe ReferenceFile
Text
referenceStoreId :: Text
partNumber :: Natural
id :: Text
range :: Maybe Text
file :: Maybe ReferenceFile
$sel:referenceStoreId:GetReference' :: GetReference -> Text
$sel:partNumber:GetReference' :: GetReference -> Natural
$sel:id:GetReference' :: GetReference -> Text
$sel:range:GetReference' :: GetReference -> Maybe Text
$sel:file:GetReference' :: GetReference -> Maybe ReferenceFile
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ HeaderName
"Range" forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# Maybe Text
range,
        HeaderName
"Content-Type"
          forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# (ByteString
"application/x-amz-json-1.1" :: Prelude.ByteString)
      ]

instance Data.ToPath GetReference where
  toPath :: GetReference -> ByteString
toPath GetReference' {Natural
Maybe Text
Maybe ReferenceFile
Text
referenceStoreId :: Text
partNumber :: Natural
id :: Text
range :: Maybe Text
file :: Maybe ReferenceFile
$sel:referenceStoreId:GetReference' :: GetReference -> Text
$sel:partNumber:GetReference' :: GetReference -> Natural
$sel:id:GetReference' :: GetReference -> Text
$sel:range:GetReference' :: GetReference -> Maybe Text
$sel:file:GetReference' :: GetReference -> Maybe ReferenceFile
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"/referencestore/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
referenceStoreId,
        ByteString
"/reference/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
id
      ]

instance Data.ToQuery GetReference where
  toQuery :: GetReference -> QueryString
toQuery GetReference' {Natural
Maybe Text
Maybe ReferenceFile
Text
referenceStoreId :: Text
partNumber :: Natural
id :: Text
range :: Maybe Text
file :: Maybe ReferenceFile
$sel:referenceStoreId:GetReference' :: GetReference -> Text
$sel:partNumber:GetReference' :: GetReference -> Natural
$sel:id:GetReference' :: GetReference -> Text
$sel:range:GetReference' :: GetReference -> Maybe Text
$sel:file:GetReference' :: GetReference -> Maybe ReferenceFile
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"file" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe ReferenceFile
file,
        ByteString
"partNumber" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Natural
partNumber
      ]

-- | /See:/ 'newGetReferenceResponse' smart constructor.
data GetReferenceResponse = GetReferenceResponse'
  { -- | The response's http status code.
    GetReferenceResponse -> Int
httpStatus :: Prelude.Int,
    -- | The reference file payload.
    GetReferenceResponse -> ResponseBody
payload :: Data.ResponseBody
  }
  deriving (Int -> GetReferenceResponse -> ShowS
[GetReferenceResponse] -> ShowS
GetReferenceResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetReferenceResponse] -> ShowS
$cshowList :: [GetReferenceResponse] -> ShowS
show :: GetReferenceResponse -> String
$cshow :: GetReferenceResponse -> String
showsPrec :: Int -> GetReferenceResponse -> ShowS
$cshowsPrec :: Int -> GetReferenceResponse -> ShowS
Prelude.Show, forall x. Rep GetReferenceResponse x -> GetReferenceResponse
forall x. GetReferenceResponse -> Rep GetReferenceResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep GetReferenceResponse x -> GetReferenceResponse
$cfrom :: forall x. GetReferenceResponse -> Rep GetReferenceResponse x
Prelude.Generic)

-- |
-- Create a value of 'GetReferenceResponse' 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:
--
-- 'httpStatus', 'getReferenceResponse_httpStatus' - The response's http status code.
--
-- 'payload', 'getReferenceResponse_payload' - The reference file payload.
newGetReferenceResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  -- | 'payload'
  Data.ResponseBody ->
  GetReferenceResponse
newGetReferenceResponse :: Int -> ResponseBody -> GetReferenceResponse
newGetReferenceResponse Int
pHttpStatus_ ResponseBody
pPayload_ =
  GetReferenceResponse'
    { $sel:httpStatus:GetReferenceResponse' :: Int
httpStatus = Int
pHttpStatus_,
      $sel:payload:GetReferenceResponse' :: ResponseBody
payload = ResponseBody
pPayload_
    }

-- | The response's http status code.
getReferenceResponse_httpStatus :: Lens.Lens' GetReferenceResponse Prelude.Int
getReferenceResponse_httpStatus :: Lens' GetReferenceResponse Int
getReferenceResponse_httpStatus = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetReferenceResponse' {Int
httpStatus :: Int
$sel:httpStatus:GetReferenceResponse' :: GetReferenceResponse -> Int
httpStatus} -> Int
httpStatus) (\s :: GetReferenceResponse
s@GetReferenceResponse' {} Int
a -> GetReferenceResponse
s {$sel:httpStatus:GetReferenceResponse' :: Int
httpStatus = Int
a} :: GetReferenceResponse)

-- | The reference file payload.
getReferenceResponse_payload :: Lens.Lens' GetReferenceResponse Data.ResponseBody
getReferenceResponse_payload :: Lens' GetReferenceResponse ResponseBody
getReferenceResponse_payload = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetReferenceResponse' {ResponseBody
payload :: ResponseBody
$sel:payload:GetReferenceResponse' :: GetReferenceResponse -> ResponseBody
payload} -> ResponseBody
payload) (\s :: GetReferenceResponse
s@GetReferenceResponse' {} ResponseBody
a -> GetReferenceResponse
s {$sel:payload:GetReferenceResponse' :: ResponseBody
payload = ResponseBody
a} :: GetReferenceResponse)