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

defmodule AWS.Cloud9 do
  @moduledoc """
  Cloud9

  Cloud9 is a collection of tools that you can use to code, build, run, test,
  debug, and
  release software in the cloud.

  For more information about Cloud9, see the [Cloud9 User Guide](https://docs.aws.amazon.com/cloud9/latest/user-guide).

  Cloud9 is no longer available to new customers. Existing customers of
  Cloud9 can continue to use the service as normal.
  [Learn more"](http://aws.amazon.com/blogs/devops/how-to-migrate-from-aws-cloud9-to-aws-ide-toolkits-or-aws-cloudshell/)

  Cloud9 supports these operations:

    *

  `CreateEnvironmentEC2`: Creates an Cloud9 development environment, launches
  an Amazon EC2 instance, and then connects from the instance to the environment.

    *

  `CreateEnvironmentMembership`: Adds an environment member to an
  environment.

    *

  `DeleteEnvironment`: Deletes an environment. If an Amazon EC2 instance is
  connected to the environment, also terminates the instance.

    *

  `DeleteEnvironmentMembership`: Deletes an environment member from an
  environment.

    *

  `DescribeEnvironmentMemberships`: Gets information about environment
  members for an environment.

    *

  `DescribeEnvironments`: Gets information about environments.

    *

  `DescribeEnvironmentStatus`: Gets status information for an
  environment.

    *

  `ListEnvironments`: Gets a list of environment identifiers.

    *

  `ListTagsForResource`: Gets the tags for an environment.

    *

  `TagResource`: Adds tags to an environment.

    *

  `UntagResource`: Removes tags from an environment.

    *

  `UpdateEnvironment`: Changes the settings of an existing
  environment.

    *

  `UpdateEnvironmentMembership`: Changes the settings of an existing
  environment member for an environment.
  """

  alias AWS.Client
  alias AWS.Request

  @typedoc """

  ## Example:
      
      tag_resource_request() :: %{
        required("ResourceARN") => String.t() | atom(),
        required("Tags") => list(tag())
      }
      
  """
  @type tag_resource_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      list_environments_result() :: %{
        "environmentIds" => list(String.t() | atom()),
        "nextToken" => String.t() | atom()
      }
      
  """
  @type list_environments_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_environments_result() :: %{
        "environments" => list(environment())
      }
      
  """
  @type describe_environments_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      untag_resource_response() :: %{}
      
  """
  @type untag_resource_response() :: %{}

  @typedoc """

  ## Example:
      
      delete_environment_membership_request() :: %{
        required("environmentId") => String.t() | atom(),
        required("userArn") => String.t() | atom()
      }
      
  """
  @type delete_environment_membership_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      forbidden_exception() :: %{
        "className" => String.t() | atom(),
        "code" => integer(),
        "message" => String.t() | atom()
      }
      
  """
  @type forbidden_exception() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_environment_membership_request() :: %{
        required("environmentId") => String.t() | atom(),
        required("permissions") => list(any()),
        required("userArn") => String.t() | atom()
      }
      
  """
  @type create_environment_membership_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_environment_memberships_request() :: %{
        optional("environmentId") => String.t() | atom(),
        optional("maxResults") => integer(),
        optional("nextToken") => String.t() | atom(),
        optional("permissions") => list(list(any())()),
        optional("userArn") => String.t() | atom()
      }
      
  """
  @type describe_environment_memberships_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      untag_resource_request() :: %{
        required("ResourceARN") => String.t() | atom(),
        required("TagKeys") => list(String.t() | atom())
      }
      
  """
  @type untag_resource_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      too_many_requests_exception() :: %{
        "className" => String.t() | atom(),
        "code" => integer(),
        "message" => String.t() | atom()
      }
      
  """
  @type too_many_requests_exception() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      conflict_exception() :: %{
        "className" => String.t() | atom(),
        "code" => integer(),
        "message" => String.t() | atom()
      }
      
  """
  @type conflict_exception() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_environment_status_result() :: %{
        "message" => String.t() | atom(),
        "status" => list(any())
      }
      
  """
  @type describe_environment_status_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      tag() :: %{
        "Key" => String.t() | atom(),
        "Value" => String.t() | atom()
      }
      
  """
  @type tag() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      environment() :: %{
        "arn" => String.t() | atom(),
        "connectionType" => list(any()),
        "description" => String.t() | atom(),
        "id" => String.t() | atom(),
        "lifecycle" => environment_lifecycle(),
        "managedCredentialsStatus" => list(any()),
        "name" => String.t() | atom(),
        "ownerArn" => String.t() | atom(),
        "type" => list(any())
      }
      
  """
  @type environment() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      not_found_exception() :: %{
        "className" => String.t() | atom(),
        "code" => integer(),
        "message" => String.t() | atom()
      }
      
  """
  @type not_found_exception() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      update_environment_result() :: %{}
      
  """
  @type update_environment_result() :: %{}

  @typedoc """

  ## Example:
      
      list_tags_for_resource_response() :: %{
        "Tags" => list(tag())
      }
      
  """
  @type list_tags_for_resource_response() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      list_environments_request() :: %{
        optional("maxResults") => integer(),
        optional("nextToken") => String.t() | atom()
      }
      
  """
  @type list_environments_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_environment_membership_result() :: %{
        "membership" => environment_member()
      }
      
  """
  @type create_environment_membership_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_environment_request() :: %{
        required("environmentId") => String.t() | atom()
      }
      
  """
  @type delete_environment_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      tag_resource_response() :: %{}
      
  """
  @type tag_resource_response() :: %{}

  @typedoc """

  ## Example:
      
      create_environment_ec2_result() :: %{
        "environmentId" => String.t() | atom()
      }
      
  """
  @type create_environment_ec2_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_environment_result() :: %{}
      
  """
  @type delete_environment_result() :: %{}

  @typedoc """

  ## Example:
      
      list_tags_for_resource_request() :: %{
        required("ResourceARN") => String.t() | atom()
      }
      
  """
  @type list_tags_for_resource_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      internal_server_error_exception() :: %{
        "className" => String.t() | atom(),
        "code" => integer(),
        "message" => String.t() | atom()
      }
      
  """
  @type internal_server_error_exception() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      concurrent_access_exception() :: %{
        "className" => String.t() | atom(),
        "code" => integer(),
        "message" => String.t() | atom()
      }
      
  """
  @type concurrent_access_exception() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      limit_exceeded_exception() :: %{
        "className" => String.t() | atom(),
        "code" => integer(),
        "message" => String.t() | atom()
      }
      
  """
  @type limit_exceeded_exception() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_environment_ec2_request() :: %{
        optional("automaticStopTimeMinutes") => integer(),
        optional("clientRequestToken") => String.t() | atom(),
        optional("connectionType") => list(any()),
        optional("description") => String.t() | atom(),
        optional("dryRun") => boolean(),
        optional("ownerArn") => String.t() | atom(),
        optional("subnetId") => String.t() | atom(),
        optional("tags") => list(tag()),
        required("imageId") => String.t() | atom(),
        required("instanceType") => String.t() | atom(),
        required("name") => String.t() | atom()
      }
      
  """
  @type create_environment_ec2_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      bad_request_exception() :: %{
        "className" => String.t() | atom(),
        "code" => integer(),
        "message" => String.t() | atom()
      }
      
  """
  @type bad_request_exception() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_environment_status_request() :: %{
        required("environmentId") => String.t() | atom()
      }
      
  """
  @type describe_environment_status_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_environment_memberships_result() :: %{
        "memberships" => list(environment_member()),
        "nextToken" => String.t() | atom()
      }
      
  """
  @type describe_environment_memberships_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      update_environment_request() :: %{
        optional("description") => String.t() | atom(),
        optional("managedCredentialsAction") => list(any()),
        optional("name") => String.t() | atom(),
        required("environmentId") => String.t() | atom()
      }
      
  """
  @type update_environment_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      update_environment_membership_request() :: %{
        required("environmentId") => String.t() | atom(),
        required("permissions") => list(any()),
        required("userArn") => String.t() | atom()
      }
      
  """
  @type update_environment_membership_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      update_environment_membership_result() :: %{
        "membership" => environment_member()
      }
      
  """
  @type update_environment_membership_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      environment_member() :: %{
        "environmentId" => String.t() | atom(),
        "lastAccess" => non_neg_integer(),
        "permissions" => list(any()),
        "userArn" => String.t() | atom(),
        "userId" => String.t() | atom()
      }
      
  """
  @type environment_member() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_environment_membership_result() :: %{}
      
  """
  @type delete_environment_membership_result() :: %{}

  @typedoc """

  ## Example:
      
      describe_environments_request() :: %{
        required("environmentIds") => list(String.t() | atom())
      }
      
  """
  @type describe_environments_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      environment_lifecycle() :: %{
        "failureResource" => String.t() | atom(),
        "reason" => String.t() | atom(),
        "status" => list(any())
      }
      
  """
  @type environment_lifecycle() :: %{(String.t() | atom()) => any()}

  @type create_environment_ec2_errors() ::
          bad_request_exception()
          | limit_exceeded_exception()
          | internal_server_error_exception()
          | not_found_exception()
          | conflict_exception()
          | too_many_requests_exception()
          | forbidden_exception()

  @type create_environment_membership_errors() ::
          bad_request_exception()
          | limit_exceeded_exception()
          | internal_server_error_exception()
          | not_found_exception()
          | conflict_exception()
          | too_many_requests_exception()
          | forbidden_exception()

  @type delete_environment_errors() ::
          bad_request_exception()
          | limit_exceeded_exception()
          | internal_server_error_exception()
          | not_found_exception()
          | conflict_exception()
          | too_many_requests_exception()
          | forbidden_exception()

  @type delete_environment_membership_errors() ::
          bad_request_exception()
          | limit_exceeded_exception()
          | internal_server_error_exception()
          | not_found_exception()
          | conflict_exception()
          | too_many_requests_exception()
          | forbidden_exception()

  @type describe_environment_memberships_errors() ::
          bad_request_exception()
          | limit_exceeded_exception()
          | internal_server_error_exception()
          | not_found_exception()
          | conflict_exception()
          | too_many_requests_exception()
          | forbidden_exception()

  @type describe_environment_status_errors() ::
          bad_request_exception()
          | limit_exceeded_exception()
          | internal_server_error_exception()
          | not_found_exception()
          | conflict_exception()
          | too_many_requests_exception()
          | forbidden_exception()

  @type describe_environments_errors() ::
          bad_request_exception()
          | limit_exceeded_exception()
          | internal_server_error_exception()
          | not_found_exception()
          | conflict_exception()
          | too_many_requests_exception()
          | forbidden_exception()

  @type list_environments_errors() ::
          bad_request_exception()
          | limit_exceeded_exception()
          | internal_server_error_exception()
          | not_found_exception()
          | conflict_exception()
          | too_many_requests_exception()
          | forbidden_exception()

  @type list_tags_for_resource_errors() ::
          bad_request_exception() | internal_server_error_exception() | not_found_exception()

  @type tag_resource_errors() ::
          bad_request_exception()
          | concurrent_access_exception()
          | internal_server_error_exception()
          | not_found_exception()

  @type untag_resource_errors() ::
          bad_request_exception()
          | concurrent_access_exception()
          | internal_server_error_exception()
          | not_found_exception()

  @type update_environment_errors() ::
          bad_request_exception()
          | limit_exceeded_exception()
          | internal_server_error_exception()
          | not_found_exception()
          | conflict_exception()
          | too_many_requests_exception()
          | forbidden_exception()

  @type update_environment_membership_errors() ::
          bad_request_exception()
          | limit_exceeded_exception()
          | internal_server_error_exception()
          | not_found_exception()
          | conflict_exception()
          | too_many_requests_exception()
          | forbidden_exception()

  def metadata do
    %{
      api_version: "2017-09-23",
      content_type: "application/x-amz-json-1.1",
      credential_scope: nil,
      endpoint_prefix: "cloud9",
      global?: false,
      hostname: nil,
      protocol: "json",
      service_id: "Cloud9",
      signature_version: "v4",
      signing_name: "cloud9",
      target_prefix: "AWSCloud9WorkspaceManagementService"
    }
  end

  @doc """
  Creates an Cloud9 development environment, launches an Amazon Elastic Compute
  Cloud (Amazon EC2) instance, and
  then connects from the instance to the environment.

  Cloud9 is no longer available to new customers. Existing customers of
  Cloud9 can continue to use the service as normal.
  [Learn more"](http://aws.amazon.com/blogs/devops/how-to-migrate-from-aws-cloud9-to-aws-ide-toolkits-or-aws-cloudshell/)
  """
  @spec create_environment_ec2(map(), create_environment_ec2_request(), list()) ::
          {:ok, create_environment_ec2_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
          | {:error, create_environment_ec2_errors()}
  def create_environment_ec2(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateEnvironmentEC2", input, options)
  end

  @doc """
  Adds an environment member to an Cloud9 development environment.

  Cloud9 is no longer available to new customers. Existing customers of
  Cloud9 can continue to use the service as normal.
  [Learn more"](http://aws.amazon.com/blogs/devops/how-to-migrate-from-aws-cloud9-to-aws-ide-toolkits-or-aws-cloudshell/)
  """
  @spec create_environment_membership(map(), create_environment_membership_request(), list()) ::
          {:ok, create_environment_membership_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
          | {:error, create_environment_membership_errors()}
  def create_environment_membership(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateEnvironmentMembership", input, options)
  end

  @doc """
  Deletes an Cloud9 development environment.

  If an Amazon EC2 instance is connected to the
  environment, also terminates the instance.

  Cloud9 is no longer available to new customers. Existing customers of
  Cloud9 can continue to use the service as normal.
  [Learn more"](http://aws.amazon.com/blogs/devops/how-to-migrate-from-aws-cloud9-to-aws-ide-toolkits-or-aws-cloudshell/)
  """
  @spec delete_environment(map(), delete_environment_request(), list()) ::
          {:ok, delete_environment_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
          | {:error, delete_environment_errors()}
  def delete_environment(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteEnvironment", input, options)
  end

  @doc """
  Deletes an environment member from a development environment.

  Cloud9 is no longer available to new customers. Existing customers of
  Cloud9 can continue to use the service as normal.
  [Learn more"](http://aws.amazon.com/blogs/devops/how-to-migrate-from-aws-cloud9-to-aws-ide-toolkits-or-aws-cloudshell/)
  """
  @spec delete_environment_membership(map(), delete_environment_membership_request(), list()) ::
          {:ok, delete_environment_membership_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
          | {:error, delete_environment_membership_errors()}
  def delete_environment_membership(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteEnvironmentMembership", input, options)
  end

  @doc """
  Gets information about environment members for an Cloud9 development
  environment.

  Cloud9 is no longer available to new customers. Existing customers of
  Cloud9 can continue to use the service as normal.
  [Learn more"](http://aws.amazon.com/blogs/devops/how-to-migrate-from-aws-cloud9-to-aws-ide-toolkits-or-aws-cloudshell/)
  """
  @spec describe_environment_memberships(
          map(),
          describe_environment_memberships_request(),
          list()
        ) ::
          {:ok, describe_environment_memberships_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
          | {:error, describe_environment_memberships_errors()}
  def describe_environment_memberships(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeEnvironmentMemberships", input, options)
  end

  @doc """
  Gets status information for an Cloud9 development environment.

  Cloud9 is no longer available to new customers. Existing customers of
  Cloud9 can continue to use the service as normal.
  [Learn more"](http://aws.amazon.com/blogs/devops/how-to-migrate-from-aws-cloud9-to-aws-ide-toolkits-or-aws-cloudshell/)
  """
  @spec describe_environment_status(map(), describe_environment_status_request(), list()) ::
          {:ok, describe_environment_status_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
          | {:error, describe_environment_status_errors()}
  def describe_environment_status(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeEnvironmentStatus", input, options)
  end

  @doc """
  Gets information about Cloud9 development environments.

  Cloud9 is no longer available to new customers. Existing customers of
  Cloud9 can continue to use the service as normal.
  [Learn more"](http://aws.amazon.com/blogs/devops/how-to-migrate-from-aws-cloud9-to-aws-ide-toolkits-or-aws-cloudshell/)
  """
  @spec describe_environments(map(), describe_environments_request(), list()) ::
          {:ok, describe_environments_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
          | {:error, describe_environments_errors()}
  def describe_environments(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeEnvironments", input, options)
  end

  @doc """
  Gets a list of Cloud9 development environment identifiers.

  Cloud9 is no longer available to new customers. Existing customers of
  Cloud9 can continue to use the service as normal.
  [Learn more"](http://aws.amazon.com/blogs/devops/how-to-migrate-from-aws-cloud9-to-aws-ide-toolkits-or-aws-cloudshell/)

  Cloud9 is no longer available to new customers. Existing customers of
  Cloud9 can continue to use the service as normal.
  [Learn more"](http://aws.amazon.com/blogs/devops/how-to-migrate-from-aws-cloud9-to-aws-ide-toolkits-or-aws-cloudshell/)
  """
  @spec list_environments(map(), list_environments_request(), list()) ::
          {:ok, list_environments_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
          | {:error, list_environments_errors()}
  def list_environments(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ListEnvironments", input, options)
  end

  @doc """
  Gets a list of the tags associated with an Cloud9 development environment.

  Cloud9 is no longer available to new customers. Existing customers of
  Cloud9 can continue to use the service as normal.
  [Learn more"](http://aws.amazon.com/blogs/devops/how-to-migrate-from-aws-cloud9-to-aws-ide-toolkits-or-aws-cloudshell/)
  """
  @spec list_tags_for_resource(map(), list_tags_for_resource_request(), list()) ::
          {:ok, list_tags_for_resource_response(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
          | {:error, list_tags_for_resource_errors()}
  def list_tags_for_resource(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ListTagsForResource", input, options)
  end

  @doc """
  Adds tags to an Cloud9 development environment.

  Cloud9 is no longer available to new customers. Existing customers of
  Cloud9 can continue to use the service as normal.
  [Learn more"](http://aws.amazon.com/blogs/devops/how-to-migrate-from-aws-cloud9-to-aws-ide-toolkits-or-aws-cloudshell/)

  Tags that you add to an Cloud9 environment by using this method will NOT be
  automatically propagated to underlying resources.
  """
  @spec tag_resource(map(), tag_resource_request(), list()) ::
          {:ok, tag_resource_response(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
          | {:error, tag_resource_errors()}
  def tag_resource(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "TagResource", input, options)
  end

  @doc """
  Removes tags from an Cloud9 development environment.

  Cloud9 is no longer available to new customers. Existing customers of
  Cloud9 can continue to use the service as normal.
  [Learn more"](http://aws.amazon.com/blogs/devops/how-to-migrate-from-aws-cloud9-to-aws-ide-toolkits-or-aws-cloudshell/)
  """
  @spec untag_resource(map(), untag_resource_request(), list()) ::
          {:ok, untag_resource_response(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
          | {:error, untag_resource_errors()}
  def untag_resource(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "UntagResource", input, options)
  end

  @doc """
  Changes the settings of an existing Cloud9 development environment.

  Cloud9 is no longer available to new customers. Existing customers of
  Cloud9 can continue to use the service as normal.
  [Learn more"](http://aws.amazon.com/blogs/devops/how-to-migrate-from-aws-cloud9-to-aws-ide-toolkits-or-aws-cloudshell/)
  """
  @spec update_environment(map(), update_environment_request(), list()) ::
          {:ok, update_environment_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
          | {:error, update_environment_errors()}
  def update_environment(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "UpdateEnvironment", input, options)
  end

  @doc """
  Changes the settings of an existing environment member for an Cloud9 development
  environment.

  Cloud9 is no longer available to new customers. Existing customers of
  Cloud9 can continue to use the service as normal.
  [Learn more"](http://aws.amazon.com/blogs/devops/how-to-migrate-from-aws-cloud9-to-aws-ide-toolkits-or-aws-cloudshell/)
  """
  @spec update_environment_membership(map(), update_environment_membership_request(), list()) ::
          {:ok, update_environment_membership_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
          | {:error, update_environment_membership_errors()}
  def update_environment_membership(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "UpdateEnvironmentMembership", input, options)
  end
end
