packages feed

amazonka-mediaconnect-2.0: gen/Amazonka/MediaConnect/AddFlowOutputs.hs

{-# 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.MediaConnect.AddFlowOutputs
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Adds outputs to an existing flow. You can create up to 50 outputs per
-- flow.
module Amazonka.MediaConnect.AddFlowOutputs
  ( -- * Creating a Request
    AddFlowOutputs (..),
    newAddFlowOutputs,

    -- * Request Lenses
    addFlowOutputs_flowArn,
    addFlowOutputs_outputs,

    -- * Destructuring the Response
    AddFlowOutputsResponse (..),
    newAddFlowOutputsResponse,

    -- * Response Lenses
    addFlowOutputsResponse_flowArn,
    addFlowOutputsResponse_outputs,
    addFlowOutputsResponse_httpStatus,
  )
where

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

-- | A request to add outputs to the specified flow.
--
-- /See:/ 'newAddFlowOutputs' smart constructor.
data AddFlowOutputs = AddFlowOutputs'
  { -- | The flow that you want to add outputs to.
    flowArn :: Prelude.Text,
    -- | A list of outputs that you want to add.
    outputs :: [AddOutputRequest]
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'AddFlowOutputs' 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:
--
-- 'flowArn', 'addFlowOutputs_flowArn' - The flow that you want to add outputs to.
--
-- 'outputs', 'addFlowOutputs_outputs' - A list of outputs that you want to add.
newAddFlowOutputs ::
  -- | 'flowArn'
  Prelude.Text ->
  AddFlowOutputs
newAddFlowOutputs pFlowArn_ =
  AddFlowOutputs'
    { flowArn = pFlowArn_,
      outputs = Prelude.mempty
    }

-- | The flow that you want to add outputs to.
addFlowOutputs_flowArn :: Lens.Lens' AddFlowOutputs Prelude.Text
addFlowOutputs_flowArn = Lens.lens (\AddFlowOutputs' {flowArn} -> flowArn) (\s@AddFlowOutputs' {} a -> s {flowArn = a} :: AddFlowOutputs)

-- | A list of outputs that you want to add.
addFlowOutputs_outputs :: Lens.Lens' AddFlowOutputs [AddOutputRequest]
addFlowOutputs_outputs = Lens.lens (\AddFlowOutputs' {outputs} -> outputs) (\s@AddFlowOutputs' {} a -> s {outputs = a} :: AddFlowOutputs) Prelude.. Lens.coerced

instance Core.AWSRequest AddFlowOutputs where
  type
    AWSResponse AddFlowOutputs =
      AddFlowOutputsResponse
  request overrides =
    Request.postJSON (overrides defaultService)
  response =
    Response.receiveJSON
      ( \s h x ->
          AddFlowOutputsResponse'
            Prelude.<$> (x Data..?> "flowArn")
            Prelude.<*> (x Data..?> "outputs" Core..!@ Prelude.mempty)
            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
      )

instance Prelude.Hashable AddFlowOutputs where
  hashWithSalt _salt AddFlowOutputs' {..} =
    _salt
      `Prelude.hashWithSalt` flowArn
      `Prelude.hashWithSalt` outputs

instance Prelude.NFData AddFlowOutputs where
  rnf AddFlowOutputs' {..} =
    Prelude.rnf flowArn
      `Prelude.seq` Prelude.rnf outputs

instance Data.ToHeaders AddFlowOutputs where
  toHeaders =
    Prelude.const
      ( Prelude.mconcat
          [ "Content-Type"
              Data.=# ( "application/x-amz-json-1.1" ::
                          Prelude.ByteString
                      )
          ]
      )

instance Data.ToJSON AddFlowOutputs where
  toJSON AddFlowOutputs' {..} =
    Data.object
      ( Prelude.catMaybes
          [Prelude.Just ("outputs" Data..= outputs)]
      )

instance Data.ToPath AddFlowOutputs where
  toPath AddFlowOutputs' {..} =
    Prelude.mconcat
      ["/v1/flows/", Data.toBS flowArn, "/outputs"]

instance Data.ToQuery AddFlowOutputs where
  toQuery = Prelude.const Prelude.mempty

-- | /See:/ 'newAddFlowOutputsResponse' smart constructor.
data AddFlowOutputsResponse = AddFlowOutputsResponse'
  { -- | The ARN of the flow that these outputs were added to.
    flowArn :: Prelude.Maybe Prelude.Text,
    -- | The details of the newly added outputs.
    outputs :: Prelude.Maybe [Output],
    -- | The response's http status code.
    httpStatus :: Prelude.Int
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'AddFlowOutputsResponse' 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:
--
-- 'flowArn', 'addFlowOutputsResponse_flowArn' - The ARN of the flow that these outputs were added to.
--
-- 'outputs', 'addFlowOutputsResponse_outputs' - The details of the newly added outputs.
--
-- 'httpStatus', 'addFlowOutputsResponse_httpStatus' - The response's http status code.
newAddFlowOutputsResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  AddFlowOutputsResponse
newAddFlowOutputsResponse pHttpStatus_ =
  AddFlowOutputsResponse'
    { flowArn = Prelude.Nothing,
      outputs = Prelude.Nothing,
      httpStatus = pHttpStatus_
    }

-- | The ARN of the flow that these outputs were added to.
addFlowOutputsResponse_flowArn :: Lens.Lens' AddFlowOutputsResponse (Prelude.Maybe Prelude.Text)
addFlowOutputsResponse_flowArn = Lens.lens (\AddFlowOutputsResponse' {flowArn} -> flowArn) (\s@AddFlowOutputsResponse' {} a -> s {flowArn = a} :: AddFlowOutputsResponse)

-- | The details of the newly added outputs.
addFlowOutputsResponse_outputs :: Lens.Lens' AddFlowOutputsResponse (Prelude.Maybe [Output])
addFlowOutputsResponse_outputs = Lens.lens (\AddFlowOutputsResponse' {outputs} -> outputs) (\s@AddFlowOutputsResponse' {} a -> s {outputs = a} :: AddFlowOutputsResponse) Prelude.. Lens.mapping Lens.coerced

-- | The response's http status code.
addFlowOutputsResponse_httpStatus :: Lens.Lens' AddFlowOutputsResponse Prelude.Int
addFlowOutputsResponse_httpStatus = Lens.lens (\AddFlowOutputsResponse' {httpStatus} -> httpStatus) (\s@AddFlowOutputsResponse' {} a -> s {httpStatus = a} :: AddFlowOutputsResponse)

instance Prelude.NFData AddFlowOutputsResponse where
  rnf AddFlowOutputsResponse' {..} =
    Prelude.rnf flowArn
      `Prelude.seq` Prelude.rnf outputs
      `Prelude.seq` Prelude.rnf httpStatus