{-# 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.DescribeAssetModel
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Retrieves information about an asset model.
module Amazonka.IoTSiteWise.DescribeAssetModel
  ( -- * Creating a Request
    DescribeAssetModel (..),
    newDescribeAssetModel,

    -- * Request Lenses
    describeAssetModel_excludeProperties,
    describeAssetModel_assetModelId,

    -- * Destructuring the Response
    DescribeAssetModelResponse (..),
    newDescribeAssetModelResponse,

    -- * Response Lenses
    describeAssetModelResponse_assetModelCompositeModels,
    describeAssetModelResponse_httpStatus,
    describeAssetModelResponse_assetModelId,
    describeAssetModelResponse_assetModelArn,
    describeAssetModelResponse_assetModelName,
    describeAssetModelResponse_assetModelDescription,
    describeAssetModelResponse_assetModelProperties,
    describeAssetModelResponse_assetModelHierarchies,
    describeAssetModelResponse_assetModelCreationDate,
    describeAssetModelResponse_assetModelLastUpdateDate,
    describeAssetModelResponse_assetModelStatus,
  )
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:/ 'newDescribeAssetModel' smart constructor.
data DescribeAssetModel = DescribeAssetModel'
  { -- | Whether or not to exclude asset model properties from the response.
    DescribeAssetModel -> Maybe Bool
excludeProperties :: Prelude.Maybe Prelude.Bool,
    -- | The ID of the asset model.
    DescribeAssetModel -> Text
assetModelId :: Prelude.Text
  }
  deriving (DescribeAssetModel -> DescribeAssetModel -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeAssetModel -> DescribeAssetModel -> Bool
$c/= :: DescribeAssetModel -> DescribeAssetModel -> Bool
== :: DescribeAssetModel -> DescribeAssetModel -> Bool
$c== :: DescribeAssetModel -> DescribeAssetModel -> Bool
Prelude.Eq, ReadPrec [DescribeAssetModel]
ReadPrec DescribeAssetModel
Int -> ReadS DescribeAssetModel
ReadS [DescribeAssetModel]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DescribeAssetModel]
$creadListPrec :: ReadPrec [DescribeAssetModel]
readPrec :: ReadPrec DescribeAssetModel
$creadPrec :: ReadPrec DescribeAssetModel
readList :: ReadS [DescribeAssetModel]
$creadList :: ReadS [DescribeAssetModel]
readsPrec :: Int -> ReadS DescribeAssetModel
$creadsPrec :: Int -> ReadS DescribeAssetModel
Prelude.Read, Int -> DescribeAssetModel -> ShowS
[DescribeAssetModel] -> ShowS
DescribeAssetModel -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeAssetModel] -> ShowS
$cshowList :: [DescribeAssetModel] -> ShowS
show :: DescribeAssetModel -> String
$cshow :: DescribeAssetModel -> String
showsPrec :: Int -> DescribeAssetModel -> ShowS
$cshowsPrec :: Int -> DescribeAssetModel -> ShowS
Prelude.Show, forall x. Rep DescribeAssetModel x -> DescribeAssetModel
forall x. DescribeAssetModel -> Rep DescribeAssetModel x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DescribeAssetModel x -> DescribeAssetModel
$cfrom :: forall x. DescribeAssetModel -> Rep DescribeAssetModel x
Prelude.Generic)

-- |
-- Create a value of 'DescribeAssetModel' 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:
--
-- 'excludeProperties', 'describeAssetModel_excludeProperties' - Whether or not to exclude asset model properties from the response.
--
-- 'assetModelId', 'describeAssetModel_assetModelId' - The ID of the asset model.
newDescribeAssetModel ::
  -- | 'assetModelId'
  Prelude.Text ->
  DescribeAssetModel
newDescribeAssetModel :: Text -> DescribeAssetModel
newDescribeAssetModel Text
pAssetModelId_ =
  DescribeAssetModel'
    { $sel:excludeProperties:DescribeAssetModel' :: Maybe Bool
excludeProperties =
        forall a. Maybe a
Prelude.Nothing,
      $sel:assetModelId:DescribeAssetModel' :: Text
assetModelId = Text
pAssetModelId_
    }

-- | Whether or not to exclude asset model properties from the response.
describeAssetModel_excludeProperties :: Lens.Lens' DescribeAssetModel (Prelude.Maybe Prelude.Bool)
describeAssetModel_excludeProperties :: Lens' DescribeAssetModel (Maybe Bool)
describeAssetModel_excludeProperties = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeAssetModel' {Maybe Bool
excludeProperties :: Maybe Bool
$sel:excludeProperties:DescribeAssetModel' :: DescribeAssetModel -> Maybe Bool
excludeProperties} -> Maybe Bool
excludeProperties) (\s :: DescribeAssetModel
s@DescribeAssetModel' {} Maybe Bool
a -> DescribeAssetModel
s {$sel:excludeProperties:DescribeAssetModel' :: Maybe Bool
excludeProperties = Maybe Bool
a} :: DescribeAssetModel)

-- | The ID of the asset model.
describeAssetModel_assetModelId :: Lens.Lens' DescribeAssetModel Prelude.Text
describeAssetModel_assetModelId :: Lens' DescribeAssetModel Text
describeAssetModel_assetModelId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeAssetModel' {Text
assetModelId :: Text
$sel:assetModelId:DescribeAssetModel' :: DescribeAssetModel -> Text
assetModelId} -> Text
assetModelId) (\s :: DescribeAssetModel
s@DescribeAssetModel' {} Text
a -> DescribeAssetModel
s {$sel:assetModelId:DescribeAssetModel' :: Text
assetModelId = Text
a} :: DescribeAssetModel)

instance Core.AWSRequest DescribeAssetModel where
  type
    AWSResponse DescribeAssetModel =
      DescribeAssetModelResponse
  request :: (Service -> Service)
-> DescribeAssetModel -> Request DescribeAssetModel
request Service -> Service
overrides =
    forall a. ToRequest a => Service -> a -> Request a
Request.get (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy DescribeAssetModel
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse DescribeAssetModel)))
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 [AssetModelCompositeModel]
-> Int
-> Text
-> Text
-> Text
-> Text
-> [AssetModelProperty]
-> [AssetModelHierarchy]
-> POSIX
-> POSIX
-> AssetModelStatus
-> DescribeAssetModelResponse
DescribeAssetModelResponse'
            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
"assetModelCompositeModels"
                            forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ forall a. Monoid a => a
Prelude.mempty
                        )
            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))
            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
"assetModelId")
            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
"assetModelArn")
            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
"assetModelName")
            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
"assetModelDescription")
            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
"assetModelProperties"
                            forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ forall a. Monoid a => a
Prelude.mempty
                        )
            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
"assetModelHierarchies"
                            forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ forall a. Monoid a => a
Prelude.mempty
                        )
            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
"assetModelCreationDate")
            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
"assetModelLastUpdateDate")
            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
"assetModelStatus")
      )

instance Prelude.Hashable DescribeAssetModel where
  hashWithSalt :: Int -> DescribeAssetModel -> Int
hashWithSalt Int
_salt DescribeAssetModel' {Maybe Bool
Text
assetModelId :: Text
excludeProperties :: Maybe Bool
$sel:assetModelId:DescribeAssetModel' :: DescribeAssetModel -> Text
$sel:excludeProperties:DescribeAssetModel' :: DescribeAssetModel -> Maybe Bool
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Bool
excludeProperties
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
assetModelId

instance Prelude.NFData DescribeAssetModel where
  rnf :: DescribeAssetModel -> ()
rnf DescribeAssetModel' {Maybe Bool
Text
assetModelId :: Text
excludeProperties :: Maybe Bool
$sel:assetModelId:DescribeAssetModel' :: DescribeAssetModel -> Text
$sel:excludeProperties:DescribeAssetModel' :: DescribeAssetModel -> Maybe Bool
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Bool
excludeProperties
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
assetModelId

instance Data.ToHeaders DescribeAssetModel where
  toHeaders :: DescribeAssetModel -> 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.ToPath DescribeAssetModel where
  toPath :: DescribeAssetModel -> ByteString
toPath DescribeAssetModel' {Maybe Bool
Text
assetModelId :: Text
excludeProperties :: Maybe Bool
$sel:assetModelId:DescribeAssetModel' :: DescribeAssetModel -> Text
$sel:excludeProperties:DescribeAssetModel' :: DescribeAssetModel -> Maybe Bool
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ByteString
"/asset-models/", forall a. ToByteString a => a -> ByteString
Data.toBS Text
assetModelId]

instance Data.ToQuery DescribeAssetModel where
  toQuery :: DescribeAssetModel -> QueryString
toQuery DescribeAssetModel' {Maybe Bool
Text
assetModelId :: Text
excludeProperties :: Maybe Bool
$sel:assetModelId:DescribeAssetModel' :: DescribeAssetModel -> Text
$sel:excludeProperties:DescribeAssetModel' :: DescribeAssetModel -> Maybe Bool
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ByteString
"excludeProperties" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Bool
excludeProperties]

-- | /See:/ 'newDescribeAssetModelResponse' smart constructor.
data DescribeAssetModelResponse = DescribeAssetModelResponse'
  { -- | The list of composite asset models for the asset model.
    DescribeAssetModelResponse -> Maybe [AssetModelCompositeModel]
assetModelCompositeModels :: Prelude.Maybe [AssetModelCompositeModel],
    -- | The response's http status code.
    DescribeAssetModelResponse -> Int
httpStatus :: Prelude.Int,
    -- | The ID of the asset model.
    DescribeAssetModelResponse -> Text
assetModelId :: Prelude.Text,
    -- | The
    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html ARN>
    -- of the asset model, which has the following format.
    --
    -- @arn:${Partition}:iotsitewise:${Region}:${Account}:asset-model\/${AssetModelId}@
    DescribeAssetModelResponse -> Text
assetModelArn :: Prelude.Text,
    -- | The name of the asset model.
    DescribeAssetModelResponse -> Text
assetModelName :: Prelude.Text,
    -- | The asset model\'s description.
    DescribeAssetModelResponse -> Text
assetModelDescription :: Prelude.Text,
    -- | The list of asset properties for the asset model.
    --
    -- This object doesn\'t include properties that you define in composite
    -- models. You can find composite model properties in the
    -- @assetModelCompositeModels@ object.
    DescribeAssetModelResponse -> [AssetModelProperty]
assetModelProperties :: [AssetModelProperty],
    -- | A list of asset model hierarchies that each contain a
    -- @childAssetModelId@ and a @hierarchyId@ (named @id@). A hierarchy
    -- specifies allowed parent\/child asset relationships for an asset model.
    DescribeAssetModelResponse -> [AssetModelHierarchy]
assetModelHierarchies :: [AssetModelHierarchy],
    -- | The date the asset model was created, in Unix epoch time.
    DescribeAssetModelResponse -> POSIX
assetModelCreationDate :: Data.POSIX,
    -- | The date the asset model was last updated, in Unix epoch time.
    DescribeAssetModelResponse -> POSIX
assetModelLastUpdateDate :: Data.POSIX,
    -- | The current status of the asset model, which contains a state and any
    -- error message.
    DescribeAssetModelResponse -> AssetModelStatus
assetModelStatus :: AssetModelStatus
  }
  deriving (DescribeAssetModelResponse -> DescribeAssetModelResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeAssetModelResponse -> DescribeAssetModelResponse -> Bool
$c/= :: DescribeAssetModelResponse -> DescribeAssetModelResponse -> Bool
== :: DescribeAssetModelResponse -> DescribeAssetModelResponse -> Bool
$c== :: DescribeAssetModelResponse -> DescribeAssetModelResponse -> Bool
Prelude.Eq, ReadPrec [DescribeAssetModelResponse]
ReadPrec DescribeAssetModelResponse
Int -> ReadS DescribeAssetModelResponse
ReadS [DescribeAssetModelResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DescribeAssetModelResponse]
$creadListPrec :: ReadPrec [DescribeAssetModelResponse]
readPrec :: ReadPrec DescribeAssetModelResponse
$creadPrec :: ReadPrec DescribeAssetModelResponse
readList :: ReadS [DescribeAssetModelResponse]
$creadList :: ReadS [DescribeAssetModelResponse]
readsPrec :: Int -> ReadS DescribeAssetModelResponse
$creadsPrec :: Int -> ReadS DescribeAssetModelResponse
Prelude.Read, Int -> DescribeAssetModelResponse -> ShowS
[DescribeAssetModelResponse] -> ShowS
DescribeAssetModelResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeAssetModelResponse] -> ShowS
$cshowList :: [DescribeAssetModelResponse] -> ShowS
show :: DescribeAssetModelResponse -> String
$cshow :: DescribeAssetModelResponse -> String
showsPrec :: Int -> DescribeAssetModelResponse -> ShowS
$cshowsPrec :: Int -> DescribeAssetModelResponse -> ShowS
Prelude.Show, forall x.
Rep DescribeAssetModelResponse x -> DescribeAssetModelResponse
forall x.
DescribeAssetModelResponse -> Rep DescribeAssetModelResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep DescribeAssetModelResponse x -> DescribeAssetModelResponse
$cfrom :: forall x.
DescribeAssetModelResponse -> Rep DescribeAssetModelResponse x
Prelude.Generic)

-- |
-- Create a value of 'DescribeAssetModelResponse' 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:
--
-- 'assetModelCompositeModels', 'describeAssetModelResponse_assetModelCompositeModels' - The list of composite asset models for the asset model.
--
-- 'httpStatus', 'describeAssetModelResponse_httpStatus' - The response's http status code.
--
-- 'assetModelId', 'describeAssetModelResponse_assetModelId' - The ID of the asset model.
--
-- 'assetModelArn', 'describeAssetModelResponse_assetModelArn' - The
-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html ARN>
-- of the asset model, which has the following format.
--
-- @arn:${Partition}:iotsitewise:${Region}:${Account}:asset-model\/${AssetModelId}@
--
-- 'assetModelName', 'describeAssetModelResponse_assetModelName' - The name of the asset model.
--
-- 'assetModelDescription', 'describeAssetModelResponse_assetModelDescription' - The asset model\'s description.
--
-- 'assetModelProperties', 'describeAssetModelResponse_assetModelProperties' - The list of asset properties for the asset model.
--
-- This object doesn\'t include properties that you define in composite
-- models. You can find composite model properties in the
-- @assetModelCompositeModels@ object.
--
-- 'assetModelHierarchies', 'describeAssetModelResponse_assetModelHierarchies' - A list of asset model hierarchies that each contain a
-- @childAssetModelId@ and a @hierarchyId@ (named @id@). A hierarchy
-- specifies allowed parent\/child asset relationships for an asset model.
--
-- 'assetModelCreationDate', 'describeAssetModelResponse_assetModelCreationDate' - The date the asset model was created, in Unix epoch time.
--
-- 'assetModelLastUpdateDate', 'describeAssetModelResponse_assetModelLastUpdateDate' - The date the asset model was last updated, in Unix epoch time.
--
-- 'assetModelStatus', 'describeAssetModelResponse_assetModelStatus' - The current status of the asset model, which contains a state and any
-- error message.
newDescribeAssetModelResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  -- | 'assetModelId'
  Prelude.Text ->
  -- | 'assetModelArn'
  Prelude.Text ->
  -- | 'assetModelName'
  Prelude.Text ->
  -- | 'assetModelDescription'
  Prelude.Text ->
  -- | 'assetModelCreationDate'
  Prelude.UTCTime ->
  -- | 'assetModelLastUpdateDate'
  Prelude.UTCTime ->
  -- | 'assetModelStatus'
  AssetModelStatus ->
  DescribeAssetModelResponse
newDescribeAssetModelResponse :: Int
-> Text
-> Text
-> Text
-> Text
-> UTCTime
-> UTCTime
-> AssetModelStatus
-> DescribeAssetModelResponse
newDescribeAssetModelResponse
  Int
pHttpStatus_
  Text
pAssetModelId_
  Text
pAssetModelArn_
  Text
pAssetModelName_
  Text
pAssetModelDescription_
  UTCTime
pAssetModelCreationDate_
  UTCTime
pAssetModelLastUpdateDate_
  AssetModelStatus
pAssetModelStatus_ =
    DescribeAssetModelResponse'
      { $sel:assetModelCompositeModels:DescribeAssetModelResponse' :: Maybe [AssetModelCompositeModel]
assetModelCompositeModels =
          forall a. Maybe a
Prelude.Nothing,
        $sel:httpStatus:DescribeAssetModelResponse' :: Int
httpStatus = Int
pHttpStatus_,
        $sel:assetModelId:DescribeAssetModelResponse' :: Text
assetModelId = Text
pAssetModelId_,
        $sel:assetModelArn:DescribeAssetModelResponse' :: Text
assetModelArn = Text
pAssetModelArn_,
        $sel:assetModelName:DescribeAssetModelResponse' :: Text
assetModelName = Text
pAssetModelName_,
        $sel:assetModelDescription:DescribeAssetModelResponse' :: Text
assetModelDescription = Text
pAssetModelDescription_,
        $sel:assetModelProperties:DescribeAssetModelResponse' :: [AssetModelProperty]
assetModelProperties = forall a. Monoid a => a
Prelude.mempty,
        $sel:assetModelHierarchies:DescribeAssetModelResponse' :: [AssetModelHierarchy]
assetModelHierarchies = forall a. Monoid a => a
Prelude.mempty,
        $sel:assetModelCreationDate:DescribeAssetModelResponse' :: POSIX
assetModelCreationDate =
          forall (a :: Format). Iso' (Time a) UTCTime
Data._Time forall t b. AReview t b -> b -> t
Lens.# UTCTime
pAssetModelCreationDate_,
        $sel:assetModelLastUpdateDate:DescribeAssetModelResponse' :: POSIX
assetModelLastUpdateDate =
          forall (a :: Format). Iso' (Time a) UTCTime
Data._Time forall t b. AReview t b -> b -> t
Lens.# UTCTime
pAssetModelLastUpdateDate_,
        $sel:assetModelStatus:DescribeAssetModelResponse' :: AssetModelStatus
assetModelStatus = AssetModelStatus
pAssetModelStatus_
      }

-- | The list of composite asset models for the asset model.
describeAssetModelResponse_assetModelCompositeModels :: Lens.Lens' DescribeAssetModelResponse (Prelude.Maybe [AssetModelCompositeModel])
describeAssetModelResponse_assetModelCompositeModels :: Lens' DescribeAssetModelResponse (Maybe [AssetModelCompositeModel])
describeAssetModelResponse_assetModelCompositeModels = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeAssetModelResponse' {Maybe [AssetModelCompositeModel]
assetModelCompositeModels :: Maybe [AssetModelCompositeModel]
$sel:assetModelCompositeModels:DescribeAssetModelResponse' :: DescribeAssetModelResponse -> Maybe [AssetModelCompositeModel]
assetModelCompositeModels} -> Maybe [AssetModelCompositeModel]
assetModelCompositeModels) (\s :: DescribeAssetModelResponse
s@DescribeAssetModelResponse' {} Maybe [AssetModelCompositeModel]
a -> DescribeAssetModelResponse
s {$sel:assetModelCompositeModels:DescribeAssetModelResponse' :: Maybe [AssetModelCompositeModel]
assetModelCompositeModels = Maybe [AssetModelCompositeModel]
a} :: DescribeAssetModelResponse) 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

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

-- | The ID of the asset model.
describeAssetModelResponse_assetModelId :: Lens.Lens' DescribeAssetModelResponse Prelude.Text
describeAssetModelResponse_assetModelId :: Lens' DescribeAssetModelResponse Text
describeAssetModelResponse_assetModelId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeAssetModelResponse' {Text
assetModelId :: Text
$sel:assetModelId:DescribeAssetModelResponse' :: DescribeAssetModelResponse -> Text
assetModelId} -> Text
assetModelId) (\s :: DescribeAssetModelResponse
s@DescribeAssetModelResponse' {} Text
a -> DescribeAssetModelResponse
s {$sel:assetModelId:DescribeAssetModelResponse' :: Text
assetModelId = Text
a} :: DescribeAssetModelResponse)

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

-- | The name of the asset model.
describeAssetModelResponse_assetModelName :: Lens.Lens' DescribeAssetModelResponse Prelude.Text
describeAssetModelResponse_assetModelName :: Lens' DescribeAssetModelResponse Text
describeAssetModelResponse_assetModelName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeAssetModelResponse' {Text
assetModelName :: Text
$sel:assetModelName:DescribeAssetModelResponse' :: DescribeAssetModelResponse -> Text
assetModelName} -> Text
assetModelName) (\s :: DescribeAssetModelResponse
s@DescribeAssetModelResponse' {} Text
a -> DescribeAssetModelResponse
s {$sel:assetModelName:DescribeAssetModelResponse' :: Text
assetModelName = Text
a} :: DescribeAssetModelResponse)

-- | The asset model\'s description.
describeAssetModelResponse_assetModelDescription :: Lens.Lens' DescribeAssetModelResponse Prelude.Text
describeAssetModelResponse_assetModelDescription :: Lens' DescribeAssetModelResponse Text
describeAssetModelResponse_assetModelDescription = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeAssetModelResponse' {Text
assetModelDescription :: Text
$sel:assetModelDescription:DescribeAssetModelResponse' :: DescribeAssetModelResponse -> Text
assetModelDescription} -> Text
assetModelDescription) (\s :: DescribeAssetModelResponse
s@DescribeAssetModelResponse' {} Text
a -> DescribeAssetModelResponse
s {$sel:assetModelDescription:DescribeAssetModelResponse' :: Text
assetModelDescription = Text
a} :: DescribeAssetModelResponse)

-- | The list of asset properties for the asset model.
--
-- This object doesn\'t include properties that you define in composite
-- models. You can find composite model properties in the
-- @assetModelCompositeModels@ object.
describeAssetModelResponse_assetModelProperties :: Lens.Lens' DescribeAssetModelResponse [AssetModelProperty]
describeAssetModelResponse_assetModelProperties :: Lens' DescribeAssetModelResponse [AssetModelProperty]
describeAssetModelResponse_assetModelProperties = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeAssetModelResponse' {[AssetModelProperty]
assetModelProperties :: [AssetModelProperty]
$sel:assetModelProperties:DescribeAssetModelResponse' :: DescribeAssetModelResponse -> [AssetModelProperty]
assetModelProperties} -> [AssetModelProperty]
assetModelProperties) (\s :: DescribeAssetModelResponse
s@DescribeAssetModelResponse' {} [AssetModelProperty]
a -> DescribeAssetModelResponse
s {$sel:assetModelProperties:DescribeAssetModelResponse' :: [AssetModelProperty]
assetModelProperties = [AssetModelProperty]
a} :: DescribeAssetModelResponse) 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 list of asset model hierarchies that each contain a
-- @childAssetModelId@ and a @hierarchyId@ (named @id@). A hierarchy
-- specifies allowed parent\/child asset relationships for an asset model.
describeAssetModelResponse_assetModelHierarchies :: Lens.Lens' DescribeAssetModelResponse [AssetModelHierarchy]
describeAssetModelResponse_assetModelHierarchies :: Lens' DescribeAssetModelResponse [AssetModelHierarchy]
describeAssetModelResponse_assetModelHierarchies = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeAssetModelResponse' {[AssetModelHierarchy]
assetModelHierarchies :: [AssetModelHierarchy]
$sel:assetModelHierarchies:DescribeAssetModelResponse' :: DescribeAssetModelResponse -> [AssetModelHierarchy]
assetModelHierarchies} -> [AssetModelHierarchy]
assetModelHierarchies) (\s :: DescribeAssetModelResponse
s@DescribeAssetModelResponse' {} [AssetModelHierarchy]
a -> DescribeAssetModelResponse
s {$sel:assetModelHierarchies:DescribeAssetModelResponse' :: [AssetModelHierarchy]
assetModelHierarchies = [AssetModelHierarchy]
a} :: DescribeAssetModelResponse) 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

-- | The date the asset model was created, in Unix epoch time.
describeAssetModelResponse_assetModelCreationDate :: Lens.Lens' DescribeAssetModelResponse Prelude.UTCTime
describeAssetModelResponse_assetModelCreationDate :: Lens' DescribeAssetModelResponse UTCTime
describeAssetModelResponse_assetModelCreationDate = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeAssetModelResponse' {POSIX
assetModelCreationDate :: POSIX
$sel:assetModelCreationDate:DescribeAssetModelResponse' :: DescribeAssetModelResponse -> POSIX
assetModelCreationDate} -> POSIX
assetModelCreationDate) (\s :: DescribeAssetModelResponse
s@DescribeAssetModelResponse' {} POSIX
a -> DescribeAssetModelResponse
s {$sel:assetModelCreationDate:DescribeAssetModelResponse' :: POSIX
assetModelCreationDate = POSIX
a} :: DescribeAssetModelResponse) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (a :: Format). Iso' (Time a) UTCTime
Data._Time

-- | The date the asset model was last updated, in Unix epoch time.
describeAssetModelResponse_assetModelLastUpdateDate :: Lens.Lens' DescribeAssetModelResponse Prelude.UTCTime
describeAssetModelResponse_assetModelLastUpdateDate :: Lens' DescribeAssetModelResponse UTCTime
describeAssetModelResponse_assetModelLastUpdateDate = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeAssetModelResponse' {POSIX
assetModelLastUpdateDate :: POSIX
$sel:assetModelLastUpdateDate:DescribeAssetModelResponse' :: DescribeAssetModelResponse -> POSIX
assetModelLastUpdateDate} -> POSIX
assetModelLastUpdateDate) (\s :: DescribeAssetModelResponse
s@DescribeAssetModelResponse' {} POSIX
a -> DescribeAssetModelResponse
s {$sel:assetModelLastUpdateDate:DescribeAssetModelResponse' :: POSIX
assetModelLastUpdateDate = POSIX
a} :: DescribeAssetModelResponse) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (a :: Format). Iso' (Time a) UTCTime
Data._Time

-- | The current status of the asset model, which contains a state and any
-- error message.
describeAssetModelResponse_assetModelStatus :: Lens.Lens' DescribeAssetModelResponse AssetModelStatus
describeAssetModelResponse_assetModelStatus :: Lens' DescribeAssetModelResponse AssetModelStatus
describeAssetModelResponse_assetModelStatus = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeAssetModelResponse' {AssetModelStatus
assetModelStatus :: AssetModelStatus
$sel:assetModelStatus:DescribeAssetModelResponse' :: DescribeAssetModelResponse -> AssetModelStatus
assetModelStatus} -> AssetModelStatus
assetModelStatus) (\s :: DescribeAssetModelResponse
s@DescribeAssetModelResponse' {} AssetModelStatus
a -> DescribeAssetModelResponse
s {$sel:assetModelStatus:DescribeAssetModelResponse' :: AssetModelStatus
assetModelStatus = AssetModelStatus
a} :: DescribeAssetModelResponse)

instance Prelude.NFData DescribeAssetModelResponse where
  rnf :: DescribeAssetModelResponse -> ()
rnf DescribeAssetModelResponse' {Int
[AssetModelHierarchy]
[AssetModelProperty]
Maybe [AssetModelCompositeModel]
Text
POSIX
AssetModelStatus
assetModelStatus :: AssetModelStatus
assetModelLastUpdateDate :: POSIX
assetModelCreationDate :: POSIX
assetModelHierarchies :: [AssetModelHierarchy]
assetModelProperties :: [AssetModelProperty]
assetModelDescription :: Text
assetModelName :: Text
assetModelArn :: Text
assetModelId :: Text
httpStatus :: Int
assetModelCompositeModels :: Maybe [AssetModelCompositeModel]
$sel:assetModelStatus:DescribeAssetModelResponse' :: DescribeAssetModelResponse -> AssetModelStatus
$sel:assetModelLastUpdateDate:DescribeAssetModelResponse' :: DescribeAssetModelResponse -> POSIX
$sel:assetModelCreationDate:DescribeAssetModelResponse' :: DescribeAssetModelResponse -> POSIX
$sel:assetModelHierarchies:DescribeAssetModelResponse' :: DescribeAssetModelResponse -> [AssetModelHierarchy]
$sel:assetModelProperties:DescribeAssetModelResponse' :: DescribeAssetModelResponse -> [AssetModelProperty]
$sel:assetModelDescription:DescribeAssetModelResponse' :: DescribeAssetModelResponse -> Text
$sel:assetModelName:DescribeAssetModelResponse' :: DescribeAssetModelResponse -> Text
$sel:assetModelArn:DescribeAssetModelResponse' :: DescribeAssetModelResponse -> Text
$sel:assetModelId:DescribeAssetModelResponse' :: DescribeAssetModelResponse -> Text
$sel:httpStatus:DescribeAssetModelResponse' :: DescribeAssetModelResponse -> Int
$sel:assetModelCompositeModels:DescribeAssetModelResponse' :: DescribeAssetModelResponse -> Maybe [AssetModelCompositeModel]
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe [AssetModelCompositeModel]
assetModelCompositeModels
      seq :: forall a b. a -> b -> b
`Prelude.seq` 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
assetModelId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
assetModelArn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
assetModelName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
assetModelDescription
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf [AssetModelProperty]
assetModelProperties
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf [AssetModelHierarchy]
assetModelHierarchies
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf POSIX
assetModelCreationDate
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf POSIX
assetModelLastUpdateDate
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf AssetModelStatus
assetModelStatus