packages feed

amazonka-robomaker-2.0: gen/Amazonka/RobOMaker/Types/LaunchConfig.hs

{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}

-- Derived from AWS service descriptions, licensed under Apache 2.0.

-- |
-- Module      : Amazonka.RobOMaker.Types.LaunchConfig
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
module Amazonka.RobOMaker.Types.LaunchConfig where

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 Amazonka.RobOMaker.Types.PortForwardingConfig

-- | Information about a launch configuration.
--
-- /See:/ 'newLaunchConfig' smart constructor.
data LaunchConfig = LaunchConfig'
  { -- | If you\'ve specified @General@ as the value for your
    -- @RobotSoftwareSuite@, you can use this field to specify a list of
    -- commands for your container image.
    --
    -- If you\'ve specified @SimulationRuntime@ as the value for your
    -- @SimulationSoftwareSuite@, you can use this field to specify a list of
    -- commands for your container image.
    command :: Prelude.Maybe [Prelude.Text],
    -- | The environment variables for the application launch.
    environmentVariables :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
    -- | The launch file name.
    launchFile :: Prelude.Maybe Prelude.Text,
    -- | The package name.
    packageName :: Prelude.Maybe Prelude.Text,
    -- | The port forwarding configuration.
    portForwardingConfig :: Prelude.Maybe PortForwardingConfig,
    -- | Boolean indicating whether a streaming session will be configured for
    -- the application. If @True@, AWS RoboMaker will configure a connection so
    -- you can interact with your application as it is running in the
    -- simulation. You must configure and launch the component. It must have a
    -- graphical user interface.
    streamUI :: Prelude.Maybe Prelude.Bool
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'LaunchConfig' 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:
--
-- 'command', 'launchConfig_command' - If you\'ve specified @General@ as the value for your
-- @RobotSoftwareSuite@, you can use this field to specify a list of
-- commands for your container image.
--
-- If you\'ve specified @SimulationRuntime@ as the value for your
-- @SimulationSoftwareSuite@, you can use this field to specify a list of
-- commands for your container image.
--
-- 'environmentVariables', 'launchConfig_environmentVariables' - The environment variables for the application launch.
--
-- 'launchFile', 'launchConfig_launchFile' - The launch file name.
--
-- 'packageName', 'launchConfig_packageName' - The package name.
--
-- 'portForwardingConfig', 'launchConfig_portForwardingConfig' - The port forwarding configuration.
--
-- 'streamUI', 'launchConfig_streamUI' - Boolean indicating whether a streaming session will be configured for
-- the application. If @True@, AWS RoboMaker will configure a connection so
-- you can interact with your application as it is running in the
-- simulation. You must configure and launch the component. It must have a
-- graphical user interface.
newLaunchConfig ::
  LaunchConfig
newLaunchConfig =
  LaunchConfig'
    { command = Prelude.Nothing,
      environmentVariables = Prelude.Nothing,
      launchFile = Prelude.Nothing,
      packageName = Prelude.Nothing,
      portForwardingConfig = Prelude.Nothing,
      streamUI = Prelude.Nothing
    }

-- | If you\'ve specified @General@ as the value for your
-- @RobotSoftwareSuite@, you can use this field to specify a list of
-- commands for your container image.
--
-- If you\'ve specified @SimulationRuntime@ as the value for your
-- @SimulationSoftwareSuite@, you can use this field to specify a list of
-- commands for your container image.
launchConfig_command :: Lens.Lens' LaunchConfig (Prelude.Maybe [Prelude.Text])
launchConfig_command = Lens.lens (\LaunchConfig' {command} -> command) (\s@LaunchConfig' {} a -> s {command = a} :: LaunchConfig) Prelude.. Lens.mapping Lens.coerced

-- | The environment variables for the application launch.
launchConfig_environmentVariables :: Lens.Lens' LaunchConfig (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
launchConfig_environmentVariables = Lens.lens (\LaunchConfig' {environmentVariables} -> environmentVariables) (\s@LaunchConfig' {} a -> s {environmentVariables = a} :: LaunchConfig) Prelude.. Lens.mapping Lens.coerced

-- | The launch file name.
launchConfig_launchFile :: Lens.Lens' LaunchConfig (Prelude.Maybe Prelude.Text)
launchConfig_launchFile = Lens.lens (\LaunchConfig' {launchFile} -> launchFile) (\s@LaunchConfig' {} a -> s {launchFile = a} :: LaunchConfig)

-- | The package name.
launchConfig_packageName :: Lens.Lens' LaunchConfig (Prelude.Maybe Prelude.Text)
launchConfig_packageName = Lens.lens (\LaunchConfig' {packageName} -> packageName) (\s@LaunchConfig' {} a -> s {packageName = a} :: LaunchConfig)

-- | The port forwarding configuration.
launchConfig_portForwardingConfig :: Lens.Lens' LaunchConfig (Prelude.Maybe PortForwardingConfig)
launchConfig_portForwardingConfig = Lens.lens (\LaunchConfig' {portForwardingConfig} -> portForwardingConfig) (\s@LaunchConfig' {} a -> s {portForwardingConfig = a} :: LaunchConfig)

-- | Boolean indicating whether a streaming session will be configured for
-- the application. If @True@, AWS RoboMaker will configure a connection so
-- you can interact with your application as it is running in the
-- simulation. You must configure and launch the component. It must have a
-- graphical user interface.
launchConfig_streamUI :: Lens.Lens' LaunchConfig (Prelude.Maybe Prelude.Bool)
launchConfig_streamUI = Lens.lens (\LaunchConfig' {streamUI} -> streamUI) (\s@LaunchConfig' {} a -> s {streamUI = a} :: LaunchConfig)

instance Data.FromJSON LaunchConfig where
  parseJSON =
    Data.withObject
      "LaunchConfig"
      ( \x ->
          LaunchConfig'
            Prelude.<$> (x Data..:? "command" Data..!= Prelude.mempty)
            Prelude.<*> ( x
                            Data..:? "environmentVariables"
                            Data..!= Prelude.mempty
                        )
            Prelude.<*> (x Data..:? "launchFile")
            Prelude.<*> (x Data..:? "packageName")
            Prelude.<*> (x Data..:? "portForwardingConfig")
            Prelude.<*> (x Data..:? "streamUI")
      )

instance Prelude.Hashable LaunchConfig where
  hashWithSalt _salt LaunchConfig' {..} =
    _salt
      `Prelude.hashWithSalt` command
      `Prelude.hashWithSalt` environmentVariables
      `Prelude.hashWithSalt` launchFile
      `Prelude.hashWithSalt` packageName
      `Prelude.hashWithSalt` portForwardingConfig
      `Prelude.hashWithSalt` streamUI

instance Prelude.NFData LaunchConfig where
  rnf LaunchConfig' {..} =
    Prelude.rnf command
      `Prelude.seq` Prelude.rnf environmentVariables
      `Prelude.seq` Prelude.rnf launchFile
      `Prelude.seq` Prelude.rnf packageName
      `Prelude.seq` Prelude.rnf portForwardingConfig
      `Prelude.seq` Prelude.rnf streamUI

instance Data.ToJSON LaunchConfig where
  toJSON LaunchConfig' {..} =
    Data.object
      ( Prelude.catMaybes
          [ ("command" Data..=) Prelude.<$> command,
            ("environmentVariables" Data..=)
              Prelude.<$> environmentVariables,
            ("launchFile" Data..=) Prelude.<$> launchFile,
            ("packageName" Data..=) Prelude.<$> packageName,
            ("portForwardingConfig" Data..=)
              Prelude.<$> portForwardingConfig,
            ("streamUI" Data..=) Prelude.<$> streamUI
          ]
      )