{-# 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.StartVariantImportJob
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Starts a variant import job.
module Amazonka.Omics.StartVariantImportJob
  ( -- * Creating a Request
    StartVariantImportJob (..),
    newStartVariantImportJob,

    -- * Request Lenses
    startVariantImportJob_runLeftNormalization,
    startVariantImportJob_destinationName,
    startVariantImportJob_items,
    startVariantImportJob_roleArn,

    -- * Destructuring the Response
    StartVariantImportJobResponse (..),
    newStartVariantImportJobResponse,

    -- * Response Lenses
    startVariantImportJobResponse_httpStatus,
    startVariantImportJobResponse_jobId,
  )
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:/ 'newStartVariantImportJob' smart constructor.
data StartVariantImportJob = StartVariantImportJob'
  { -- | The job\'s left normalization setting.
    StartVariantImportJob -> Maybe Bool
runLeftNormalization :: Prelude.Maybe Prelude.Bool,
    -- | The destination variant store for the job.
    StartVariantImportJob -> Text
destinationName :: Prelude.Text,
    -- | Items to import.
    StartVariantImportJob -> NonEmpty VariantImportItemSource
items :: Prelude.NonEmpty VariantImportItemSource,
    -- | A service role for the job.
    StartVariantImportJob -> Text
roleArn :: Prelude.Text
  }
  deriving (StartVariantImportJob -> StartVariantImportJob -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: StartVariantImportJob -> StartVariantImportJob -> Bool
$c/= :: StartVariantImportJob -> StartVariantImportJob -> Bool
== :: StartVariantImportJob -> StartVariantImportJob -> Bool
$c== :: StartVariantImportJob -> StartVariantImportJob -> Bool
Prelude.Eq, ReadPrec [StartVariantImportJob]
ReadPrec StartVariantImportJob
Int -> ReadS StartVariantImportJob
ReadS [StartVariantImportJob]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [StartVariantImportJob]
$creadListPrec :: ReadPrec [StartVariantImportJob]
readPrec :: ReadPrec StartVariantImportJob
$creadPrec :: ReadPrec StartVariantImportJob
readList :: ReadS [StartVariantImportJob]
$creadList :: ReadS [StartVariantImportJob]
readsPrec :: Int -> ReadS StartVariantImportJob
$creadsPrec :: Int -> ReadS StartVariantImportJob
Prelude.Read, Int -> StartVariantImportJob -> ShowS
[StartVariantImportJob] -> ShowS
StartVariantImportJob -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [StartVariantImportJob] -> ShowS
$cshowList :: [StartVariantImportJob] -> ShowS
show :: StartVariantImportJob -> String
$cshow :: StartVariantImportJob -> String
showsPrec :: Int -> StartVariantImportJob -> ShowS
$cshowsPrec :: Int -> StartVariantImportJob -> ShowS
Prelude.Show, forall x. Rep StartVariantImportJob x -> StartVariantImportJob
forall x. StartVariantImportJob -> Rep StartVariantImportJob x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep StartVariantImportJob x -> StartVariantImportJob
$cfrom :: forall x. StartVariantImportJob -> Rep StartVariantImportJob x
Prelude.Generic)

-- |
-- Create a value of 'StartVariantImportJob' 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:
--
-- 'runLeftNormalization', 'startVariantImportJob_runLeftNormalization' - The job\'s left normalization setting.
--
-- 'destinationName', 'startVariantImportJob_destinationName' - The destination variant store for the job.
--
-- 'items', 'startVariantImportJob_items' - Items to import.
--
-- 'roleArn', 'startVariantImportJob_roleArn' - A service role for the job.
newStartVariantImportJob ::
  -- | 'destinationName'
  Prelude.Text ->
  -- | 'items'
  Prelude.NonEmpty VariantImportItemSource ->
  -- | 'roleArn'
  Prelude.Text ->
  StartVariantImportJob
newStartVariantImportJob :: Text
-> NonEmpty VariantImportItemSource
-> Text
-> StartVariantImportJob
newStartVariantImportJob
  Text
pDestinationName_
  NonEmpty VariantImportItemSource
pItems_
  Text
pRoleArn_ =
    StartVariantImportJob'
      { $sel:runLeftNormalization:StartVariantImportJob' :: Maybe Bool
runLeftNormalization =
          forall a. Maybe a
Prelude.Nothing,
        $sel:destinationName:StartVariantImportJob' :: Text
destinationName = Text
pDestinationName_,
        $sel:items:StartVariantImportJob' :: NonEmpty VariantImportItemSource
items = forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced forall t b. AReview t b -> b -> t
Lens.# NonEmpty VariantImportItemSource
pItems_,
        $sel:roleArn:StartVariantImportJob' :: Text
roleArn = Text
pRoleArn_
      }

-- | The job\'s left normalization setting.
startVariantImportJob_runLeftNormalization :: Lens.Lens' StartVariantImportJob (Prelude.Maybe Prelude.Bool)
startVariantImportJob_runLeftNormalization :: Lens' StartVariantImportJob (Maybe Bool)
startVariantImportJob_runLeftNormalization = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\StartVariantImportJob' {Maybe Bool
runLeftNormalization :: Maybe Bool
$sel:runLeftNormalization:StartVariantImportJob' :: StartVariantImportJob -> Maybe Bool
runLeftNormalization} -> Maybe Bool
runLeftNormalization) (\s :: StartVariantImportJob
s@StartVariantImportJob' {} Maybe Bool
a -> StartVariantImportJob
s {$sel:runLeftNormalization:StartVariantImportJob' :: Maybe Bool
runLeftNormalization = Maybe Bool
a} :: StartVariantImportJob)

-- | The destination variant store for the job.
startVariantImportJob_destinationName :: Lens.Lens' StartVariantImportJob Prelude.Text
startVariantImportJob_destinationName :: Lens' StartVariantImportJob Text
startVariantImportJob_destinationName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\StartVariantImportJob' {Text
destinationName :: Text
$sel:destinationName:StartVariantImportJob' :: StartVariantImportJob -> Text
destinationName} -> Text
destinationName) (\s :: StartVariantImportJob
s@StartVariantImportJob' {} Text
a -> StartVariantImportJob
s {$sel:destinationName:StartVariantImportJob' :: Text
destinationName = Text
a} :: StartVariantImportJob)

-- | Items to import.
startVariantImportJob_items :: Lens.Lens' StartVariantImportJob (Prelude.NonEmpty VariantImportItemSource)
startVariantImportJob_items :: Lens' StartVariantImportJob (NonEmpty VariantImportItemSource)
startVariantImportJob_items = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\StartVariantImportJob' {NonEmpty VariantImportItemSource
items :: NonEmpty VariantImportItemSource
$sel:items:StartVariantImportJob' :: StartVariantImportJob -> NonEmpty VariantImportItemSource
items} -> NonEmpty VariantImportItemSource
items) (\s :: StartVariantImportJob
s@StartVariantImportJob' {} NonEmpty VariantImportItemSource
a -> StartVariantImportJob
s {$sel:items:StartVariantImportJob' :: NonEmpty VariantImportItemSource
items = NonEmpty VariantImportItemSource
a} :: StartVariantImportJob) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | A service role for the job.
startVariantImportJob_roleArn :: Lens.Lens' StartVariantImportJob Prelude.Text
startVariantImportJob_roleArn :: Lens' StartVariantImportJob Text
startVariantImportJob_roleArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\StartVariantImportJob' {Text
roleArn :: Text
$sel:roleArn:StartVariantImportJob' :: StartVariantImportJob -> Text
roleArn} -> Text
roleArn) (\s :: StartVariantImportJob
s@StartVariantImportJob' {} Text
a -> StartVariantImportJob
s {$sel:roleArn:StartVariantImportJob' :: Text
roleArn = Text
a} :: StartVariantImportJob)

instance Core.AWSRequest StartVariantImportJob where
  type
    AWSResponse StartVariantImportJob =
      StartVariantImportJobResponse
  request :: (Service -> Service)
-> StartVariantImportJob -> Request StartVariantImportJob
request Service -> Service
overrides =
    forall a. (ToRequest a, ToJSON a) => Service -> a -> Request a
Request.postJSON (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy StartVariantImportJob
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse StartVariantImportJob)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
(Int -> ResponseHeaders -> Object -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveJSON
      ( \Int
s ResponseHeaders
h Object
x ->
          Int -> Text -> StartVariantImportJobResponse
StartVariantImportJobResponse'
            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.<*> (Object
x forall a. FromJSON a => Object -> Key -> Either String a
Data..:> Key
"jobId")
      )

instance Prelude.Hashable StartVariantImportJob where
  hashWithSalt :: Int -> StartVariantImportJob -> Int
hashWithSalt Int
_salt StartVariantImportJob' {Maybe Bool
NonEmpty VariantImportItemSource
Text
roleArn :: Text
items :: NonEmpty VariantImportItemSource
destinationName :: Text
runLeftNormalization :: Maybe Bool
$sel:roleArn:StartVariantImportJob' :: StartVariantImportJob -> Text
$sel:items:StartVariantImportJob' :: StartVariantImportJob -> NonEmpty VariantImportItemSource
$sel:destinationName:StartVariantImportJob' :: StartVariantImportJob -> Text
$sel:runLeftNormalization:StartVariantImportJob' :: StartVariantImportJob -> Maybe Bool
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Bool
runLeftNormalization
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
destinationName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` NonEmpty VariantImportItemSource
items
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
roleArn

instance Prelude.NFData StartVariantImportJob where
  rnf :: StartVariantImportJob -> ()
rnf StartVariantImportJob' {Maybe Bool
NonEmpty VariantImportItemSource
Text
roleArn :: Text
items :: NonEmpty VariantImportItemSource
destinationName :: Text
runLeftNormalization :: Maybe Bool
$sel:roleArn:StartVariantImportJob' :: StartVariantImportJob -> Text
$sel:items:StartVariantImportJob' :: StartVariantImportJob -> NonEmpty VariantImportItemSource
$sel:destinationName:StartVariantImportJob' :: StartVariantImportJob -> Text
$sel:runLeftNormalization:StartVariantImportJob' :: StartVariantImportJob -> Maybe Bool
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Bool
runLeftNormalization
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
destinationName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf NonEmpty VariantImportItemSource
items
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
roleArn

instance Data.ToHeaders StartVariantImportJob where
  toHeaders :: StartVariantImportJob -> ResponseHeaders
toHeaders =
    forall a b. a -> b -> a
Prelude.const
      ( forall a. Monoid a => [a] -> a
Prelude.mconcat
          [ HeaderName
"Content-Type"
              forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# ( ByteString
"application/x-amz-json-1.1" ::
                          Prelude.ByteString
                      )
          ]
      )

instance Data.ToJSON StartVariantImportJob where
  toJSON :: StartVariantImportJob -> Value
toJSON StartVariantImportJob' {Maybe Bool
NonEmpty VariantImportItemSource
Text
roleArn :: Text
items :: NonEmpty VariantImportItemSource
destinationName :: Text
runLeftNormalization :: Maybe Bool
$sel:roleArn:StartVariantImportJob' :: StartVariantImportJob -> Text
$sel:items:StartVariantImportJob' :: StartVariantImportJob -> NonEmpty VariantImportItemSource
$sel:destinationName:StartVariantImportJob' :: StartVariantImportJob -> Text
$sel:runLeftNormalization:StartVariantImportJob' :: StartVariantImportJob -> Maybe Bool
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"runLeftNormalization" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Bool
runLeftNormalization,
            forall a. a -> Maybe a
Prelude.Just
              (Key
"destinationName" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
destinationName),
            forall a. a -> Maybe a
Prelude.Just (Key
"items" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= NonEmpty VariantImportItemSource
items),
            forall a. a -> Maybe a
Prelude.Just (Key
"roleArn" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
roleArn)
          ]
      )

instance Data.ToPath StartVariantImportJob where
  toPath :: StartVariantImportJob -> ByteString
toPath = forall a b. a -> b -> a
Prelude.const ByteString
"/import/variant"

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

-- | /See:/ 'newStartVariantImportJobResponse' smart constructor.
data StartVariantImportJobResponse = StartVariantImportJobResponse'
  { -- | The response's http status code.
    StartVariantImportJobResponse -> Int
httpStatus :: Prelude.Int,
    -- | The job\'s ID.
    StartVariantImportJobResponse -> Text
jobId :: Prelude.Text
  }
  deriving (StartVariantImportJobResponse
-> StartVariantImportJobResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: StartVariantImportJobResponse
-> StartVariantImportJobResponse -> Bool
$c/= :: StartVariantImportJobResponse
-> StartVariantImportJobResponse -> Bool
== :: StartVariantImportJobResponse
-> StartVariantImportJobResponse -> Bool
$c== :: StartVariantImportJobResponse
-> StartVariantImportJobResponse -> Bool
Prelude.Eq, ReadPrec [StartVariantImportJobResponse]
ReadPrec StartVariantImportJobResponse
Int -> ReadS StartVariantImportJobResponse
ReadS [StartVariantImportJobResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [StartVariantImportJobResponse]
$creadListPrec :: ReadPrec [StartVariantImportJobResponse]
readPrec :: ReadPrec StartVariantImportJobResponse
$creadPrec :: ReadPrec StartVariantImportJobResponse
readList :: ReadS [StartVariantImportJobResponse]
$creadList :: ReadS [StartVariantImportJobResponse]
readsPrec :: Int -> ReadS StartVariantImportJobResponse
$creadsPrec :: Int -> ReadS StartVariantImportJobResponse
Prelude.Read, Int -> StartVariantImportJobResponse -> ShowS
[StartVariantImportJobResponse] -> ShowS
StartVariantImportJobResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [StartVariantImportJobResponse] -> ShowS
$cshowList :: [StartVariantImportJobResponse] -> ShowS
show :: StartVariantImportJobResponse -> String
$cshow :: StartVariantImportJobResponse -> String
showsPrec :: Int -> StartVariantImportJobResponse -> ShowS
$cshowsPrec :: Int -> StartVariantImportJobResponse -> ShowS
Prelude.Show, forall x.
Rep StartVariantImportJobResponse x
-> StartVariantImportJobResponse
forall x.
StartVariantImportJobResponse
-> Rep StartVariantImportJobResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep StartVariantImportJobResponse x
-> StartVariantImportJobResponse
$cfrom :: forall x.
StartVariantImportJobResponse
-> Rep StartVariantImportJobResponse x
Prelude.Generic)

-- |
-- Create a value of 'StartVariantImportJobResponse' 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', 'startVariantImportJobResponse_httpStatus' - The response's http status code.
--
-- 'jobId', 'startVariantImportJobResponse_jobId' - The job\'s ID.
newStartVariantImportJobResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  -- | 'jobId'
  Prelude.Text ->
  StartVariantImportJobResponse
newStartVariantImportJobResponse :: Int -> Text -> StartVariantImportJobResponse
newStartVariantImportJobResponse Int
pHttpStatus_ Text
pJobId_ =
  StartVariantImportJobResponse'
    { $sel:httpStatus:StartVariantImportJobResponse' :: Int
httpStatus =
        Int
pHttpStatus_,
      $sel:jobId:StartVariantImportJobResponse' :: Text
jobId = Text
pJobId_
    }

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

-- | The job\'s ID.
startVariantImportJobResponse_jobId :: Lens.Lens' StartVariantImportJobResponse Prelude.Text
startVariantImportJobResponse_jobId :: Lens' StartVariantImportJobResponse Text
startVariantImportJobResponse_jobId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\StartVariantImportJobResponse' {Text
jobId :: Text
$sel:jobId:StartVariantImportJobResponse' :: StartVariantImportJobResponse -> Text
jobId} -> Text
jobId) (\s :: StartVariantImportJobResponse
s@StartVariantImportJobResponse' {} Text
a -> StartVariantImportJobResponse
s {$sel:jobId:StartVariantImportJobResponse' :: Text
jobId = Text
a} :: StartVariantImportJobResponse)

instance Prelude.NFData StartVariantImportJobResponse where
  rnf :: StartVariantImportJobResponse -> ()
rnf StartVariantImportJobResponse' {Int
Text
jobId :: Text
httpStatus :: Int
$sel:jobId:StartVariantImportJobResponse' :: StartVariantImportJobResponse -> Text
$sel:httpStatus:StartVariantImportJobResponse' :: StartVariantImportJobResponse -> Int
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
jobId