{-# 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.ChimeSDKMessaging.DescribeChannel
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Returns the full details of a channel in an Amazon Chime @AppInstance@.
--
-- The @x-amz-chime-bearer@ request header is mandatory. Use the
-- @AppInstanceUserArn@ of the user that makes the API call as the value in
-- the header.
module Amazonka.ChimeSDKMessaging.DescribeChannel
  ( -- * Creating a Request
    DescribeChannel (..),
    newDescribeChannel,

    -- * Request Lenses
    describeChannel_channelArn,
    describeChannel_chimeBearer,

    -- * Destructuring the Response
    DescribeChannelResponse (..),
    newDescribeChannelResponse,

    -- * Response Lenses
    describeChannelResponse_channel,
    describeChannelResponse_httpStatus,
  )
where

import Amazonka.ChimeSDKMessaging.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:/ 'newDescribeChannel' smart constructor.
data DescribeChannel = DescribeChannel'
  { -- | The ARN of the channel.
    DescribeChannel -> Text
channelArn :: Prelude.Text,
    -- | The @AppInstanceUserArn@ of the user that makes the API call.
    DescribeChannel -> Text
chimeBearer :: Prelude.Text
  }
  deriving (DescribeChannel -> DescribeChannel -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeChannel -> DescribeChannel -> Bool
$c/= :: DescribeChannel -> DescribeChannel -> Bool
== :: DescribeChannel -> DescribeChannel -> Bool
$c== :: DescribeChannel -> DescribeChannel -> Bool
Prelude.Eq, ReadPrec [DescribeChannel]
ReadPrec DescribeChannel
Int -> ReadS DescribeChannel
ReadS [DescribeChannel]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DescribeChannel]
$creadListPrec :: ReadPrec [DescribeChannel]
readPrec :: ReadPrec DescribeChannel
$creadPrec :: ReadPrec DescribeChannel
readList :: ReadS [DescribeChannel]
$creadList :: ReadS [DescribeChannel]
readsPrec :: Int -> ReadS DescribeChannel
$creadsPrec :: Int -> ReadS DescribeChannel
Prelude.Read, Int -> DescribeChannel -> ShowS
[DescribeChannel] -> ShowS
DescribeChannel -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeChannel] -> ShowS
$cshowList :: [DescribeChannel] -> ShowS
show :: DescribeChannel -> String
$cshow :: DescribeChannel -> String
showsPrec :: Int -> DescribeChannel -> ShowS
$cshowsPrec :: Int -> DescribeChannel -> ShowS
Prelude.Show, forall x. Rep DescribeChannel x -> DescribeChannel
forall x. DescribeChannel -> Rep DescribeChannel x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DescribeChannel x -> DescribeChannel
$cfrom :: forall x. DescribeChannel -> Rep DescribeChannel x
Prelude.Generic)

-- |
-- Create a value of 'DescribeChannel' 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:
--
-- 'channelArn', 'describeChannel_channelArn' - The ARN of the channel.
--
-- 'chimeBearer', 'describeChannel_chimeBearer' - The @AppInstanceUserArn@ of the user that makes the API call.
newDescribeChannel ::
  -- | 'channelArn'
  Prelude.Text ->
  -- | 'chimeBearer'
  Prelude.Text ->
  DescribeChannel
newDescribeChannel :: Text -> Text -> DescribeChannel
newDescribeChannel Text
pChannelArn_ Text
pChimeBearer_ =
  DescribeChannel'
    { $sel:channelArn:DescribeChannel' :: Text
channelArn = Text
pChannelArn_,
      $sel:chimeBearer:DescribeChannel' :: Text
chimeBearer = Text
pChimeBearer_
    }

-- | The ARN of the channel.
describeChannel_channelArn :: Lens.Lens' DescribeChannel Prelude.Text
describeChannel_channelArn :: Lens' DescribeChannel Text
describeChannel_channelArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeChannel' {Text
channelArn :: Text
$sel:channelArn:DescribeChannel' :: DescribeChannel -> Text
channelArn} -> Text
channelArn) (\s :: DescribeChannel
s@DescribeChannel' {} Text
a -> DescribeChannel
s {$sel:channelArn:DescribeChannel' :: Text
channelArn = Text
a} :: DescribeChannel)

-- | The @AppInstanceUserArn@ of the user that makes the API call.
describeChannel_chimeBearer :: Lens.Lens' DescribeChannel Prelude.Text
describeChannel_chimeBearer :: Lens' DescribeChannel Text
describeChannel_chimeBearer = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeChannel' {Text
chimeBearer :: Text
$sel:chimeBearer:DescribeChannel' :: DescribeChannel -> Text
chimeBearer} -> Text
chimeBearer) (\s :: DescribeChannel
s@DescribeChannel' {} Text
a -> DescribeChannel
s {$sel:chimeBearer:DescribeChannel' :: Text
chimeBearer = Text
a} :: DescribeChannel)

instance Core.AWSRequest DescribeChannel where
  type
    AWSResponse DescribeChannel =
      DescribeChannelResponse
  request :: (Service -> Service) -> DescribeChannel -> Request DescribeChannel
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 DescribeChannel
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse DescribeChannel)))
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 Channel -> Int -> DescribeChannelResponse
DescribeChannelResponse'
            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
"Channel")
            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 DescribeChannel where
  hashWithSalt :: Int -> DescribeChannel -> Int
hashWithSalt Int
_salt DescribeChannel' {Text
chimeBearer :: Text
channelArn :: Text
$sel:chimeBearer:DescribeChannel' :: DescribeChannel -> Text
$sel:channelArn:DescribeChannel' :: DescribeChannel -> Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
channelArn
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
chimeBearer

instance Prelude.NFData DescribeChannel where
  rnf :: DescribeChannel -> ()
rnf DescribeChannel' {Text
chimeBearer :: Text
channelArn :: Text
$sel:chimeBearer:DescribeChannel' :: DescribeChannel -> Text
$sel:channelArn:DescribeChannel' :: DescribeChannel -> Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Text
channelArn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
chimeBearer

instance Data.ToHeaders DescribeChannel where
  toHeaders :: DescribeChannel -> ResponseHeaders
toHeaders DescribeChannel' {Text
chimeBearer :: Text
channelArn :: Text
$sel:chimeBearer:DescribeChannel' :: DescribeChannel -> Text
$sel:channelArn:DescribeChannel' :: DescribeChannel -> Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [HeaderName
"x-amz-chime-bearer" forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# Text
chimeBearer]

instance Data.ToPath DescribeChannel where
  toPath :: DescribeChannel -> ByteString
toPath DescribeChannel' {Text
chimeBearer :: Text
channelArn :: Text
$sel:chimeBearer:DescribeChannel' :: DescribeChannel -> Text
$sel:channelArn:DescribeChannel' :: DescribeChannel -> Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ByteString
"/channels/", forall a. ToByteString a => a -> ByteString
Data.toBS Text
channelArn]

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

-- | /See:/ 'newDescribeChannelResponse' smart constructor.
data DescribeChannelResponse = DescribeChannelResponse'
  { -- | The channel details.
    DescribeChannelResponse -> Maybe Channel
channel :: Prelude.Maybe Channel,
    -- | The response's http status code.
    DescribeChannelResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (DescribeChannelResponse -> DescribeChannelResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeChannelResponse -> DescribeChannelResponse -> Bool
$c/= :: DescribeChannelResponse -> DescribeChannelResponse -> Bool
== :: DescribeChannelResponse -> DescribeChannelResponse -> Bool
$c== :: DescribeChannelResponse -> DescribeChannelResponse -> Bool
Prelude.Eq, Int -> DescribeChannelResponse -> ShowS
[DescribeChannelResponse] -> ShowS
DescribeChannelResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeChannelResponse] -> ShowS
$cshowList :: [DescribeChannelResponse] -> ShowS
show :: DescribeChannelResponse -> String
$cshow :: DescribeChannelResponse -> String
showsPrec :: Int -> DescribeChannelResponse -> ShowS
$cshowsPrec :: Int -> DescribeChannelResponse -> ShowS
Prelude.Show, forall x. Rep DescribeChannelResponse x -> DescribeChannelResponse
forall x. DescribeChannelResponse -> Rep DescribeChannelResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DescribeChannelResponse x -> DescribeChannelResponse
$cfrom :: forall x. DescribeChannelResponse -> Rep DescribeChannelResponse x
Prelude.Generic)

-- |
-- Create a value of 'DescribeChannelResponse' 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:
--
-- 'channel', 'describeChannelResponse_channel' - The channel details.
--
-- 'httpStatus', 'describeChannelResponse_httpStatus' - The response's http status code.
newDescribeChannelResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  DescribeChannelResponse
newDescribeChannelResponse :: Int -> DescribeChannelResponse
newDescribeChannelResponse Int
pHttpStatus_ =
  DescribeChannelResponse'
    { $sel:channel:DescribeChannelResponse' :: Maybe Channel
channel = forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:DescribeChannelResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | The channel details.
describeChannelResponse_channel :: Lens.Lens' DescribeChannelResponse (Prelude.Maybe Channel)
describeChannelResponse_channel :: Lens' DescribeChannelResponse (Maybe Channel)
describeChannelResponse_channel = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeChannelResponse' {Maybe Channel
channel :: Maybe Channel
$sel:channel:DescribeChannelResponse' :: DescribeChannelResponse -> Maybe Channel
channel} -> Maybe Channel
channel) (\s :: DescribeChannelResponse
s@DescribeChannelResponse' {} Maybe Channel
a -> DescribeChannelResponse
s {$sel:channel:DescribeChannelResponse' :: Maybe Channel
channel = Maybe Channel
a} :: DescribeChannelResponse)

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

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