{-# 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.CreateAssetModel
-- 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 model from specified property and hierarchy
-- definitions. You create assets from asset models. With asset models, you
-- can easily create assets of the same type that have standardized
-- definitions. Each asset created from a model inherits the asset model\'s
-- property and hierarchy definitions. For more information, see
-- <https://docs.aws.amazon.com/iot-sitewise/latest/userguide/define-models.html Defining asset models>
-- in the /IoT SiteWise User Guide/.
module Amazonka.IoTSiteWise.CreateAssetModel
  ( -- * Creating a Request
    CreateAssetModel (..),
    newCreateAssetModel,

    -- * Request Lenses
    createAssetModel_assetModelCompositeModels,
    createAssetModel_assetModelDescription,
    createAssetModel_assetModelHierarchies,
    createAssetModel_assetModelProperties,
    createAssetModel_clientToken,
    createAssetModel_tags,
    createAssetModel_assetModelName,

    -- * Destructuring the Response
    CreateAssetModelResponse (..),
    newCreateAssetModelResponse,

    -- * Response Lenses
    createAssetModelResponse_httpStatus,
    createAssetModelResponse_assetModelId,
    createAssetModelResponse_assetModelArn,
    createAssetModelResponse_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:/ 'newCreateAssetModel' smart constructor.
data CreateAssetModel = CreateAssetModel'
  { -- | The composite asset models that are part of this asset model. Composite
    -- asset models are asset models that contain specific properties. Each
    -- composite model has a type that defines the properties that the
    -- composite model supports. Use composite asset models to define alarms on
    -- this asset model.
    CreateAssetModel -> Maybe [AssetModelCompositeModelDefinition]
assetModelCompositeModels :: Prelude.Maybe [AssetModelCompositeModelDefinition],
    -- | A description for the asset model.
    CreateAssetModel -> Maybe Text
assetModelDescription :: Prelude.Maybe Prelude.Text,
    -- | The hierarchy definitions of the asset model. Each hierarchy specifies
    -- an asset model whose assets can be children of any other assets created
    -- from this asset model. For more information, see
    -- <https://docs.aws.amazon.com/iot-sitewise/latest/userguide/asset-hierarchies.html Asset hierarchies>
    -- in the /IoT SiteWise User Guide/.
    --
    -- You can specify up to 10 hierarchies per asset model. For more
    -- information, see
    -- <https://docs.aws.amazon.com/iot-sitewise/latest/userguide/quotas.html Quotas>
    -- in the /IoT SiteWise User Guide/.
    CreateAssetModel -> Maybe [AssetModelHierarchyDefinition]
assetModelHierarchies :: Prelude.Maybe [AssetModelHierarchyDefinition],
    -- | The property definitions of the asset model. For more information, see
    -- <https://docs.aws.amazon.com/iot-sitewise/latest/userguide/asset-properties.html Asset properties>
    -- in the /IoT SiteWise User Guide/.
    --
    -- You can specify up to 200 properties per asset model. For more
    -- information, see
    -- <https://docs.aws.amazon.com/iot-sitewise/latest/userguide/quotas.html Quotas>
    -- in the /IoT SiteWise User Guide/.
    CreateAssetModel -> Maybe [AssetModelPropertyDefinition]
assetModelProperties :: Prelude.Maybe [AssetModelPropertyDefinition],
    -- | 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.
    CreateAssetModel -> Maybe Text
clientToken :: Prelude.Maybe Prelude.Text,
    -- | A list of key-value pairs that contain metadata for the asset model. 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/.
    CreateAssetModel -> Maybe (HashMap Text Text)
tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
    -- | A unique, friendly name for the asset model.
    CreateAssetModel -> Text
assetModelName :: Prelude.Text
  }
  deriving (CreateAssetModel -> CreateAssetModel -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateAssetModel -> CreateAssetModel -> Bool
$c/= :: CreateAssetModel -> CreateAssetModel -> Bool
== :: CreateAssetModel -> CreateAssetModel -> Bool
$c== :: CreateAssetModel -> CreateAssetModel -> Bool
Prelude.Eq, ReadPrec [CreateAssetModel]
ReadPrec CreateAssetModel
Int -> ReadS CreateAssetModel
ReadS [CreateAssetModel]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CreateAssetModel]
$creadListPrec :: ReadPrec [CreateAssetModel]
readPrec :: ReadPrec CreateAssetModel
$creadPrec :: ReadPrec CreateAssetModel
readList :: ReadS [CreateAssetModel]
$creadList :: ReadS [CreateAssetModel]
readsPrec :: Int -> ReadS CreateAssetModel
$creadsPrec :: Int -> ReadS CreateAssetModel
Prelude.Read, Int -> CreateAssetModel -> ShowS
[CreateAssetModel] -> ShowS
CreateAssetModel -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateAssetModel] -> ShowS
$cshowList :: [CreateAssetModel] -> ShowS
show :: CreateAssetModel -> String
$cshow :: CreateAssetModel -> String
showsPrec :: Int -> CreateAssetModel -> ShowS
$cshowsPrec :: Int -> CreateAssetModel -> ShowS
Prelude.Show, forall x. Rep CreateAssetModel x -> CreateAssetModel
forall x. CreateAssetModel -> Rep CreateAssetModel x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep CreateAssetModel x -> CreateAssetModel
$cfrom :: forall x. CreateAssetModel -> Rep CreateAssetModel x
Prelude.Generic)

-- |
-- Create a value of 'CreateAssetModel' 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', 'createAssetModel_assetModelCompositeModels' - The composite asset models that are part of this asset model. Composite
-- asset models are asset models that contain specific properties. Each
-- composite model has a type that defines the properties that the
-- composite model supports. Use composite asset models to define alarms on
-- this asset model.
--
-- 'assetModelDescription', 'createAssetModel_assetModelDescription' - A description for the asset model.
--
-- 'assetModelHierarchies', 'createAssetModel_assetModelHierarchies' - The hierarchy definitions of the asset model. Each hierarchy specifies
-- an asset model whose assets can be children of any other assets created
-- from this asset model. For more information, see
-- <https://docs.aws.amazon.com/iot-sitewise/latest/userguide/asset-hierarchies.html Asset hierarchies>
-- in the /IoT SiteWise User Guide/.
--
-- You can specify up to 10 hierarchies per asset model. For more
-- information, see
-- <https://docs.aws.amazon.com/iot-sitewise/latest/userguide/quotas.html Quotas>
-- in the /IoT SiteWise User Guide/.
--
-- 'assetModelProperties', 'createAssetModel_assetModelProperties' - The property definitions of the asset model. For more information, see
-- <https://docs.aws.amazon.com/iot-sitewise/latest/userguide/asset-properties.html Asset properties>
-- in the /IoT SiteWise User Guide/.
--
-- You can specify up to 200 properties per asset model. For more
-- information, see
-- <https://docs.aws.amazon.com/iot-sitewise/latest/userguide/quotas.html Quotas>
-- in the /IoT SiteWise User Guide/.
--
-- 'clientToken', 'createAssetModel_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', 'createAssetModel_tags' - A list of key-value pairs that contain metadata for the asset model. 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/.
--
-- 'assetModelName', 'createAssetModel_assetModelName' - A unique, friendly name for the asset model.
newCreateAssetModel ::
  -- | 'assetModelName'
  Prelude.Text ->
  CreateAssetModel
newCreateAssetModel :: Text -> CreateAssetModel
newCreateAssetModel Text
pAssetModelName_ =
  CreateAssetModel'
    { $sel:assetModelCompositeModels:CreateAssetModel' :: Maybe [AssetModelCompositeModelDefinition]
assetModelCompositeModels =
        forall a. Maybe a
Prelude.Nothing,
      $sel:assetModelDescription:CreateAssetModel' :: Maybe Text
assetModelDescription = forall a. Maybe a
Prelude.Nothing,
      $sel:assetModelHierarchies:CreateAssetModel' :: Maybe [AssetModelHierarchyDefinition]
assetModelHierarchies = forall a. Maybe a
Prelude.Nothing,
      $sel:assetModelProperties:CreateAssetModel' :: Maybe [AssetModelPropertyDefinition]
assetModelProperties = forall a. Maybe a
Prelude.Nothing,
      $sel:clientToken:CreateAssetModel' :: Maybe Text
clientToken = forall a. Maybe a
Prelude.Nothing,
      $sel:tags:CreateAssetModel' :: Maybe (HashMap Text Text)
tags = forall a. Maybe a
Prelude.Nothing,
      $sel:assetModelName:CreateAssetModel' :: Text
assetModelName = Text
pAssetModelName_
    }

-- | The composite asset models that are part of this asset model. Composite
-- asset models are asset models that contain specific properties. Each
-- composite model has a type that defines the properties that the
-- composite model supports. Use composite asset models to define alarms on
-- this asset model.
createAssetModel_assetModelCompositeModels :: Lens.Lens' CreateAssetModel (Prelude.Maybe [AssetModelCompositeModelDefinition])
createAssetModel_assetModelCompositeModels :: Lens' CreateAssetModel (Maybe [AssetModelCompositeModelDefinition])
createAssetModel_assetModelCompositeModels = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateAssetModel' {Maybe [AssetModelCompositeModelDefinition]
assetModelCompositeModels :: Maybe [AssetModelCompositeModelDefinition]
$sel:assetModelCompositeModels:CreateAssetModel' :: CreateAssetModel -> Maybe [AssetModelCompositeModelDefinition]
assetModelCompositeModels} -> Maybe [AssetModelCompositeModelDefinition]
assetModelCompositeModels) (\s :: CreateAssetModel
s@CreateAssetModel' {} Maybe [AssetModelCompositeModelDefinition]
a -> CreateAssetModel
s {$sel:assetModelCompositeModels:CreateAssetModel' :: Maybe [AssetModelCompositeModelDefinition]
assetModelCompositeModels = Maybe [AssetModelCompositeModelDefinition]
a} :: CreateAssetModel) 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 description for the asset model.
createAssetModel_assetModelDescription :: Lens.Lens' CreateAssetModel (Prelude.Maybe Prelude.Text)
createAssetModel_assetModelDescription :: Lens' CreateAssetModel (Maybe Text)
createAssetModel_assetModelDescription = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateAssetModel' {Maybe Text
assetModelDescription :: Maybe Text
$sel:assetModelDescription:CreateAssetModel' :: CreateAssetModel -> Maybe Text
assetModelDescription} -> Maybe Text
assetModelDescription) (\s :: CreateAssetModel
s@CreateAssetModel' {} Maybe Text
a -> CreateAssetModel
s {$sel:assetModelDescription:CreateAssetModel' :: Maybe Text
assetModelDescription = Maybe Text
a} :: CreateAssetModel)

-- | The hierarchy definitions of the asset model. Each hierarchy specifies
-- an asset model whose assets can be children of any other assets created
-- from this asset model. For more information, see
-- <https://docs.aws.amazon.com/iot-sitewise/latest/userguide/asset-hierarchies.html Asset hierarchies>
-- in the /IoT SiteWise User Guide/.
--
-- You can specify up to 10 hierarchies per asset model. For more
-- information, see
-- <https://docs.aws.amazon.com/iot-sitewise/latest/userguide/quotas.html Quotas>
-- in the /IoT SiteWise User Guide/.
createAssetModel_assetModelHierarchies :: Lens.Lens' CreateAssetModel (Prelude.Maybe [AssetModelHierarchyDefinition])
createAssetModel_assetModelHierarchies :: Lens' CreateAssetModel (Maybe [AssetModelHierarchyDefinition])
createAssetModel_assetModelHierarchies = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateAssetModel' {Maybe [AssetModelHierarchyDefinition]
assetModelHierarchies :: Maybe [AssetModelHierarchyDefinition]
$sel:assetModelHierarchies:CreateAssetModel' :: CreateAssetModel -> Maybe [AssetModelHierarchyDefinition]
assetModelHierarchies} -> Maybe [AssetModelHierarchyDefinition]
assetModelHierarchies) (\s :: CreateAssetModel
s@CreateAssetModel' {} Maybe [AssetModelHierarchyDefinition]
a -> CreateAssetModel
s {$sel:assetModelHierarchies:CreateAssetModel' :: Maybe [AssetModelHierarchyDefinition]
assetModelHierarchies = Maybe [AssetModelHierarchyDefinition]
a} :: CreateAssetModel) 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 property definitions of the asset model. For more information, see
-- <https://docs.aws.amazon.com/iot-sitewise/latest/userguide/asset-properties.html Asset properties>
-- in the /IoT SiteWise User Guide/.
--
-- You can specify up to 200 properties per asset model. For more
-- information, see
-- <https://docs.aws.amazon.com/iot-sitewise/latest/userguide/quotas.html Quotas>
-- in the /IoT SiteWise User Guide/.
createAssetModel_assetModelProperties :: Lens.Lens' CreateAssetModel (Prelude.Maybe [AssetModelPropertyDefinition])
createAssetModel_assetModelProperties :: Lens' CreateAssetModel (Maybe [AssetModelPropertyDefinition])
createAssetModel_assetModelProperties = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateAssetModel' {Maybe [AssetModelPropertyDefinition]
assetModelProperties :: Maybe [AssetModelPropertyDefinition]
$sel:assetModelProperties:CreateAssetModel' :: CreateAssetModel -> Maybe [AssetModelPropertyDefinition]
assetModelProperties} -> Maybe [AssetModelPropertyDefinition]
assetModelProperties) (\s :: CreateAssetModel
s@CreateAssetModel' {} Maybe [AssetModelPropertyDefinition]
a -> CreateAssetModel
s {$sel:assetModelProperties:CreateAssetModel' :: Maybe [AssetModelPropertyDefinition]
assetModelProperties = Maybe [AssetModelPropertyDefinition]
a} :: CreateAssetModel) 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 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.
createAssetModel_clientToken :: Lens.Lens' CreateAssetModel (Prelude.Maybe Prelude.Text)
createAssetModel_clientToken :: Lens' CreateAssetModel (Maybe Text)
createAssetModel_clientToken = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateAssetModel' {Maybe Text
clientToken :: Maybe Text
$sel:clientToken:CreateAssetModel' :: CreateAssetModel -> Maybe Text
clientToken} -> Maybe Text
clientToken) (\s :: CreateAssetModel
s@CreateAssetModel' {} Maybe Text
a -> CreateAssetModel
s {$sel:clientToken:CreateAssetModel' :: Maybe Text
clientToken = Maybe Text
a} :: CreateAssetModel)

-- | A list of key-value pairs that contain metadata for the asset model. 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/.
createAssetModel_tags :: Lens.Lens' CreateAssetModel (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
createAssetModel_tags :: Lens' CreateAssetModel (Maybe (HashMap Text Text))
createAssetModel_tags = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateAssetModel' {Maybe (HashMap Text Text)
tags :: Maybe (HashMap Text Text)
$sel:tags:CreateAssetModel' :: CreateAssetModel -> Maybe (HashMap Text Text)
tags} -> Maybe (HashMap Text Text)
tags) (\s :: CreateAssetModel
s@CreateAssetModel' {} Maybe (HashMap Text Text)
a -> CreateAssetModel
s {$sel:tags:CreateAssetModel' :: Maybe (HashMap Text Text)
tags = Maybe (HashMap Text Text)
a} :: CreateAssetModel) 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, friendly name for the asset model.
createAssetModel_assetModelName :: Lens.Lens' CreateAssetModel Prelude.Text
createAssetModel_assetModelName :: Lens' CreateAssetModel Text
createAssetModel_assetModelName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateAssetModel' {Text
assetModelName :: Text
$sel:assetModelName:CreateAssetModel' :: CreateAssetModel -> Text
assetModelName} -> Text
assetModelName) (\s :: CreateAssetModel
s@CreateAssetModel' {} Text
a -> CreateAssetModel
s {$sel:assetModelName:CreateAssetModel' :: Text
assetModelName = Text
a} :: CreateAssetModel)

instance Core.AWSRequest CreateAssetModel where
  type
    AWSResponse CreateAssetModel =
      CreateAssetModelResponse
  request :: (Service -> Service)
-> CreateAssetModel -> Request CreateAssetModel
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 CreateAssetModel
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse CreateAssetModel)))
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 -> AssetModelStatus -> CreateAssetModelResponse
CreateAssetModelResponse'
            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
"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
"assetModelStatus")
      )

instance Prelude.Hashable CreateAssetModel where
  hashWithSalt :: Int -> CreateAssetModel -> Int
hashWithSalt Int
_salt CreateAssetModel' {Maybe [AssetModelHierarchyDefinition]
Maybe [AssetModelPropertyDefinition]
Maybe [AssetModelCompositeModelDefinition]
Maybe Text
Maybe (HashMap Text Text)
Text
assetModelName :: Text
tags :: Maybe (HashMap Text Text)
clientToken :: Maybe Text
assetModelProperties :: Maybe [AssetModelPropertyDefinition]
assetModelHierarchies :: Maybe [AssetModelHierarchyDefinition]
assetModelDescription :: Maybe Text
assetModelCompositeModels :: Maybe [AssetModelCompositeModelDefinition]
$sel:assetModelName:CreateAssetModel' :: CreateAssetModel -> Text
$sel:tags:CreateAssetModel' :: CreateAssetModel -> Maybe (HashMap Text Text)
$sel:clientToken:CreateAssetModel' :: CreateAssetModel -> Maybe Text
$sel:assetModelProperties:CreateAssetModel' :: CreateAssetModel -> Maybe [AssetModelPropertyDefinition]
$sel:assetModelHierarchies:CreateAssetModel' :: CreateAssetModel -> Maybe [AssetModelHierarchyDefinition]
$sel:assetModelDescription:CreateAssetModel' :: CreateAssetModel -> Maybe Text
$sel:assetModelCompositeModels:CreateAssetModel' :: CreateAssetModel -> Maybe [AssetModelCompositeModelDefinition]
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [AssetModelCompositeModelDefinition]
assetModelCompositeModels
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
assetModelDescription
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [AssetModelHierarchyDefinition]
assetModelHierarchies
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [AssetModelPropertyDefinition]
assetModelProperties
      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
assetModelName

instance Prelude.NFData CreateAssetModel where
  rnf :: CreateAssetModel -> ()
rnf CreateAssetModel' {Maybe [AssetModelHierarchyDefinition]
Maybe [AssetModelPropertyDefinition]
Maybe [AssetModelCompositeModelDefinition]
Maybe Text
Maybe (HashMap Text Text)
Text
assetModelName :: Text
tags :: Maybe (HashMap Text Text)
clientToken :: Maybe Text
assetModelProperties :: Maybe [AssetModelPropertyDefinition]
assetModelHierarchies :: Maybe [AssetModelHierarchyDefinition]
assetModelDescription :: Maybe Text
assetModelCompositeModels :: Maybe [AssetModelCompositeModelDefinition]
$sel:assetModelName:CreateAssetModel' :: CreateAssetModel -> Text
$sel:tags:CreateAssetModel' :: CreateAssetModel -> Maybe (HashMap Text Text)
$sel:clientToken:CreateAssetModel' :: CreateAssetModel -> Maybe Text
$sel:assetModelProperties:CreateAssetModel' :: CreateAssetModel -> Maybe [AssetModelPropertyDefinition]
$sel:assetModelHierarchies:CreateAssetModel' :: CreateAssetModel -> Maybe [AssetModelHierarchyDefinition]
$sel:assetModelDescription:CreateAssetModel' :: CreateAssetModel -> Maybe Text
$sel:assetModelCompositeModels:CreateAssetModel' :: CreateAssetModel -> Maybe [AssetModelCompositeModelDefinition]
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe [AssetModelCompositeModelDefinition]
assetModelCompositeModels
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
assetModelDescription
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [AssetModelHierarchyDefinition]
assetModelHierarchies
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [AssetModelPropertyDefinition]
assetModelProperties
      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
assetModelName

instance Data.ToHeaders CreateAssetModel where
  toHeaders :: CreateAssetModel -> 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 CreateAssetModel where
  toJSON :: CreateAssetModel -> Value
toJSON CreateAssetModel' {Maybe [AssetModelHierarchyDefinition]
Maybe [AssetModelPropertyDefinition]
Maybe [AssetModelCompositeModelDefinition]
Maybe Text
Maybe (HashMap Text Text)
Text
assetModelName :: Text
tags :: Maybe (HashMap Text Text)
clientToken :: Maybe Text
assetModelProperties :: Maybe [AssetModelPropertyDefinition]
assetModelHierarchies :: Maybe [AssetModelHierarchyDefinition]
assetModelDescription :: Maybe Text
assetModelCompositeModels :: Maybe [AssetModelCompositeModelDefinition]
$sel:assetModelName:CreateAssetModel' :: CreateAssetModel -> Text
$sel:tags:CreateAssetModel' :: CreateAssetModel -> Maybe (HashMap Text Text)
$sel:clientToken:CreateAssetModel' :: CreateAssetModel -> Maybe Text
$sel:assetModelProperties:CreateAssetModel' :: CreateAssetModel -> Maybe [AssetModelPropertyDefinition]
$sel:assetModelHierarchies:CreateAssetModel' :: CreateAssetModel -> Maybe [AssetModelHierarchyDefinition]
$sel:assetModelDescription:CreateAssetModel' :: CreateAssetModel -> Maybe Text
$sel:assetModelCompositeModels:CreateAssetModel' :: CreateAssetModel -> Maybe [AssetModelCompositeModelDefinition]
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"assetModelCompositeModels" 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 [AssetModelCompositeModelDefinition]
assetModelCompositeModels,
            (Key
"assetModelDescription" 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
assetModelDescription,
            (Key
"assetModelHierarchies" 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 [AssetModelHierarchyDefinition]
assetModelHierarchies,
            (Key
"assetModelProperties" 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 [AssetModelPropertyDefinition]
assetModelProperties,
            (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
"assetModelName" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
assetModelName)
          ]
      )

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

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

-- | /See:/ 'newCreateAssetModelResponse' smart constructor.
data CreateAssetModelResponse = CreateAssetModelResponse'
  { -- | The response's http status code.
    CreateAssetModelResponse -> Int
httpStatus :: Prelude.Int,
    -- | The ID of the asset model. You can use this ID when you call other IoT
    -- SiteWise APIs.
    CreateAssetModelResponse -> 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}@
    CreateAssetModelResponse -> Text
assetModelArn :: Prelude.Text,
    -- | The status of the asset model, which contains a state (@CREATING@ after
    -- successfully calling this operation) and any error message.
    CreateAssetModelResponse -> AssetModelStatus
assetModelStatus :: AssetModelStatus
  }
  deriving (CreateAssetModelResponse -> CreateAssetModelResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateAssetModelResponse -> CreateAssetModelResponse -> Bool
$c/= :: CreateAssetModelResponse -> CreateAssetModelResponse -> Bool
== :: CreateAssetModelResponse -> CreateAssetModelResponse -> Bool
$c== :: CreateAssetModelResponse -> CreateAssetModelResponse -> Bool
Prelude.Eq, ReadPrec [CreateAssetModelResponse]
ReadPrec CreateAssetModelResponse
Int -> ReadS CreateAssetModelResponse
ReadS [CreateAssetModelResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CreateAssetModelResponse]
$creadListPrec :: ReadPrec [CreateAssetModelResponse]
readPrec :: ReadPrec CreateAssetModelResponse
$creadPrec :: ReadPrec CreateAssetModelResponse
readList :: ReadS [CreateAssetModelResponse]
$creadList :: ReadS [CreateAssetModelResponse]
readsPrec :: Int -> ReadS CreateAssetModelResponse
$creadsPrec :: Int -> ReadS CreateAssetModelResponse
Prelude.Read, Int -> CreateAssetModelResponse -> ShowS
[CreateAssetModelResponse] -> ShowS
CreateAssetModelResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateAssetModelResponse] -> ShowS
$cshowList :: [CreateAssetModelResponse] -> ShowS
show :: CreateAssetModelResponse -> String
$cshow :: CreateAssetModelResponse -> String
showsPrec :: Int -> CreateAssetModelResponse -> ShowS
$cshowsPrec :: Int -> CreateAssetModelResponse -> ShowS
Prelude.Show, forall x.
Rep CreateAssetModelResponse x -> CreateAssetModelResponse
forall x.
CreateAssetModelResponse -> Rep CreateAssetModelResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep CreateAssetModelResponse x -> CreateAssetModelResponse
$cfrom :: forall x.
CreateAssetModelResponse -> Rep CreateAssetModelResponse x
Prelude.Generic)

-- |
-- Create a value of 'CreateAssetModelResponse' 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', 'createAssetModelResponse_httpStatus' - The response's http status code.
--
-- 'assetModelId', 'createAssetModelResponse_assetModelId' - The ID of the asset model. You can use this ID when you call other IoT
-- SiteWise APIs.
--
-- 'assetModelArn', 'createAssetModelResponse_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}@
--
-- 'assetModelStatus', 'createAssetModelResponse_assetModelStatus' - The status of the asset model, which contains a state (@CREATING@ after
-- successfully calling this operation) and any error message.
newCreateAssetModelResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  -- | 'assetModelId'
  Prelude.Text ->
  -- | 'assetModelArn'
  Prelude.Text ->
  -- | 'assetModelStatus'
  AssetModelStatus ->
  CreateAssetModelResponse
newCreateAssetModelResponse :: Int -> Text -> Text -> AssetModelStatus -> CreateAssetModelResponse
newCreateAssetModelResponse
  Int
pHttpStatus_
  Text
pAssetModelId_
  Text
pAssetModelArn_
  AssetModelStatus
pAssetModelStatus_ =
    CreateAssetModelResponse'
      { $sel:httpStatus:CreateAssetModelResponse' :: Int
httpStatus =
          Int
pHttpStatus_,
        $sel:assetModelId:CreateAssetModelResponse' :: Text
assetModelId = Text
pAssetModelId_,
        $sel:assetModelArn:CreateAssetModelResponse' :: Text
assetModelArn = Text
pAssetModelArn_,
        $sel:assetModelStatus:CreateAssetModelResponse' :: AssetModelStatus
assetModelStatus = AssetModelStatus
pAssetModelStatus_
      }

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

-- | The ID of the asset model. You can use this ID when you call other IoT
-- SiteWise APIs.
createAssetModelResponse_assetModelId :: Lens.Lens' CreateAssetModelResponse Prelude.Text
createAssetModelResponse_assetModelId :: Lens' CreateAssetModelResponse Text
createAssetModelResponse_assetModelId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateAssetModelResponse' {Text
assetModelId :: Text
$sel:assetModelId:CreateAssetModelResponse' :: CreateAssetModelResponse -> Text
assetModelId} -> Text
assetModelId) (\s :: CreateAssetModelResponse
s@CreateAssetModelResponse' {} Text
a -> CreateAssetModelResponse
s {$sel:assetModelId:CreateAssetModelResponse' :: Text
assetModelId = Text
a} :: CreateAssetModelResponse)

-- | 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}@
createAssetModelResponse_assetModelArn :: Lens.Lens' CreateAssetModelResponse Prelude.Text
createAssetModelResponse_assetModelArn :: Lens' CreateAssetModelResponse Text
createAssetModelResponse_assetModelArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateAssetModelResponse' {Text
assetModelArn :: Text
$sel:assetModelArn:CreateAssetModelResponse' :: CreateAssetModelResponse -> Text
assetModelArn} -> Text
assetModelArn) (\s :: CreateAssetModelResponse
s@CreateAssetModelResponse' {} Text
a -> CreateAssetModelResponse
s {$sel:assetModelArn:CreateAssetModelResponse' :: Text
assetModelArn = Text
a} :: CreateAssetModelResponse)

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

instance Prelude.NFData CreateAssetModelResponse where
  rnf :: CreateAssetModelResponse -> ()
rnf CreateAssetModelResponse' {Int
Text
AssetModelStatus
assetModelStatus :: AssetModelStatus
assetModelArn :: Text
assetModelId :: Text
httpStatus :: Int
$sel:assetModelStatus:CreateAssetModelResponse' :: CreateAssetModelResponse -> AssetModelStatus
$sel:assetModelArn:CreateAssetModelResponse' :: CreateAssetModelResponse -> Text
$sel:assetModelId:CreateAssetModelResponse' :: CreateAssetModelResponse -> Text
$sel:httpStatus:CreateAssetModelResponse' :: CreateAssetModelResponse -> 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
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 AssetModelStatus
assetModelStatus