{-# 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.CloudFront.CreateStreamingDistribution
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- This API is deprecated. Amazon CloudFront is deprecating real-time
-- messaging protocol (RTMP) distributions on December 31, 2020. For more
-- information,
-- <http://forums.aws.amazon.com/ann.jspa?annID=7356 read the announcement>
-- on the Amazon CloudFront discussion forum.
module Amazonka.CloudFront.CreateStreamingDistribution
  ( -- * Creating a Request
    CreateStreamingDistribution (..),
    newCreateStreamingDistribution,

    -- * Request Lenses
    createStreamingDistribution_streamingDistributionConfig,

    -- * Destructuring the Response
    CreateStreamingDistributionResponse (..),
    newCreateStreamingDistributionResponse,

    -- * Response Lenses
    createStreamingDistributionResponse_eTag,
    createStreamingDistributionResponse_location,
    createStreamingDistributionResponse_streamingDistribution,
    createStreamingDistributionResponse_httpStatus,
  )
where

import Amazonka.CloudFront.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

-- | The request to create a new streaming distribution.
--
-- /See:/ 'newCreateStreamingDistribution' smart constructor.
data CreateStreamingDistribution = CreateStreamingDistribution'
  { -- | The streaming distribution\'s configuration information.
    CreateStreamingDistribution -> StreamingDistributionConfig
streamingDistributionConfig :: StreamingDistributionConfig
  }
  deriving (CreateStreamingDistribution -> CreateStreamingDistribution -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateStreamingDistribution -> CreateStreamingDistribution -> Bool
$c/= :: CreateStreamingDistribution -> CreateStreamingDistribution -> Bool
== :: CreateStreamingDistribution -> CreateStreamingDistribution -> Bool
$c== :: CreateStreamingDistribution -> CreateStreamingDistribution -> Bool
Prelude.Eq, ReadPrec [CreateStreamingDistribution]
ReadPrec CreateStreamingDistribution
Int -> ReadS CreateStreamingDistribution
ReadS [CreateStreamingDistribution]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CreateStreamingDistribution]
$creadListPrec :: ReadPrec [CreateStreamingDistribution]
readPrec :: ReadPrec CreateStreamingDistribution
$creadPrec :: ReadPrec CreateStreamingDistribution
readList :: ReadS [CreateStreamingDistribution]
$creadList :: ReadS [CreateStreamingDistribution]
readsPrec :: Int -> ReadS CreateStreamingDistribution
$creadsPrec :: Int -> ReadS CreateStreamingDistribution
Prelude.Read, Int -> CreateStreamingDistribution -> ShowS
[CreateStreamingDistribution] -> ShowS
CreateStreamingDistribution -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateStreamingDistribution] -> ShowS
$cshowList :: [CreateStreamingDistribution] -> ShowS
show :: CreateStreamingDistribution -> String
$cshow :: CreateStreamingDistribution -> String
showsPrec :: Int -> CreateStreamingDistribution -> ShowS
$cshowsPrec :: Int -> CreateStreamingDistribution -> ShowS
Prelude.Show, forall x.
Rep CreateStreamingDistribution x -> CreateStreamingDistribution
forall x.
CreateStreamingDistribution -> Rep CreateStreamingDistribution x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep CreateStreamingDistribution x -> CreateStreamingDistribution
$cfrom :: forall x.
CreateStreamingDistribution -> Rep CreateStreamingDistribution x
Prelude.Generic)

-- |
-- Create a value of 'CreateStreamingDistribution' 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:
--
-- 'streamingDistributionConfig', 'createStreamingDistribution_streamingDistributionConfig' - The streaming distribution\'s configuration information.
newCreateStreamingDistribution ::
  -- | 'streamingDistributionConfig'
  StreamingDistributionConfig ->
  CreateStreamingDistribution
newCreateStreamingDistribution :: StreamingDistributionConfig -> CreateStreamingDistribution
newCreateStreamingDistribution
  StreamingDistributionConfig
pStreamingDistributionConfig_ =
    CreateStreamingDistribution'
      { $sel:streamingDistributionConfig:CreateStreamingDistribution' :: StreamingDistributionConfig
streamingDistributionConfig =
          StreamingDistributionConfig
pStreamingDistributionConfig_
      }

-- | The streaming distribution\'s configuration information.
createStreamingDistribution_streamingDistributionConfig :: Lens.Lens' CreateStreamingDistribution StreamingDistributionConfig
createStreamingDistribution_streamingDistributionConfig :: Lens' CreateStreamingDistribution StreamingDistributionConfig
createStreamingDistribution_streamingDistributionConfig = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateStreamingDistribution' {StreamingDistributionConfig
streamingDistributionConfig :: StreamingDistributionConfig
$sel:streamingDistributionConfig:CreateStreamingDistribution' :: CreateStreamingDistribution -> StreamingDistributionConfig
streamingDistributionConfig} -> StreamingDistributionConfig
streamingDistributionConfig) (\s :: CreateStreamingDistribution
s@CreateStreamingDistribution' {} StreamingDistributionConfig
a -> CreateStreamingDistribution
s {$sel:streamingDistributionConfig:CreateStreamingDistribution' :: StreamingDistributionConfig
streamingDistributionConfig = StreamingDistributionConfig
a} :: CreateStreamingDistribution)

instance Core.AWSRequest CreateStreamingDistribution where
  type
    AWSResponse CreateStreamingDistribution =
      CreateStreamingDistributionResponse
  request :: (Service -> Service)
-> CreateStreamingDistribution
-> Request CreateStreamingDistribution
request Service -> Service
overrides =
    forall a. (ToRequest a, ToElement a) => Service -> a -> Request a
Request.postXML (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy CreateStreamingDistribution
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse CreateStreamingDistribution)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
(Int -> ResponseHeaders -> [Node] -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveXML
      ( \Int
s ResponseHeaders
h [Node]
x ->
          Maybe Text
-> Maybe Text
-> Maybe StreamingDistribution
-> Int
-> CreateStreamingDistributionResponse
CreateStreamingDistributionResponse'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (ResponseHeaders
h forall a.
FromText a =>
ResponseHeaders -> HeaderName -> Either String (Maybe a)
Data..#? HeaderName
"ETag")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (ResponseHeaders
h forall a.
FromText a =>
ResponseHeaders -> HeaderName -> Either String (Maybe a)
Data..#? HeaderName
"Location")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (forall a. FromXML a => [Node] -> Either String a
Data.parseXML [Node]
x)
            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 CreateStreamingDistribution where
  hashWithSalt :: Int -> CreateStreamingDistribution -> Int
hashWithSalt Int
_salt CreateStreamingDistribution' {StreamingDistributionConfig
streamingDistributionConfig :: StreamingDistributionConfig
$sel:streamingDistributionConfig:CreateStreamingDistribution' :: CreateStreamingDistribution -> StreamingDistributionConfig
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` StreamingDistributionConfig
streamingDistributionConfig

instance Prelude.NFData CreateStreamingDistribution where
  rnf :: CreateStreamingDistribution -> ()
rnf CreateStreamingDistribution' {StreamingDistributionConfig
streamingDistributionConfig :: StreamingDistributionConfig
$sel:streamingDistributionConfig:CreateStreamingDistribution' :: CreateStreamingDistribution -> StreamingDistributionConfig
..} =
    forall a. NFData a => a -> ()
Prelude.rnf StreamingDistributionConfig
streamingDistributionConfig

instance Data.ToElement CreateStreamingDistribution where
  toElement :: CreateStreamingDistribution -> Element
toElement CreateStreamingDistribution' {StreamingDistributionConfig
streamingDistributionConfig :: StreamingDistributionConfig
$sel:streamingDistributionConfig:CreateStreamingDistribution' :: CreateStreamingDistribution -> StreamingDistributionConfig
..} =
    forall a. ToXML a => Name -> a -> Element
Data.mkElement
      Name
"{http://cloudfront.amazonaws.com/doc/2020-05-31/}StreamingDistributionConfig"
      StreamingDistributionConfig
streamingDistributionConfig

instance Data.ToHeaders CreateStreamingDistribution where
  toHeaders :: CreateStreamingDistribution -> ResponseHeaders
toHeaders = forall a b. a -> b -> a
Prelude.const forall a. Monoid a => a
Prelude.mempty

instance Data.ToPath CreateStreamingDistribution where
  toPath :: CreateStreamingDistribution -> ByteString
toPath =
    forall a b. a -> b -> a
Prelude.const ByteString
"/2020-05-31/streaming-distribution"

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

-- | The returned result of the corresponding request.
--
-- /See:/ 'newCreateStreamingDistributionResponse' smart constructor.
data CreateStreamingDistributionResponse = CreateStreamingDistributionResponse'
  { -- | The current version of the streaming distribution created.
    CreateStreamingDistributionResponse -> Maybe Text
eTag :: Prelude.Maybe Prelude.Text,
    -- | The fully qualified URI of the new streaming distribution resource just
    -- created.
    CreateStreamingDistributionResponse -> Maybe Text
location :: Prelude.Maybe Prelude.Text,
    -- | The streaming distribution\'s information.
    CreateStreamingDistributionResponse -> Maybe StreamingDistribution
streamingDistribution :: Prelude.Maybe StreamingDistribution,
    -- | The response's http status code.
    CreateStreamingDistributionResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (CreateStreamingDistributionResponse
-> CreateStreamingDistributionResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateStreamingDistributionResponse
-> CreateStreamingDistributionResponse -> Bool
$c/= :: CreateStreamingDistributionResponse
-> CreateStreamingDistributionResponse -> Bool
== :: CreateStreamingDistributionResponse
-> CreateStreamingDistributionResponse -> Bool
$c== :: CreateStreamingDistributionResponse
-> CreateStreamingDistributionResponse -> Bool
Prelude.Eq, ReadPrec [CreateStreamingDistributionResponse]
ReadPrec CreateStreamingDistributionResponse
Int -> ReadS CreateStreamingDistributionResponse
ReadS [CreateStreamingDistributionResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CreateStreamingDistributionResponse]
$creadListPrec :: ReadPrec [CreateStreamingDistributionResponse]
readPrec :: ReadPrec CreateStreamingDistributionResponse
$creadPrec :: ReadPrec CreateStreamingDistributionResponse
readList :: ReadS [CreateStreamingDistributionResponse]
$creadList :: ReadS [CreateStreamingDistributionResponse]
readsPrec :: Int -> ReadS CreateStreamingDistributionResponse
$creadsPrec :: Int -> ReadS CreateStreamingDistributionResponse
Prelude.Read, Int -> CreateStreamingDistributionResponse -> ShowS
[CreateStreamingDistributionResponse] -> ShowS
CreateStreamingDistributionResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateStreamingDistributionResponse] -> ShowS
$cshowList :: [CreateStreamingDistributionResponse] -> ShowS
show :: CreateStreamingDistributionResponse -> String
$cshow :: CreateStreamingDistributionResponse -> String
showsPrec :: Int -> CreateStreamingDistributionResponse -> ShowS
$cshowsPrec :: Int -> CreateStreamingDistributionResponse -> ShowS
Prelude.Show, forall x.
Rep CreateStreamingDistributionResponse x
-> CreateStreamingDistributionResponse
forall x.
CreateStreamingDistributionResponse
-> Rep CreateStreamingDistributionResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep CreateStreamingDistributionResponse x
-> CreateStreamingDistributionResponse
$cfrom :: forall x.
CreateStreamingDistributionResponse
-> Rep CreateStreamingDistributionResponse x
Prelude.Generic)

-- |
-- Create a value of 'CreateStreamingDistributionResponse' 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:
--
-- 'eTag', 'createStreamingDistributionResponse_eTag' - The current version of the streaming distribution created.
--
-- 'location', 'createStreamingDistributionResponse_location' - The fully qualified URI of the new streaming distribution resource just
-- created.
--
-- 'streamingDistribution', 'createStreamingDistributionResponse_streamingDistribution' - The streaming distribution\'s information.
--
-- 'httpStatus', 'createStreamingDistributionResponse_httpStatus' - The response's http status code.
newCreateStreamingDistributionResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  CreateStreamingDistributionResponse
newCreateStreamingDistributionResponse :: Int -> CreateStreamingDistributionResponse
newCreateStreamingDistributionResponse Int
pHttpStatus_ =
  CreateStreamingDistributionResponse'
    { $sel:eTag:CreateStreamingDistributionResponse' :: Maybe Text
eTag =
        forall a. Maybe a
Prelude.Nothing,
      $sel:location:CreateStreamingDistributionResponse' :: Maybe Text
location = forall a. Maybe a
Prelude.Nothing,
      $sel:streamingDistribution:CreateStreamingDistributionResponse' :: Maybe StreamingDistribution
streamingDistribution =
        forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:CreateStreamingDistributionResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | The current version of the streaming distribution created.
createStreamingDistributionResponse_eTag :: Lens.Lens' CreateStreamingDistributionResponse (Prelude.Maybe Prelude.Text)
createStreamingDistributionResponse_eTag :: Lens' CreateStreamingDistributionResponse (Maybe Text)
createStreamingDistributionResponse_eTag = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateStreamingDistributionResponse' {Maybe Text
eTag :: Maybe Text
$sel:eTag:CreateStreamingDistributionResponse' :: CreateStreamingDistributionResponse -> Maybe Text
eTag} -> Maybe Text
eTag) (\s :: CreateStreamingDistributionResponse
s@CreateStreamingDistributionResponse' {} Maybe Text
a -> CreateStreamingDistributionResponse
s {$sel:eTag:CreateStreamingDistributionResponse' :: Maybe Text
eTag = Maybe Text
a} :: CreateStreamingDistributionResponse)

-- | The fully qualified URI of the new streaming distribution resource just
-- created.
createStreamingDistributionResponse_location :: Lens.Lens' CreateStreamingDistributionResponse (Prelude.Maybe Prelude.Text)
createStreamingDistributionResponse_location :: Lens' CreateStreamingDistributionResponse (Maybe Text)
createStreamingDistributionResponse_location = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateStreamingDistributionResponse' {Maybe Text
location :: Maybe Text
$sel:location:CreateStreamingDistributionResponse' :: CreateStreamingDistributionResponse -> Maybe Text
location} -> Maybe Text
location) (\s :: CreateStreamingDistributionResponse
s@CreateStreamingDistributionResponse' {} Maybe Text
a -> CreateStreamingDistributionResponse
s {$sel:location:CreateStreamingDistributionResponse' :: Maybe Text
location = Maybe Text
a} :: CreateStreamingDistributionResponse)

-- | The streaming distribution\'s information.
createStreamingDistributionResponse_streamingDistribution :: Lens.Lens' CreateStreamingDistributionResponse (Prelude.Maybe StreamingDistribution)
createStreamingDistributionResponse_streamingDistribution :: Lens'
  CreateStreamingDistributionResponse (Maybe StreamingDistribution)
createStreamingDistributionResponse_streamingDistribution = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateStreamingDistributionResponse' {Maybe StreamingDistribution
streamingDistribution :: Maybe StreamingDistribution
$sel:streamingDistribution:CreateStreamingDistributionResponse' :: CreateStreamingDistributionResponse -> Maybe StreamingDistribution
streamingDistribution} -> Maybe StreamingDistribution
streamingDistribution) (\s :: CreateStreamingDistributionResponse
s@CreateStreamingDistributionResponse' {} Maybe StreamingDistribution
a -> CreateStreamingDistributionResponse
s {$sel:streamingDistribution:CreateStreamingDistributionResponse' :: Maybe StreamingDistribution
streamingDistribution = Maybe StreamingDistribution
a} :: CreateStreamingDistributionResponse)

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

instance
  Prelude.NFData
    CreateStreamingDistributionResponse
  where
  rnf :: CreateStreamingDistributionResponse -> ()
rnf CreateStreamingDistributionResponse' {Int
Maybe Text
Maybe StreamingDistribution
httpStatus :: Int
streamingDistribution :: Maybe StreamingDistribution
location :: Maybe Text
eTag :: Maybe Text
$sel:httpStatus:CreateStreamingDistributionResponse' :: CreateStreamingDistributionResponse -> Int
$sel:streamingDistribution:CreateStreamingDistributionResponse' :: CreateStreamingDistributionResponse -> Maybe StreamingDistribution
$sel:location:CreateStreamingDistributionResponse' :: CreateStreamingDistributionResponse -> Maybe Text
$sel:eTag:CreateStreamingDistributionResponse' :: CreateStreamingDistributionResponse -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
eTag
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
location
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe StreamingDistribution
streamingDistribution
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus