{-# 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.UpdateDashboard
-- 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 IoT SiteWise Monitor dashboard.
module Amazonka.IoTSiteWise.UpdateDashboard
  ( -- * Creating a Request
    UpdateDashboard (..),
    newUpdateDashboard,

    -- * Request Lenses
    updateDashboard_clientToken,
    updateDashboard_dashboardDescription,
    updateDashboard_dashboardId,
    updateDashboard_dashboardName,
    updateDashboard_dashboardDefinition,

    -- * Destructuring the Response
    UpdateDashboardResponse (..),
    newUpdateDashboardResponse,

    -- * Response Lenses
    updateDashboardResponse_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:/ 'newUpdateDashboard' smart constructor.
data UpdateDashboard = UpdateDashboard'
  { -- | 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.
    UpdateDashboard -> Maybe Text
clientToken :: Prelude.Maybe Prelude.Text,
    -- | A new description for the dashboard.
    UpdateDashboard -> Maybe Text
dashboardDescription :: Prelude.Maybe Prelude.Text,
    -- | The ID of the dashboard to update.
    UpdateDashboard -> Text
dashboardId :: Prelude.Text,
    -- | A new friendly name for the dashboard.
    UpdateDashboard -> Text
dashboardName :: Prelude.Text,
    -- | The new dashboard definition, as specified in a JSON literal. For
    -- detailed information, see
    -- <https://docs.aws.amazon.com/iot-sitewise/latest/userguide/create-dashboards-using-aws-cli.html Creating dashboards (CLI)>
    -- in the /IoT SiteWise User Guide/.
    UpdateDashboard -> Text
dashboardDefinition :: Prelude.Text
  }
  deriving (UpdateDashboard -> UpdateDashboard -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UpdateDashboard -> UpdateDashboard -> Bool
$c/= :: UpdateDashboard -> UpdateDashboard -> Bool
== :: UpdateDashboard -> UpdateDashboard -> Bool
$c== :: UpdateDashboard -> UpdateDashboard -> Bool
Prelude.Eq, ReadPrec [UpdateDashboard]
ReadPrec UpdateDashboard
Int -> ReadS UpdateDashboard
ReadS [UpdateDashboard]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [UpdateDashboard]
$creadListPrec :: ReadPrec [UpdateDashboard]
readPrec :: ReadPrec UpdateDashboard
$creadPrec :: ReadPrec UpdateDashboard
readList :: ReadS [UpdateDashboard]
$creadList :: ReadS [UpdateDashboard]
readsPrec :: Int -> ReadS UpdateDashboard
$creadsPrec :: Int -> ReadS UpdateDashboard
Prelude.Read, Int -> UpdateDashboard -> ShowS
[UpdateDashboard] -> ShowS
UpdateDashboard -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UpdateDashboard] -> ShowS
$cshowList :: [UpdateDashboard] -> ShowS
show :: UpdateDashboard -> String
$cshow :: UpdateDashboard -> String
showsPrec :: Int -> UpdateDashboard -> ShowS
$cshowsPrec :: Int -> UpdateDashboard -> ShowS
Prelude.Show, forall x. Rep UpdateDashboard x -> UpdateDashboard
forall x. UpdateDashboard -> Rep UpdateDashboard x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep UpdateDashboard x -> UpdateDashboard
$cfrom :: forall x. UpdateDashboard -> Rep UpdateDashboard x
Prelude.Generic)

-- |
-- Create a value of 'UpdateDashboard' 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', 'updateDashboard_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.
--
-- 'dashboardDescription', 'updateDashboard_dashboardDescription' - A new description for the dashboard.
--
-- 'dashboardId', 'updateDashboard_dashboardId' - The ID of the dashboard to update.
--
-- 'dashboardName', 'updateDashboard_dashboardName' - A new friendly name for the dashboard.
--
-- 'dashboardDefinition', 'updateDashboard_dashboardDefinition' - The new dashboard definition, as specified in a JSON literal. For
-- detailed information, see
-- <https://docs.aws.amazon.com/iot-sitewise/latest/userguide/create-dashboards-using-aws-cli.html Creating dashboards (CLI)>
-- in the /IoT SiteWise User Guide/.
newUpdateDashboard ::
  -- | 'dashboardId'
  Prelude.Text ->
  -- | 'dashboardName'
  Prelude.Text ->
  -- | 'dashboardDefinition'
  Prelude.Text ->
  UpdateDashboard
newUpdateDashboard :: Text -> Text -> Text -> UpdateDashboard
newUpdateDashboard
  Text
pDashboardId_
  Text
pDashboardName_
  Text
pDashboardDefinition_ =
    UpdateDashboard'
      { $sel:clientToken:UpdateDashboard' :: Maybe Text
clientToken = forall a. Maybe a
Prelude.Nothing,
        $sel:dashboardDescription:UpdateDashboard' :: Maybe Text
dashboardDescription = forall a. Maybe a
Prelude.Nothing,
        $sel:dashboardId:UpdateDashboard' :: Text
dashboardId = Text
pDashboardId_,
        $sel:dashboardName:UpdateDashboard' :: Text
dashboardName = Text
pDashboardName_,
        $sel:dashboardDefinition:UpdateDashboard' :: Text
dashboardDefinition = Text
pDashboardDefinition_
      }

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

-- | A new description for the dashboard.
updateDashboard_dashboardDescription :: Lens.Lens' UpdateDashboard (Prelude.Maybe Prelude.Text)
updateDashboard_dashboardDescription :: Lens' UpdateDashboard (Maybe Text)
updateDashboard_dashboardDescription = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateDashboard' {Maybe Text
dashboardDescription :: Maybe Text
$sel:dashboardDescription:UpdateDashboard' :: UpdateDashboard -> Maybe Text
dashboardDescription} -> Maybe Text
dashboardDescription) (\s :: UpdateDashboard
s@UpdateDashboard' {} Maybe Text
a -> UpdateDashboard
s {$sel:dashboardDescription:UpdateDashboard' :: Maybe Text
dashboardDescription = Maybe Text
a} :: UpdateDashboard)

-- | The ID of the dashboard to update.
updateDashboard_dashboardId :: Lens.Lens' UpdateDashboard Prelude.Text
updateDashboard_dashboardId :: Lens' UpdateDashboard Text
updateDashboard_dashboardId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateDashboard' {Text
dashboardId :: Text
$sel:dashboardId:UpdateDashboard' :: UpdateDashboard -> Text
dashboardId} -> Text
dashboardId) (\s :: UpdateDashboard
s@UpdateDashboard' {} Text
a -> UpdateDashboard
s {$sel:dashboardId:UpdateDashboard' :: Text
dashboardId = Text
a} :: UpdateDashboard)

-- | A new friendly name for the dashboard.
updateDashboard_dashboardName :: Lens.Lens' UpdateDashboard Prelude.Text
updateDashboard_dashboardName :: Lens' UpdateDashboard Text
updateDashboard_dashboardName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateDashboard' {Text
dashboardName :: Text
$sel:dashboardName:UpdateDashboard' :: UpdateDashboard -> Text
dashboardName} -> Text
dashboardName) (\s :: UpdateDashboard
s@UpdateDashboard' {} Text
a -> UpdateDashboard
s {$sel:dashboardName:UpdateDashboard' :: Text
dashboardName = Text
a} :: UpdateDashboard)

-- | The new dashboard definition, as specified in a JSON literal. For
-- detailed information, see
-- <https://docs.aws.amazon.com/iot-sitewise/latest/userguide/create-dashboards-using-aws-cli.html Creating dashboards (CLI)>
-- in the /IoT SiteWise User Guide/.
updateDashboard_dashboardDefinition :: Lens.Lens' UpdateDashboard Prelude.Text
updateDashboard_dashboardDefinition :: Lens' UpdateDashboard Text
updateDashboard_dashboardDefinition = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateDashboard' {Text
dashboardDefinition :: Text
$sel:dashboardDefinition:UpdateDashboard' :: UpdateDashboard -> Text
dashboardDefinition} -> Text
dashboardDefinition) (\s :: UpdateDashboard
s@UpdateDashboard' {} Text
a -> UpdateDashboard
s {$sel:dashboardDefinition:UpdateDashboard' :: Text
dashboardDefinition = Text
a} :: UpdateDashboard)

instance Core.AWSRequest UpdateDashboard where
  type
    AWSResponse UpdateDashboard =
      UpdateDashboardResponse
  request :: (Service -> Service) -> UpdateDashboard -> Request UpdateDashboard
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 UpdateDashboard
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse UpdateDashboard)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
(Int -> ResponseHeaders -> () -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveEmpty
      ( \Int
s ResponseHeaders
h ()
x ->
          Int -> UpdateDashboardResponse
UpdateDashboardResponse'
            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))
      )

instance Prelude.Hashable UpdateDashboard where
  hashWithSalt :: Int -> UpdateDashboard -> Int
hashWithSalt Int
_salt UpdateDashboard' {Maybe Text
Text
dashboardDefinition :: Text
dashboardName :: Text
dashboardId :: Text
dashboardDescription :: Maybe Text
clientToken :: Maybe Text
$sel:dashboardDefinition:UpdateDashboard' :: UpdateDashboard -> Text
$sel:dashboardName:UpdateDashboard' :: UpdateDashboard -> Text
$sel:dashboardId:UpdateDashboard' :: UpdateDashboard -> Text
$sel:dashboardDescription:UpdateDashboard' :: UpdateDashboard -> Maybe Text
$sel:clientToken:UpdateDashboard' :: UpdateDashboard -> 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` Maybe Text
dashboardDescription
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
dashboardId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
dashboardName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
dashboardDefinition

instance Prelude.NFData UpdateDashboard where
  rnf :: UpdateDashboard -> ()
rnf UpdateDashboard' {Maybe Text
Text
dashboardDefinition :: Text
dashboardName :: Text
dashboardId :: Text
dashboardDescription :: Maybe Text
clientToken :: Maybe Text
$sel:dashboardDefinition:UpdateDashboard' :: UpdateDashboard -> Text
$sel:dashboardName:UpdateDashboard' :: UpdateDashboard -> Text
$sel:dashboardId:UpdateDashboard' :: UpdateDashboard -> Text
$sel:dashboardDescription:UpdateDashboard' :: UpdateDashboard -> Maybe Text
$sel:clientToken:UpdateDashboard' :: UpdateDashboard -> 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 Maybe Text
dashboardDescription
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
dashboardId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
dashboardName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
dashboardDefinition

instance Data.ToHeaders UpdateDashboard where
  toHeaders :: UpdateDashboard -> 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 UpdateDashboard where
  toJSON :: UpdateDashboard -> Value
toJSON UpdateDashboard' {Maybe Text
Text
dashboardDefinition :: Text
dashboardName :: Text
dashboardId :: Text
dashboardDescription :: Maybe Text
clientToken :: Maybe Text
$sel:dashboardDefinition:UpdateDashboard' :: UpdateDashboard -> Text
$sel:dashboardName:UpdateDashboard' :: UpdateDashboard -> Text
$sel:dashboardId:UpdateDashboard' :: UpdateDashboard -> Text
$sel:dashboardDescription:UpdateDashboard' :: UpdateDashboard -> Maybe Text
$sel:clientToken:UpdateDashboard' :: UpdateDashboard -> 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,
            (Key
"dashboardDescription" 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
dashboardDescription,
            forall a. a -> Maybe a
Prelude.Just (Key
"dashboardName" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
dashboardName),
            forall a. a -> Maybe a
Prelude.Just
              (Key
"dashboardDefinition" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
dashboardDefinition)
          ]
      )

instance Data.ToPath UpdateDashboard where
  toPath :: UpdateDashboard -> ByteString
toPath UpdateDashboard' {Maybe Text
Text
dashboardDefinition :: Text
dashboardName :: Text
dashboardId :: Text
dashboardDescription :: Maybe Text
clientToken :: Maybe Text
$sel:dashboardDefinition:UpdateDashboard' :: UpdateDashboard -> Text
$sel:dashboardName:UpdateDashboard' :: UpdateDashboard -> Text
$sel:dashboardId:UpdateDashboard' :: UpdateDashboard -> Text
$sel:dashboardDescription:UpdateDashboard' :: UpdateDashboard -> Maybe Text
$sel:clientToken:UpdateDashboard' :: UpdateDashboard -> Maybe Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ByteString
"/dashboards/", forall a. ToByteString a => a -> ByteString
Data.toBS Text
dashboardId]

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

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

-- |
-- Create a value of 'UpdateDashboardResponse' 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', 'updateDashboardResponse_httpStatus' - The response's http status code.
newUpdateDashboardResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  UpdateDashboardResponse
newUpdateDashboardResponse :: Int -> UpdateDashboardResponse
newUpdateDashboardResponse Int
pHttpStatus_ =
  UpdateDashboardResponse' {$sel:httpStatus:UpdateDashboardResponse' :: Int
httpStatus = Int
pHttpStatus_}

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

instance Prelude.NFData UpdateDashboardResponse where
  rnf :: UpdateDashboardResponse -> ()
rnf UpdateDashboardResponse' {Int
httpStatus :: Int
$sel:httpStatus:UpdateDashboardResponse' :: UpdateDashboardResponse -> Int
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus