{-# 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.EC2.CreateTrafficMirrorTarget
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Creates a target for your Traffic Mirror session.
--
-- A Traffic Mirror target is the destination for mirrored traffic. The
-- Traffic Mirror source and the Traffic Mirror target (monitoring
-- appliances) can be in the same VPC, or in different VPCs connected via
-- VPC peering or a transit gateway.
--
-- A Traffic Mirror target can be a network interface, a Network Load
-- Balancer, or a Gateway Load Balancer endpoint.
--
-- To use the target in a Traffic Mirror session, use
-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTrafficMirrorSession.htm CreateTrafficMirrorSession>.
module Amazonka.EC2.CreateTrafficMirrorTarget
  ( -- * Creating a Request
    CreateTrafficMirrorTarget (..),
    newCreateTrafficMirrorTarget,

    -- * Request Lenses
    createTrafficMirrorTarget_clientToken,
    createTrafficMirrorTarget_description,
    createTrafficMirrorTarget_dryRun,
    createTrafficMirrorTarget_gatewayLoadBalancerEndpointId,
    createTrafficMirrorTarget_networkInterfaceId,
    createTrafficMirrorTarget_networkLoadBalancerArn,
    createTrafficMirrorTarget_tagSpecifications,

    -- * Destructuring the Response
    CreateTrafficMirrorTargetResponse (..),
    newCreateTrafficMirrorTargetResponse,

    -- * Response Lenses
    createTrafficMirrorTargetResponse_clientToken,
    createTrafficMirrorTargetResponse_trafficMirrorTarget,
    createTrafficMirrorTargetResponse_httpStatus,
  )
where

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

-- | /See:/ 'newCreateTrafficMirrorTarget' smart constructor.
data CreateTrafficMirrorTarget = CreateTrafficMirrorTarget'
  { -- | Unique, case-sensitive identifier that you provide to ensure the
    -- idempotency of the request. For more information, see
    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to ensure idempotency>.
    CreateTrafficMirrorTarget -> Maybe Text
clientToken :: Prelude.Maybe Prelude.Text,
    -- | The description of the Traffic Mirror target.
    CreateTrafficMirrorTarget -> Maybe Text
description :: Prelude.Maybe Prelude.Text,
    -- | Checks whether you have the required permissions for the action, without
    -- actually making the request, and provides an error response. If you have
    -- the required permissions, the error response is @DryRunOperation@.
    -- Otherwise, it is @UnauthorizedOperation@.
    CreateTrafficMirrorTarget -> Maybe Bool
dryRun :: Prelude.Maybe Prelude.Bool,
    -- | The ID of the Gateway Load Balancer endpoint.
    CreateTrafficMirrorTarget -> Maybe Text
gatewayLoadBalancerEndpointId :: Prelude.Maybe Prelude.Text,
    -- | The network interface ID that is associated with the target.
    CreateTrafficMirrorTarget -> Maybe Text
networkInterfaceId :: Prelude.Maybe Prelude.Text,
    -- | The Amazon Resource Name (ARN) of the Network Load Balancer that is
    -- associated with the target.
    CreateTrafficMirrorTarget -> Maybe Text
networkLoadBalancerArn :: Prelude.Maybe Prelude.Text,
    -- | The tags to assign to the Traffic Mirror target.
    CreateTrafficMirrorTarget -> Maybe [TagSpecification]
tagSpecifications :: Prelude.Maybe [TagSpecification]
  }
  deriving (CreateTrafficMirrorTarget -> CreateTrafficMirrorTarget -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateTrafficMirrorTarget -> CreateTrafficMirrorTarget -> Bool
$c/= :: CreateTrafficMirrorTarget -> CreateTrafficMirrorTarget -> Bool
== :: CreateTrafficMirrorTarget -> CreateTrafficMirrorTarget -> Bool
$c== :: CreateTrafficMirrorTarget -> CreateTrafficMirrorTarget -> Bool
Prelude.Eq, ReadPrec [CreateTrafficMirrorTarget]
ReadPrec CreateTrafficMirrorTarget
Int -> ReadS CreateTrafficMirrorTarget
ReadS [CreateTrafficMirrorTarget]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CreateTrafficMirrorTarget]
$creadListPrec :: ReadPrec [CreateTrafficMirrorTarget]
readPrec :: ReadPrec CreateTrafficMirrorTarget
$creadPrec :: ReadPrec CreateTrafficMirrorTarget
readList :: ReadS [CreateTrafficMirrorTarget]
$creadList :: ReadS [CreateTrafficMirrorTarget]
readsPrec :: Int -> ReadS CreateTrafficMirrorTarget
$creadsPrec :: Int -> ReadS CreateTrafficMirrorTarget
Prelude.Read, Int -> CreateTrafficMirrorTarget -> ShowS
[CreateTrafficMirrorTarget] -> ShowS
CreateTrafficMirrorTarget -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateTrafficMirrorTarget] -> ShowS
$cshowList :: [CreateTrafficMirrorTarget] -> ShowS
show :: CreateTrafficMirrorTarget -> String
$cshow :: CreateTrafficMirrorTarget -> String
showsPrec :: Int -> CreateTrafficMirrorTarget -> ShowS
$cshowsPrec :: Int -> CreateTrafficMirrorTarget -> ShowS
Prelude.Show, forall x.
Rep CreateTrafficMirrorTarget x -> CreateTrafficMirrorTarget
forall x.
CreateTrafficMirrorTarget -> Rep CreateTrafficMirrorTarget x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep CreateTrafficMirrorTarget x -> CreateTrafficMirrorTarget
$cfrom :: forall x.
CreateTrafficMirrorTarget -> Rep CreateTrafficMirrorTarget x
Prelude.Generic)

-- |
-- Create a value of 'CreateTrafficMirrorTarget' 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:
--
-- 'clientToken', 'createTrafficMirrorTarget_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
-- idempotency of the request. For more information, see
-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to ensure idempotency>.
--
-- 'description', 'createTrafficMirrorTarget_description' - The description of the Traffic Mirror target.
--
-- 'dryRun', 'createTrafficMirrorTarget_dryRun' - Checks whether you have the required permissions for the action, without
-- actually making the request, and provides an error response. If you have
-- the required permissions, the error response is @DryRunOperation@.
-- Otherwise, it is @UnauthorizedOperation@.
--
-- 'gatewayLoadBalancerEndpointId', 'createTrafficMirrorTarget_gatewayLoadBalancerEndpointId' - The ID of the Gateway Load Balancer endpoint.
--
-- 'networkInterfaceId', 'createTrafficMirrorTarget_networkInterfaceId' - The network interface ID that is associated with the target.
--
-- 'networkLoadBalancerArn', 'createTrafficMirrorTarget_networkLoadBalancerArn' - The Amazon Resource Name (ARN) of the Network Load Balancer that is
-- associated with the target.
--
-- 'tagSpecifications', 'createTrafficMirrorTarget_tagSpecifications' - The tags to assign to the Traffic Mirror target.
newCreateTrafficMirrorTarget ::
  CreateTrafficMirrorTarget
newCreateTrafficMirrorTarget :: CreateTrafficMirrorTarget
newCreateTrafficMirrorTarget =
  CreateTrafficMirrorTarget'
    { $sel:clientToken:CreateTrafficMirrorTarget' :: Maybe Text
clientToken =
        forall a. Maybe a
Prelude.Nothing,
      $sel:description:CreateTrafficMirrorTarget' :: Maybe Text
description = forall a. Maybe a
Prelude.Nothing,
      $sel:dryRun:CreateTrafficMirrorTarget' :: Maybe Bool
dryRun = forall a. Maybe a
Prelude.Nothing,
      $sel:gatewayLoadBalancerEndpointId:CreateTrafficMirrorTarget' :: Maybe Text
gatewayLoadBalancerEndpointId = forall a. Maybe a
Prelude.Nothing,
      $sel:networkInterfaceId:CreateTrafficMirrorTarget' :: Maybe Text
networkInterfaceId = forall a. Maybe a
Prelude.Nothing,
      $sel:networkLoadBalancerArn:CreateTrafficMirrorTarget' :: Maybe Text
networkLoadBalancerArn = forall a. Maybe a
Prelude.Nothing,
      $sel:tagSpecifications:CreateTrafficMirrorTarget' :: Maybe [TagSpecification]
tagSpecifications = forall a. Maybe a
Prelude.Nothing
    }

-- | Unique, case-sensitive identifier that you provide to ensure the
-- idempotency of the request. For more information, see
-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to ensure idempotency>.
createTrafficMirrorTarget_clientToken :: Lens.Lens' CreateTrafficMirrorTarget (Prelude.Maybe Prelude.Text)
createTrafficMirrorTarget_clientToken :: Lens' CreateTrafficMirrorTarget (Maybe Text)
createTrafficMirrorTarget_clientToken = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateTrafficMirrorTarget' {Maybe Text
clientToken :: Maybe Text
$sel:clientToken:CreateTrafficMirrorTarget' :: CreateTrafficMirrorTarget -> Maybe Text
clientToken} -> Maybe Text
clientToken) (\s :: CreateTrafficMirrorTarget
s@CreateTrafficMirrorTarget' {} Maybe Text
a -> CreateTrafficMirrorTarget
s {$sel:clientToken:CreateTrafficMirrorTarget' :: Maybe Text
clientToken = Maybe Text
a} :: CreateTrafficMirrorTarget)

-- | The description of the Traffic Mirror target.
createTrafficMirrorTarget_description :: Lens.Lens' CreateTrafficMirrorTarget (Prelude.Maybe Prelude.Text)
createTrafficMirrorTarget_description :: Lens' CreateTrafficMirrorTarget (Maybe Text)
createTrafficMirrorTarget_description = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateTrafficMirrorTarget' {Maybe Text
description :: Maybe Text
$sel:description:CreateTrafficMirrorTarget' :: CreateTrafficMirrorTarget -> Maybe Text
description} -> Maybe Text
description) (\s :: CreateTrafficMirrorTarget
s@CreateTrafficMirrorTarget' {} Maybe Text
a -> CreateTrafficMirrorTarget
s {$sel:description:CreateTrafficMirrorTarget' :: Maybe Text
description = Maybe Text
a} :: CreateTrafficMirrorTarget)

-- | Checks whether you have the required permissions for the action, without
-- actually making the request, and provides an error response. If you have
-- the required permissions, the error response is @DryRunOperation@.
-- Otherwise, it is @UnauthorizedOperation@.
createTrafficMirrorTarget_dryRun :: Lens.Lens' CreateTrafficMirrorTarget (Prelude.Maybe Prelude.Bool)
createTrafficMirrorTarget_dryRun :: Lens' CreateTrafficMirrorTarget (Maybe Bool)
createTrafficMirrorTarget_dryRun = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateTrafficMirrorTarget' {Maybe Bool
dryRun :: Maybe Bool
$sel:dryRun:CreateTrafficMirrorTarget' :: CreateTrafficMirrorTarget -> Maybe Bool
dryRun} -> Maybe Bool
dryRun) (\s :: CreateTrafficMirrorTarget
s@CreateTrafficMirrorTarget' {} Maybe Bool
a -> CreateTrafficMirrorTarget
s {$sel:dryRun:CreateTrafficMirrorTarget' :: Maybe Bool
dryRun = Maybe Bool
a} :: CreateTrafficMirrorTarget)

-- | The ID of the Gateway Load Balancer endpoint.
createTrafficMirrorTarget_gatewayLoadBalancerEndpointId :: Lens.Lens' CreateTrafficMirrorTarget (Prelude.Maybe Prelude.Text)
createTrafficMirrorTarget_gatewayLoadBalancerEndpointId :: Lens' CreateTrafficMirrorTarget (Maybe Text)
createTrafficMirrorTarget_gatewayLoadBalancerEndpointId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateTrafficMirrorTarget' {Maybe Text
gatewayLoadBalancerEndpointId :: Maybe Text
$sel:gatewayLoadBalancerEndpointId:CreateTrafficMirrorTarget' :: CreateTrafficMirrorTarget -> Maybe Text
gatewayLoadBalancerEndpointId} -> Maybe Text
gatewayLoadBalancerEndpointId) (\s :: CreateTrafficMirrorTarget
s@CreateTrafficMirrorTarget' {} Maybe Text
a -> CreateTrafficMirrorTarget
s {$sel:gatewayLoadBalancerEndpointId:CreateTrafficMirrorTarget' :: Maybe Text
gatewayLoadBalancerEndpointId = Maybe Text
a} :: CreateTrafficMirrorTarget)

-- | The network interface ID that is associated with the target.
createTrafficMirrorTarget_networkInterfaceId :: Lens.Lens' CreateTrafficMirrorTarget (Prelude.Maybe Prelude.Text)
createTrafficMirrorTarget_networkInterfaceId :: Lens' CreateTrafficMirrorTarget (Maybe Text)
createTrafficMirrorTarget_networkInterfaceId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateTrafficMirrorTarget' {Maybe Text
networkInterfaceId :: Maybe Text
$sel:networkInterfaceId:CreateTrafficMirrorTarget' :: CreateTrafficMirrorTarget -> Maybe Text
networkInterfaceId} -> Maybe Text
networkInterfaceId) (\s :: CreateTrafficMirrorTarget
s@CreateTrafficMirrorTarget' {} Maybe Text
a -> CreateTrafficMirrorTarget
s {$sel:networkInterfaceId:CreateTrafficMirrorTarget' :: Maybe Text
networkInterfaceId = Maybe Text
a} :: CreateTrafficMirrorTarget)

-- | The Amazon Resource Name (ARN) of the Network Load Balancer that is
-- associated with the target.
createTrafficMirrorTarget_networkLoadBalancerArn :: Lens.Lens' CreateTrafficMirrorTarget (Prelude.Maybe Prelude.Text)
createTrafficMirrorTarget_networkLoadBalancerArn :: Lens' CreateTrafficMirrorTarget (Maybe Text)
createTrafficMirrorTarget_networkLoadBalancerArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateTrafficMirrorTarget' {Maybe Text
networkLoadBalancerArn :: Maybe Text
$sel:networkLoadBalancerArn:CreateTrafficMirrorTarget' :: CreateTrafficMirrorTarget -> Maybe Text
networkLoadBalancerArn} -> Maybe Text
networkLoadBalancerArn) (\s :: CreateTrafficMirrorTarget
s@CreateTrafficMirrorTarget' {} Maybe Text
a -> CreateTrafficMirrorTarget
s {$sel:networkLoadBalancerArn:CreateTrafficMirrorTarget' :: Maybe Text
networkLoadBalancerArn = Maybe Text
a} :: CreateTrafficMirrorTarget)

-- | The tags to assign to the Traffic Mirror target.
createTrafficMirrorTarget_tagSpecifications :: Lens.Lens' CreateTrafficMirrorTarget (Prelude.Maybe [TagSpecification])
createTrafficMirrorTarget_tagSpecifications :: Lens' CreateTrafficMirrorTarget (Maybe [TagSpecification])
createTrafficMirrorTarget_tagSpecifications = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateTrafficMirrorTarget' {Maybe [TagSpecification]
tagSpecifications :: Maybe [TagSpecification]
$sel:tagSpecifications:CreateTrafficMirrorTarget' :: CreateTrafficMirrorTarget -> Maybe [TagSpecification]
tagSpecifications} -> Maybe [TagSpecification]
tagSpecifications) (\s :: CreateTrafficMirrorTarget
s@CreateTrafficMirrorTarget' {} Maybe [TagSpecification]
a -> CreateTrafficMirrorTarget
s {$sel:tagSpecifications:CreateTrafficMirrorTarget' :: Maybe [TagSpecification]
tagSpecifications = Maybe [TagSpecification]
a} :: CreateTrafficMirrorTarget) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

instance Core.AWSRequest CreateTrafficMirrorTarget where
  type
    AWSResponse CreateTrafficMirrorTarget =
      CreateTrafficMirrorTargetResponse
  request :: (Service -> Service)
-> CreateTrafficMirrorTarget -> Request CreateTrafficMirrorTarget
request Service -> Service
overrides =
    forall a. ToRequest a => Service -> a -> Request a
Request.postQuery (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy CreateTrafficMirrorTarget
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse CreateTrafficMirrorTarget)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
(Int -> ResponseHeaders -> [Node] -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveXML
      ( \Int
s ResponseHeaders
h [Node]
x ->
          Maybe Text
-> Maybe TrafficMirrorTarget
-> Int
-> CreateTrafficMirrorTargetResponse
CreateTrafficMirrorTargetResponse'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"clientToken")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"trafficMirrorTarget")
            forall (f :: * -> *) a b. Applicative f => 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))
      )

instance Prelude.Hashable CreateTrafficMirrorTarget where
  hashWithSalt :: Int -> CreateTrafficMirrorTarget -> Int
hashWithSalt Int
_salt CreateTrafficMirrorTarget' {Maybe Bool
Maybe [TagSpecification]
Maybe Text
tagSpecifications :: Maybe [TagSpecification]
networkLoadBalancerArn :: Maybe Text
networkInterfaceId :: Maybe Text
gatewayLoadBalancerEndpointId :: Maybe Text
dryRun :: Maybe Bool
description :: Maybe Text
clientToken :: Maybe Text
$sel:tagSpecifications:CreateTrafficMirrorTarget' :: CreateTrafficMirrorTarget -> Maybe [TagSpecification]
$sel:networkLoadBalancerArn:CreateTrafficMirrorTarget' :: CreateTrafficMirrorTarget -> Maybe Text
$sel:networkInterfaceId:CreateTrafficMirrorTarget' :: CreateTrafficMirrorTarget -> Maybe Text
$sel:gatewayLoadBalancerEndpointId:CreateTrafficMirrorTarget' :: CreateTrafficMirrorTarget -> Maybe Text
$sel:dryRun:CreateTrafficMirrorTarget' :: CreateTrafficMirrorTarget -> Maybe Bool
$sel:description:CreateTrafficMirrorTarget' :: CreateTrafficMirrorTarget -> Maybe Text
$sel:clientToken:CreateTrafficMirrorTarget' :: CreateTrafficMirrorTarget -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
clientToken
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
description
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Bool
dryRun
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
gatewayLoadBalancerEndpointId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
networkInterfaceId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
networkLoadBalancerArn
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [TagSpecification]
tagSpecifications

instance Prelude.NFData CreateTrafficMirrorTarget where
  rnf :: CreateTrafficMirrorTarget -> ()
rnf CreateTrafficMirrorTarget' {Maybe Bool
Maybe [TagSpecification]
Maybe Text
tagSpecifications :: Maybe [TagSpecification]
networkLoadBalancerArn :: Maybe Text
networkInterfaceId :: Maybe Text
gatewayLoadBalancerEndpointId :: Maybe Text
dryRun :: Maybe Bool
description :: Maybe Text
clientToken :: Maybe Text
$sel:tagSpecifications:CreateTrafficMirrorTarget' :: CreateTrafficMirrorTarget -> Maybe [TagSpecification]
$sel:networkLoadBalancerArn:CreateTrafficMirrorTarget' :: CreateTrafficMirrorTarget -> Maybe Text
$sel:networkInterfaceId:CreateTrafficMirrorTarget' :: CreateTrafficMirrorTarget -> Maybe Text
$sel:gatewayLoadBalancerEndpointId:CreateTrafficMirrorTarget' :: CreateTrafficMirrorTarget -> Maybe Text
$sel:dryRun:CreateTrafficMirrorTarget' :: CreateTrafficMirrorTarget -> Maybe Bool
$sel:description:CreateTrafficMirrorTarget' :: CreateTrafficMirrorTarget -> Maybe Text
$sel:clientToken:CreateTrafficMirrorTarget' :: CreateTrafficMirrorTarget -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
clientToken
      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 Bool
dryRun
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
gatewayLoadBalancerEndpointId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
networkInterfaceId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
networkLoadBalancerArn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [TagSpecification]
tagSpecifications

instance Data.ToHeaders CreateTrafficMirrorTarget where
  toHeaders :: CreateTrafficMirrorTarget -> ResponseHeaders
toHeaders = forall a b. a -> b -> a
Prelude.const forall a. Monoid a => a
Prelude.mempty

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

instance Data.ToQuery CreateTrafficMirrorTarget where
  toQuery :: CreateTrafficMirrorTarget -> QueryString
toQuery CreateTrafficMirrorTarget' {Maybe Bool
Maybe [TagSpecification]
Maybe Text
tagSpecifications :: Maybe [TagSpecification]
networkLoadBalancerArn :: Maybe Text
networkInterfaceId :: Maybe Text
gatewayLoadBalancerEndpointId :: Maybe Text
dryRun :: Maybe Bool
description :: Maybe Text
clientToken :: Maybe Text
$sel:tagSpecifications:CreateTrafficMirrorTarget' :: CreateTrafficMirrorTarget -> Maybe [TagSpecification]
$sel:networkLoadBalancerArn:CreateTrafficMirrorTarget' :: CreateTrafficMirrorTarget -> Maybe Text
$sel:networkInterfaceId:CreateTrafficMirrorTarget' :: CreateTrafficMirrorTarget -> Maybe Text
$sel:gatewayLoadBalancerEndpointId:CreateTrafficMirrorTarget' :: CreateTrafficMirrorTarget -> Maybe Text
$sel:dryRun:CreateTrafficMirrorTarget' :: CreateTrafficMirrorTarget -> Maybe Bool
$sel:description:CreateTrafficMirrorTarget' :: CreateTrafficMirrorTarget -> Maybe Text
$sel:clientToken:CreateTrafficMirrorTarget' :: CreateTrafficMirrorTarget -> Maybe Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"Action"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: (ByteString
"CreateTrafficMirrorTarget" :: Prelude.ByteString),
        ByteString
"Version"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: (ByteString
"2016-11-15" :: Prelude.ByteString),
        ByteString
"ClientToken" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Text
clientToken,
        ByteString
"Description" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Text
description,
        ByteString
"DryRun" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Bool
dryRun,
        ByteString
"GatewayLoadBalancerEndpointId"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Text
gatewayLoadBalancerEndpointId,
        ByteString
"NetworkInterfaceId" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Text
networkInterfaceId,
        ByteString
"NetworkLoadBalancerArn"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Text
networkLoadBalancerArn,
        forall a. ToQuery a => a -> QueryString
Data.toQuery
          ( forall a.
(IsList a, ToQuery (Item a)) =>
ByteString -> a -> QueryString
Data.toQueryList ByteString
"TagSpecification"
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe [TagSpecification]
tagSpecifications
          )
      ]

-- | /See:/ 'newCreateTrafficMirrorTargetResponse' smart constructor.
data CreateTrafficMirrorTargetResponse = CreateTrafficMirrorTargetResponse'
  { -- | Unique, case-sensitive identifier that you provide to ensure the
    -- idempotency of the request. For more information, see
    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to ensure idempotency>.
    CreateTrafficMirrorTargetResponse -> Maybe Text
clientToken :: Prelude.Maybe Prelude.Text,
    -- | Information about the Traffic Mirror target.
    CreateTrafficMirrorTargetResponse -> Maybe TrafficMirrorTarget
trafficMirrorTarget :: Prelude.Maybe TrafficMirrorTarget,
    -- | The response's http status code.
    CreateTrafficMirrorTargetResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (CreateTrafficMirrorTargetResponse
-> CreateTrafficMirrorTargetResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateTrafficMirrorTargetResponse
-> CreateTrafficMirrorTargetResponse -> Bool
$c/= :: CreateTrafficMirrorTargetResponse
-> CreateTrafficMirrorTargetResponse -> Bool
== :: CreateTrafficMirrorTargetResponse
-> CreateTrafficMirrorTargetResponse -> Bool
$c== :: CreateTrafficMirrorTargetResponse
-> CreateTrafficMirrorTargetResponse -> Bool
Prelude.Eq, ReadPrec [CreateTrafficMirrorTargetResponse]
ReadPrec CreateTrafficMirrorTargetResponse
Int -> ReadS CreateTrafficMirrorTargetResponse
ReadS [CreateTrafficMirrorTargetResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CreateTrafficMirrorTargetResponse]
$creadListPrec :: ReadPrec [CreateTrafficMirrorTargetResponse]
readPrec :: ReadPrec CreateTrafficMirrorTargetResponse
$creadPrec :: ReadPrec CreateTrafficMirrorTargetResponse
readList :: ReadS [CreateTrafficMirrorTargetResponse]
$creadList :: ReadS [CreateTrafficMirrorTargetResponse]
readsPrec :: Int -> ReadS CreateTrafficMirrorTargetResponse
$creadsPrec :: Int -> ReadS CreateTrafficMirrorTargetResponse
Prelude.Read, Int -> CreateTrafficMirrorTargetResponse -> ShowS
[CreateTrafficMirrorTargetResponse] -> ShowS
CreateTrafficMirrorTargetResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateTrafficMirrorTargetResponse] -> ShowS
$cshowList :: [CreateTrafficMirrorTargetResponse] -> ShowS
show :: CreateTrafficMirrorTargetResponse -> String
$cshow :: CreateTrafficMirrorTargetResponse -> String
showsPrec :: Int -> CreateTrafficMirrorTargetResponse -> ShowS
$cshowsPrec :: Int -> CreateTrafficMirrorTargetResponse -> ShowS
Prelude.Show, forall x.
Rep CreateTrafficMirrorTargetResponse x
-> CreateTrafficMirrorTargetResponse
forall x.
CreateTrafficMirrorTargetResponse
-> Rep CreateTrafficMirrorTargetResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep CreateTrafficMirrorTargetResponse x
-> CreateTrafficMirrorTargetResponse
$cfrom :: forall x.
CreateTrafficMirrorTargetResponse
-> Rep CreateTrafficMirrorTargetResponse x
Prelude.Generic)

-- |
-- Create a value of 'CreateTrafficMirrorTargetResponse' 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:
--
-- 'clientToken', 'createTrafficMirrorTargetResponse_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
-- idempotency of the request. For more information, see
-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to ensure idempotency>.
--
-- 'trafficMirrorTarget', 'createTrafficMirrorTargetResponse_trafficMirrorTarget' - Information about the Traffic Mirror target.
--
-- 'httpStatus', 'createTrafficMirrorTargetResponse_httpStatus' - The response's http status code.
newCreateTrafficMirrorTargetResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  CreateTrafficMirrorTargetResponse
newCreateTrafficMirrorTargetResponse :: Int -> CreateTrafficMirrorTargetResponse
newCreateTrafficMirrorTargetResponse Int
pHttpStatus_ =
  CreateTrafficMirrorTargetResponse'
    { $sel:clientToken:CreateTrafficMirrorTargetResponse' :: Maybe Text
clientToken =
        forall a. Maybe a
Prelude.Nothing,
      $sel:trafficMirrorTarget:CreateTrafficMirrorTargetResponse' :: Maybe TrafficMirrorTarget
trafficMirrorTarget = forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:CreateTrafficMirrorTargetResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | Unique, case-sensitive identifier that you provide to ensure the
-- idempotency of the request. For more information, see
-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to ensure idempotency>.
createTrafficMirrorTargetResponse_clientToken :: Lens.Lens' CreateTrafficMirrorTargetResponse (Prelude.Maybe Prelude.Text)
createTrafficMirrorTargetResponse_clientToken :: Lens' CreateTrafficMirrorTargetResponse (Maybe Text)
createTrafficMirrorTargetResponse_clientToken = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateTrafficMirrorTargetResponse' {Maybe Text
clientToken :: Maybe Text
$sel:clientToken:CreateTrafficMirrorTargetResponse' :: CreateTrafficMirrorTargetResponse -> Maybe Text
clientToken} -> Maybe Text
clientToken) (\s :: CreateTrafficMirrorTargetResponse
s@CreateTrafficMirrorTargetResponse' {} Maybe Text
a -> CreateTrafficMirrorTargetResponse
s {$sel:clientToken:CreateTrafficMirrorTargetResponse' :: Maybe Text
clientToken = Maybe Text
a} :: CreateTrafficMirrorTargetResponse)

-- | Information about the Traffic Mirror target.
createTrafficMirrorTargetResponse_trafficMirrorTarget :: Lens.Lens' CreateTrafficMirrorTargetResponse (Prelude.Maybe TrafficMirrorTarget)
createTrafficMirrorTargetResponse_trafficMirrorTarget :: Lens' CreateTrafficMirrorTargetResponse (Maybe TrafficMirrorTarget)
createTrafficMirrorTargetResponse_trafficMirrorTarget = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateTrafficMirrorTargetResponse' {Maybe TrafficMirrorTarget
trafficMirrorTarget :: Maybe TrafficMirrorTarget
$sel:trafficMirrorTarget:CreateTrafficMirrorTargetResponse' :: CreateTrafficMirrorTargetResponse -> Maybe TrafficMirrorTarget
trafficMirrorTarget} -> Maybe TrafficMirrorTarget
trafficMirrorTarget) (\s :: CreateTrafficMirrorTargetResponse
s@CreateTrafficMirrorTargetResponse' {} Maybe TrafficMirrorTarget
a -> CreateTrafficMirrorTargetResponse
s {$sel:trafficMirrorTarget:CreateTrafficMirrorTargetResponse' :: Maybe TrafficMirrorTarget
trafficMirrorTarget = Maybe TrafficMirrorTarget
a} :: CreateTrafficMirrorTargetResponse)

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

instance
  Prelude.NFData
    CreateTrafficMirrorTargetResponse
  where
  rnf :: CreateTrafficMirrorTargetResponse -> ()
rnf CreateTrafficMirrorTargetResponse' {Int
Maybe Text
Maybe TrafficMirrorTarget
httpStatus :: Int
trafficMirrorTarget :: Maybe TrafficMirrorTarget
clientToken :: Maybe Text
$sel:httpStatus:CreateTrafficMirrorTargetResponse' :: CreateTrafficMirrorTargetResponse -> Int
$sel:trafficMirrorTarget:CreateTrafficMirrorTargetResponse' :: CreateTrafficMirrorTargetResponse -> Maybe TrafficMirrorTarget
$sel:clientToken:CreateTrafficMirrorTargetResponse' :: CreateTrafficMirrorTargetResponse -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
clientToken
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe TrafficMirrorTarget
trafficMirrorTarget
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus