{-# 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.IoTSiteWise.CreateAsset
-- 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 an asset from an existing asset model. For more information, see
-- <https://docs.aws.amazon.com/iot-sitewise/latest/userguide/create-assets.html Creating assets>
-- in the /IoT SiteWise User Guide/.
module Amazonka.IoTSiteWise.CreateAsset
  ( -- * Creating a Request
    CreateAsset (..),
    newCreateAsset,

    -- * Request Lenses
    createAsset_assetDescription,
    createAsset_clientToken,
    createAsset_tags,
    createAsset_assetName,
    createAsset_assetModelId,

    -- * Destructuring the Response
    CreateAssetResponse (..),
    newCreateAssetResponse,

    -- * Response Lenses
    createAssetResponse_httpStatus,
    createAssetResponse_assetId,
    createAssetResponse_assetArn,
    createAssetResponse_assetStatus,
  )
where

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

-- | /See:/ 'newCreateAsset' smart constructor.
data CreateAsset = CreateAsset'
  { -- | A description for the asset.
    CreateAsset -> Maybe Text
assetDescription :: Prelude.Maybe Prelude.Text,
    -- | A unique case-sensitive identifier that you can provide to ensure the
    -- idempotency of the request. Don\'t reuse this client token if a new
    -- idempotent request is required.
    CreateAsset -> Maybe Text
clientToken :: Prelude.Maybe Prelude.Text,
    -- | A list of key-value pairs that contain metadata for the asset. For more
    -- information, see
    -- <https://docs.aws.amazon.com/iot-sitewise/latest/userguide/tag-resources.html Tagging your IoT SiteWise resources>
    -- in the /IoT SiteWise User Guide/.
    CreateAsset -> Maybe (HashMap Text Text)
tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
    -- | A friendly name for the asset.
    CreateAsset -> Text
assetName :: Prelude.Text,
    -- | The ID of the asset model from which to create the asset.
    CreateAsset -> Text
assetModelId :: Prelude.Text
  }
  deriving (CreateAsset -> CreateAsset -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateAsset -> CreateAsset -> Bool
$c/= :: CreateAsset -> CreateAsset -> Bool
== :: CreateAsset -> CreateAsset -> Bool
$c== :: CreateAsset -> CreateAsset -> Bool
Prelude.Eq, ReadPrec [CreateAsset]
ReadPrec CreateAsset
Int -> ReadS CreateAsset
ReadS [CreateAsset]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CreateAsset]
$creadListPrec :: ReadPrec [CreateAsset]
readPrec :: ReadPrec CreateAsset
$creadPrec :: ReadPrec CreateAsset
readList :: ReadS [CreateAsset]
$creadList :: ReadS [CreateAsset]
readsPrec :: Int -> ReadS CreateAsset
$creadsPrec :: Int -> ReadS CreateAsset
Prelude.Read, Int -> CreateAsset -> ShowS
[CreateAsset] -> ShowS
CreateAsset -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateAsset] -> ShowS
$cshowList :: [CreateAsset] -> ShowS
show :: CreateAsset -> String
$cshow :: CreateAsset -> String
showsPrec :: Int -> CreateAsset -> ShowS
$cshowsPrec :: Int -> CreateAsset -> ShowS
Prelude.Show, forall x. Rep CreateAsset x -> CreateAsset
forall x. CreateAsset -> Rep CreateAsset x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep CreateAsset x -> CreateAsset
$cfrom :: forall x. CreateAsset -> Rep CreateAsset x
Prelude.Generic)

-- |
-- Create a value of 'CreateAsset' 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:
--
-- 'assetDescription', 'createAsset_assetDescription' - A description for the asset.
--
-- 'clientToken', 'createAsset_clientToken' - A unique case-sensitive identifier that you can provide to ensure the
-- idempotency of the request. Don\'t reuse this client token if a new
-- idempotent request is required.
--
-- 'tags', 'createAsset_tags' - A list of key-value pairs that contain metadata for the asset. For more
-- information, see
-- <https://docs.aws.amazon.com/iot-sitewise/latest/userguide/tag-resources.html Tagging your IoT SiteWise resources>
-- in the /IoT SiteWise User Guide/.
--
-- 'assetName', 'createAsset_assetName' - A friendly name for the asset.
--
-- 'assetModelId', 'createAsset_assetModelId' - The ID of the asset model from which to create the asset.
newCreateAsset ::
  -- | 'assetName'
  Prelude.Text ->
  -- | 'assetModelId'
  Prelude.Text ->
  CreateAsset
newCreateAsset :: Text -> Text -> CreateAsset
newCreateAsset Text
pAssetName_ Text
pAssetModelId_ =
  CreateAsset'
    { $sel:assetDescription:CreateAsset' :: Maybe Text
assetDescription = forall a. Maybe a
Prelude.Nothing,
      $sel:clientToken:CreateAsset' :: Maybe Text
clientToken = forall a. Maybe a
Prelude.Nothing,
      $sel:tags:CreateAsset' :: Maybe (HashMap Text Text)
tags = forall a. Maybe a
Prelude.Nothing,
      $sel:assetName:CreateAsset' :: Text
assetName = Text
pAssetName_,
      $sel:assetModelId:CreateAsset' :: Text
assetModelId = Text
pAssetModelId_
    }

-- | A description for the asset.
createAsset_assetDescription :: Lens.Lens' CreateAsset (Prelude.Maybe Prelude.Text)
createAsset_assetDescription :: Lens' CreateAsset (Maybe Text)
createAsset_assetDescription = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateAsset' {Maybe Text
assetDescription :: Maybe Text
$sel:assetDescription:CreateAsset' :: CreateAsset -> Maybe Text
assetDescription} -> Maybe Text
assetDescription) (\s :: CreateAsset
s@CreateAsset' {} Maybe Text
a -> CreateAsset
s {$sel:assetDescription:CreateAsset' :: Maybe Text
assetDescription = Maybe Text
a} :: CreateAsset)

-- | A unique case-sensitive identifier that you can provide to ensure the
-- idempotency of the request. Don\'t reuse this client token if a new
-- idempotent request is required.
createAsset_clientToken :: Lens.Lens' CreateAsset (Prelude.Maybe Prelude.Text)
createAsset_clientToken :: Lens' CreateAsset (Maybe Text)
createAsset_clientToken = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateAsset' {Maybe Text
clientToken :: Maybe Text
$sel:clientToken:CreateAsset' :: CreateAsset -> Maybe Text
clientToken} -> Maybe Text
clientToken) (\s :: CreateAsset
s@CreateAsset' {} Maybe Text
a -> CreateAsset
s {$sel:clientToken:CreateAsset' :: Maybe Text
clientToken = Maybe Text
a} :: CreateAsset)

-- | A list of key-value pairs that contain metadata for the asset. For more
-- information, see
-- <https://docs.aws.amazon.com/iot-sitewise/latest/userguide/tag-resources.html Tagging your IoT SiteWise resources>
-- in the /IoT SiteWise User Guide/.
createAsset_tags :: Lens.Lens' CreateAsset (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
createAsset_tags :: Lens' CreateAsset (Maybe (HashMap Text Text))
createAsset_tags = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateAsset' {Maybe (HashMap Text Text)
tags :: Maybe (HashMap Text Text)
$sel:tags:CreateAsset' :: CreateAsset -> Maybe (HashMap Text Text)
tags} -> Maybe (HashMap Text Text)
tags) (\s :: CreateAsset
s@CreateAsset' {} Maybe (HashMap Text Text)
a -> CreateAsset
s {$sel:tags:CreateAsset' :: Maybe (HashMap Text Text)
tags = Maybe (HashMap Text Text)
a} :: CreateAsset) 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 friendly name for the asset.
createAsset_assetName :: Lens.Lens' CreateAsset Prelude.Text
createAsset_assetName :: Lens' CreateAsset Text
createAsset_assetName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateAsset' {Text
assetName :: Text
$sel:assetName:CreateAsset' :: CreateAsset -> Text
assetName} -> Text
assetName) (\s :: CreateAsset
s@CreateAsset' {} Text
a -> CreateAsset
s {$sel:assetName:CreateAsset' :: Text
assetName = Text
a} :: CreateAsset)

-- | The ID of the asset model from which to create the asset.
createAsset_assetModelId :: Lens.Lens' CreateAsset Prelude.Text
createAsset_assetModelId :: Lens' CreateAsset Text
createAsset_assetModelId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateAsset' {Text
assetModelId :: Text
$sel:assetModelId:CreateAsset' :: CreateAsset -> Text
assetModelId} -> Text
assetModelId) (\s :: CreateAsset
s@CreateAsset' {} Text
a -> CreateAsset
s {$sel:assetModelId:CreateAsset' :: Text
assetModelId = Text
a} :: CreateAsset)

instance Core.AWSRequest CreateAsset where
  type AWSResponse CreateAsset = CreateAssetResponse
  request :: (Service -> Service) -> CreateAsset -> Request CreateAsset
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 CreateAsset
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse CreateAsset)))
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 -> Text -> AssetStatus -> CreateAssetResponse
CreateAssetResponse'
            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
"assetId")
            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
"assetArn")
            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
"assetStatus")
      )

instance Prelude.Hashable CreateAsset where
  hashWithSalt :: Int -> CreateAsset -> Int
hashWithSalt Int
_salt CreateAsset' {Maybe Text
Maybe (HashMap Text Text)
Text
assetModelId :: Text
assetName :: Text
tags :: Maybe (HashMap Text Text)
clientToken :: Maybe Text
assetDescription :: Maybe Text
$sel:assetModelId:CreateAsset' :: CreateAsset -> Text
$sel:assetName:CreateAsset' :: CreateAsset -> Text
$sel:tags:CreateAsset' :: CreateAsset -> Maybe (HashMap Text Text)
$sel:clientToken:CreateAsset' :: CreateAsset -> Maybe Text
$sel:assetDescription:CreateAsset' :: CreateAsset -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
assetDescription
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
clientToken
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (HashMap Text Text)
tags
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
assetName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
assetModelId

instance Prelude.NFData CreateAsset where
  rnf :: CreateAsset -> ()
rnf CreateAsset' {Maybe Text
Maybe (HashMap Text Text)
Text
assetModelId :: Text
assetName :: Text
tags :: Maybe (HashMap Text Text)
clientToken :: Maybe Text
assetDescription :: Maybe Text
$sel:assetModelId:CreateAsset' :: CreateAsset -> Text
$sel:assetName:CreateAsset' :: CreateAsset -> Text
$sel:tags:CreateAsset' :: CreateAsset -> Maybe (HashMap Text Text)
$sel:clientToken:CreateAsset' :: CreateAsset -> Maybe Text
$sel:assetDescription:CreateAsset' :: CreateAsset -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
assetDescription
      seq :: forall a b. a -> b -> b
`Prelude.seq` 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 (HashMap Text Text)
tags
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
assetName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
assetModelId

instance Data.ToHeaders CreateAsset where
  toHeaders :: CreateAsset -> 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 CreateAsset where
  toJSON :: CreateAsset -> Value
toJSON CreateAsset' {Maybe Text
Maybe (HashMap Text Text)
Text
assetModelId :: Text
assetName :: Text
tags :: Maybe (HashMap Text Text)
clientToken :: Maybe Text
assetDescription :: Maybe Text
$sel:assetModelId:CreateAsset' :: CreateAsset -> Text
$sel:assetName:CreateAsset' :: CreateAsset -> Text
$sel:tags:CreateAsset' :: CreateAsset -> Maybe (HashMap Text Text)
$sel:clientToken:CreateAsset' :: CreateAsset -> Maybe Text
$sel:assetDescription:CreateAsset' :: CreateAsset -> Maybe Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"assetDescription" 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 Text
assetDescription,
            (Key
"clientToken" 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 Text
clientToken,
            (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 (HashMap Text Text)
tags,
            forall a. a -> Maybe a
Prelude.Just (Key
"assetName" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
assetName),
            forall a. a -> Maybe a
Prelude.Just (Key
"assetModelId" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
assetModelId)
          ]
      )

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

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

-- | /See:/ 'newCreateAssetResponse' smart constructor.
data CreateAssetResponse = CreateAssetResponse'
  { -- | The response's http status code.
    CreateAssetResponse -> Int
httpStatus :: Prelude.Int,
    -- | The ID of the asset. This ID uniquely identifies the asset within IoT
    -- SiteWise and can be used with other IoT SiteWise APIs.
    CreateAssetResponse -> Text
assetId :: Prelude.Text,
    -- | The
    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html ARN>
    -- of the asset, which has the following format.
    --
    -- @arn:${Partition}:iotsitewise:${Region}:${Account}:asset\/${AssetId}@
    CreateAssetResponse -> Text
assetArn :: Prelude.Text,
    -- | The status of the asset, which contains a state (@CREATING@ after
    -- successfully calling this operation) and any error message.
    CreateAssetResponse -> AssetStatus
assetStatus :: AssetStatus
  }
  deriving (CreateAssetResponse -> CreateAssetResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateAssetResponse -> CreateAssetResponse -> Bool
$c/= :: CreateAssetResponse -> CreateAssetResponse -> Bool
== :: CreateAssetResponse -> CreateAssetResponse -> Bool
$c== :: CreateAssetResponse -> CreateAssetResponse -> Bool
Prelude.Eq, ReadPrec [CreateAssetResponse]
ReadPrec CreateAssetResponse
Int -> ReadS CreateAssetResponse
ReadS [CreateAssetResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CreateAssetResponse]
$creadListPrec :: ReadPrec [CreateAssetResponse]
readPrec :: ReadPrec CreateAssetResponse
$creadPrec :: ReadPrec CreateAssetResponse
readList :: ReadS [CreateAssetResponse]
$creadList :: ReadS [CreateAssetResponse]
readsPrec :: Int -> ReadS CreateAssetResponse
$creadsPrec :: Int -> ReadS CreateAssetResponse
Prelude.Read, Int -> CreateAssetResponse -> ShowS
[CreateAssetResponse] -> ShowS
CreateAssetResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateAssetResponse] -> ShowS
$cshowList :: [CreateAssetResponse] -> ShowS
show :: CreateAssetResponse -> String
$cshow :: CreateAssetResponse -> String
showsPrec :: Int -> CreateAssetResponse -> ShowS
$cshowsPrec :: Int -> CreateAssetResponse -> ShowS
Prelude.Show, forall x. Rep CreateAssetResponse x -> CreateAssetResponse
forall x. CreateAssetResponse -> Rep CreateAssetResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep CreateAssetResponse x -> CreateAssetResponse
$cfrom :: forall x. CreateAssetResponse -> Rep CreateAssetResponse x
Prelude.Generic)

-- |
-- Create a value of 'CreateAssetResponse' 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', 'createAssetResponse_httpStatus' - The response's http status code.
--
-- 'assetId', 'createAssetResponse_assetId' - The ID of the asset. This ID uniquely identifies the asset within IoT
-- SiteWise and can be used with other IoT SiteWise APIs.
--
-- 'assetArn', 'createAssetResponse_assetArn' - The
-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html ARN>
-- of the asset, which has the following format.
--
-- @arn:${Partition}:iotsitewise:${Region}:${Account}:asset\/${AssetId}@
--
-- 'assetStatus', 'createAssetResponse_assetStatus' - The status of the asset, which contains a state (@CREATING@ after
-- successfully calling this operation) and any error message.
newCreateAssetResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  -- | 'assetId'
  Prelude.Text ->
  -- | 'assetArn'
  Prelude.Text ->
  -- | 'assetStatus'
  AssetStatus ->
  CreateAssetResponse
newCreateAssetResponse :: Int -> Text -> Text -> AssetStatus -> CreateAssetResponse
newCreateAssetResponse
  Int
pHttpStatus_
  Text
pAssetId_
  Text
pAssetArn_
  AssetStatus
pAssetStatus_ =
    CreateAssetResponse'
      { $sel:httpStatus:CreateAssetResponse' :: Int
httpStatus = Int
pHttpStatus_,
        $sel:assetId:CreateAssetResponse' :: Text
assetId = Text
pAssetId_,
        $sel:assetArn:CreateAssetResponse' :: Text
assetArn = Text
pAssetArn_,
        $sel:assetStatus:CreateAssetResponse' :: AssetStatus
assetStatus = AssetStatus
pAssetStatus_
      }

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

-- | The ID of the asset. This ID uniquely identifies the asset within IoT
-- SiteWise and can be used with other IoT SiteWise APIs.
createAssetResponse_assetId :: Lens.Lens' CreateAssetResponse Prelude.Text
createAssetResponse_assetId :: Lens' CreateAssetResponse Text
createAssetResponse_assetId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateAssetResponse' {Text
assetId :: Text
$sel:assetId:CreateAssetResponse' :: CreateAssetResponse -> Text
assetId} -> Text
assetId) (\s :: CreateAssetResponse
s@CreateAssetResponse' {} Text
a -> CreateAssetResponse
s {$sel:assetId:CreateAssetResponse' :: Text
assetId = Text
a} :: CreateAssetResponse)

-- | The
-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html ARN>
-- of the asset, which has the following format.
--
-- @arn:${Partition}:iotsitewise:${Region}:${Account}:asset\/${AssetId}@
createAssetResponse_assetArn :: Lens.Lens' CreateAssetResponse Prelude.Text
createAssetResponse_assetArn :: Lens' CreateAssetResponse Text
createAssetResponse_assetArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateAssetResponse' {Text
assetArn :: Text
$sel:assetArn:CreateAssetResponse' :: CreateAssetResponse -> Text
assetArn} -> Text
assetArn) (\s :: CreateAssetResponse
s@CreateAssetResponse' {} Text
a -> CreateAssetResponse
s {$sel:assetArn:CreateAssetResponse' :: Text
assetArn = Text
a} :: CreateAssetResponse)

-- | The status of the asset, which contains a state (@CREATING@ after
-- successfully calling this operation) and any error message.
createAssetResponse_assetStatus :: Lens.Lens' CreateAssetResponse AssetStatus
createAssetResponse_assetStatus :: Lens' CreateAssetResponse AssetStatus
createAssetResponse_assetStatus = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateAssetResponse' {AssetStatus
assetStatus :: AssetStatus
$sel:assetStatus:CreateAssetResponse' :: CreateAssetResponse -> AssetStatus
assetStatus} -> AssetStatus
assetStatus) (\s :: CreateAssetResponse
s@CreateAssetResponse' {} AssetStatus
a -> CreateAssetResponse
s {$sel:assetStatus:CreateAssetResponse' :: AssetStatus
assetStatus = AssetStatus
a} :: CreateAssetResponse)

instance Prelude.NFData CreateAssetResponse where
  rnf :: CreateAssetResponse -> ()
rnf CreateAssetResponse' {Int
Text
AssetStatus
assetStatus :: AssetStatus
assetArn :: Text
assetId :: Text
httpStatus :: Int
$sel:assetStatus:CreateAssetResponse' :: CreateAssetResponse -> AssetStatus
$sel:assetArn:CreateAssetResponse' :: CreateAssetResponse -> Text
$sel:assetId:CreateAssetResponse' :: CreateAssetResponse -> Text
$sel:httpStatus:CreateAssetResponse' :: CreateAssetResponse -> 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
assetId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
assetArn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf AssetStatus
assetStatus