{-# 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.GetAssetPropertyValue
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Gets an asset property\'s current value. For more information, see
-- <https://docs.aws.amazon.com/iot-sitewise/latest/userguide/query-industrial-data.html#current-values Querying current values>
-- in the /IoT SiteWise User Guide/.
--
-- To identify an asset property, you must specify one of the following:
--
-- -   The @assetId@ and @propertyId@ of an asset property.
--
-- -   A @propertyAlias@, which is a data stream alias (for example,
--     @\/company\/windfarm\/3\/turbine\/7\/temperature@). To define an
--     asset property\'s alias, see
--     <https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_UpdateAssetProperty.html UpdateAssetProperty>.
module Amazonka.IoTSiteWise.GetAssetPropertyValue
  ( -- * Creating a Request
    GetAssetPropertyValue (..),
    newGetAssetPropertyValue,

    -- * Request Lenses
    getAssetPropertyValue_assetId,
    getAssetPropertyValue_propertyAlias,
    getAssetPropertyValue_propertyId,

    -- * Destructuring the Response
    GetAssetPropertyValueResponse (..),
    newGetAssetPropertyValueResponse,

    -- * Response Lenses
    getAssetPropertyValueResponse_propertyValue,
    getAssetPropertyValueResponse_httpStatus,
  )
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:/ 'newGetAssetPropertyValue' smart constructor.
data GetAssetPropertyValue = GetAssetPropertyValue'
  { -- | The ID of the asset.
    GetAssetPropertyValue -> Maybe Text
assetId :: Prelude.Maybe Prelude.Text,
    -- | The alias that identifies the property, such as an OPC-UA server data
    -- stream path (for example,
    -- @\/company\/windfarm\/3\/turbine\/7\/temperature@). For more
    -- information, see
    -- <https://docs.aws.amazon.com/iot-sitewise/latest/userguide/connect-data-streams.html Mapping industrial data streams to asset properties>
    -- in the /IoT SiteWise User Guide/.
    GetAssetPropertyValue -> Maybe Text
propertyAlias :: Prelude.Maybe Prelude.Text,
    -- | The ID of the asset property.
    GetAssetPropertyValue -> Maybe Text
propertyId :: Prelude.Maybe Prelude.Text
  }
  deriving (GetAssetPropertyValue -> GetAssetPropertyValue -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetAssetPropertyValue -> GetAssetPropertyValue -> Bool
$c/= :: GetAssetPropertyValue -> GetAssetPropertyValue -> Bool
== :: GetAssetPropertyValue -> GetAssetPropertyValue -> Bool
$c== :: GetAssetPropertyValue -> GetAssetPropertyValue -> Bool
Prelude.Eq, ReadPrec [GetAssetPropertyValue]
ReadPrec GetAssetPropertyValue
Int -> ReadS GetAssetPropertyValue
ReadS [GetAssetPropertyValue]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetAssetPropertyValue]
$creadListPrec :: ReadPrec [GetAssetPropertyValue]
readPrec :: ReadPrec GetAssetPropertyValue
$creadPrec :: ReadPrec GetAssetPropertyValue
readList :: ReadS [GetAssetPropertyValue]
$creadList :: ReadS [GetAssetPropertyValue]
readsPrec :: Int -> ReadS GetAssetPropertyValue
$creadsPrec :: Int -> ReadS GetAssetPropertyValue
Prelude.Read, Int -> GetAssetPropertyValue -> ShowS
[GetAssetPropertyValue] -> ShowS
GetAssetPropertyValue -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetAssetPropertyValue] -> ShowS
$cshowList :: [GetAssetPropertyValue] -> ShowS
show :: GetAssetPropertyValue -> String
$cshow :: GetAssetPropertyValue -> String
showsPrec :: Int -> GetAssetPropertyValue -> ShowS
$cshowsPrec :: Int -> GetAssetPropertyValue -> ShowS
Prelude.Show, forall x. Rep GetAssetPropertyValue x -> GetAssetPropertyValue
forall x. GetAssetPropertyValue -> Rep GetAssetPropertyValue x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep GetAssetPropertyValue x -> GetAssetPropertyValue
$cfrom :: forall x. GetAssetPropertyValue -> Rep GetAssetPropertyValue x
Prelude.Generic)

-- |
-- Create a value of 'GetAssetPropertyValue' 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:
--
-- 'assetId', 'getAssetPropertyValue_assetId' - The ID of the asset.
--
-- 'propertyAlias', 'getAssetPropertyValue_propertyAlias' - The alias that identifies the property, such as an OPC-UA server data
-- stream path (for example,
-- @\/company\/windfarm\/3\/turbine\/7\/temperature@). For more
-- information, see
-- <https://docs.aws.amazon.com/iot-sitewise/latest/userguide/connect-data-streams.html Mapping industrial data streams to asset properties>
-- in the /IoT SiteWise User Guide/.
--
-- 'propertyId', 'getAssetPropertyValue_propertyId' - The ID of the asset property.
newGetAssetPropertyValue ::
  GetAssetPropertyValue
newGetAssetPropertyValue :: GetAssetPropertyValue
newGetAssetPropertyValue =
  GetAssetPropertyValue'
    { $sel:assetId:GetAssetPropertyValue' :: Maybe Text
assetId = forall a. Maybe a
Prelude.Nothing,
      $sel:propertyAlias:GetAssetPropertyValue' :: Maybe Text
propertyAlias = forall a. Maybe a
Prelude.Nothing,
      $sel:propertyId:GetAssetPropertyValue' :: Maybe Text
propertyId = forall a. Maybe a
Prelude.Nothing
    }

-- | The ID of the asset.
getAssetPropertyValue_assetId :: Lens.Lens' GetAssetPropertyValue (Prelude.Maybe Prelude.Text)
getAssetPropertyValue_assetId :: Lens' GetAssetPropertyValue (Maybe Text)
getAssetPropertyValue_assetId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetAssetPropertyValue' {Maybe Text
assetId :: Maybe Text
$sel:assetId:GetAssetPropertyValue' :: GetAssetPropertyValue -> Maybe Text
assetId} -> Maybe Text
assetId) (\s :: GetAssetPropertyValue
s@GetAssetPropertyValue' {} Maybe Text
a -> GetAssetPropertyValue
s {$sel:assetId:GetAssetPropertyValue' :: Maybe Text
assetId = Maybe Text
a} :: GetAssetPropertyValue)

-- | The alias that identifies the property, such as an OPC-UA server data
-- stream path (for example,
-- @\/company\/windfarm\/3\/turbine\/7\/temperature@). For more
-- information, see
-- <https://docs.aws.amazon.com/iot-sitewise/latest/userguide/connect-data-streams.html Mapping industrial data streams to asset properties>
-- in the /IoT SiteWise User Guide/.
getAssetPropertyValue_propertyAlias :: Lens.Lens' GetAssetPropertyValue (Prelude.Maybe Prelude.Text)
getAssetPropertyValue_propertyAlias :: Lens' GetAssetPropertyValue (Maybe Text)
getAssetPropertyValue_propertyAlias = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetAssetPropertyValue' {Maybe Text
propertyAlias :: Maybe Text
$sel:propertyAlias:GetAssetPropertyValue' :: GetAssetPropertyValue -> Maybe Text
propertyAlias} -> Maybe Text
propertyAlias) (\s :: GetAssetPropertyValue
s@GetAssetPropertyValue' {} Maybe Text
a -> GetAssetPropertyValue
s {$sel:propertyAlias:GetAssetPropertyValue' :: Maybe Text
propertyAlias = Maybe Text
a} :: GetAssetPropertyValue)

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

instance Core.AWSRequest GetAssetPropertyValue where
  type
    AWSResponse GetAssetPropertyValue =
      GetAssetPropertyValueResponse
  request :: (Service -> Service)
-> GetAssetPropertyValue -> Request GetAssetPropertyValue
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 GetAssetPropertyValue
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse GetAssetPropertyValue)))
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 AssetPropertyValue -> Int -> GetAssetPropertyValueResponse
GetAssetPropertyValueResponse'
            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
"propertyValue")
            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))
      )

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

instance Prelude.NFData GetAssetPropertyValue where
  rnf :: GetAssetPropertyValue -> ()
rnf GetAssetPropertyValue' {Maybe Text
propertyId :: Maybe Text
propertyAlias :: Maybe Text
assetId :: Maybe Text
$sel:propertyId:GetAssetPropertyValue' :: GetAssetPropertyValue -> Maybe Text
$sel:propertyAlias:GetAssetPropertyValue' :: GetAssetPropertyValue -> Maybe Text
$sel:assetId:GetAssetPropertyValue' :: GetAssetPropertyValue -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
assetId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
propertyAlias
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
propertyId

instance Data.ToHeaders GetAssetPropertyValue where
  toHeaders :: GetAssetPropertyValue -> 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 GetAssetPropertyValue where
  toPath :: GetAssetPropertyValue -> ByteString
toPath = forall a b. a -> b -> a
Prelude.const ByteString
"/properties/latest"

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

-- | /See:/ 'newGetAssetPropertyValueResponse' smart constructor.
data GetAssetPropertyValueResponse = GetAssetPropertyValueResponse'
  { -- | The current asset property value.
    GetAssetPropertyValueResponse -> Maybe AssetPropertyValue
propertyValue :: Prelude.Maybe AssetPropertyValue,
    -- | The response's http status code.
    GetAssetPropertyValueResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (GetAssetPropertyValueResponse
-> GetAssetPropertyValueResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetAssetPropertyValueResponse
-> GetAssetPropertyValueResponse -> Bool
$c/= :: GetAssetPropertyValueResponse
-> GetAssetPropertyValueResponse -> Bool
== :: GetAssetPropertyValueResponse
-> GetAssetPropertyValueResponse -> Bool
$c== :: GetAssetPropertyValueResponse
-> GetAssetPropertyValueResponse -> Bool
Prelude.Eq, ReadPrec [GetAssetPropertyValueResponse]
ReadPrec GetAssetPropertyValueResponse
Int -> ReadS GetAssetPropertyValueResponse
ReadS [GetAssetPropertyValueResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetAssetPropertyValueResponse]
$creadListPrec :: ReadPrec [GetAssetPropertyValueResponse]
readPrec :: ReadPrec GetAssetPropertyValueResponse
$creadPrec :: ReadPrec GetAssetPropertyValueResponse
readList :: ReadS [GetAssetPropertyValueResponse]
$creadList :: ReadS [GetAssetPropertyValueResponse]
readsPrec :: Int -> ReadS GetAssetPropertyValueResponse
$creadsPrec :: Int -> ReadS GetAssetPropertyValueResponse
Prelude.Read, Int -> GetAssetPropertyValueResponse -> ShowS
[GetAssetPropertyValueResponse] -> ShowS
GetAssetPropertyValueResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetAssetPropertyValueResponse] -> ShowS
$cshowList :: [GetAssetPropertyValueResponse] -> ShowS
show :: GetAssetPropertyValueResponse -> String
$cshow :: GetAssetPropertyValueResponse -> String
showsPrec :: Int -> GetAssetPropertyValueResponse -> ShowS
$cshowsPrec :: Int -> GetAssetPropertyValueResponse -> ShowS
Prelude.Show, forall x.
Rep GetAssetPropertyValueResponse x
-> GetAssetPropertyValueResponse
forall x.
GetAssetPropertyValueResponse
-> Rep GetAssetPropertyValueResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep GetAssetPropertyValueResponse x
-> GetAssetPropertyValueResponse
$cfrom :: forall x.
GetAssetPropertyValueResponse
-> Rep GetAssetPropertyValueResponse x
Prelude.Generic)

-- |
-- Create a value of 'GetAssetPropertyValueResponse' 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:
--
-- 'propertyValue', 'getAssetPropertyValueResponse_propertyValue' - The current asset property value.
--
-- 'httpStatus', 'getAssetPropertyValueResponse_httpStatus' - The response's http status code.
newGetAssetPropertyValueResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  GetAssetPropertyValueResponse
newGetAssetPropertyValueResponse :: Int -> GetAssetPropertyValueResponse
newGetAssetPropertyValueResponse Int
pHttpStatus_ =
  GetAssetPropertyValueResponse'
    { $sel:propertyValue:GetAssetPropertyValueResponse' :: Maybe AssetPropertyValue
propertyValue =
        forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:GetAssetPropertyValueResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | The current asset property value.
getAssetPropertyValueResponse_propertyValue :: Lens.Lens' GetAssetPropertyValueResponse (Prelude.Maybe AssetPropertyValue)
getAssetPropertyValueResponse_propertyValue :: Lens' GetAssetPropertyValueResponse (Maybe AssetPropertyValue)
getAssetPropertyValueResponse_propertyValue = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetAssetPropertyValueResponse' {Maybe AssetPropertyValue
propertyValue :: Maybe AssetPropertyValue
$sel:propertyValue:GetAssetPropertyValueResponse' :: GetAssetPropertyValueResponse -> Maybe AssetPropertyValue
propertyValue} -> Maybe AssetPropertyValue
propertyValue) (\s :: GetAssetPropertyValueResponse
s@GetAssetPropertyValueResponse' {} Maybe AssetPropertyValue
a -> GetAssetPropertyValueResponse
s {$sel:propertyValue:GetAssetPropertyValueResponse' :: Maybe AssetPropertyValue
propertyValue = Maybe AssetPropertyValue
a} :: GetAssetPropertyValueResponse)

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

instance Prelude.NFData GetAssetPropertyValueResponse where
  rnf :: GetAssetPropertyValueResponse -> ()
rnf GetAssetPropertyValueResponse' {Int
Maybe AssetPropertyValue
httpStatus :: Int
propertyValue :: Maybe AssetPropertyValue
$sel:httpStatus:GetAssetPropertyValueResponse' :: GetAssetPropertyValueResponse -> Int
$sel:propertyValue:GetAssetPropertyValueResponse' :: GetAssetPropertyValueResponse -> Maybe AssetPropertyValue
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe AssetPropertyValue
propertyValue
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus