{-# 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.IoT.CreateDimension
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Create a dimension that you can use to limit the scope of a metric used
-- in a security profile for IoT Device Defender. For example, using a
-- @TOPIC_FILTER@ dimension, you can narrow down the scope of the metric
-- only to MQTT topics whose name match the pattern specified in the
-- dimension.
--
-- Requires permission to access the
-- <https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions CreateDimension>
-- action.
module Amazonka.IoT.CreateDimension
  ( -- * Creating a Request
    CreateDimension (..),
    newCreateDimension,

    -- * Request Lenses
    createDimension_tags,
    createDimension_name,
    createDimension_type,
    createDimension_stringValues,
    createDimension_clientRequestToken,

    -- * Destructuring the Response
    CreateDimensionResponse (..),
    newCreateDimensionResponse,

    -- * Response Lenses
    createDimensionResponse_arn,
    createDimensionResponse_name,
    createDimensionResponse_httpStatus,
  )
where

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

-- | /See:/ 'newCreateDimension' smart constructor.
data CreateDimension = CreateDimension'
  { -- | Metadata that can be used to manage the dimension.
    CreateDimension -> Maybe [Tag]
tags :: Prelude.Maybe [Tag],
    -- | A unique identifier for the dimension. Choose something that describes
    -- the type and value to make it easy to remember what it does.
    CreateDimension -> Text
name :: Prelude.Text,
    -- | Specifies the type of dimension. Supported types: @TOPIC_FILTER.@
    CreateDimension -> DimensionType
type' :: DimensionType,
    -- | Specifies the value or list of values for the dimension. For
    -- @TOPIC_FILTER@ dimensions, this is a pattern used to match the MQTT
    -- topic (for example, \"admin\/#\").
    CreateDimension -> NonEmpty Text
stringValues :: Prelude.NonEmpty Prelude.Text,
    -- | Each dimension must have a unique client request token. If you try to
    -- create a new dimension with the same token as a dimension that already
    -- exists, an exception occurs. If you omit this value, Amazon Web Services
    -- SDKs will automatically generate a unique client request.
    CreateDimension -> Text
clientRequestToken :: Prelude.Text
  }
  deriving (CreateDimension -> CreateDimension -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateDimension -> CreateDimension -> Bool
$c/= :: CreateDimension -> CreateDimension -> Bool
== :: CreateDimension -> CreateDimension -> Bool
$c== :: CreateDimension -> CreateDimension -> Bool
Prelude.Eq, ReadPrec [CreateDimension]
ReadPrec CreateDimension
Int -> ReadS CreateDimension
ReadS [CreateDimension]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CreateDimension]
$creadListPrec :: ReadPrec [CreateDimension]
readPrec :: ReadPrec CreateDimension
$creadPrec :: ReadPrec CreateDimension
readList :: ReadS [CreateDimension]
$creadList :: ReadS [CreateDimension]
readsPrec :: Int -> ReadS CreateDimension
$creadsPrec :: Int -> ReadS CreateDimension
Prelude.Read, Int -> CreateDimension -> ShowS
[CreateDimension] -> ShowS
CreateDimension -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateDimension] -> ShowS
$cshowList :: [CreateDimension] -> ShowS
show :: CreateDimension -> String
$cshow :: CreateDimension -> String
showsPrec :: Int -> CreateDimension -> ShowS
$cshowsPrec :: Int -> CreateDimension -> ShowS
Prelude.Show, forall x. Rep CreateDimension x -> CreateDimension
forall x. CreateDimension -> Rep CreateDimension x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep CreateDimension x -> CreateDimension
$cfrom :: forall x. CreateDimension -> Rep CreateDimension x
Prelude.Generic)

-- |
-- Create a value of 'CreateDimension' 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:
--
-- 'tags', 'createDimension_tags' - Metadata that can be used to manage the dimension.
--
-- 'name', 'createDimension_name' - A unique identifier for the dimension. Choose something that describes
-- the type and value to make it easy to remember what it does.
--
-- 'type'', 'createDimension_type' - Specifies the type of dimension. Supported types: @TOPIC_FILTER.@
--
-- 'stringValues', 'createDimension_stringValues' - Specifies the value or list of values for the dimension. For
-- @TOPIC_FILTER@ dimensions, this is a pattern used to match the MQTT
-- topic (for example, \"admin\/#\").
--
-- 'clientRequestToken', 'createDimension_clientRequestToken' - Each dimension must have a unique client request token. If you try to
-- create a new dimension with the same token as a dimension that already
-- exists, an exception occurs. If you omit this value, Amazon Web Services
-- SDKs will automatically generate a unique client request.
newCreateDimension ::
  -- | 'name'
  Prelude.Text ->
  -- | 'type''
  DimensionType ->
  -- | 'stringValues'
  Prelude.NonEmpty Prelude.Text ->
  -- | 'clientRequestToken'
  Prelude.Text ->
  CreateDimension
newCreateDimension :: Text -> DimensionType -> NonEmpty Text -> Text -> CreateDimension
newCreateDimension
  Text
pName_
  DimensionType
pType_
  NonEmpty Text
pStringValues_
  Text
pClientRequestToken_ =
    CreateDimension'
      { $sel:tags:CreateDimension' :: Maybe [Tag]
tags = forall a. Maybe a
Prelude.Nothing,
        $sel:name:CreateDimension' :: Text
name = Text
pName_,
        $sel:type':CreateDimension' :: DimensionType
type' = DimensionType
pType_,
        $sel:stringValues:CreateDimension' :: NonEmpty Text
stringValues = 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 Text
pStringValues_,
        $sel:clientRequestToken:CreateDimension' :: Text
clientRequestToken = Text
pClientRequestToken_
      }

-- | Metadata that can be used to manage the dimension.
createDimension_tags :: Lens.Lens' CreateDimension (Prelude.Maybe [Tag])
createDimension_tags :: Lens' CreateDimension (Maybe [Tag])
createDimension_tags = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDimension' {Maybe [Tag]
tags :: Maybe [Tag]
$sel:tags:CreateDimension' :: CreateDimension -> Maybe [Tag]
tags} -> Maybe [Tag]
tags) (\s :: CreateDimension
s@CreateDimension' {} Maybe [Tag]
a -> CreateDimension
s {$sel:tags:CreateDimension' :: Maybe [Tag]
tags = Maybe [Tag]
a} :: CreateDimension) 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

-- | A unique identifier for the dimension. Choose something that describes
-- the type and value to make it easy to remember what it does.
createDimension_name :: Lens.Lens' CreateDimension Prelude.Text
createDimension_name :: Lens' CreateDimension Text
createDimension_name = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDimension' {Text
name :: Text
$sel:name:CreateDimension' :: CreateDimension -> Text
name} -> Text
name) (\s :: CreateDimension
s@CreateDimension' {} Text
a -> CreateDimension
s {$sel:name:CreateDimension' :: Text
name = Text
a} :: CreateDimension)

-- | Specifies the type of dimension. Supported types: @TOPIC_FILTER.@
createDimension_type :: Lens.Lens' CreateDimension DimensionType
createDimension_type :: Lens' CreateDimension DimensionType
createDimension_type = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDimension' {DimensionType
type' :: DimensionType
$sel:type':CreateDimension' :: CreateDimension -> DimensionType
type'} -> DimensionType
type') (\s :: CreateDimension
s@CreateDimension' {} DimensionType
a -> CreateDimension
s {$sel:type':CreateDimension' :: DimensionType
type' = DimensionType
a} :: CreateDimension)

-- | Specifies the value or list of values for the dimension. For
-- @TOPIC_FILTER@ dimensions, this is a pattern used to match the MQTT
-- topic (for example, \"admin\/#\").
createDimension_stringValues :: Lens.Lens' CreateDimension (Prelude.NonEmpty Prelude.Text)
createDimension_stringValues :: Lens' CreateDimension (NonEmpty Text)
createDimension_stringValues = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDimension' {NonEmpty Text
stringValues :: NonEmpty Text
$sel:stringValues:CreateDimension' :: CreateDimension -> NonEmpty Text
stringValues} -> NonEmpty Text
stringValues) (\s :: CreateDimension
s@CreateDimension' {} NonEmpty Text
a -> CreateDimension
s {$sel:stringValues:CreateDimension' :: NonEmpty Text
stringValues = NonEmpty Text
a} :: CreateDimension) 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

-- | Each dimension must have a unique client request token. If you try to
-- create a new dimension with the same token as a dimension that already
-- exists, an exception occurs. If you omit this value, Amazon Web Services
-- SDKs will automatically generate a unique client request.
createDimension_clientRequestToken :: Lens.Lens' CreateDimension Prelude.Text
createDimension_clientRequestToken :: Lens' CreateDimension Text
createDimension_clientRequestToken = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDimension' {Text
clientRequestToken :: Text
$sel:clientRequestToken:CreateDimension' :: CreateDimension -> Text
clientRequestToken} -> Text
clientRequestToken) (\s :: CreateDimension
s@CreateDimension' {} Text
a -> CreateDimension
s {$sel:clientRequestToken:CreateDimension' :: Text
clientRequestToken = Text
a} :: CreateDimension)

instance Core.AWSRequest CreateDimension where
  type
    AWSResponse CreateDimension =
      CreateDimensionResponse
  request :: (Service -> Service) -> CreateDimension -> Request CreateDimension
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 CreateDimension
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse CreateDimension)))
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 ->
          Maybe Text -> Maybe Text -> Int -> CreateDimensionResponse
CreateDimensionResponse'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"arn")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"name")
            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 CreateDimension where
  hashWithSalt :: Int -> CreateDimension -> Int
hashWithSalt Int
_salt CreateDimension' {Maybe [Tag]
NonEmpty Text
Text
DimensionType
clientRequestToken :: Text
stringValues :: NonEmpty Text
type' :: DimensionType
name :: Text
tags :: Maybe [Tag]
$sel:clientRequestToken:CreateDimension' :: CreateDimension -> Text
$sel:stringValues:CreateDimension' :: CreateDimension -> NonEmpty Text
$sel:type':CreateDimension' :: CreateDimension -> DimensionType
$sel:name:CreateDimension' :: CreateDimension -> Text
$sel:tags:CreateDimension' :: CreateDimension -> Maybe [Tag]
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [Tag]
tags
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
name
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` DimensionType
type'
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` NonEmpty Text
stringValues
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
clientRequestToken

instance Prelude.NFData CreateDimension where
  rnf :: CreateDimension -> ()
rnf CreateDimension' {Maybe [Tag]
NonEmpty Text
Text
DimensionType
clientRequestToken :: Text
stringValues :: NonEmpty Text
type' :: DimensionType
name :: Text
tags :: Maybe [Tag]
$sel:clientRequestToken:CreateDimension' :: CreateDimension -> Text
$sel:stringValues:CreateDimension' :: CreateDimension -> NonEmpty Text
$sel:type':CreateDimension' :: CreateDimension -> DimensionType
$sel:name:CreateDimension' :: CreateDimension -> Text
$sel:tags:CreateDimension' :: CreateDimension -> Maybe [Tag]
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe [Tag]
tags
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
name
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf DimensionType
type'
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf NonEmpty Text
stringValues
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
clientRequestToken

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

instance Data.ToJSON CreateDimension where
  toJSON :: CreateDimension -> Value
toJSON CreateDimension' {Maybe [Tag]
NonEmpty Text
Text
DimensionType
clientRequestToken :: Text
stringValues :: NonEmpty Text
type' :: DimensionType
name :: Text
tags :: Maybe [Tag]
$sel:clientRequestToken:CreateDimension' :: CreateDimension -> Text
$sel:stringValues:CreateDimension' :: CreateDimension -> NonEmpty Text
$sel:type':CreateDimension' :: CreateDimension -> DimensionType
$sel:name:CreateDimension' :: CreateDimension -> Text
$sel:tags:CreateDimension' :: CreateDimension -> Maybe [Tag]
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"tags" 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 [Tag]
tags,
            forall a. a -> Maybe a
Prelude.Just (Key
"type" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= DimensionType
type'),
            forall a. a -> Maybe a
Prelude.Just (Key
"stringValues" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= NonEmpty Text
stringValues),
            forall a. a -> Maybe a
Prelude.Just
              (Key
"clientRequestToken" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
clientRequestToken)
          ]
      )

instance Data.ToPath CreateDimension where
  toPath :: CreateDimension -> ByteString
toPath CreateDimension' {Maybe [Tag]
NonEmpty Text
Text
DimensionType
clientRequestToken :: Text
stringValues :: NonEmpty Text
type' :: DimensionType
name :: Text
tags :: Maybe [Tag]
$sel:clientRequestToken:CreateDimension' :: CreateDimension -> Text
$sel:stringValues:CreateDimension' :: CreateDimension -> NonEmpty Text
$sel:type':CreateDimension' :: CreateDimension -> DimensionType
$sel:name:CreateDimension' :: CreateDimension -> Text
$sel:tags:CreateDimension' :: CreateDimension -> Maybe [Tag]
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat [ByteString
"/dimensions/", forall a. ToByteString a => a -> ByteString
Data.toBS Text
name]

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

-- | /See:/ 'newCreateDimensionResponse' smart constructor.
data CreateDimensionResponse = CreateDimensionResponse'
  { -- | The Amazon Resource Name (ARN) of the created dimension.
    CreateDimensionResponse -> Maybe Text
arn :: Prelude.Maybe Prelude.Text,
    -- | A unique identifier for the dimension.
    CreateDimensionResponse -> Maybe Text
name :: Prelude.Maybe Prelude.Text,
    -- | The response's http status code.
    CreateDimensionResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (CreateDimensionResponse -> CreateDimensionResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateDimensionResponse -> CreateDimensionResponse -> Bool
$c/= :: CreateDimensionResponse -> CreateDimensionResponse -> Bool
== :: CreateDimensionResponse -> CreateDimensionResponse -> Bool
$c== :: CreateDimensionResponse -> CreateDimensionResponse -> Bool
Prelude.Eq, ReadPrec [CreateDimensionResponse]
ReadPrec CreateDimensionResponse
Int -> ReadS CreateDimensionResponse
ReadS [CreateDimensionResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CreateDimensionResponse]
$creadListPrec :: ReadPrec [CreateDimensionResponse]
readPrec :: ReadPrec CreateDimensionResponse
$creadPrec :: ReadPrec CreateDimensionResponse
readList :: ReadS [CreateDimensionResponse]
$creadList :: ReadS [CreateDimensionResponse]
readsPrec :: Int -> ReadS CreateDimensionResponse
$creadsPrec :: Int -> ReadS CreateDimensionResponse
Prelude.Read, Int -> CreateDimensionResponse -> ShowS
[CreateDimensionResponse] -> ShowS
CreateDimensionResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateDimensionResponse] -> ShowS
$cshowList :: [CreateDimensionResponse] -> ShowS
show :: CreateDimensionResponse -> String
$cshow :: CreateDimensionResponse -> String
showsPrec :: Int -> CreateDimensionResponse -> ShowS
$cshowsPrec :: Int -> CreateDimensionResponse -> ShowS
Prelude.Show, forall x. Rep CreateDimensionResponse x -> CreateDimensionResponse
forall x. CreateDimensionResponse -> Rep CreateDimensionResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep CreateDimensionResponse x -> CreateDimensionResponse
$cfrom :: forall x. CreateDimensionResponse -> Rep CreateDimensionResponse x
Prelude.Generic)

-- |
-- Create a value of 'CreateDimensionResponse' 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:
--
-- 'arn', 'createDimensionResponse_arn' - The Amazon Resource Name (ARN) of the created dimension.
--
-- 'name', 'createDimensionResponse_name' - A unique identifier for the dimension.
--
-- 'httpStatus', 'createDimensionResponse_httpStatus' - The response's http status code.
newCreateDimensionResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  CreateDimensionResponse
newCreateDimensionResponse :: Int -> CreateDimensionResponse
newCreateDimensionResponse Int
pHttpStatus_ =
  CreateDimensionResponse'
    { $sel:arn:CreateDimensionResponse' :: Maybe Text
arn = forall a. Maybe a
Prelude.Nothing,
      $sel:name:CreateDimensionResponse' :: Maybe Text
name = forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:CreateDimensionResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | The Amazon Resource Name (ARN) of the created dimension.
createDimensionResponse_arn :: Lens.Lens' CreateDimensionResponse (Prelude.Maybe Prelude.Text)
createDimensionResponse_arn :: Lens' CreateDimensionResponse (Maybe Text)
createDimensionResponse_arn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDimensionResponse' {Maybe Text
arn :: Maybe Text
$sel:arn:CreateDimensionResponse' :: CreateDimensionResponse -> Maybe Text
arn} -> Maybe Text
arn) (\s :: CreateDimensionResponse
s@CreateDimensionResponse' {} Maybe Text
a -> CreateDimensionResponse
s {$sel:arn:CreateDimensionResponse' :: Maybe Text
arn = Maybe Text
a} :: CreateDimensionResponse)

-- | A unique identifier for the dimension.
createDimensionResponse_name :: Lens.Lens' CreateDimensionResponse (Prelude.Maybe Prelude.Text)
createDimensionResponse_name :: Lens' CreateDimensionResponse (Maybe Text)
createDimensionResponse_name = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDimensionResponse' {Maybe Text
name :: Maybe Text
$sel:name:CreateDimensionResponse' :: CreateDimensionResponse -> Maybe Text
name} -> Maybe Text
name) (\s :: CreateDimensionResponse
s@CreateDimensionResponse' {} Maybe Text
a -> CreateDimensionResponse
s {$sel:name:CreateDimensionResponse' :: Maybe Text
name = Maybe Text
a} :: CreateDimensionResponse)

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

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