Skip to main content

lib/aws/generated/app_integrations.ex

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

defmodule AWS.AppIntegrations do
  @moduledoc """

    *

  [Amazon AppIntegrations actions](https://docs.aws.amazon.com/connect/latest/APIReference/API_Operations_Amazon_AppIntegrations_Service.html)

    *

  [Amazon AppIntegrations data
  types](https://docs.aws.amazon.com/connect/latest/APIReference/API_Types_Amazon_AppIntegrations_Service.html)

  The Amazon AppIntegrations service enables you to configure and reuse
  connections to external
  applications.

  For information about how you can use external applications with Connect
  Customer, see
  the following topics in the *Connect Customer Administrator
  Guide*:

    *

  [Third-party applications (3p apps) in the agent
  workspace](https://docs.aws.amazon.com/connect/latest/adminguide/3p-apps.html)

    *

  [Use Amazon Q in Connect for generative AI–powered agent assistance in
  real-time](https://docs.aws.amazon.com/connect/latest/adminguide/amazon-q-connect.html)
  """

  alias AWS.Client
  alias AWS.Request

  @typedoc """

  ## Example:

      list_event_integrations_response() :: %{
        "EventIntegrations" => list(event_integration()),
        "NextToken" => String.t() | atom()
      }

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

  @typedoc """

  ## Example:

      last_execution_status() :: %{
        "ExecutionStatus" => list(any()),
        "StatusMessage" => String.t() | atom()
      }

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

  @typedoc """

  ## Example:

      list_event_integration_associations_request() :: %{
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }

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

  @typedoc """

  ## Example:

      update_event_integration_response() :: %{}

  """
  @type update_event_integration_response() :: %{}

  @typedoc """

  ## Example:

      update_data_integration_association_response() :: %{}

  """
  @type update_data_integration_association_response() :: %{}

  @typedoc """

  ## Example:

      get_data_integration_request() :: %{}

  """
  @type get_data_integration_request() :: %{}

  @typedoc """

  ## Example:

      event_integration() :: %{
        "Description" => String.t() | atom(),
        "EventBridgeBus" => String.t() | atom(),
        "EventFilter" => event_filter(),
        "EventIntegrationArn" => String.t() | atom(),
        "Name" => String.t() | atom(),
        "Tags" => map()
      }

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

  @typedoc """

  ## Example:

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

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

  @typedoc """

  ## Example:

      list_application_associations_request() :: %{
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }

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

  @typedoc """

  ## Example:

      create_event_integration_response() :: %{
        "EventIntegrationArn" => String.t() | atom()
      }

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

  @typedoc """

  ## Example:

      create_data_integration_association_request() :: %{
        optional("ClientAssociationMetadata") => map(),
        optional("ClientId") => String.t() | atom(),
        optional("ClientToken") => String.t() | atom(),
        optional("DestinationURI") => String.t() | atom(),
        optional("ExecutionConfiguration") => execution_configuration(),
        optional("ObjectConfiguration") => map()
      }

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

  @typedoc """

  ## Example:

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

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

  @typedoc """

  ## Example:

      event_filter() :: %{
        "Source" => String.t() | atom()
      }

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

  @typedoc """

  ## Example:

      create_data_integration_response() :: %{
        "Arn" => String.t() | atom(),
        "ClientToken" => String.t() | atom(),
        "Description" => String.t() | atom(),
        "FileConfiguration" => file_configuration(),
        "Id" => String.t() | atom(),
        "KmsKey" => String.t() | atom(),
        "Name" => String.t() | atom(),
        "ObjectConfiguration" => map(),
        "ScheduleConfiguration" => schedule_configuration(),
        "SourceURI" => String.t() | atom(),
        "Tags" => map()
      }

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

  @typedoc """

  ## Example:

      subscription() :: %{
        "Description" => String.t() | atom(),
        "Event" => String.t() | atom()
      }

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

  @typedoc """

  ## Example:

      delete_data_integration_response() :: %{}

  """
  @type delete_data_integration_response() :: %{}

  @typedoc """

  ## Example:

      delete_event_integration_response() :: %{}

  """
  @type delete_event_integration_response() :: %{}

  @typedoc """

  ## Example:

      list_data_integration_associations_request() :: %{
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }

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

  @typedoc """

  ## Example:

      event_integration_association() :: %{
        "ClientAssociationMetadata" => map(),
        "ClientId" => String.t() | atom(),
        "EventBridgeRuleName" => String.t() | atom(),
        "EventIntegrationAssociationArn" => String.t() | atom(),
        "EventIntegrationAssociationId" => String.t() | atom(),
        "EventIntegrationName" => String.t() | atom()
      }

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

  @typedoc """

  ## Example:

      get_application_response() :: %{
        "ApplicationConfig" => application_config(),
        "ApplicationSourceConfig" => application_source_config(),
        "ApplicationType" => list(any()),
        "Arn" => String.t() | atom(),
        "CreatedTime" => non_neg_integer(),
        "Description" => String.t() | atom(),
        "Id" => String.t() | atom(),
        "IframeConfig" => iframe_config(),
        "InitializationTimeout" => integer(),
        "IsService" => boolean(),
        "LastModifiedTime" => non_neg_integer(),
        "Name" => String.t() | atom(),
        "Namespace" => String.t() | atom(),
        "Permissions" => list(String.t() | atom()),
        "Publications" => list(publication()),
        "Subscriptions" => list(subscription()),
        "Tags" => map()
      }

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

  @typedoc """

  ## Example:

      contact_handling() :: %{
        "Scope" => list(any())
      }

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

  @typedoc """

  ## Example:

      create_application_request() :: %{
        optional("ApplicationConfig") => application_config(),
        optional("ApplicationType") => list(any()),
        optional("ClientToken") => String.t() | atom(),
        optional("Description") => String.t() | atom(),
        optional("IframeConfig") => iframe_config(),
        optional("InitializationTimeout") => integer(),
        optional("IsService") => boolean(),
        optional("Permissions") => list(String.t() | atom()),
        optional("Publications") => list(publication()),
        optional("Subscriptions") => list(subscription()),
        optional("Tags") => map(),
        required("ApplicationSourceConfig") => application_source_config(),
        required("Name") => String.t() | atom(),
        required("Namespace") => String.t() | atom()
      }

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

  @typedoc """

  ## Example:

      update_event_integration_request() :: %{
        optional("Description") => String.t() | atom()
      }

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

  @typedoc """

  ## Example:

      update_data_integration_association_request() :: %{
        required("ExecutionConfiguration") => execution_configuration()
      }

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

  @typedoc """

  ## Example:

      get_application_request() :: %{}

  """
  @type get_application_request() :: %{}

  @typedoc """

  ## Example:

      list_event_integrations_request() :: %{
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }

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

  @typedoc """

  ## Example:

      get_event_integration_request() :: %{}

  """
  @type get_event_integration_request() :: %{}

  @typedoc """

  ## Example:

      create_data_integration_request() :: %{
        optional("ClientToken") => String.t() | atom(),
        optional("Description") => String.t() | atom(),
        optional("FileConfiguration") => file_configuration(),
        optional("ObjectConfiguration") => map(),
        optional("ScheduleConfig") => schedule_configuration(),
        optional("SourceURI") => String.t() | atom(),
        optional("Tags") => map(),
        required("KmsKey") => String.t() | atom(),
        required("Name") => String.t() | atom()
      }

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

  @typedoc """

  ## Example:

      on_demand_configuration() :: %{
        "EndTime" => String.t() | atom(),
        "StartTime" => String.t() | atom()
      }

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

  @typedoc """

  ## Example:

      update_data_integration_request() :: %{
        optional("Description") => String.t() | atom(),
        optional("Name") => String.t() | atom()
      }

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

  @typedoc """

  ## Example:

      application_config() :: %{
        "ContactHandling" => contact_handling()
      }

  """
  @type application_config() :: %{(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:

      list_applications_response() :: %{
        "Applications" => list(application_summary()),
        "NextToken" => String.t() | atom()
      }

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

  @typedoc """

  ## Example:

      tag_resource_request() :: %{
        required("tags") => map()
      }

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

  @typedoc """

  ## Example:

      update_data_integration_response() :: %{}

  """
  @type update_data_integration_response() :: %{}

  @typedoc """

  ## Example:

      create_event_integration_request() :: %{
        optional("ClientToken") => String.t() | atom(),
        optional("Description") => String.t() | atom(),
        optional("Tags") => map(),
        required("EventBridgeBus") => String.t() | atom(),
        required("EventFilter") => event_filter(),
        required("Name") => String.t() | atom()
      }

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

  @typedoc """

  ## Example:

      unsupported_operation_exception() :: %{
        "Message" => String.t() | atom()
      }

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

  @typedoc """

  ## Example:

      delete_application_request() :: %{}

  """
  @type delete_application_request() :: %{}

  @typedoc """

  ## Example:

      update_application_response() :: %{}

  """
  @type update_application_response() :: %{}

  @typedoc """

  ## Example:

      tag_resource_response() :: %{}

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

  @typedoc """

  ## Example:

      data_integration_association_summary() :: %{
        "ClientId" => String.t() | atom(),
        "DataIntegrationArn" => String.t() | atom(),
        "DataIntegrationAssociationArn" => String.t() | atom(),
        "DestinationURI" => String.t() | atom(),
        "ExecutionConfiguration" => execution_configuration(),
        "LastExecutionStatus" => last_execution_status()
      }

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

  @typedoc """

  ## Example:

      application_association_summary() :: %{
        "ApplicationArn" => String.t() | atom(),
        "ApplicationAssociationArn" => String.t() | atom(),
        "ClientId" => String.t() | atom()
      }

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

  @typedoc """

  ## Example:

      delete_application_response() :: %{}

  """
  @type delete_application_response() :: %{}

  @typedoc """

  ## Example:

      delete_event_integration_request() :: %{}

  """
  @type delete_event_integration_request() :: %{}

  @typedoc """

  ## Example:

      list_applications_request() :: %{
        optional("ApplicationType") => list(any()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }

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

  @typedoc """

  ## Example:

      untag_resource_response() :: %{}

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

  @typedoc """

  ## Example:

      untag_resource_request() :: %{
        required("tagKeys") => list(String.t() | atom())
      }

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

  @typedoc """

  ## Example:

      duplicate_resource_exception() :: %{
        "Message" => String.t() | atom()
      }

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

  @typedoc """

  ## Example:

      get_event_integration_response() :: %{
        "Description" => String.t() | atom(),
        "EventBridgeBus" => String.t() | atom(),
        "EventFilter" => event_filter(),
        "EventIntegrationArn" => String.t() | atom(),
        "Name" => String.t() | atom(),
        "Tags" => map()
      }

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

  @typedoc """

  ## Example:

      list_application_associations_response() :: %{
        "ApplicationAssociations" => list(application_association_summary()),
        "NextToken" => String.t() | atom()
      }

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

  @typedoc """

  ## Example:

      list_data_integrations_request() :: %{
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }

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

  @typedoc """

  ## Example:

      create_application_response() :: %{
        "Arn" => String.t() | atom(),
        "Id" => String.t() | atom()
      }

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

  @typedoc """

  ## Example:

      delete_data_integration_request() :: %{}

  """
  @type delete_data_integration_request() :: %{}

  @typedoc """

  ## Example:

      application_summary() :: %{
        "ApplicationType" => list(any()),
        "Arn" => String.t() | atom(),
        "CreatedTime" => non_neg_integer(),
        "Id" => String.t() | atom(),
        "IsService" => boolean(),
        "LastModifiedTime" => non_neg_integer(),
        "Name" => String.t() | atom(),
        "Namespace" => String.t() | atom()
      }

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

  @typedoc """

  ## Example:

      publication() :: %{
        "Description" => String.t() | atom(),
        "Event" => String.t() | atom(),
        "Schema" => String.t() | atom()
      }

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

  @typedoc """

  ## Example:

      list_tags_for_resource_response() :: %{
        "tags" => map()
      }

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

  @typedoc """

  ## Example:

      schedule_configuration() :: %{
        "FirstExecutionFrom" => String.t() | atom(),
        "Object" => String.t() | atom(),
        "ScheduleExpression" => String.t() | atom()
      }

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

  @typedoc """

  ## Example:

      data_integration_summary() :: %{
        "Arn" => String.t() | atom(),
        "Name" => String.t() | atom(),
        "SourceURI" => String.t() | atom()
      }

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

  @typedoc """

  ## Example:

      invalid_request_exception() :: %{
        "Message" => String.t() | atom()
      }

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

  @typedoc """

  ## Example:

      list_data_integrations_response() :: %{
        "DataIntegrations" => list(data_integration_summary()),
        "NextToken" => String.t() | atom()
      }

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

  @typedoc """

  ## Example:

      create_data_integration_association_response() :: %{
        "DataIntegrationArn" => String.t() | atom(),
        "DataIntegrationAssociationId" => String.t() | atom()
      }

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

  @typedoc """

  ## Example:

      iframe_config() :: %{
        "Allow" => list(String.t() | atom()),
        "Sandbox" => list(String.t() | atom())
      }

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

  @typedoc """

  ## Example:

      resource_quota_exceeded_exception() :: %{
        "Message" => String.t() | atom()
      }

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

  @typedoc """

  ## Example:

      update_application_request() :: %{
        optional("ApplicationConfig") => application_config(),
        optional("ApplicationSourceConfig") => application_source_config(),
        optional("ApplicationType") => list(any()),
        optional("Description") => String.t() | atom(),
        optional("IframeConfig") => iframe_config(),
        optional("InitializationTimeout") => integer(),
        optional("IsService") => boolean(),
        optional("Name") => String.t() | atom(),
        optional("Permissions") => list(String.t() | atom()),
        optional("Publications") => list(publication()),
        optional("Subscriptions") => list(subscription())
      }

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

  @typedoc """

  ## Example:

      list_data_integration_associations_response() :: %{
        "DataIntegrationAssociations" => list(data_integration_association_summary()),
        "NextToken" => String.t() | atom()
      }

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

  @typedoc """

  ## Example:

      external_url_config() :: %{
        "AccessUrl" => String.t() | atom(),
        "ApprovedOrigins" => list(String.t() | atom())
      }

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

  @typedoc """

  ## Example:

      get_data_integration_response() :: %{
        "Arn" => String.t() | atom(),
        "Description" => String.t() | atom(),
        "FileConfiguration" => file_configuration(),
        "Id" => String.t() | atom(),
        "KmsKey" => String.t() | atom(),
        "Name" => String.t() | atom(),
        "ObjectConfiguration" => map(),
        "ScheduleConfiguration" => schedule_configuration(),
        "SourceURI" => String.t() | atom(),
        "Tags" => map()
      }

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

  @typedoc """

  ## Example:

      application_source_config() :: %{
        "ExternalUrlConfig" => external_url_config()
      }

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

  @typedoc """

  ## Example:

      execution_configuration() :: %{
        "ExecutionMode" => list(any()),
        "OnDemandConfiguration" => on_demand_configuration(),
        "ScheduleConfiguration" => schedule_configuration()
      }

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

  @typedoc """

  ## Example:

      file_configuration() :: %{
        "Filters" => map(),
        "Folders" => list(String.t() | atom())
      }

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

  @typedoc """

  ## Example:

      list_tags_for_resource_request() :: %{}

  """
  @type list_tags_for_resource_request() :: %{}

  @typedoc """

  ## Example:

      list_event_integration_associations_response() :: %{
        "EventIntegrationAssociations" => list(event_integration_association()),
        "NextToken" => String.t() | atom()
      }

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

  @typedoc """

  ## Example:

      internal_service_error() :: %{
        "Message" => String.t() | atom()
      }

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

  @type create_application_errors() ::
          internal_service_error()
          | resource_quota_exceeded_exception()
          | invalid_request_exception()
          | duplicate_resource_exception()
          | unsupported_operation_exception()
          | access_denied_exception()
          | throttling_exception()

  @type create_data_integration_errors() ::
          internal_service_error()
          | resource_quota_exceeded_exception()
          | invalid_request_exception()
          | duplicate_resource_exception()
          | access_denied_exception()
          | throttling_exception()

  @type create_data_integration_association_errors() ::
          internal_service_error()
          | resource_quota_exceeded_exception()
          | invalid_request_exception()
          | resource_not_found_exception()
          | access_denied_exception()
          | throttling_exception()

  @type create_event_integration_errors() ::
          internal_service_error()
          | resource_quota_exceeded_exception()
          | invalid_request_exception()
          | duplicate_resource_exception()
          | access_denied_exception()
          | throttling_exception()

  @type delete_application_errors() ::
          internal_service_error()
          | invalid_request_exception()
          | resource_not_found_exception()
          | access_denied_exception()
          | throttling_exception()

  @type delete_data_integration_errors() ::
          internal_service_error()
          | invalid_request_exception()
          | resource_not_found_exception()
          | access_denied_exception()
          | throttling_exception()

  @type delete_event_integration_errors() ::
          internal_service_error()
          | invalid_request_exception()
          | resource_not_found_exception()
          | access_denied_exception()
          | throttling_exception()

  @type get_application_errors() ::
          internal_service_error()
          | invalid_request_exception()
          | resource_not_found_exception()
          | access_denied_exception()
          | throttling_exception()

  @type get_data_integration_errors() ::
          internal_service_error()
          | invalid_request_exception()
          | resource_not_found_exception()
          | access_denied_exception()
          | throttling_exception()

  @type get_event_integration_errors() ::
          internal_service_error()
          | invalid_request_exception()
          | resource_not_found_exception()
          | access_denied_exception()
          | throttling_exception()

  @type list_application_associations_errors() ::
          internal_service_error()
          | invalid_request_exception()
          | resource_not_found_exception()
          | access_denied_exception()
          | throttling_exception()

  @type list_applications_errors() ::
          internal_service_error()
          | invalid_request_exception()
          | access_denied_exception()
          | throttling_exception()

  @type list_data_integration_associations_errors() ::
          internal_service_error()
          | invalid_request_exception()
          | resource_not_found_exception()
          | access_denied_exception()
          | throttling_exception()

  @type list_data_integrations_errors() ::
          internal_service_error()
          | invalid_request_exception()
          | access_denied_exception()
          | throttling_exception()

  @type list_event_integration_associations_errors() ::
          internal_service_error()
          | invalid_request_exception()
          | resource_not_found_exception()
          | access_denied_exception()
          | throttling_exception()

  @type list_event_integrations_errors() ::
          internal_service_error()
          | invalid_request_exception()
          | access_denied_exception()
          | throttling_exception()

  @type list_tags_for_resource_errors() ::
          internal_service_error()
          | invalid_request_exception()
          | resource_not_found_exception()
          | throttling_exception()

  @type tag_resource_errors() ::
          internal_service_error()
          | invalid_request_exception()
          | resource_not_found_exception()
          | throttling_exception()

  @type untag_resource_errors() ::
          internal_service_error()
          | invalid_request_exception()
          | resource_not_found_exception()
          | throttling_exception()

  @type update_application_errors() ::
          internal_service_error()
          | invalid_request_exception()
          | unsupported_operation_exception()
          | resource_not_found_exception()
          | access_denied_exception()
          | throttling_exception()

  @type update_data_integration_errors() ::
          internal_service_error()
          | invalid_request_exception()
          | resource_not_found_exception()
          | access_denied_exception()
          | throttling_exception()

  @type update_data_integration_association_errors() ::
          internal_service_error()
          | invalid_request_exception()
          | resource_not_found_exception()
          | access_denied_exception()
          | throttling_exception()

  @type update_event_integration_errors() ::
          internal_service_error()
          | invalid_request_exception()
          | resource_not_found_exception()
          | access_denied_exception()
          | throttling_exception()

  def metadata do
    %{
      api_version: "2020-07-29",
      content_type: "application/x-amz-json-1.1",
      credential_scope: nil,
      endpoint_prefix: "app-integrations",
      global?: false,
      hostname: nil,
      protocol: "rest-json",
      service_id: "AppIntegrations",
      signature_version: "v4",
      signing_name: "app-integrations",
      target_prefix: nil
    }
  end

  @doc """
  Creates and persists an Application resource.
  """
  @spec create_application(map(), create_application_request(), list()) ::
          {:ok, create_application_response(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
          | {:error, create_application_errors()}
  def create_application(%Client{} = client, input, options \\ []) do
    url_path = "/applications"
    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 """
  Creates and persists a DataIntegration resource.

  You cannot create a DataIntegration association for a DataIntegration that has
  been
  previously associated. Use a different DataIntegration, or recreate the
  DataIntegration
  using the `CreateDataIntegration` API.
  """
  @spec create_data_integration(map(), create_data_integration_request(), list()) ::
          {:ok, create_data_integration_response(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
          | {:error, create_data_integration_errors()}
  def create_data_integration(%Client{} = client, input, options \\ []) do
    url_path = "/dataIntegrations"
    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 """
  Creates and persists a DataIntegrationAssociation resource.
  """
  @spec create_data_integration_association(
          map(),
          String.t() | atom(),
          create_data_integration_association_request(),
          list()
        ) ::
          {:ok, create_data_integration_association_response(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
          | {:error, create_data_integration_association_errors()}
  def create_data_integration_association(
        %Client{} = client,
        data_integration_identifier,
        input,
        options \\ []
      ) do
    url_path =
      "/dataIntegrations/#{AWS.Util.encode_uri(data_integration_identifier)}/associations"

    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 """
  Creates an EventIntegration, given a specified name, description, and a
  reference to an
  Amazon EventBridge bus in your account and a partner event source that pushes
  events to
  that bus.

  No objects are created in the your account, only metadata that is persisted on
  the
  EventIntegration control plane.
  """
  @spec create_event_integration(map(), create_event_integration_request(), list()) ::
          {:ok, create_event_integration_response(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
          | {:error, create_event_integration_errors()}
  def create_event_integration(%Client{} = client, input, options \\ []) do
    url_path = "/eventIntegrations"
    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 """
  Deletes the Application.

  Only Applications that don't have any Application Associations
  can be deleted.
  """
  @spec delete_application(map(), String.t() | atom(), delete_application_request(), list()) ::
          {:ok, delete_application_response(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
          | {:error, delete_application_errors()}
  def delete_application(%Client{} = client, arn, input, options \\ []) do
    url_path = "/applications/#{AWS.Util.encode_uri(arn)}"
    headers = []
    custom_headers = []
    query_params = []

    meta = metadata()

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

  @doc """
  Deletes the DataIntegration.

  Only DataIntegrations that don't have any
  DataIntegrationAssociations can be deleted. Deleting a DataIntegration also
  deletes the
  underlying Amazon AppFlow flow and service linked role.

  You cannot create a DataIntegration association for a DataIntegration that has
  been previously associated.
  Use a different DataIntegration, or recreate the DataIntegration using the
  [CreateDataIntegration](https://docs.aws.amazon.com/appintegrations/latest/APIReference/API_CreateDataIntegration.html)
  API.
  """
  @spec delete_data_integration(
          map(),
          String.t() | atom(),
          delete_data_integration_request(),
          list()
        ) ::
          {:ok, delete_data_integration_response(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
          | {:error, delete_data_integration_errors()}
  def delete_data_integration(
        %Client{} = client,
        data_integration_identifier,
        input,
        options \\ []
      ) do
    url_path = "/dataIntegrations/#{AWS.Util.encode_uri(data_integration_identifier)}"
    headers = []
    custom_headers = []
    query_params = []

    meta = metadata()

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

  @doc """
  Deletes the specified existing event integration.

  If the event integration is associated
  with clients, the request is rejected.
  """
  @spec delete_event_integration(
          map(),
          String.t() | atom(),
          delete_event_integration_request(),
          list()
        ) ::
          {:ok, delete_event_integration_response(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
          | {:error, delete_event_integration_errors()}
  def delete_event_integration(%Client{} = client, name, input, options \\ []) do
    url_path = "/eventIntegrations/#{AWS.Util.encode_uri(name)}"
    headers = []
    custom_headers = []
    query_params = []

    meta = metadata()

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

  @doc """
  Get an Application resource.
  """
  @spec get_application(map(), String.t() | atom(), list()) ::
          {:ok, get_application_response(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
          | {:error, get_application_errors()}
  def get_application(%Client{} = client, arn, options \\ []) do
    url_path = "/applications/#{AWS.Util.encode_uri(arn)}"
    headers = []
    query_params = []

    meta = metadata()

    Request.request_rest(client, meta, :get, url_path, query_params, headers, nil, options, 200)
  end

  @doc """
  Returns information about the DataIntegration.

  You cannot create a DataIntegration association for a DataIntegration that has
  been previously associated.
  Use a different DataIntegration, or recreate the DataIntegration using the
  [CreateDataIntegration](https://docs.aws.amazon.com/appintegrations/latest/APIReference/API_CreateDataIntegration.html)
  API.
  """
  @spec get_data_integration(map(), String.t() | atom(), list()) ::
          {:ok, get_data_integration_response(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
          | {:error, get_data_integration_errors()}
  def get_data_integration(%Client{} = client, identifier, options \\ []) do
    url_path = "/dataIntegrations/#{AWS.Util.encode_uri(identifier)}"
    headers = []
    query_params = []

    meta = metadata()

    Request.request_rest(client, meta, :get, url_path, query_params, headers, nil, options, 200)
  end

  @doc """
  Returns information about the event integration.
  """
  @spec get_event_integration(map(), String.t() | atom(), list()) ::
          {:ok, get_event_integration_response(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
          | {:error, get_event_integration_errors()}
  def get_event_integration(%Client{} = client, name, options \\ []) do
    url_path = "/eventIntegrations/#{AWS.Util.encode_uri(name)}"
    headers = []
    query_params = []

    meta = metadata()

    Request.request_rest(client, meta, :get, url_path, query_params, headers, nil, options, 200)
  end

  @doc """
  Returns a paginated list of application associations for an application.
  """
  @spec list_application_associations(
          map(),
          String.t() | atom(),
          String.t() | atom() | nil,
          String.t() | atom() | nil,
          list()
        ) ::
          {:ok, list_application_associations_response(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
          | {:error, list_application_associations_errors()}
  def list_application_associations(
        %Client{} = client,
        application_id,
        max_results \\ nil,
        next_token \\ nil,
        options \\ []
      ) do
    url_path = "/applications/#{AWS.Util.encode_uri(application_id)}/associations"
    headers = []
    query_params = []

    query_params =
      if !is_nil(next_token) do
        [{"nextToken", next_token} | query_params]
      else
        query_params
      end

    query_params =
      if !is_nil(max_results) do
        [{"maxResults", max_results} | query_params]
      else
        query_params
      end

    meta = metadata()

    Request.request_rest(client, meta, :get, url_path, query_params, headers, nil, options, 200)
  end

  @doc """
  Lists applications in the account.
  """
  @spec list_applications(
          map(),
          String.t() | atom() | nil,
          String.t() | atom() | nil,
          String.t() | atom() | nil,
          list()
        ) ::
          {:ok, list_applications_response(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
          | {:error, list_applications_errors()}
  def list_applications(
        %Client{} = client,
        application_type \\ nil,
        max_results \\ nil,
        next_token \\ nil,
        options \\ []
      ) do
    url_path = "/applications"
    headers = []
    query_params = []

    query_params =
      if !is_nil(next_token) do
        [{"nextToken", next_token} | query_params]
      else
        query_params
      end

    query_params =
      if !is_nil(max_results) do
        [{"maxResults", max_results} | query_params]
      else
        query_params
      end

    query_params =
      if !is_nil(application_type) do
        [{"applicationType", application_type} | query_params]
      else
        query_params
      end

    meta = metadata()

    Request.request_rest(client, meta, :get, url_path, query_params, headers, nil, options, 200)
  end

  @doc """
  Returns a paginated list of DataIntegration associations in the account.

  You cannot create a DataIntegration association for a DataIntegration that has
  been previously associated.
  Use a different DataIntegration, or recreate the DataIntegration using the
  [CreateDataIntegration](https://docs.aws.amazon.com/appintegrations/latest/APIReference/API_CreateDataIntegration.html)
  API.
  """
  @spec list_data_integration_associations(
          map(),
          String.t() | atom(),
          String.t() | atom() | nil,
          String.t() | atom() | nil,
          list()
        ) ::
          {:ok, list_data_integration_associations_response(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
          | {:error, list_data_integration_associations_errors()}
  def list_data_integration_associations(
        %Client{} = client,
        data_integration_identifier,
        max_results \\ nil,
        next_token \\ nil,
        options \\ []
      ) do
    url_path =
      "/dataIntegrations/#{AWS.Util.encode_uri(data_integration_identifier)}/associations"

    headers = []
    query_params = []

    query_params =
      if !is_nil(next_token) do
        [{"nextToken", next_token} | query_params]
      else
        query_params
      end

    query_params =
      if !is_nil(max_results) do
        [{"maxResults", max_results} | query_params]
      else
        query_params
      end

    meta = metadata()

    Request.request_rest(client, meta, :get, url_path, query_params, headers, nil, options, 200)
  end

  @doc """
  Returns a paginated list of DataIntegrations in the account.

  You cannot create a DataIntegration association for a DataIntegration that has
  been previously associated.
  Use a different DataIntegration, or recreate the DataIntegration using the
  [CreateDataIntegration](https://docs.aws.amazon.com/appintegrations/latest/APIReference/API_CreateDataIntegration.html)
  API.
  """
  @spec list_data_integrations(
          map(),
          String.t() | atom() | nil,
          String.t() | atom() | nil,
          list()
        ) ::
          {:ok, list_data_integrations_response(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
          | {:error, list_data_integrations_errors()}
  def list_data_integrations(
        %Client{} = client,
        max_results \\ nil,
        next_token \\ nil,
        options \\ []
      ) do
    url_path = "/dataIntegrations"
    headers = []
    query_params = []

    query_params =
      if !is_nil(next_token) do
        [{"nextToken", next_token} | query_params]
      else
        query_params
      end

    query_params =
      if !is_nil(max_results) do
        [{"maxResults", max_results} | query_params]
      else
        query_params
      end

    meta = metadata()

    Request.request_rest(client, meta, :get, url_path, query_params, headers, nil, options, 200)
  end

  @doc """
  Returns a paginated list of event integration associations in the account.
  """
  @spec list_event_integration_associations(
          map(),
          String.t() | atom(),
          String.t() | atom() | nil,
          String.t() | atom() | nil,
          list()
        ) ::
          {:ok, list_event_integration_associations_response(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
          | {:error, list_event_integration_associations_errors()}
  def list_event_integration_associations(
        %Client{} = client,
        event_integration_name,
        max_results \\ nil,
        next_token \\ nil,
        options \\ []
      ) do
    url_path = "/eventIntegrations/#{AWS.Util.encode_uri(event_integration_name)}/associations"
    headers = []
    query_params = []

    query_params =
      if !is_nil(next_token) do
        [{"nextToken", next_token} | query_params]
      else
        query_params
      end

    query_params =
      if !is_nil(max_results) do
        [{"maxResults", max_results} | query_params]
      else
        query_params
      end

    meta = metadata()

    Request.request_rest(client, meta, :get, url_path, query_params, headers, nil, options, 200)
  end

  @doc """
  Returns a paginated list of event integrations in the account.
  """
  @spec list_event_integrations(
          map(),
          String.t() | atom() | nil,
          String.t() | atom() | nil,
          list()
        ) ::
          {:ok, list_event_integrations_response(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
          | {:error, list_event_integrations_errors()}
  def list_event_integrations(
        %Client{} = client,
        max_results \\ nil,
        next_token \\ nil,
        options \\ []
      ) do
    url_path = "/eventIntegrations"
    headers = []
    query_params = []

    query_params =
      if !is_nil(next_token) do
        [{"nextToken", next_token} | query_params]
      else
        query_params
      end

    query_params =
      if !is_nil(max_results) do
        [{"maxResults", max_results} | query_params]
      else
        query_params
      end

    meta = metadata()

    Request.request_rest(client, meta, :get, url_path, query_params, headers, nil, options, 200)
  end

  @doc """
  Lists the tags for the specified resource.
  """
  @spec list_tags_for_resource(map(), String.t() | atom(), 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, resource_arn, options \\ []) do
    url_path = "/tags/#{AWS.Util.encode_uri(resource_arn)}"
    headers = []
    query_params = []

    meta = metadata()

    Request.request_rest(client, meta, :get, url_path, query_params, headers, nil, options, 200)
  end

  @doc """
  Adds the specified tags to the specified resource.
  """
  @spec tag_resource(map(), String.t() | atom(), tag_resource_request(), list()) ::
          {:ok, tag_resource_response(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
          | {:error, tag_resource_errors()}
  def tag_resource(%Client{} = client, resource_arn, input, options \\ []) do
    url_path = "/tags/#{AWS.Util.encode_uri(resource_arn)}"
    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 """
  Removes the specified tags from the specified resource.
  """
  @spec untag_resource(map(), String.t() | atom(), untag_resource_request(), list()) ::
          {:ok, untag_resource_response(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
          | {:error, untag_resource_errors()}
  def untag_resource(%Client{} = client, resource_arn, input, options \\ []) do
    url_path = "/tags/#{AWS.Util.encode_uri(resource_arn)}"
    headers = []
    custom_headers = []

    {query_params, input} =
      [
        {"tagKeys", "tagKeys"}
      ]
      |> Request.build_params(input)

    meta = metadata()

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

  @doc """
  Updates and persists an Application resource.
  """
  @spec update_application(map(), String.t() | atom(), update_application_request(), list()) ::
          {:ok, update_application_response(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
          | {:error, update_application_errors()}
  def update_application(%Client{} = client, arn, input, options \\ []) do
    url_path = "/applications/#{AWS.Util.encode_uri(arn)}"
    headers = []
    custom_headers = []
    query_params = []

    meta = metadata()

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

  @doc """
  Updates the description of a DataIntegration.

  You cannot create a DataIntegration association for a DataIntegration that has
  been previously associated.
  Use a different DataIntegration, or recreate the DataIntegration using the
  [CreateDataIntegration](https://docs.aws.amazon.com/appintegrations/latest/APIReference/API_CreateDataIntegration.html)
  API.
  """
  @spec update_data_integration(
          map(),
          String.t() | atom(),
          update_data_integration_request(),
          list()
        ) ::
          {:ok, update_data_integration_response(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
          | {:error, update_data_integration_errors()}
  def update_data_integration(%Client{} = client, identifier, input, options \\ []) do
    url_path = "/dataIntegrations/#{AWS.Util.encode_uri(identifier)}"
    headers = []
    custom_headers = []
    query_params = []

    meta = metadata()

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

  @doc """
  Updates and persists a DataIntegrationAssociation resource.

  Updating a DataIntegrationAssociation with ExecutionConfiguration will rerun the
  on-demand job.
  """
  @spec update_data_integration_association(
          map(),
          String.t() | atom(),
          String.t() | atom(),
          update_data_integration_association_request(),
          list()
        ) ::
          {:ok, update_data_integration_association_response(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
          | {:error, update_data_integration_association_errors()}
  def update_data_integration_association(
        %Client{} = client,
        data_integration_association_identifier,
        data_integration_identifier,
        input,
        options \\ []
      ) do
    url_path =
      "/dataIntegrations/#{AWS.Util.encode_uri(data_integration_identifier)}/associations/#{AWS.Util.encode_uri(data_integration_association_identifier)}"

    headers = []
    custom_headers = []
    query_params = []

    meta = metadata()

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

  @doc """
  Updates the description of an event integration.
  """
  @spec update_event_integration(
          map(),
          String.t() | atom(),
          update_event_integration_request(),
          list()
        ) ::
          {:ok, update_event_integration_response(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
          | {:error, update_event_integration_errors()}
  def update_event_integration(%Client{} = client, name, input, options \\ []) do
    url_path = "/eventIntegrations/#{AWS.Util.encode_uri(name)}"
    headers = []
    custom_headers = []
    query_params = []

    meta = metadata()

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