{-# 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.ConnectCases.UpdateField
-- 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 the properties of an existing field.
module Amazonka.ConnectCases.UpdateField
  ( -- * Creating a Request
    UpdateField (..),
    newUpdateField,

    -- * Request Lenses
    updateField_description,
    updateField_name,
    updateField_domainId,
    updateField_fieldId,

    -- * Destructuring the Response
    UpdateFieldResponse (..),
    newUpdateFieldResponse,

    -- * Response Lenses
    updateFieldResponse_httpStatus,
  )
where

import Amazonka.ConnectCases.Types
import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import qualified Amazonka.Prelude as Prelude
import qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response

-- | /See:/ 'newUpdateField' smart constructor.
data UpdateField = UpdateField'
  { -- | The description of a field.
    UpdateField -> Maybe Text
description :: Prelude.Maybe Prelude.Text,
    -- | The name of the field.
    UpdateField -> Maybe Text
name :: Prelude.Maybe Prelude.Text,
    -- | The unique identifier of the Cases domain.
    UpdateField -> Text
domainId :: Prelude.Text,
    -- | The unique identifier of a field.
    UpdateField -> Text
fieldId :: Prelude.Text
  }
  deriving (UpdateField -> UpdateField -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UpdateField -> UpdateField -> Bool
$c/= :: UpdateField -> UpdateField -> Bool
== :: UpdateField -> UpdateField -> Bool
$c== :: UpdateField -> UpdateField -> Bool
Prelude.Eq, ReadPrec [UpdateField]
ReadPrec UpdateField
Int -> ReadS UpdateField
ReadS [UpdateField]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [UpdateField]
$creadListPrec :: ReadPrec [UpdateField]
readPrec :: ReadPrec UpdateField
$creadPrec :: ReadPrec UpdateField
readList :: ReadS [UpdateField]
$creadList :: ReadS [UpdateField]
readsPrec :: Int -> ReadS UpdateField
$creadsPrec :: Int -> ReadS UpdateField
Prelude.Read, Int -> UpdateField -> ShowS
[UpdateField] -> ShowS
UpdateField -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UpdateField] -> ShowS
$cshowList :: [UpdateField] -> ShowS
show :: UpdateField -> String
$cshow :: UpdateField -> String
showsPrec :: Int -> UpdateField -> ShowS
$cshowsPrec :: Int -> UpdateField -> ShowS
Prelude.Show, forall x. Rep UpdateField x -> UpdateField
forall x. UpdateField -> Rep UpdateField x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep UpdateField x -> UpdateField
$cfrom :: forall x. UpdateField -> Rep UpdateField x
Prelude.Generic)

-- |
-- Create a value of 'UpdateField' 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:
--
-- 'description', 'updateField_description' - The description of a field.
--
-- 'name', 'updateField_name' - The name of the field.
--
-- 'domainId', 'updateField_domainId' - The unique identifier of the Cases domain.
--
-- 'fieldId', 'updateField_fieldId' - The unique identifier of a field.
newUpdateField ::
  -- | 'domainId'
  Prelude.Text ->
  -- | 'fieldId'
  Prelude.Text ->
  UpdateField
newUpdateField :: Text -> Text -> UpdateField
newUpdateField Text
pDomainId_ Text
pFieldId_ =
  UpdateField'
    { $sel:description:UpdateField' :: Maybe Text
description = forall a. Maybe a
Prelude.Nothing,
      $sel:name:UpdateField' :: Maybe Text
name = forall a. Maybe a
Prelude.Nothing,
      $sel:domainId:UpdateField' :: Text
domainId = Text
pDomainId_,
      $sel:fieldId:UpdateField' :: Text
fieldId = Text
pFieldId_
    }

-- | The description of a field.
updateField_description :: Lens.Lens' UpdateField (Prelude.Maybe Prelude.Text)
updateField_description :: Lens' UpdateField (Maybe Text)
updateField_description = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateField' {Maybe Text
description :: Maybe Text
$sel:description:UpdateField' :: UpdateField -> Maybe Text
description} -> Maybe Text
description) (\s :: UpdateField
s@UpdateField' {} Maybe Text
a -> UpdateField
s {$sel:description:UpdateField' :: Maybe Text
description = Maybe Text
a} :: UpdateField)

-- | The name of the field.
updateField_name :: Lens.Lens' UpdateField (Prelude.Maybe Prelude.Text)
updateField_name :: Lens' UpdateField (Maybe Text)
updateField_name = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateField' {Maybe Text
name :: Maybe Text
$sel:name:UpdateField' :: UpdateField -> Maybe Text
name} -> Maybe Text
name) (\s :: UpdateField
s@UpdateField' {} Maybe Text
a -> UpdateField
s {$sel:name:UpdateField' :: Maybe Text
name = Maybe Text
a} :: UpdateField)

-- | The unique identifier of the Cases domain.
updateField_domainId :: Lens.Lens' UpdateField Prelude.Text
updateField_domainId :: Lens' UpdateField Text
updateField_domainId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateField' {Text
domainId :: Text
$sel:domainId:UpdateField' :: UpdateField -> Text
domainId} -> Text
domainId) (\s :: UpdateField
s@UpdateField' {} Text
a -> UpdateField
s {$sel:domainId:UpdateField' :: Text
domainId = Text
a} :: UpdateField)

-- | The unique identifier of a field.
updateField_fieldId :: Lens.Lens' UpdateField Prelude.Text
updateField_fieldId :: Lens' UpdateField Text
updateField_fieldId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateField' {Text
fieldId :: Text
$sel:fieldId:UpdateField' :: UpdateField -> Text
fieldId} -> Text
fieldId) (\s :: UpdateField
s@UpdateField' {} Text
a -> UpdateField
s {$sel:fieldId:UpdateField' :: Text
fieldId = Text
a} :: UpdateField)

instance Core.AWSRequest UpdateField where
  type AWSResponse UpdateField = UpdateFieldResponse
  request :: (Service -> Service) -> UpdateField -> Request UpdateField
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 UpdateField
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse UpdateField)))
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 -> UpdateFieldResponse
UpdateFieldResponse'
            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 UpdateField where
  hashWithSalt :: Int -> UpdateField -> Int
hashWithSalt Int
_salt UpdateField' {Maybe Text
Text
fieldId :: Text
domainId :: Text
name :: Maybe Text
description :: Maybe Text
$sel:fieldId:UpdateField' :: UpdateField -> Text
$sel:domainId:UpdateField' :: UpdateField -> Text
$sel:name:UpdateField' :: UpdateField -> Maybe Text
$sel:description:UpdateField' :: UpdateField -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
description
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
name
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
domainId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
fieldId

instance Prelude.NFData UpdateField where
  rnf :: UpdateField -> ()
rnf UpdateField' {Maybe Text
Text
fieldId :: Text
domainId :: Text
name :: Maybe Text
description :: Maybe Text
$sel:fieldId:UpdateField' :: UpdateField -> Text
$sel:domainId:UpdateField' :: UpdateField -> Text
$sel:name:UpdateField' :: UpdateField -> Maybe Text
$sel:description:UpdateField' :: UpdateField -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
description
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
name
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
domainId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
fieldId

instance Data.ToHeaders UpdateField where
  toHeaders :: UpdateField -> 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 UpdateField where
  toJSON :: UpdateField -> Value
toJSON UpdateField' {Maybe Text
Text
fieldId :: Text
domainId :: Text
name :: Maybe Text
description :: Maybe Text
$sel:fieldId:UpdateField' :: UpdateField -> Text
$sel:domainId:UpdateField' :: UpdateField -> Text
$sel:name:UpdateField' :: UpdateField -> Maybe Text
$sel:description:UpdateField' :: UpdateField -> Maybe Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"description" 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
description,
            (Key
"name" 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
name
          ]
      )

instance Data.ToPath UpdateField where
  toPath :: UpdateField -> ByteString
toPath UpdateField' {Maybe Text
Text
fieldId :: Text
domainId :: Text
name :: Maybe Text
description :: Maybe Text
$sel:fieldId:UpdateField' :: UpdateField -> Text
$sel:domainId:UpdateField' :: UpdateField -> Text
$sel:name:UpdateField' :: UpdateField -> Maybe Text
$sel:description:UpdateField' :: UpdateField -> Maybe Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"/domains/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
domainId,
        ByteString
"/fields/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
fieldId
      ]

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

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

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

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

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