# WARNING: DO NOT EDIT, AUTO-GENERATED CODE!
# See https://github.com/aws-beam/aws-codegen for more details.

defmodule AWS.SSMGuiConnect do
  @moduledoc """
  AWS Systems Manager GUI Connect

  Systems Manager GUI Connect, a component of Fleet Manager, lets you connect to
  your Window
  Server-type Amazon Elastic Compute Cloud (Amazon EC2) instances using the Remote
  Desktop Protocol (RDP).

  GUI
  Connect, which is powered by [Amazon DCV](https://docs.aws.amazon.com/dcv/latest/adminguide/what-is-dcv.html),
  provides you
  with secure connectivity to your Windows Server instances directly from the
  Systems Manager console.
  You can have up to four simultaneous connections in a single browser window. In
  the
  console, GUI Connect is also referred to as Fleet Manager Remote Desktop.

  This reference is intended to be used with the [
  *Amazon Web Services Systems Manager User
  Guide*
  ](https://docs.aws.amazon.com/systems-manager/latest/userguide/). To get
  started, see the following user guide topics:

    *

  [Setting up Amazon Web Services Systems
  Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-setting-up.html)

    *

  [Connect to a Windows Server managed instance using Remote Desktop](https://docs.aws.amazon.com/systems-manager/latest/userguide/fleet-rdp.html)
  """

  alias AWS.Client
  alias AWS.Request

  @typedoc """

  ## Example:

      access_denied_exception() :: %{
        "message" => String.t() | atom()
      }

  """
  @type access_denied_exception() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:

      conflict_exception() :: %{
        "message" => String.t() | atom()
      }

  """
  @type conflict_exception() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:

      connection_recording_preferences() :: %{
        "KMSKeyArn" => [String.t() | atom()],
        "RecordingDestinations" => recording_destinations()
      }

  """
  @type connection_recording_preferences() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:

      delete_connection_recording_preferences_request() :: %{
        optional("ClientToken") => String.t() | atom()
      }

  """
  @type delete_connection_recording_preferences_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:

      delete_connection_recording_preferences_response() :: %{
        "ClientToken" => String.t() | atom()
      }

  """
  @type delete_connection_recording_preferences_response() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:

      get_connection_recording_preferences_response() :: %{
        "ClientToken" => String.t() | atom(),
        "ConnectionRecordingPreferences" => connection_recording_preferences()
      }

  """
  @type get_connection_recording_preferences_response() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:

      internal_server_exception() :: %{
        "message" => String.t() | atom()
      }

  """
  @type internal_server_exception() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:

      recording_destinations() :: %{
        "S3Buckets" => list(s3_bucket())
      }

  """
  @type recording_destinations() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:

      resource_not_found_exception() :: %{
        "message" => String.t() | atom()
      }

  """
  @type resource_not_found_exception() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:

      s3_bucket() :: %{
        "BucketName" => String.t() | atom(),
        "BucketOwner" => String.t() | atom()
      }

  """
  @type s3_bucket() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:

      service_quota_exceeded_exception() :: %{
        "message" => String.t() | atom()
      }

  """
  @type service_quota_exceeded_exception() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:

      throttling_exception() :: %{
        "message" => String.t() | atom()
      }

  """
  @type throttling_exception() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:

      update_connection_recording_preferences_request() :: %{
        optional("ClientToken") => String.t() | atom(),
        required("ConnectionRecordingPreferences") => connection_recording_preferences()
      }

  """
  @type update_connection_recording_preferences_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:

      update_connection_recording_preferences_response() :: %{
        "ClientToken" => String.t() | atom(),
        "ConnectionRecordingPreferences" => connection_recording_preferences()
      }

  """
  @type update_connection_recording_preferences_response() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:

      validation_exception() :: %{
        "message" => String.t() | atom()
      }

  """
  @type validation_exception() :: %{(String.t() | atom()) => any()}

  @type delete_connection_recording_preferences_errors() ::
          validation_exception()
          | throttling_exception()
          | service_quota_exceeded_exception()
          | resource_not_found_exception()
          | internal_server_exception()
          | conflict_exception()
          | access_denied_exception()

  @type get_connection_recording_preferences_errors() ::
          validation_exception()
          | throttling_exception()
          | service_quota_exceeded_exception()
          | resource_not_found_exception()
          | internal_server_exception()
          | conflict_exception()
          | access_denied_exception()

  @type update_connection_recording_preferences_errors() ::
          validation_exception()
          | throttling_exception()
          | service_quota_exceeded_exception()
          | resource_not_found_exception()
          | internal_server_exception()
          | conflict_exception()
          | access_denied_exception()

  def metadata do
    %{
      api_version: "2021-05-01",
      content_type: "application/x-amz-json-1.1",
      credential_scope: nil,
      endpoint_prefix: "ssm-guiconnect",
      global?: false,
      hostname: nil,
      protocol: "rest-json",
      service_id: "SSM GuiConnect",
      signature_version: "v4",
      signing_name: "ssm-guiconnect",
      target_prefix: nil
    }
  end

  @doc """
  Deletes the preferences for recording RDP connections.
  """
  @spec delete_connection_recording_preferences(
          map(),
          delete_connection_recording_preferences_request(),
          list()
        ) ::
          {:ok, delete_connection_recording_preferences_response(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
          | {:error, delete_connection_recording_preferences_errors()}
  def delete_connection_recording_preferences(%Client{} = client, input, options \\ []) do
    url_path = "/DeleteConnectionRecordingPreferences"
    headers = []
    custom_headers = []
    query_params = []

    meta = metadata()

    Request.request_rest(
      client,
      meta,
      :post,
      url_path,
      query_params,
      custom_headers ++ headers,
      input,
      options,
      200
    )
  end

  @doc """
  Returns the preferences specified for recording RDP connections in the
  requesting Amazon Web Services account and Amazon Web Services Region.
  """
  @spec get_connection_recording_preferences(map(), %{}, list()) ::
          {:ok, get_connection_recording_preferences_response(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
          | {:error, get_connection_recording_preferences_errors()}
  def get_connection_recording_preferences(%Client{} = client, input, options \\ []) do
    url_path = "/GetConnectionRecordingPreferences"
    headers = []
    custom_headers = []
    query_params = []

    meta = metadata()

    Request.request_rest(
      client,
      meta,
      :post,
      url_path,
      query_params,
      custom_headers ++ headers,
      input,
      options,
      200
    )
  end

  @doc """
  Updates the preferences for recording RDP connections.
  """
  @spec update_connection_recording_preferences(
          map(),
          update_connection_recording_preferences_request(),
          list()
        ) ::
          {:ok, update_connection_recording_preferences_response(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
          | {:error, update_connection_recording_preferences_errors()}
  def update_connection_recording_preferences(%Client{} = client, input, options \\ []) do
    url_path = "/UpdateConnectionRecordingPreferences"
    headers = []
    custom_headers = []
    query_params = []

    meta = metadata()

    Request.request_rest(
      client,
      meta,
      :post,
      url_path,
      query_params,
      custom_headers ++ headers,
      input,
      options,
      200
    )
  end
end
