{-# 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.Nimble.GetStreamingSessionStream
-- 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 a StreamingSessionStream for a streaming session.
--
-- Invoke this operation to poll the resource after invoking
-- @CreateStreamingSessionStream@.
--
-- After the @StreamingSessionStream@ changes to the @READY@ state, the url
-- property will contain a stream to be used with the DCV streaming client.
module Amazonka.Nimble.GetStreamingSessionStream
  ( -- * Creating a Request
    GetStreamingSessionStream (..),
    newGetStreamingSessionStream,

    -- * Request Lenses
    getStreamingSessionStream_sessionId,
    getStreamingSessionStream_streamId,
    getStreamingSessionStream_studioId,

    -- * Destructuring the Response
    GetStreamingSessionStreamResponse (..),
    newGetStreamingSessionStreamResponse,

    -- * Response Lenses
    getStreamingSessionStreamResponse_stream,
    getStreamingSessionStreamResponse_httpStatus,
  )
where

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

-- | /See:/ 'newGetStreamingSessionStream' smart constructor.
data GetStreamingSessionStream = GetStreamingSessionStream'
  { -- | The streaming session ID.
    GetStreamingSessionStream -> Text
sessionId :: Prelude.Text,
    -- | The streaming session stream ID.
    GetStreamingSessionStream -> Text
streamId :: Prelude.Text,
    -- | The studio ID.
    GetStreamingSessionStream -> Text
studioId :: Prelude.Text
  }
  deriving (GetStreamingSessionStream -> GetStreamingSessionStream -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetStreamingSessionStream -> GetStreamingSessionStream -> Bool
$c/= :: GetStreamingSessionStream -> GetStreamingSessionStream -> Bool
== :: GetStreamingSessionStream -> GetStreamingSessionStream -> Bool
$c== :: GetStreamingSessionStream -> GetStreamingSessionStream -> Bool
Prelude.Eq, ReadPrec [GetStreamingSessionStream]
ReadPrec GetStreamingSessionStream
Int -> ReadS GetStreamingSessionStream
ReadS [GetStreamingSessionStream]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetStreamingSessionStream]
$creadListPrec :: ReadPrec [GetStreamingSessionStream]
readPrec :: ReadPrec GetStreamingSessionStream
$creadPrec :: ReadPrec GetStreamingSessionStream
readList :: ReadS [GetStreamingSessionStream]
$creadList :: ReadS [GetStreamingSessionStream]
readsPrec :: Int -> ReadS GetStreamingSessionStream
$creadsPrec :: Int -> ReadS GetStreamingSessionStream
Prelude.Read, Int -> GetStreamingSessionStream -> ShowS
[GetStreamingSessionStream] -> ShowS
GetStreamingSessionStream -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetStreamingSessionStream] -> ShowS
$cshowList :: [GetStreamingSessionStream] -> ShowS
show :: GetStreamingSessionStream -> String
$cshow :: GetStreamingSessionStream -> String
showsPrec :: Int -> GetStreamingSessionStream -> ShowS
$cshowsPrec :: Int -> GetStreamingSessionStream -> ShowS
Prelude.Show, forall x.
Rep GetStreamingSessionStream x -> GetStreamingSessionStream
forall x.
GetStreamingSessionStream -> Rep GetStreamingSessionStream x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep GetStreamingSessionStream x -> GetStreamingSessionStream
$cfrom :: forall x.
GetStreamingSessionStream -> Rep GetStreamingSessionStream x
Prelude.Generic)

-- |
-- Create a value of 'GetStreamingSessionStream' 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:
--
-- 'sessionId', 'getStreamingSessionStream_sessionId' - The streaming session ID.
--
-- 'streamId', 'getStreamingSessionStream_streamId' - The streaming session stream ID.
--
-- 'studioId', 'getStreamingSessionStream_studioId' - The studio ID.
newGetStreamingSessionStream ::
  -- | 'sessionId'
  Prelude.Text ->
  -- | 'streamId'
  Prelude.Text ->
  -- | 'studioId'
  Prelude.Text ->
  GetStreamingSessionStream
newGetStreamingSessionStream :: Text -> Text -> Text -> GetStreamingSessionStream
newGetStreamingSessionStream
  Text
pSessionId_
  Text
pStreamId_
  Text
pStudioId_ =
    GetStreamingSessionStream'
      { $sel:sessionId:GetStreamingSessionStream' :: Text
sessionId = Text
pSessionId_,
        $sel:streamId:GetStreamingSessionStream' :: Text
streamId = Text
pStreamId_,
        $sel:studioId:GetStreamingSessionStream' :: Text
studioId = Text
pStudioId_
      }

-- | The streaming session ID.
getStreamingSessionStream_sessionId :: Lens.Lens' GetStreamingSessionStream Prelude.Text
getStreamingSessionStream_sessionId :: Lens' GetStreamingSessionStream Text
getStreamingSessionStream_sessionId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetStreamingSessionStream' {Text
sessionId :: Text
$sel:sessionId:GetStreamingSessionStream' :: GetStreamingSessionStream -> Text
sessionId} -> Text
sessionId) (\s :: GetStreamingSessionStream
s@GetStreamingSessionStream' {} Text
a -> GetStreamingSessionStream
s {$sel:sessionId:GetStreamingSessionStream' :: Text
sessionId = Text
a} :: GetStreamingSessionStream)

-- | The streaming session stream ID.
getStreamingSessionStream_streamId :: Lens.Lens' GetStreamingSessionStream Prelude.Text
getStreamingSessionStream_streamId :: Lens' GetStreamingSessionStream Text
getStreamingSessionStream_streamId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetStreamingSessionStream' {Text
streamId :: Text
$sel:streamId:GetStreamingSessionStream' :: GetStreamingSessionStream -> Text
streamId} -> Text
streamId) (\s :: GetStreamingSessionStream
s@GetStreamingSessionStream' {} Text
a -> GetStreamingSessionStream
s {$sel:streamId:GetStreamingSessionStream' :: Text
streamId = Text
a} :: GetStreamingSessionStream)

-- | The studio ID.
getStreamingSessionStream_studioId :: Lens.Lens' GetStreamingSessionStream Prelude.Text
getStreamingSessionStream_studioId :: Lens' GetStreamingSessionStream Text
getStreamingSessionStream_studioId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetStreamingSessionStream' {Text
studioId :: Text
$sel:studioId:GetStreamingSessionStream' :: GetStreamingSessionStream -> Text
studioId} -> Text
studioId) (\s :: GetStreamingSessionStream
s@GetStreamingSessionStream' {} Text
a -> GetStreamingSessionStream
s {$sel:studioId:GetStreamingSessionStream' :: Text
studioId = Text
a} :: GetStreamingSessionStream)

instance Core.AWSRequest GetStreamingSessionStream where
  type
    AWSResponse GetStreamingSessionStream =
      GetStreamingSessionStreamResponse
  request :: (Service -> Service)
-> GetStreamingSessionStream -> Request GetStreamingSessionStream
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 GetStreamingSessionStream
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse GetStreamingSessionStream)))
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 StreamingSessionStream
-> Int -> GetStreamingSessionStreamResponse
GetStreamingSessionStreamResponse'
            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 GetStreamingSessionStream where
  hashWithSalt :: Int -> GetStreamingSessionStream -> Int
hashWithSalt Int
_salt GetStreamingSessionStream' {Text
studioId :: Text
streamId :: Text
sessionId :: Text
$sel:studioId:GetStreamingSessionStream' :: GetStreamingSessionStream -> Text
$sel:streamId:GetStreamingSessionStream' :: GetStreamingSessionStream -> Text
$sel:sessionId:GetStreamingSessionStream' :: GetStreamingSessionStream -> Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
sessionId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
streamId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
studioId

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

instance Data.ToHeaders GetStreamingSessionStream where
  toHeaders :: GetStreamingSessionStream -> 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.ToPath GetStreamingSessionStream where
  toPath :: GetStreamingSessionStream -> ByteString
toPath GetStreamingSessionStream' {Text
studioId :: Text
streamId :: Text
sessionId :: Text
$sel:studioId:GetStreamingSessionStream' :: GetStreamingSessionStream -> Text
$sel:streamId:GetStreamingSessionStream' :: GetStreamingSessionStream -> Text
$sel:sessionId:GetStreamingSessionStream' :: GetStreamingSessionStream -> Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"/2020-08-01/studios/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
studioId,
        ByteString
"/streaming-sessions/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
sessionId,
        ByteString
"/streams/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
streamId
      ]

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

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

-- |
-- Create a value of 'GetStreamingSessionStreamResponse' 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', 'getStreamingSessionStreamResponse_stream' - The stream.
--
-- 'httpStatus', 'getStreamingSessionStreamResponse_httpStatus' - The response's http status code.
newGetStreamingSessionStreamResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  GetStreamingSessionStreamResponse
newGetStreamingSessionStreamResponse :: Int -> GetStreamingSessionStreamResponse
newGetStreamingSessionStreamResponse Int
pHttpStatus_ =
  GetStreamingSessionStreamResponse'
    { $sel:stream:GetStreamingSessionStreamResponse' :: Maybe StreamingSessionStream
stream =
        forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:GetStreamingSessionStreamResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | The stream.
getStreamingSessionStreamResponse_stream :: Lens.Lens' GetStreamingSessionStreamResponse (Prelude.Maybe StreamingSessionStream)
getStreamingSessionStreamResponse_stream :: Lens'
  GetStreamingSessionStreamResponse (Maybe StreamingSessionStream)
getStreamingSessionStreamResponse_stream = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetStreamingSessionStreamResponse' {Maybe StreamingSessionStream
stream :: Maybe StreamingSessionStream
$sel:stream:GetStreamingSessionStreamResponse' :: GetStreamingSessionStreamResponse -> Maybe StreamingSessionStream
stream} -> Maybe StreamingSessionStream
stream) (\s :: GetStreamingSessionStreamResponse
s@GetStreamingSessionStreamResponse' {} Maybe StreamingSessionStream
a -> GetStreamingSessionStreamResponse
s {$sel:stream:GetStreamingSessionStreamResponse' :: Maybe StreamingSessionStream
stream = Maybe StreamingSessionStream
a} :: GetStreamingSessionStreamResponse)

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

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