{-# 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.UpdateAssetModel
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Updates an asset model and all of the assets that were created from the
-- model. Each asset created from the model inherits the updated asset
-- model\'s property and hierarchy definitions. For more information, see
-- <https://docs.aws.amazon.com/iot-sitewise/latest/userguide/update-assets-and-models.html Updating assets and models>
-- in the /IoT SiteWise User Guide/.
--
-- This operation overwrites the existing model with the provided model. To
-- avoid deleting your asset model\'s properties or hierarchies, you must
-- include their IDs and definitions in the updated asset model payload.
-- For more information, see
-- <https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_DescribeAssetModel.html DescribeAssetModel>.
--
-- If you remove a property from an asset model, IoT SiteWise deletes all
-- previous data for that property. If you remove a hierarchy definition
-- from an asset model, IoT SiteWise disassociates every asset associated
-- with that hierarchy. You can\'t change the type or data type of an
-- existing property.
module Amazonka.IoTSiteWise.UpdateAssetModel
  ( -- * Creating a Request
    UpdateAssetModel (..),
    newUpdateAssetModel,

    -- * Request Lenses
    updateAssetModel_assetModelCompositeModels,
    updateAssetModel_assetModelDescription,
    updateAssetModel_assetModelHierarchies,
    updateAssetModel_assetModelProperties,
    updateAssetModel_clientToken,
    updateAssetModel_assetModelId,
    updateAssetModel_assetModelName,

    -- * Destructuring the Response
    UpdateAssetModelResponse (..),
    newUpdateAssetModelResponse,

    -- * Response Lenses
    updateAssetModelResponse_httpStatus,
    updateAssetModelResponse_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:/ 'newUpdateAssetModel' smart constructor.
data UpdateAssetModel = UpdateAssetModel'
  { -- | 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.
    UpdateAssetModel -> Maybe [AssetModelCompositeModel]
assetModelCompositeModels :: Prelude.Maybe [AssetModelCompositeModel],
    -- | A description for the asset model.
    UpdateAssetModel -> Maybe Text
assetModelDescription :: Prelude.Maybe Prelude.Text,
    -- | The updated 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/.
    UpdateAssetModel -> Maybe [AssetModelHierarchy]
assetModelHierarchies :: Prelude.Maybe [AssetModelHierarchy],
    -- | The updated 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/.
    UpdateAssetModel -> Maybe [AssetModelProperty]
assetModelProperties :: Prelude.Maybe [AssetModelProperty],
    -- | 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.
    UpdateAssetModel -> Maybe Text
clientToken :: Prelude.Maybe Prelude.Text,
    -- | The ID of the asset model to update.
    UpdateAssetModel -> Text
assetModelId :: Prelude.Text,
    -- | A unique, friendly name for the asset model.
    UpdateAssetModel -> Text
assetModelName :: Prelude.Text
  }
  deriving (UpdateAssetModel -> UpdateAssetModel -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UpdateAssetModel -> UpdateAssetModel -> Bool
$c/= :: UpdateAssetModel -> UpdateAssetModel -> Bool
== :: UpdateAssetModel -> UpdateAssetModel -> Bool
$c== :: UpdateAssetModel -> UpdateAssetModel -> Bool
Prelude.Eq, ReadPrec [UpdateAssetModel]
ReadPrec UpdateAssetModel
Int -> ReadS UpdateAssetModel
ReadS [UpdateAssetModel]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [UpdateAssetModel]
$creadListPrec :: ReadPrec [UpdateAssetModel]
readPrec :: ReadPrec UpdateAssetModel
$creadPrec :: ReadPrec UpdateAssetModel
readList :: ReadS [UpdateAssetModel]
$creadList :: ReadS [UpdateAssetModel]
readsPrec :: Int -> ReadS UpdateAssetModel
$creadsPrec :: Int -> ReadS UpdateAssetModel
Prelude.Read, Int -> UpdateAssetModel -> ShowS
[UpdateAssetModel] -> ShowS
UpdateAssetModel -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UpdateAssetModel] -> ShowS
$cshowList :: [UpdateAssetModel] -> ShowS
show :: UpdateAssetModel -> String
$cshow :: UpdateAssetModel -> String
showsPrec :: Int -> UpdateAssetModel -> ShowS
$cshowsPrec :: Int -> UpdateAssetModel -> ShowS
Prelude.Show, forall x. Rep UpdateAssetModel x -> UpdateAssetModel
forall x. UpdateAssetModel -> Rep UpdateAssetModel x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep UpdateAssetModel x -> UpdateAssetModel
$cfrom :: forall x. UpdateAssetModel -> Rep UpdateAssetModel x
Prelude.Generic)

-- |
-- Create a value of 'UpdateAssetModel' 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', 'updateAssetModel_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', 'updateAssetModel_assetModelDescription' - A description for the asset model.
--
-- 'assetModelHierarchies', 'updateAssetModel_assetModelHierarchies' - The updated 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', 'updateAssetModel_assetModelProperties' - The updated 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', 'updateAssetModel_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.
--
-- 'assetModelId', 'updateAssetModel_assetModelId' - The ID of the asset model to update.
--
-- 'assetModelName', 'updateAssetModel_assetModelName' - A unique, friendly name for the asset model.
newUpdateAssetModel ::
  -- | 'assetModelId'
  Prelude.Text ->
  -- | 'assetModelName'
  Prelude.Text ->
  UpdateAssetModel
newUpdateAssetModel :: Text -> Text -> UpdateAssetModel
newUpdateAssetModel Text
pAssetModelId_ Text
pAssetModelName_ =
  UpdateAssetModel'
    { $sel:assetModelCompositeModels:UpdateAssetModel' :: Maybe [AssetModelCompositeModel]
assetModelCompositeModels =
        forall a. Maybe a
Prelude.Nothing,
      $sel:assetModelDescription:UpdateAssetModel' :: Maybe Text
assetModelDescription = forall a. Maybe a
Prelude.Nothing,
      $sel:assetModelHierarchies:UpdateAssetModel' :: Maybe [AssetModelHierarchy]
assetModelHierarchies = forall a. Maybe a
Prelude.Nothing,
      $sel:assetModelProperties:UpdateAssetModel' :: Maybe [AssetModelProperty]
assetModelProperties = forall a. Maybe a
Prelude.Nothing,
      $sel:clientToken:UpdateAssetModel' :: Maybe Text
clientToken = forall a. Maybe a
Prelude.Nothing,
      $sel:assetModelId:UpdateAssetModel' :: Text
assetModelId = Text
pAssetModelId_,
      $sel:assetModelName:UpdateAssetModel' :: 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.
updateAssetModel_assetModelCompositeModels :: Lens.Lens' UpdateAssetModel (Prelude.Maybe [AssetModelCompositeModel])
updateAssetModel_assetModelCompositeModels :: Lens' UpdateAssetModel (Maybe [AssetModelCompositeModel])
updateAssetModel_assetModelCompositeModels = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateAssetModel' {Maybe [AssetModelCompositeModel]
assetModelCompositeModels :: Maybe [AssetModelCompositeModel]
$sel:assetModelCompositeModels:UpdateAssetModel' :: UpdateAssetModel -> Maybe [AssetModelCompositeModel]
assetModelCompositeModels} -> Maybe [AssetModelCompositeModel]
assetModelCompositeModels) (\s :: UpdateAssetModel
s@UpdateAssetModel' {} Maybe [AssetModelCompositeModel]
a -> UpdateAssetModel
s {$sel:assetModelCompositeModels:UpdateAssetModel' :: Maybe [AssetModelCompositeModel]
assetModelCompositeModels = Maybe [AssetModelCompositeModel]
a} :: UpdateAssetModel) 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.
updateAssetModel_assetModelDescription :: Lens.Lens' UpdateAssetModel (Prelude.Maybe Prelude.Text)
updateAssetModel_assetModelDescription :: Lens' UpdateAssetModel (Maybe Text)
updateAssetModel_assetModelDescription = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateAssetModel' {Maybe Text
assetModelDescription :: Maybe Text
$sel:assetModelDescription:UpdateAssetModel' :: UpdateAssetModel -> Maybe Text
assetModelDescription} -> Maybe Text
assetModelDescription) (\s :: UpdateAssetModel
s@UpdateAssetModel' {} Maybe Text
a -> UpdateAssetModel
s {$sel:assetModelDescription:UpdateAssetModel' :: Maybe Text
assetModelDescription = Maybe Text
a} :: UpdateAssetModel)

-- | The updated 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/.
updateAssetModel_assetModelHierarchies :: Lens.Lens' UpdateAssetModel (Prelude.Maybe [AssetModelHierarchy])
updateAssetModel_assetModelHierarchies :: Lens' UpdateAssetModel (Maybe [AssetModelHierarchy])
updateAssetModel_assetModelHierarchies = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateAssetModel' {Maybe [AssetModelHierarchy]
assetModelHierarchies :: Maybe [AssetModelHierarchy]
$sel:assetModelHierarchies:UpdateAssetModel' :: UpdateAssetModel -> Maybe [AssetModelHierarchy]
assetModelHierarchies} -> Maybe [AssetModelHierarchy]
assetModelHierarchies) (\s :: UpdateAssetModel
s@UpdateAssetModel' {} Maybe [AssetModelHierarchy]
a -> UpdateAssetModel
s {$sel:assetModelHierarchies:UpdateAssetModel' :: Maybe [AssetModelHierarchy]
assetModelHierarchies = Maybe [AssetModelHierarchy]
a} :: UpdateAssetModel) 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 updated 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/.
updateAssetModel_assetModelProperties :: Lens.Lens' UpdateAssetModel (Prelude.Maybe [AssetModelProperty])
updateAssetModel_assetModelProperties :: Lens' UpdateAssetModel (Maybe [AssetModelProperty])
updateAssetModel_assetModelProperties = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateAssetModel' {Maybe [AssetModelProperty]
assetModelProperties :: Maybe [AssetModelProperty]
$sel:assetModelProperties:UpdateAssetModel' :: UpdateAssetModel -> Maybe [AssetModelProperty]
assetModelProperties} -> Maybe [AssetModelProperty]
assetModelProperties) (\s :: UpdateAssetModel
s@UpdateAssetModel' {} Maybe [AssetModelProperty]
a -> UpdateAssetModel
s {$sel:assetModelProperties:UpdateAssetModel' :: Maybe [AssetModelProperty]
assetModelProperties = Maybe [AssetModelProperty]
a} :: UpdateAssetModel) 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.
updateAssetModel_clientToken :: Lens.Lens' UpdateAssetModel (Prelude.Maybe Prelude.Text)
updateAssetModel_clientToken :: Lens' UpdateAssetModel (Maybe Text)
updateAssetModel_clientToken = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateAssetModel' {Maybe Text
clientToken :: Maybe Text
$sel:clientToken:UpdateAssetModel' :: UpdateAssetModel -> Maybe Text
clientToken} -> Maybe Text
clientToken) (\s :: UpdateAssetModel
s@UpdateAssetModel' {} Maybe Text
a -> UpdateAssetModel
s {$sel:clientToken:UpdateAssetModel' :: Maybe Text
clientToken = Maybe Text
a} :: UpdateAssetModel)

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

-- | A unique, friendly name for the asset model.
updateAssetModel_assetModelName :: Lens.Lens' UpdateAssetModel Prelude.Text
updateAssetModel_assetModelName :: Lens' UpdateAssetModel Text
updateAssetModel_assetModelName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateAssetModel' {Text
assetModelName :: Text
$sel:assetModelName:UpdateAssetModel' :: UpdateAssetModel -> Text
assetModelName} -> Text
assetModelName) (\s :: UpdateAssetModel
s@UpdateAssetModel' {} Text
a -> UpdateAssetModel
s {$sel:assetModelName:UpdateAssetModel' :: Text
assetModelName = Text
a} :: UpdateAssetModel)

instance Core.AWSRequest UpdateAssetModel where
  type
    AWSResponse UpdateAssetModel =
      UpdateAssetModelResponse
  request :: (Service -> Service)
-> UpdateAssetModel -> Request UpdateAssetModel
request Service -> Service
overrides =
    forall a. (ToRequest a, ToJSON a) => Service -> a -> Request a
Request.putJSON (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy UpdateAssetModel
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse UpdateAssetModel)))
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 -> AssetModelStatus -> UpdateAssetModelResponse
UpdateAssetModelResponse'
            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
"assetModelStatus")
      )

instance Prelude.Hashable UpdateAssetModel where
  hashWithSalt :: Int -> UpdateAssetModel -> Int
hashWithSalt Int
_salt UpdateAssetModel' {Maybe [AssetModelHierarchy]
Maybe [AssetModelProperty]
Maybe [AssetModelCompositeModel]
Maybe Text
Text
assetModelName :: Text
assetModelId :: Text
clientToken :: Maybe Text
assetModelProperties :: Maybe [AssetModelProperty]
assetModelHierarchies :: Maybe [AssetModelHierarchy]
assetModelDescription :: Maybe Text
assetModelCompositeModels :: Maybe [AssetModelCompositeModel]
$sel:assetModelName:UpdateAssetModel' :: UpdateAssetModel -> Text
$sel:assetModelId:UpdateAssetModel' :: UpdateAssetModel -> Text
$sel:clientToken:UpdateAssetModel' :: UpdateAssetModel -> Maybe Text
$sel:assetModelProperties:UpdateAssetModel' :: UpdateAssetModel -> Maybe [AssetModelProperty]
$sel:assetModelHierarchies:UpdateAssetModel' :: UpdateAssetModel -> Maybe [AssetModelHierarchy]
$sel:assetModelDescription:UpdateAssetModel' :: UpdateAssetModel -> Maybe Text
$sel:assetModelCompositeModels:UpdateAssetModel' :: UpdateAssetModel -> Maybe [AssetModelCompositeModel]
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [AssetModelCompositeModel]
assetModelCompositeModels
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
assetModelDescription
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [AssetModelHierarchy]
assetModelHierarchies
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [AssetModelProperty]
assetModelProperties
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
clientToken
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
assetModelId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
assetModelName

instance Prelude.NFData UpdateAssetModel where
  rnf :: UpdateAssetModel -> ()
rnf UpdateAssetModel' {Maybe [AssetModelHierarchy]
Maybe [AssetModelProperty]
Maybe [AssetModelCompositeModel]
Maybe Text
Text
assetModelName :: Text
assetModelId :: Text
clientToken :: Maybe Text
assetModelProperties :: Maybe [AssetModelProperty]
assetModelHierarchies :: Maybe [AssetModelHierarchy]
assetModelDescription :: Maybe Text
assetModelCompositeModels :: Maybe [AssetModelCompositeModel]
$sel:assetModelName:UpdateAssetModel' :: UpdateAssetModel -> Text
$sel:assetModelId:UpdateAssetModel' :: UpdateAssetModel -> Text
$sel:clientToken:UpdateAssetModel' :: UpdateAssetModel -> Maybe Text
$sel:assetModelProperties:UpdateAssetModel' :: UpdateAssetModel -> Maybe [AssetModelProperty]
$sel:assetModelHierarchies:UpdateAssetModel' :: UpdateAssetModel -> Maybe [AssetModelHierarchy]
$sel:assetModelDescription:UpdateAssetModel' :: UpdateAssetModel -> Maybe Text
$sel:assetModelCompositeModels:UpdateAssetModel' :: UpdateAssetModel -> 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 Maybe Text
assetModelDescription
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [AssetModelHierarchy]
assetModelHierarchies
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [AssetModelProperty]
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 Text
assetModelId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
assetModelName

instance Data.ToHeaders UpdateAssetModel where
  toHeaders :: UpdateAssetModel -> 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 UpdateAssetModel where
  toJSON :: UpdateAssetModel -> Value
toJSON UpdateAssetModel' {Maybe [AssetModelHierarchy]
Maybe [AssetModelProperty]
Maybe [AssetModelCompositeModel]
Maybe Text
Text
assetModelName :: Text
assetModelId :: Text
clientToken :: Maybe Text
assetModelProperties :: Maybe [AssetModelProperty]
assetModelHierarchies :: Maybe [AssetModelHierarchy]
assetModelDescription :: Maybe Text
assetModelCompositeModels :: Maybe [AssetModelCompositeModel]
$sel:assetModelName:UpdateAssetModel' :: UpdateAssetModel -> Text
$sel:assetModelId:UpdateAssetModel' :: UpdateAssetModel -> Text
$sel:clientToken:UpdateAssetModel' :: UpdateAssetModel -> Maybe Text
$sel:assetModelProperties:UpdateAssetModel' :: UpdateAssetModel -> Maybe [AssetModelProperty]
$sel:assetModelHierarchies:UpdateAssetModel' :: UpdateAssetModel -> Maybe [AssetModelHierarchy]
$sel:assetModelDescription:UpdateAssetModel' :: UpdateAssetModel -> Maybe Text
$sel:assetModelCompositeModels:UpdateAssetModel' :: UpdateAssetModel -> Maybe [AssetModelCompositeModel]
..} =
    [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 [AssetModelCompositeModel]
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 [AssetModelHierarchy]
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 [AssetModelProperty]
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,
            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 UpdateAssetModel where
  toPath :: UpdateAssetModel -> ByteString
toPath UpdateAssetModel' {Maybe [AssetModelHierarchy]
Maybe [AssetModelProperty]
Maybe [AssetModelCompositeModel]
Maybe Text
Text
assetModelName :: Text
assetModelId :: Text
clientToken :: Maybe Text
assetModelProperties :: Maybe [AssetModelProperty]
assetModelHierarchies :: Maybe [AssetModelHierarchy]
assetModelDescription :: Maybe Text
assetModelCompositeModels :: Maybe [AssetModelCompositeModel]
$sel:assetModelName:UpdateAssetModel' :: UpdateAssetModel -> Text
$sel:assetModelId:UpdateAssetModel' :: UpdateAssetModel -> Text
$sel:clientToken:UpdateAssetModel' :: UpdateAssetModel -> Maybe Text
$sel:assetModelProperties:UpdateAssetModel' :: UpdateAssetModel -> Maybe [AssetModelProperty]
$sel:assetModelHierarchies:UpdateAssetModel' :: UpdateAssetModel -> Maybe [AssetModelHierarchy]
$sel:assetModelDescription:UpdateAssetModel' :: UpdateAssetModel -> Maybe Text
$sel:assetModelCompositeModels:UpdateAssetModel' :: UpdateAssetModel -> Maybe [AssetModelCompositeModel]
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ByteString
"/asset-models/", forall a. ToByteString a => a -> ByteString
Data.toBS Text
assetModelId]

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

-- | /See:/ 'newUpdateAssetModelResponse' smart constructor.
data UpdateAssetModelResponse = UpdateAssetModelResponse'
  { -- | The response's http status code.
    UpdateAssetModelResponse -> Int
httpStatus :: Prelude.Int,
    -- | The status of the asset model, which contains a state (@UPDATING@ after
    -- successfully calling this operation) and any error message.
    UpdateAssetModelResponse -> AssetModelStatus
assetModelStatus :: AssetModelStatus
  }
  deriving (UpdateAssetModelResponse -> UpdateAssetModelResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UpdateAssetModelResponse -> UpdateAssetModelResponse -> Bool
$c/= :: UpdateAssetModelResponse -> UpdateAssetModelResponse -> Bool
== :: UpdateAssetModelResponse -> UpdateAssetModelResponse -> Bool
$c== :: UpdateAssetModelResponse -> UpdateAssetModelResponse -> Bool
Prelude.Eq, ReadPrec [UpdateAssetModelResponse]
ReadPrec UpdateAssetModelResponse
Int -> ReadS UpdateAssetModelResponse
ReadS [UpdateAssetModelResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [UpdateAssetModelResponse]
$creadListPrec :: ReadPrec [UpdateAssetModelResponse]
readPrec :: ReadPrec UpdateAssetModelResponse
$creadPrec :: ReadPrec UpdateAssetModelResponse
readList :: ReadS [UpdateAssetModelResponse]
$creadList :: ReadS [UpdateAssetModelResponse]
readsPrec :: Int -> ReadS UpdateAssetModelResponse
$creadsPrec :: Int -> ReadS UpdateAssetModelResponse
Prelude.Read, Int -> UpdateAssetModelResponse -> ShowS
[UpdateAssetModelResponse] -> ShowS
UpdateAssetModelResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UpdateAssetModelResponse] -> ShowS
$cshowList :: [UpdateAssetModelResponse] -> ShowS
show :: UpdateAssetModelResponse -> String
$cshow :: UpdateAssetModelResponse -> String
showsPrec :: Int -> UpdateAssetModelResponse -> ShowS
$cshowsPrec :: Int -> UpdateAssetModelResponse -> ShowS
Prelude.Show, forall x.
Rep UpdateAssetModelResponse x -> UpdateAssetModelResponse
forall x.
UpdateAssetModelResponse -> Rep UpdateAssetModelResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep UpdateAssetModelResponse x -> UpdateAssetModelResponse
$cfrom :: forall x.
UpdateAssetModelResponse -> Rep UpdateAssetModelResponse x
Prelude.Generic)

-- |
-- Create a value of 'UpdateAssetModelResponse' 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', 'updateAssetModelResponse_httpStatus' - The response's http status code.
--
-- 'assetModelStatus', 'updateAssetModelResponse_assetModelStatus' - The status of the asset model, which contains a state (@UPDATING@ after
-- successfully calling this operation) and any error message.
newUpdateAssetModelResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  -- | 'assetModelStatus'
  AssetModelStatus ->
  UpdateAssetModelResponse
newUpdateAssetModelResponse :: Int -> AssetModelStatus -> UpdateAssetModelResponse
newUpdateAssetModelResponse
  Int
pHttpStatus_
  AssetModelStatus
pAssetModelStatus_ =
    UpdateAssetModelResponse'
      { $sel:httpStatus:UpdateAssetModelResponse' :: Int
httpStatus =
          Int
pHttpStatus_,
        $sel:assetModelStatus:UpdateAssetModelResponse' :: AssetModelStatus
assetModelStatus = AssetModelStatus
pAssetModelStatus_
      }

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

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

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