{-# 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.Pinpoint.UpdateApnsVoipChannel
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Enables the APNs VoIP channel for an application or updates the status
-- and settings of the APNs VoIP channel for an application.
module Amazonka.Pinpoint.UpdateApnsVoipChannel
  ( -- * Creating a Request
    UpdateApnsVoipChannel (..),
    newUpdateApnsVoipChannel,

    -- * Request Lenses
    updateApnsVoipChannel_applicationId,
    updateApnsVoipChannel_aPNSVoipChannelRequest,

    -- * Destructuring the Response
    UpdateApnsVoipChannelResponse (..),
    newUpdateApnsVoipChannelResponse,

    -- * Response Lenses
    updateApnsVoipChannelResponse_httpStatus,
    updateApnsVoipChannelResponse_aPNSVoipChannelResponse,
  )
where

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

-- | /See:/ 'newUpdateApnsVoipChannel' smart constructor.
data UpdateApnsVoipChannel = UpdateApnsVoipChannel'
  { -- | The unique identifier for the application. This identifier is displayed
    -- as the __Project ID__ on the Amazon Pinpoint console.
    UpdateApnsVoipChannel -> Text
applicationId :: Prelude.Text,
    UpdateApnsVoipChannel -> APNSVoipChannelRequest
aPNSVoipChannelRequest :: APNSVoipChannelRequest
  }
  deriving (UpdateApnsVoipChannel -> UpdateApnsVoipChannel -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UpdateApnsVoipChannel -> UpdateApnsVoipChannel -> Bool
$c/= :: UpdateApnsVoipChannel -> UpdateApnsVoipChannel -> Bool
== :: UpdateApnsVoipChannel -> UpdateApnsVoipChannel -> Bool
$c== :: UpdateApnsVoipChannel -> UpdateApnsVoipChannel -> Bool
Prelude.Eq, ReadPrec [UpdateApnsVoipChannel]
ReadPrec UpdateApnsVoipChannel
Int -> ReadS UpdateApnsVoipChannel
ReadS [UpdateApnsVoipChannel]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [UpdateApnsVoipChannel]
$creadListPrec :: ReadPrec [UpdateApnsVoipChannel]
readPrec :: ReadPrec UpdateApnsVoipChannel
$creadPrec :: ReadPrec UpdateApnsVoipChannel
readList :: ReadS [UpdateApnsVoipChannel]
$creadList :: ReadS [UpdateApnsVoipChannel]
readsPrec :: Int -> ReadS UpdateApnsVoipChannel
$creadsPrec :: Int -> ReadS UpdateApnsVoipChannel
Prelude.Read, Int -> UpdateApnsVoipChannel -> ShowS
[UpdateApnsVoipChannel] -> ShowS
UpdateApnsVoipChannel -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UpdateApnsVoipChannel] -> ShowS
$cshowList :: [UpdateApnsVoipChannel] -> ShowS
show :: UpdateApnsVoipChannel -> String
$cshow :: UpdateApnsVoipChannel -> String
showsPrec :: Int -> UpdateApnsVoipChannel -> ShowS
$cshowsPrec :: Int -> UpdateApnsVoipChannel -> ShowS
Prelude.Show, forall x. Rep UpdateApnsVoipChannel x -> UpdateApnsVoipChannel
forall x. UpdateApnsVoipChannel -> Rep UpdateApnsVoipChannel x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep UpdateApnsVoipChannel x -> UpdateApnsVoipChannel
$cfrom :: forall x. UpdateApnsVoipChannel -> Rep UpdateApnsVoipChannel x
Prelude.Generic)

-- |
-- Create a value of 'UpdateApnsVoipChannel' 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:
--
-- 'applicationId', 'updateApnsVoipChannel_applicationId' - The unique identifier for the application. This identifier is displayed
-- as the __Project ID__ on the Amazon Pinpoint console.
--
-- 'aPNSVoipChannelRequest', 'updateApnsVoipChannel_aPNSVoipChannelRequest' - Undocumented member.
newUpdateApnsVoipChannel ::
  -- | 'applicationId'
  Prelude.Text ->
  -- | 'aPNSVoipChannelRequest'
  APNSVoipChannelRequest ->
  UpdateApnsVoipChannel
newUpdateApnsVoipChannel :: Text -> APNSVoipChannelRequest -> UpdateApnsVoipChannel
newUpdateApnsVoipChannel
  Text
pApplicationId_
  APNSVoipChannelRequest
pAPNSVoipChannelRequest_ =
    UpdateApnsVoipChannel'
      { $sel:applicationId:UpdateApnsVoipChannel' :: Text
applicationId =
          Text
pApplicationId_,
        $sel:aPNSVoipChannelRequest:UpdateApnsVoipChannel' :: APNSVoipChannelRequest
aPNSVoipChannelRequest = APNSVoipChannelRequest
pAPNSVoipChannelRequest_
      }

-- | The unique identifier for the application. This identifier is displayed
-- as the __Project ID__ on the Amazon Pinpoint console.
updateApnsVoipChannel_applicationId :: Lens.Lens' UpdateApnsVoipChannel Prelude.Text
updateApnsVoipChannel_applicationId :: Lens' UpdateApnsVoipChannel Text
updateApnsVoipChannel_applicationId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateApnsVoipChannel' {Text
applicationId :: Text
$sel:applicationId:UpdateApnsVoipChannel' :: UpdateApnsVoipChannel -> Text
applicationId} -> Text
applicationId) (\s :: UpdateApnsVoipChannel
s@UpdateApnsVoipChannel' {} Text
a -> UpdateApnsVoipChannel
s {$sel:applicationId:UpdateApnsVoipChannel' :: Text
applicationId = Text
a} :: UpdateApnsVoipChannel)

-- | Undocumented member.
updateApnsVoipChannel_aPNSVoipChannelRequest :: Lens.Lens' UpdateApnsVoipChannel APNSVoipChannelRequest
updateApnsVoipChannel_aPNSVoipChannelRequest :: Lens' UpdateApnsVoipChannel APNSVoipChannelRequest
updateApnsVoipChannel_aPNSVoipChannelRequest = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateApnsVoipChannel' {APNSVoipChannelRequest
aPNSVoipChannelRequest :: APNSVoipChannelRequest
$sel:aPNSVoipChannelRequest:UpdateApnsVoipChannel' :: UpdateApnsVoipChannel -> APNSVoipChannelRequest
aPNSVoipChannelRequest} -> APNSVoipChannelRequest
aPNSVoipChannelRequest) (\s :: UpdateApnsVoipChannel
s@UpdateApnsVoipChannel' {} APNSVoipChannelRequest
a -> UpdateApnsVoipChannel
s {$sel:aPNSVoipChannelRequest:UpdateApnsVoipChannel' :: APNSVoipChannelRequest
aPNSVoipChannelRequest = APNSVoipChannelRequest
a} :: UpdateApnsVoipChannel)

instance Core.AWSRequest UpdateApnsVoipChannel where
  type
    AWSResponse UpdateApnsVoipChannel =
      UpdateApnsVoipChannelResponse
  request :: (Service -> Service)
-> UpdateApnsVoipChannel -> Request UpdateApnsVoipChannel
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 UpdateApnsVoipChannel
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse UpdateApnsVoipChannel)))
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 -> APNSVoipChannelResponse -> UpdateApnsVoipChannelResponse
UpdateApnsVoipChannelResponse'
            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.<*> (forall a. FromJSON a => Object -> Either String a
Data.eitherParseJSON Object
x)
      )

instance Prelude.Hashable UpdateApnsVoipChannel where
  hashWithSalt :: Int -> UpdateApnsVoipChannel -> Int
hashWithSalt Int
_salt UpdateApnsVoipChannel' {Text
APNSVoipChannelRequest
aPNSVoipChannelRequest :: APNSVoipChannelRequest
applicationId :: Text
$sel:aPNSVoipChannelRequest:UpdateApnsVoipChannel' :: UpdateApnsVoipChannel -> APNSVoipChannelRequest
$sel:applicationId:UpdateApnsVoipChannel' :: UpdateApnsVoipChannel -> Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
applicationId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` APNSVoipChannelRequest
aPNSVoipChannelRequest

instance Prelude.NFData UpdateApnsVoipChannel where
  rnf :: UpdateApnsVoipChannel -> ()
rnf UpdateApnsVoipChannel' {Text
APNSVoipChannelRequest
aPNSVoipChannelRequest :: APNSVoipChannelRequest
applicationId :: Text
$sel:aPNSVoipChannelRequest:UpdateApnsVoipChannel' :: UpdateApnsVoipChannel -> APNSVoipChannelRequest
$sel:applicationId:UpdateApnsVoipChannel' :: UpdateApnsVoipChannel -> Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Text
applicationId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf APNSVoipChannelRequest
aPNSVoipChannelRequest

instance Data.ToHeaders UpdateApnsVoipChannel where
  toHeaders :: UpdateApnsVoipChannel -> 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 UpdateApnsVoipChannel where
  toJSON :: UpdateApnsVoipChannel -> Value
toJSON UpdateApnsVoipChannel' {Text
APNSVoipChannelRequest
aPNSVoipChannelRequest :: APNSVoipChannelRequest
applicationId :: Text
$sel:aPNSVoipChannelRequest:UpdateApnsVoipChannel' :: UpdateApnsVoipChannel -> APNSVoipChannelRequest
$sel:applicationId:UpdateApnsVoipChannel' :: UpdateApnsVoipChannel -> Text
..} =
    forall a. ToJSON a => a -> Value
Data.toJSON APNSVoipChannelRequest
aPNSVoipChannelRequest

instance Data.ToPath UpdateApnsVoipChannel where
  toPath :: UpdateApnsVoipChannel -> ByteString
toPath UpdateApnsVoipChannel' {Text
APNSVoipChannelRequest
aPNSVoipChannelRequest :: APNSVoipChannelRequest
applicationId :: Text
$sel:aPNSVoipChannelRequest:UpdateApnsVoipChannel' :: UpdateApnsVoipChannel -> APNSVoipChannelRequest
$sel:applicationId:UpdateApnsVoipChannel' :: UpdateApnsVoipChannel -> Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"/v1/apps/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
applicationId,
        ByteString
"/channels/apns_voip"
      ]

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

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

-- |
-- Create a value of 'UpdateApnsVoipChannelResponse' 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', 'updateApnsVoipChannelResponse_httpStatus' - The response's http status code.
--
-- 'aPNSVoipChannelResponse', 'updateApnsVoipChannelResponse_aPNSVoipChannelResponse' - Undocumented member.
newUpdateApnsVoipChannelResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  -- | 'aPNSVoipChannelResponse'
  APNSVoipChannelResponse ->
  UpdateApnsVoipChannelResponse
newUpdateApnsVoipChannelResponse :: Int -> APNSVoipChannelResponse -> UpdateApnsVoipChannelResponse
newUpdateApnsVoipChannelResponse
  Int
pHttpStatus_
  APNSVoipChannelResponse
pAPNSVoipChannelResponse_ =
    UpdateApnsVoipChannelResponse'
      { $sel:httpStatus:UpdateApnsVoipChannelResponse' :: Int
httpStatus =
          Int
pHttpStatus_,
        $sel:aPNSVoipChannelResponse:UpdateApnsVoipChannelResponse' :: APNSVoipChannelResponse
aPNSVoipChannelResponse =
          APNSVoipChannelResponse
pAPNSVoipChannelResponse_
      }

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

-- | Undocumented member.
updateApnsVoipChannelResponse_aPNSVoipChannelResponse :: Lens.Lens' UpdateApnsVoipChannelResponse APNSVoipChannelResponse
updateApnsVoipChannelResponse_aPNSVoipChannelResponse :: Lens' UpdateApnsVoipChannelResponse APNSVoipChannelResponse
updateApnsVoipChannelResponse_aPNSVoipChannelResponse = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateApnsVoipChannelResponse' {APNSVoipChannelResponse
aPNSVoipChannelResponse :: APNSVoipChannelResponse
$sel:aPNSVoipChannelResponse:UpdateApnsVoipChannelResponse' :: UpdateApnsVoipChannelResponse -> APNSVoipChannelResponse
aPNSVoipChannelResponse} -> APNSVoipChannelResponse
aPNSVoipChannelResponse) (\s :: UpdateApnsVoipChannelResponse
s@UpdateApnsVoipChannelResponse' {} APNSVoipChannelResponse
a -> UpdateApnsVoipChannelResponse
s {$sel:aPNSVoipChannelResponse:UpdateApnsVoipChannelResponse' :: APNSVoipChannelResponse
aPNSVoipChannelResponse = APNSVoipChannelResponse
a} :: UpdateApnsVoipChannelResponse)

instance Prelude.NFData UpdateApnsVoipChannelResponse where
  rnf :: UpdateApnsVoipChannelResponse -> ()
rnf UpdateApnsVoipChannelResponse' {Int
APNSVoipChannelResponse
aPNSVoipChannelResponse :: APNSVoipChannelResponse
httpStatus :: Int
$sel:aPNSVoipChannelResponse:UpdateApnsVoipChannelResponse' :: UpdateApnsVoipChannelResponse -> APNSVoipChannelResponse
$sel:httpStatus:UpdateApnsVoipChannelResponse' :: UpdateApnsVoipChannelResponse -> 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 APNSVoipChannelResponse
aPNSVoipChannelResponse