{-# 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.IVS.GetStreamSession
-- 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 metadata on a specified stream.
module Amazonka.IVS.GetStreamSession
  ( -- * Creating a Request
    GetStreamSession (..),
    newGetStreamSession,

    -- * Request Lenses
    getStreamSession_streamId,
    getStreamSession_channelArn,

    -- * Destructuring the Response
    GetStreamSessionResponse (..),
    newGetStreamSessionResponse,

    -- * Response Lenses
    getStreamSessionResponse_streamSession,
    getStreamSessionResponse_httpStatus,
  )
where

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

-- | /See:/ 'newGetStreamSession' smart constructor.
data GetStreamSession = GetStreamSession'
  { -- | Unique identifier for a live or previously live stream in the specified
    -- channel. If no @streamId@ is provided, this returns the most recent
    -- stream session for the channel, if it exists.
    GetStreamSession -> Maybe Text
streamId :: Prelude.Maybe Prelude.Text,
    -- | ARN of the channel resource
    GetStreamSession -> Text
channelArn :: Prelude.Text
  }
  deriving (GetStreamSession -> GetStreamSession -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetStreamSession -> GetStreamSession -> Bool
$c/= :: GetStreamSession -> GetStreamSession -> Bool
== :: GetStreamSession -> GetStreamSession -> Bool
$c== :: GetStreamSession -> GetStreamSession -> Bool
Prelude.Eq, ReadPrec [GetStreamSession]
ReadPrec GetStreamSession
Int -> ReadS GetStreamSession
ReadS [GetStreamSession]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetStreamSession]
$creadListPrec :: ReadPrec [GetStreamSession]
readPrec :: ReadPrec GetStreamSession
$creadPrec :: ReadPrec GetStreamSession
readList :: ReadS [GetStreamSession]
$creadList :: ReadS [GetStreamSession]
readsPrec :: Int -> ReadS GetStreamSession
$creadsPrec :: Int -> ReadS GetStreamSession
Prelude.Read, Int -> GetStreamSession -> ShowS
[GetStreamSession] -> ShowS
GetStreamSession -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetStreamSession] -> ShowS
$cshowList :: [GetStreamSession] -> ShowS
show :: GetStreamSession -> String
$cshow :: GetStreamSession -> String
showsPrec :: Int -> GetStreamSession -> ShowS
$cshowsPrec :: Int -> GetStreamSession -> ShowS
Prelude.Show, forall x. Rep GetStreamSession x -> GetStreamSession
forall x. GetStreamSession -> Rep GetStreamSession x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep GetStreamSession x -> GetStreamSession
$cfrom :: forall x. GetStreamSession -> Rep GetStreamSession x
Prelude.Generic)

-- |
-- Create a value of 'GetStreamSession' 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:
--
-- 'streamId', 'getStreamSession_streamId' - Unique identifier for a live or previously live stream in the specified
-- channel. If no @streamId@ is provided, this returns the most recent
-- stream session for the channel, if it exists.
--
-- 'channelArn', 'getStreamSession_channelArn' - ARN of the channel resource
newGetStreamSession ::
  -- | 'channelArn'
  Prelude.Text ->
  GetStreamSession
newGetStreamSession :: Text -> GetStreamSession
newGetStreamSession Text
pChannelArn_ =
  GetStreamSession'
    { $sel:streamId:GetStreamSession' :: Maybe Text
streamId = forall a. Maybe a
Prelude.Nothing,
      $sel:channelArn:GetStreamSession' :: Text
channelArn = Text
pChannelArn_
    }

-- | Unique identifier for a live or previously live stream in the specified
-- channel. If no @streamId@ is provided, this returns the most recent
-- stream session for the channel, if it exists.
getStreamSession_streamId :: Lens.Lens' GetStreamSession (Prelude.Maybe Prelude.Text)
getStreamSession_streamId :: Lens' GetStreamSession (Maybe Text)
getStreamSession_streamId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetStreamSession' {Maybe Text
streamId :: Maybe Text
$sel:streamId:GetStreamSession' :: GetStreamSession -> Maybe Text
streamId} -> Maybe Text
streamId) (\s :: GetStreamSession
s@GetStreamSession' {} Maybe Text
a -> GetStreamSession
s {$sel:streamId:GetStreamSession' :: Maybe Text
streamId = Maybe Text
a} :: GetStreamSession)

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

instance Core.AWSRequest GetStreamSession where
  type
    AWSResponse GetStreamSession =
      GetStreamSessionResponse
  request :: (Service -> Service)
-> GetStreamSession -> Request GetStreamSession
request Service -> Service
overrides =
    forall a. (ToRequest a, ToJSON a) => Service -> a -> Request a
Request.postJSON (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy GetStreamSession
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse GetStreamSession)))
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 StreamSession -> Int -> GetStreamSessionResponse
GetStreamSessionResponse'
            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
"streamSession")
            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 GetStreamSession where
  hashWithSalt :: Int -> GetStreamSession -> Int
hashWithSalt Int
_salt GetStreamSession' {Maybe Text
Text
channelArn :: Text
streamId :: Maybe Text
$sel:channelArn:GetStreamSession' :: GetStreamSession -> Text
$sel:streamId:GetStreamSession' :: GetStreamSession -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
streamId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
channelArn

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

instance Data.ToHeaders GetStreamSession where
  toHeaders :: GetStreamSession -> 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 GetStreamSession where
  toJSON :: GetStreamSession -> Value
toJSON GetStreamSession' {Maybe Text
Text
channelArn :: Text
streamId :: Maybe Text
$sel:channelArn:GetStreamSession' :: GetStreamSession -> Text
$sel:streamId:GetStreamSession' :: GetStreamSession -> Maybe Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"streamId" 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
streamId,
            forall a. a -> Maybe a
Prelude.Just (Key
"channelArn" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
channelArn)
          ]
      )

instance Data.ToPath GetStreamSession where
  toPath :: GetStreamSession -> ByteString
toPath = forall a b. a -> b -> a
Prelude.const ByteString
"/GetStreamSession"

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

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

-- |
-- Create a value of 'GetStreamSessionResponse' 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:
--
-- 'streamSession', 'getStreamSessionResponse_streamSession' - List of stream details.
--
-- 'httpStatus', 'getStreamSessionResponse_httpStatus' - The response's http status code.
newGetStreamSessionResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  GetStreamSessionResponse
newGetStreamSessionResponse :: Int -> GetStreamSessionResponse
newGetStreamSessionResponse Int
pHttpStatus_ =
  GetStreamSessionResponse'
    { $sel:streamSession:GetStreamSessionResponse' :: Maybe StreamSession
streamSession =
        forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:GetStreamSessionResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | List of stream details.
getStreamSessionResponse_streamSession :: Lens.Lens' GetStreamSessionResponse (Prelude.Maybe StreamSession)
getStreamSessionResponse_streamSession :: Lens' GetStreamSessionResponse (Maybe StreamSession)
getStreamSessionResponse_streamSession = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetStreamSessionResponse' {Maybe StreamSession
streamSession :: Maybe StreamSession
$sel:streamSession:GetStreamSessionResponse' :: GetStreamSessionResponse -> Maybe StreamSession
streamSession} -> Maybe StreamSession
streamSession) (\s :: GetStreamSessionResponse
s@GetStreamSessionResponse' {} Maybe StreamSession
a -> GetStreamSessionResponse
s {$sel:streamSession:GetStreamSessionResponse' :: Maybe StreamSession
streamSession = Maybe StreamSession
a} :: GetStreamSessionResponse)

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

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