{-# 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.GetStream
-- 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 information about the active (live) stream on a specified channel.
module Amazonka.IVS.GetStream
  ( -- * Creating a Request
    GetStream (..),
    newGetStream,

    -- * Request Lenses
    getStream_channelArn,

    -- * Destructuring the Response
    GetStreamResponse (..),
    newGetStreamResponse,

    -- * Response Lenses
    getStreamResponse_stream,
    getStreamResponse_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:/ 'newGetStream' smart constructor.
data GetStream = GetStream'
  { -- | Channel ARN for stream to be accessed.
    GetStream -> Text
channelArn :: Prelude.Text
  }
  deriving (GetStream -> GetStream -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetStream -> GetStream -> Bool
$c/= :: GetStream -> GetStream -> Bool
== :: GetStream -> GetStream -> Bool
$c== :: GetStream -> GetStream -> Bool
Prelude.Eq, ReadPrec [GetStream]
ReadPrec GetStream
Int -> ReadS GetStream
ReadS [GetStream]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetStream]
$creadListPrec :: ReadPrec [GetStream]
readPrec :: ReadPrec GetStream
$creadPrec :: ReadPrec GetStream
readList :: ReadS [GetStream]
$creadList :: ReadS [GetStream]
readsPrec :: Int -> ReadS GetStream
$creadsPrec :: Int -> ReadS GetStream
Prelude.Read, Int -> GetStream -> ShowS
[GetStream] -> ShowS
GetStream -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetStream] -> ShowS
$cshowList :: [GetStream] -> ShowS
show :: GetStream -> String
$cshow :: GetStream -> String
showsPrec :: Int -> GetStream -> ShowS
$cshowsPrec :: Int -> GetStream -> ShowS
Prelude.Show, forall x. Rep GetStream x -> GetStream
forall x. GetStream -> Rep GetStream x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep GetStream x -> GetStream
$cfrom :: forall x. GetStream -> Rep GetStream x
Prelude.Generic)

-- |
-- Create a value of 'GetStream' 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', 'getStream_channelArn' - Channel ARN for stream to be accessed.
newGetStream ::
  -- | 'channelArn'
  Prelude.Text ->
  GetStream
newGetStream :: Text -> GetStream
newGetStream Text
pChannelArn_ =
  GetStream' {$sel:channelArn:GetStream' :: Text
channelArn = Text
pChannelArn_}

-- | Channel ARN for stream to be accessed.
getStream_channelArn :: Lens.Lens' GetStream Prelude.Text
getStream_channelArn :: Lens' GetStream Text
getStream_channelArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetStream' {Text
channelArn :: Text
$sel:channelArn:GetStream' :: GetStream -> Text
channelArn} -> Text
channelArn) (\s :: GetStream
s@GetStream' {} Text
a -> GetStream
s {$sel:channelArn:GetStream' :: Text
channelArn = Text
a} :: GetStream)

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

instance Prelude.NFData GetStream where
  rnf :: GetStream -> ()
rnf GetStream' {Text
channelArn :: Text
$sel:channelArn:GetStream' :: GetStream -> Text
..} = forall a. NFData a => a -> ()
Prelude.rnf Text
channelArn

instance Data.ToHeaders GetStream where
  toHeaders :: GetStream -> 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 GetStream where
  toJSON :: GetStream -> Value
toJSON GetStream' {Text
channelArn :: Text
$sel:channelArn:GetStream' :: GetStream -> Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [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 GetStream where
  toPath :: GetStream -> ByteString
toPath = forall a b. a -> b -> a
Prelude.const ByteString
"/GetStream"

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

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

-- |
-- Create a value of 'GetStreamResponse' 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:
--
-- 'stream', 'getStreamResponse_stream' -
--
-- 'httpStatus', 'getStreamResponse_httpStatus' - The response's http status code.
newGetStreamResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  GetStreamResponse
newGetStreamResponse :: Int -> GetStreamResponse
newGetStreamResponse Int
pHttpStatus_ =
  GetStreamResponse'
    { $sel:stream:GetStreamResponse' :: Maybe Stream
stream = forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:GetStreamResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

getStreamResponse_stream :: Lens.Lens' GetStreamResponse (Prelude.Maybe Stream)
getStreamResponse_stream :: Lens' GetStreamResponse (Maybe Stream)
getStreamResponse_stream = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetStreamResponse' {Maybe Stream
stream :: Maybe Stream
$sel:stream:GetStreamResponse' :: GetStreamResponse -> Maybe Stream
stream} -> Maybe Stream
stream) (\s :: GetStreamResponse
s@GetStreamResponse' {} Maybe Stream
a -> GetStreamResponse
s {$sel:stream:GetStreamResponse' :: Maybe Stream
stream = Maybe Stream
a} :: GetStreamResponse)

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

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