{-# 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.AssociateTimeSeriesToAssetProperty
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Associates a time series (data stream) with an asset property.
module Amazonka.IoTSiteWise.AssociateTimeSeriesToAssetProperty
  ( -- * Creating a Request
    AssociateTimeSeriesToAssetProperty (..),
    newAssociateTimeSeriesToAssetProperty,

    -- * Request Lenses
    associateTimeSeriesToAssetProperty_clientToken,
    associateTimeSeriesToAssetProperty_alias,
    associateTimeSeriesToAssetProperty_assetId,
    associateTimeSeriesToAssetProperty_propertyId,

    -- * Destructuring the Response
    AssociateTimeSeriesToAssetPropertyResponse (..),
    newAssociateTimeSeriesToAssetPropertyResponse,
  )
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:/ 'newAssociateTimeSeriesToAssetProperty' smart constructor.
data AssociateTimeSeriesToAssetProperty = AssociateTimeSeriesToAssetProperty'
  { -- | 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.
    AssociateTimeSeriesToAssetProperty -> Maybe Text
clientToken :: Prelude.Maybe Prelude.Text,
    -- | The alias that identifies the time series.
    AssociateTimeSeriesToAssetProperty -> Text
alias :: Prelude.Text,
    -- | The ID of the asset in which the asset property was created.
    AssociateTimeSeriesToAssetProperty -> Text
assetId :: Prelude.Text,
    -- | The ID of the asset property.
    AssociateTimeSeriesToAssetProperty -> Text
propertyId :: Prelude.Text
  }
  deriving (AssociateTimeSeriesToAssetProperty
-> AssociateTimeSeriesToAssetProperty -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: AssociateTimeSeriesToAssetProperty
-> AssociateTimeSeriesToAssetProperty -> Bool
$c/= :: AssociateTimeSeriesToAssetProperty
-> AssociateTimeSeriesToAssetProperty -> Bool
== :: AssociateTimeSeriesToAssetProperty
-> AssociateTimeSeriesToAssetProperty -> Bool
$c== :: AssociateTimeSeriesToAssetProperty
-> AssociateTimeSeriesToAssetProperty -> Bool
Prelude.Eq, ReadPrec [AssociateTimeSeriesToAssetProperty]
ReadPrec AssociateTimeSeriesToAssetProperty
Int -> ReadS AssociateTimeSeriesToAssetProperty
ReadS [AssociateTimeSeriesToAssetProperty]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [AssociateTimeSeriesToAssetProperty]
$creadListPrec :: ReadPrec [AssociateTimeSeriesToAssetProperty]
readPrec :: ReadPrec AssociateTimeSeriesToAssetProperty
$creadPrec :: ReadPrec AssociateTimeSeriesToAssetProperty
readList :: ReadS [AssociateTimeSeriesToAssetProperty]
$creadList :: ReadS [AssociateTimeSeriesToAssetProperty]
readsPrec :: Int -> ReadS AssociateTimeSeriesToAssetProperty
$creadsPrec :: Int -> ReadS AssociateTimeSeriesToAssetProperty
Prelude.Read, Int -> AssociateTimeSeriesToAssetProperty -> ShowS
[AssociateTimeSeriesToAssetProperty] -> ShowS
AssociateTimeSeriesToAssetProperty -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [AssociateTimeSeriesToAssetProperty] -> ShowS
$cshowList :: [AssociateTimeSeriesToAssetProperty] -> ShowS
show :: AssociateTimeSeriesToAssetProperty -> String
$cshow :: AssociateTimeSeriesToAssetProperty -> String
showsPrec :: Int -> AssociateTimeSeriesToAssetProperty -> ShowS
$cshowsPrec :: Int -> AssociateTimeSeriesToAssetProperty -> ShowS
Prelude.Show, forall x.
Rep AssociateTimeSeriesToAssetProperty x
-> AssociateTimeSeriesToAssetProperty
forall x.
AssociateTimeSeriesToAssetProperty
-> Rep AssociateTimeSeriesToAssetProperty x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep AssociateTimeSeriesToAssetProperty x
-> AssociateTimeSeriesToAssetProperty
$cfrom :: forall x.
AssociateTimeSeriesToAssetProperty
-> Rep AssociateTimeSeriesToAssetProperty x
Prelude.Generic)

-- |
-- Create a value of 'AssociateTimeSeriesToAssetProperty' 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:
--
-- 'clientToken', 'associateTimeSeriesToAssetProperty_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.
--
-- 'alias', 'associateTimeSeriesToAssetProperty_alias' - The alias that identifies the time series.
--
-- 'assetId', 'associateTimeSeriesToAssetProperty_assetId' - The ID of the asset in which the asset property was created.
--
-- 'propertyId', 'associateTimeSeriesToAssetProperty_propertyId' - The ID of the asset property.
newAssociateTimeSeriesToAssetProperty ::
  -- | 'alias'
  Prelude.Text ->
  -- | 'assetId'
  Prelude.Text ->
  -- | 'propertyId'
  Prelude.Text ->
  AssociateTimeSeriesToAssetProperty
newAssociateTimeSeriesToAssetProperty :: Text -> Text -> Text -> AssociateTimeSeriesToAssetProperty
newAssociateTimeSeriesToAssetProperty
  Text
pAlias_
  Text
pAssetId_
  Text
pPropertyId_ =
    AssociateTimeSeriesToAssetProperty'
      { $sel:clientToken:AssociateTimeSeriesToAssetProperty' :: Maybe Text
clientToken =
          forall a. Maybe a
Prelude.Nothing,
        $sel:alias:AssociateTimeSeriesToAssetProperty' :: Text
alias = Text
pAlias_,
        $sel:assetId:AssociateTimeSeriesToAssetProperty' :: Text
assetId = Text
pAssetId_,
        $sel:propertyId:AssociateTimeSeriesToAssetProperty' :: Text
propertyId = Text
pPropertyId_
      }

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

-- | The alias that identifies the time series.
associateTimeSeriesToAssetProperty_alias :: Lens.Lens' AssociateTimeSeriesToAssetProperty Prelude.Text
associateTimeSeriesToAssetProperty_alias :: Lens' AssociateTimeSeriesToAssetProperty Text
associateTimeSeriesToAssetProperty_alias = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AssociateTimeSeriesToAssetProperty' {Text
alias :: Text
$sel:alias:AssociateTimeSeriesToAssetProperty' :: AssociateTimeSeriesToAssetProperty -> Text
alias} -> Text
alias) (\s :: AssociateTimeSeriesToAssetProperty
s@AssociateTimeSeriesToAssetProperty' {} Text
a -> AssociateTimeSeriesToAssetProperty
s {$sel:alias:AssociateTimeSeriesToAssetProperty' :: Text
alias = Text
a} :: AssociateTimeSeriesToAssetProperty)

-- | The ID of the asset in which the asset property was created.
associateTimeSeriesToAssetProperty_assetId :: Lens.Lens' AssociateTimeSeriesToAssetProperty Prelude.Text
associateTimeSeriesToAssetProperty_assetId :: Lens' AssociateTimeSeriesToAssetProperty Text
associateTimeSeriesToAssetProperty_assetId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AssociateTimeSeriesToAssetProperty' {Text
assetId :: Text
$sel:assetId:AssociateTimeSeriesToAssetProperty' :: AssociateTimeSeriesToAssetProperty -> Text
assetId} -> Text
assetId) (\s :: AssociateTimeSeriesToAssetProperty
s@AssociateTimeSeriesToAssetProperty' {} Text
a -> AssociateTimeSeriesToAssetProperty
s {$sel:assetId:AssociateTimeSeriesToAssetProperty' :: Text
assetId = Text
a} :: AssociateTimeSeriesToAssetProperty)

-- | The ID of the asset property.
associateTimeSeriesToAssetProperty_propertyId :: Lens.Lens' AssociateTimeSeriesToAssetProperty Prelude.Text
associateTimeSeriesToAssetProperty_propertyId :: Lens' AssociateTimeSeriesToAssetProperty Text
associateTimeSeriesToAssetProperty_propertyId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AssociateTimeSeriesToAssetProperty' {Text
propertyId :: Text
$sel:propertyId:AssociateTimeSeriesToAssetProperty' :: AssociateTimeSeriesToAssetProperty -> Text
propertyId} -> Text
propertyId) (\s :: AssociateTimeSeriesToAssetProperty
s@AssociateTimeSeriesToAssetProperty' {} Text
a -> AssociateTimeSeriesToAssetProperty
s {$sel:propertyId:AssociateTimeSeriesToAssetProperty' :: Text
propertyId = Text
a} :: AssociateTimeSeriesToAssetProperty)

instance
  Core.AWSRequest
    AssociateTimeSeriesToAssetProperty
  where
  type
    AWSResponse AssociateTimeSeriesToAssetProperty =
      AssociateTimeSeriesToAssetPropertyResponse
  request :: (Service -> Service)
-> AssociateTimeSeriesToAssetProperty
-> Request AssociateTimeSeriesToAssetProperty
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 AssociateTimeSeriesToAssetProperty
-> ClientResponse ClientBody
-> m (Either
        Error
        (ClientResponse (AWSResponse AssociateTimeSeriesToAssetProperty)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
AWSResponse a
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveNull
      AssociateTimeSeriesToAssetPropertyResponse
AssociateTimeSeriesToAssetPropertyResponse'

instance
  Prelude.Hashable
    AssociateTimeSeriesToAssetProperty
  where
  hashWithSalt :: Int -> AssociateTimeSeriesToAssetProperty -> Int
hashWithSalt
    Int
_salt
    AssociateTimeSeriesToAssetProperty' {Maybe Text
Text
propertyId :: Text
assetId :: Text
alias :: Text
clientToken :: Maybe Text
$sel:propertyId:AssociateTimeSeriesToAssetProperty' :: AssociateTimeSeriesToAssetProperty -> Text
$sel:assetId:AssociateTimeSeriesToAssetProperty' :: AssociateTimeSeriesToAssetProperty -> Text
$sel:alias:AssociateTimeSeriesToAssetProperty' :: AssociateTimeSeriesToAssetProperty -> Text
$sel:clientToken:AssociateTimeSeriesToAssetProperty' :: AssociateTimeSeriesToAssetProperty -> Maybe Text
..} =
      Int
_salt
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
clientToken
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
alias
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
assetId
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
propertyId

instance
  Prelude.NFData
    AssociateTimeSeriesToAssetProperty
  where
  rnf :: AssociateTimeSeriesToAssetProperty -> ()
rnf AssociateTimeSeriesToAssetProperty' {Maybe Text
Text
propertyId :: Text
assetId :: Text
alias :: Text
clientToken :: Maybe Text
$sel:propertyId:AssociateTimeSeriesToAssetProperty' :: AssociateTimeSeriesToAssetProperty -> Text
$sel:assetId:AssociateTimeSeriesToAssetProperty' :: AssociateTimeSeriesToAssetProperty -> Text
$sel:alias:AssociateTimeSeriesToAssetProperty' :: AssociateTimeSeriesToAssetProperty -> Text
$sel:clientToken:AssociateTimeSeriesToAssetProperty' :: AssociateTimeSeriesToAssetProperty -> Maybe Text
..} =
    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
alias
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
assetId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
propertyId

instance
  Data.ToHeaders
    AssociateTimeSeriesToAssetProperty
  where
  toHeaders :: AssociateTimeSeriesToAssetProperty -> [Header]
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 -> [Header]
Data.=# ( ByteString
"application/x-amz-json-1.1" ::
                          Prelude.ByteString
                      )
          ]
      )

instance
  Data.ToJSON
    AssociateTimeSeriesToAssetProperty
  where
  toJSON :: AssociateTimeSeriesToAssetProperty -> Value
toJSON AssociateTimeSeriesToAssetProperty' {Maybe Text
Text
propertyId :: Text
assetId :: Text
alias :: Text
clientToken :: Maybe Text
$sel:propertyId:AssociateTimeSeriesToAssetProperty' :: AssociateTimeSeriesToAssetProperty -> Text
$sel:assetId:AssociateTimeSeriesToAssetProperty' :: AssociateTimeSeriesToAssetProperty -> Text
$sel:alias:AssociateTimeSeriesToAssetProperty' :: AssociateTimeSeriesToAssetProperty -> Text
$sel:clientToken:AssociateTimeSeriesToAssetProperty' :: AssociateTimeSeriesToAssetProperty -> Maybe Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [(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]
      )

instance
  Data.ToPath
    AssociateTimeSeriesToAssetProperty
  where
  toPath :: AssociateTimeSeriesToAssetProperty -> ByteString
toPath = forall a b. a -> b -> a
Prelude.const ByteString
"/timeseries/associate/"

instance
  Data.ToQuery
    AssociateTimeSeriesToAssetProperty
  where
  toQuery :: AssociateTimeSeriesToAssetProperty -> QueryString
toQuery AssociateTimeSeriesToAssetProperty' {Maybe Text
Text
propertyId :: Text
assetId :: Text
alias :: Text
clientToken :: Maybe Text
$sel:propertyId:AssociateTimeSeriesToAssetProperty' :: AssociateTimeSeriesToAssetProperty -> Text
$sel:assetId:AssociateTimeSeriesToAssetProperty' :: AssociateTimeSeriesToAssetProperty -> Text
$sel:alias:AssociateTimeSeriesToAssetProperty' :: AssociateTimeSeriesToAssetProperty -> Text
$sel:clientToken:AssociateTimeSeriesToAssetProperty' :: AssociateTimeSeriesToAssetProperty -> Maybe Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"alias" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Text
alias,
        ByteString
"assetId" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Text
assetId,
        ByteString
"propertyId" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Text
propertyId
      ]

-- | /See:/ 'newAssociateTimeSeriesToAssetPropertyResponse' smart constructor.
data AssociateTimeSeriesToAssetPropertyResponse = AssociateTimeSeriesToAssetPropertyResponse'
  {
  }
  deriving (AssociateTimeSeriesToAssetPropertyResponse
-> AssociateTimeSeriesToAssetPropertyResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: AssociateTimeSeriesToAssetPropertyResponse
-> AssociateTimeSeriesToAssetPropertyResponse -> Bool
$c/= :: AssociateTimeSeriesToAssetPropertyResponse
-> AssociateTimeSeriesToAssetPropertyResponse -> Bool
== :: AssociateTimeSeriesToAssetPropertyResponse
-> AssociateTimeSeriesToAssetPropertyResponse -> Bool
$c== :: AssociateTimeSeriesToAssetPropertyResponse
-> AssociateTimeSeriesToAssetPropertyResponse -> Bool
Prelude.Eq, ReadPrec [AssociateTimeSeriesToAssetPropertyResponse]
ReadPrec AssociateTimeSeriesToAssetPropertyResponse
Int -> ReadS AssociateTimeSeriesToAssetPropertyResponse
ReadS [AssociateTimeSeriesToAssetPropertyResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [AssociateTimeSeriesToAssetPropertyResponse]
$creadListPrec :: ReadPrec [AssociateTimeSeriesToAssetPropertyResponse]
readPrec :: ReadPrec AssociateTimeSeriesToAssetPropertyResponse
$creadPrec :: ReadPrec AssociateTimeSeriesToAssetPropertyResponse
readList :: ReadS [AssociateTimeSeriesToAssetPropertyResponse]
$creadList :: ReadS [AssociateTimeSeriesToAssetPropertyResponse]
readsPrec :: Int -> ReadS AssociateTimeSeriesToAssetPropertyResponse
$creadsPrec :: Int -> ReadS AssociateTimeSeriesToAssetPropertyResponse
Prelude.Read, Int -> AssociateTimeSeriesToAssetPropertyResponse -> ShowS
[AssociateTimeSeriesToAssetPropertyResponse] -> ShowS
AssociateTimeSeriesToAssetPropertyResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [AssociateTimeSeriesToAssetPropertyResponse] -> ShowS
$cshowList :: [AssociateTimeSeriesToAssetPropertyResponse] -> ShowS
show :: AssociateTimeSeriesToAssetPropertyResponse -> String
$cshow :: AssociateTimeSeriesToAssetPropertyResponse -> String
showsPrec :: Int -> AssociateTimeSeriesToAssetPropertyResponse -> ShowS
$cshowsPrec :: Int -> AssociateTimeSeriesToAssetPropertyResponse -> ShowS
Prelude.Show, forall x.
Rep AssociateTimeSeriesToAssetPropertyResponse x
-> AssociateTimeSeriesToAssetPropertyResponse
forall x.
AssociateTimeSeriesToAssetPropertyResponse
-> Rep AssociateTimeSeriesToAssetPropertyResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep AssociateTimeSeriesToAssetPropertyResponse x
-> AssociateTimeSeriesToAssetPropertyResponse
$cfrom :: forall x.
AssociateTimeSeriesToAssetPropertyResponse
-> Rep AssociateTimeSeriesToAssetPropertyResponse x
Prelude.Generic)

-- |
-- Create a value of 'AssociateTimeSeriesToAssetPropertyResponse' 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.
newAssociateTimeSeriesToAssetPropertyResponse ::
  AssociateTimeSeriesToAssetPropertyResponse
newAssociateTimeSeriesToAssetPropertyResponse :: AssociateTimeSeriesToAssetPropertyResponse
newAssociateTimeSeriesToAssetPropertyResponse =
  AssociateTimeSeriesToAssetPropertyResponse
AssociateTimeSeriesToAssetPropertyResponse'

instance
  Prelude.NFData
    AssociateTimeSeriesToAssetPropertyResponse
  where
  rnf :: AssociateTimeSeriesToAssetPropertyResponse -> ()
rnf AssociateTimeSeriesToAssetPropertyResponse
_ = ()