From 292b57ce5ea951a60ffbf35dc4b5e3af49026bf4 Mon Sep 17 00:00:00 2001 From: Onno Vos Date: Fri, 24 Jul 2026 00:50:55 +0200 Subject: [PATCH 1/2] Fix map changing order in OTP26 - Small fix for Task.await/2 to wait for :infinity to avoid timeouts - Ignore new protocol: rpcv2Cbor for now until we add support for it - Handle odd shapename in healthlake which does not use com.amazonaws but com.amazon --- lib/aws_codegen.ex | 17 +- lib/aws_codegen/name.ex | 2 +- lib/aws_codegen/post_service.ex | 4 +- lib/aws_codegen/rest_service.ex | 8 +- lib/aws_codegen/shapes.ex | 2 +- lib/aws_codegen/spec.ex | 65 +- lib/aws_codegen/types.ex | 38 +- lib/aws_codegen/util.ex | 15 +- priv/post.erl.eex | 8 +- priv/post.ex.eex | 16 +- priv/rest.erl.eex | 8 +- priv/rest.ex.eex | 10 +- test/aws_codegen_test.exs | 10 +- test/fixtures/generated/data_exchange.ex | 1948 +++++++++++----------- 14 files changed, 1077 insertions(+), 1074 deletions(-) diff --git a/lib/aws_codegen.ex b/lib/aws_codegen.ex index 91b66bc..384ac92 100644 --- a/lib/aws_codegen.ex +++ b/lib/aws_codegen.ex @@ -95,15 +95,18 @@ defmodule AWS.CodeGen do Enum.map( api_specs(spec_base_path, language), fn spec -> - output_path = Path.join(output_base_path, spec.filename) - - Task.async(fn -> - generate_code(spec, language, endpoints_spec, template_base_path, output_path) - end) + if spec == :error do + IO.puts("Skipping due to error") + Task.async(fn -> :ok end) + else + output_path = Path.join(output_base_path, spec.filename) + Task.async(fn -> + generate_code(spec, language, endpoints_spec, template_base_path, output_path) + end) + end end ) - - Enum.each(tasks, fn task -> Task.await(task, 120_000) end) + Enum.each(tasks, fn task -> Task.await(task, :infinity) end) end defp generate_code(spec, language, endpoints_spec, template_base_path, output_path) do diff --git a/lib/aws_codegen/name.ex b/lib/aws_codegen/name.ex index 18328ab..e06b9d2 100644 --- a/lib/aws_codegen/name.ex +++ b/lib/aws_codegen/name.ex @@ -12,7 +12,7 @@ defmodule AWS.CodeGen.Name do """ def to_snake_case(text) do text - |> String.replace(~r/com\.amazonaws\.[^#]+#/, "") + |> String.replace(~r/com\.(amazonaws|amazon)\.[^#]+#/, "") |> String.replace(@names_to_capitalize, &String.capitalize(&1)) |> String.to_charlist() |> Enum.map_join(&char_to_snake_case/1) diff --git a/lib/aws_codegen/post_service.ex b/lib/aws_codegen/post_service.ex index 141b79d..5b165a7 100644 --- a/lib/aws_codegen/post_service.ex +++ b/lib/aws_codegen/post_service.ex @@ -91,7 +91,6 @@ defmodule AWS.CodeGen.PostService do endpoint_prefix end signing_name = traits["aws.auth#sigv4"]["name"] || maybe_signing_name - %Service{ actions: actions, api_version: service["version"], @@ -155,7 +154,6 @@ defmodule AWS.CodeGen.PostService do ] |> Enum.reject(&is_nil/1) |> Kernel.++(acc) - _ -> acc end @@ -175,7 +173,7 @@ defmodule AWS.CodeGen.PostService do ), function_name: AWS.CodeGen.Name.to_snake_case(operation), host_prefix: operation_spec["traits"]["smithy.api#endpoint"]["hostPrefix"], - name: String.replace(operation, ~r/com\.amazonaws\.[^#]+#/, ""), + name: String.replace(operation, ~r/com\.(amazonaws|amazon)\.[^#]+#/, ""), input: operation_spec["input"], output: operation_spec["output"], errors: operation_spec["errors"] diff --git a/lib/aws_codegen/rest_service.ex b/lib/aws_codegen/rest_service.ex index cd8e95e..7526105 100644 --- a/lib/aws_codegen/rest_service.ex +++ b/lib/aws_codegen/rest_service.ex @@ -257,6 +257,7 @@ defmodule AWS.CodeGen.RestService do end) |> List.flatten() |> Enum.map(fn %{"target" => target} -> target end) + |> Enum.reverse() Enum.map(operations, fn operation -> operation_spec = shapes[operation] @@ -337,7 +338,6 @@ defmodule AWS.CodeGen.RestService do defp collect_url_parameters(language, api_spec, operation) do url_params = collect_parameters(language, api_spec, operation, "input", "smithy.api#httpLabel") - url_params end @@ -377,10 +377,12 @@ defmodule AWS.CodeGen.RestService do shape["members"] |> Enum.filter(filter_fn(param_type)) - |> Enum.map(fn {name, x} -> + |> Enum.reduce([], fn {name, x}, acc -> required = Enum.member?(required_members, name) - build_parameter(language, {name, x["traits"][param_type]}, required) + acc ++ [build_parameter(language, {name, x["traits"][param_type]}, required)] end) + |> Enum.sort(fn a, b -> a.code_name < b.code_name end) + end else [] diff --git a/lib/aws_codegen/shapes.ex b/lib/aws_codegen/shapes.ex index 96d6af4..2b60645 100644 --- a/lib/aws_codegen/shapes.ex +++ b/lib/aws_codegen/shapes.ex @@ -20,7 +20,7 @@ defmodule AWS.CodeGen.Shapes do def collect_shapes(_language, api_spec) do api_spec["shapes"] - |> Map.new(fn {name, shape} -> + |> Enum.map(fn {name, shape} -> {name, %Shape{ name: name, diff --git a/lib/aws_codegen/spec.ex b/lib/aws_codegen/spec.ex index 2ad72e2..2645285 100644 --- a/lib/aws_codegen/spec.ex +++ b/lib/aws_codegen/spec.ex @@ -32,42 +32,49 @@ defmodule AWS.CodeGen.Spec do service_name = api |> find_service() - |> String.replace("com.amazonaws.#{api_name}#", "") + |> String.replace(~r/com\.(amazonaws|amazon)\.[^#]+#/, "") traits = api["shapes"]["com.amazonaws." <> api_name <> "#" <> service_name]["traits"] - - protocol = + protocol0 = Enum.find_value(traits, fn {k, _v} -> case String.split(k, "#") do ["aws.protocols", protocol] -> protocol - _ -> nil - end - end) - |> String.replace("restJson1", "rest_json") - |> String.replace(["awsJson1_0", "awsJson1_1"], "json") - |> String.replace("awsQuery", "query") - |> String.replace("restXml", "rest_xml") - |> String.replace("ec2Query", "ec2") - |> then(fn value -> - if value in ~w(rest_json json query rest_xml ec2) do - value - else - raise "the protocol #{value} is not valid" + _ -> + nil end end) - |> String.to_atom() - - module_name = module_name(traits, language) - filename = filename(module_name, language) - - %AWS.CodeGen.Spec{ - protocol: protocol, - module_name: module_name, - filename: filename, - api: api, - language: language, - shape_name: "com.amazonaws." <> api_name <> "#" <> service_name - } + if is_nil(protocol0) do + IO.puts("Unhandled protocol (nil) for #{api_filename} with service #{service_name}") + :error + else + protocol = + protocol0 + |> String.replace("restJson1", "rest_json") + |> String.replace(["awsJson1_0", "awsJson1_1"], "json") + |> String.replace("awsQuery", "query") + |> String.replace("restXml", "rest_xml") + |> String.replace("ec2Query", "ec2") + |> then(fn value -> + if value in ~w(rest_json json query rest_xml ec2) do + value + else + raise "the protocol #{value} is not valid" + end + end) + |> String.to_atom() + + module_name = module_name(traits, language) + filename = filename(module_name, language) + + %AWS.CodeGen.Spec{ + protocol: protocol, + module_name: module_name, + filename: filename, + api: api, + language: language, + shape_name: "com.amazonaws." <> api_name <> "#" <> service_name + } + end end def find_service(api) do diff --git a/lib/aws_codegen/types.ex b/lib/aws_codegen/types.ex index f3b2efc..659b56c 100644 --- a/lib/aws_codegen/types.ex +++ b/lib/aws_codegen/types.ex @@ -2,7 +2,7 @@ defmodule AWS.CodeGen.Types do alias AWS.CodeGen.Shapes.Shape def types(context) do - Enum.reduce(context.shapes, %{}, fn {_name, shape}, acc -> + Enum.reduce(context.shapes, [], fn {_name, shape}, acc -> process_shape(context, shape, acc) end) end @@ -23,12 +23,12 @@ defmodule AWS.CodeGen.Types do defp normalize_type_name(name) do name - |> String.replace(~r/com\.amazonaws\.[^#]+#/, "") + |> String.replace(~r/com\.(amazonaws|amazon)\.[^#]+#/, "") |> AWS.CodeGen.Name.to_snake_case() end defp process_shape_members(context, shape) do - Enum.reduce(shape.members, %{}, fn {name, shape_member}, a -> + Enum.reduce(shape.members, [], fn {name, shape_member}, a -> process_shape_member(context, shape, name, shape_member, a) end) end @@ -41,11 +41,7 @@ defmodule AWS.CodeGen.Types do else shape_member_type = shape_to_type(context, target, context.module_name, context.shapes) - Map.put( - a, - is_required(context.language, shape.is_input, shape_member, name), - shape_member_type - ) + [({is_required(context.language, shape.is_input, shape_member, name), shape_member_type}) | a] end end @@ -54,9 +50,9 @@ defmodule AWS.CodeGen.Types do defp update_acc_with_types(acc, type, types, context) do if reserved_type(type) do module_name = String.downcase(String.replace(context.module_name, ["aws_", "AWS."], "")) - Map.put(acc, "#{module_name}_#{type}", types) + [{ "#{module_name}_#{type}", types } | acc] else - Map.put(acc, type, types) + [{ type, types } | acc] end end @@ -99,10 +95,10 @@ defmodule AWS.CodeGen.Types do "[#{shape_to_type(context.language, %Shape{type: "blob"}, module_name)}]" _ -> - case all_shapes[shape_name] do - %Shape{type: "structure"} -> + case List.keyfind(all_shapes, shape_name, 0) do + {_, %Shape{type: "structure"}} -> type = - "#{AWS.CodeGen.Name.to_snake_case(String.replace(shape_name, ~r/com\.amazonaws\.[^#]+#/, ""))}" + "#{AWS.CodeGen.Name.to_snake_case(String.replace(shape_name, ~r/com\.(amazonaws|amazon)\.[^#]+#/, ""))}" |> AWS.CodeGen.Util.maybe_add_parens() if reserved_type(type) do "#{String.downcase(String.replace(context.module_name, ["aws_", "AWS."], ""))}_#{type}" @@ -110,7 +106,7 @@ defmodule AWS.CodeGen.Types do "#{type}" end - %Shape{type: "list", member: member} -> + {_, %Shape{type: "list", member: member}} -> # this change alone gets us down to 1595 type = "#{shape_to_type(context, member["target"], module_name, all_shapes)}" @@ -125,7 +121,7 @@ defmodule AWS.CodeGen.Types do nil -> raise "Tried to reference an undefined shape for #{shape_name}" - shape -> + {_, shape} -> shape_to_type(context.language, shape, module_name) end end @@ -162,7 +158,7 @@ defmodule AWS.CodeGen.Types do defp shape_to_type(_, %Shape{type: "document"}, _module_name), do: "any()" defp is_required(:elixir, is_input, shape, target) do - trimmed_name = String.replace(target, ~r/com\.amazonaws\.[^#]+#/, "") + trimmed_name = String.replace(target, ~r/com\.(amazonaws|amazon)\.[^#]+#/, "") if is_input do if Map.has_key?(shape, "traits") do @@ -180,7 +176,7 @@ defmodule AWS.CodeGen.Types do end defp is_required(:erlang, is_input, shape, target) do - trimmed_name = String.replace(target, ~r/com\.amazonaws\.[^#]+#/, "") + trimmed_name = String.replace(target, ~r/com\.(amazonaws|amazon)\.[^#]+#/, "") if is_input do if Map.has_key?(shape, "traits") do @@ -207,7 +203,7 @@ defmodule AWS.CodeGen.Types do "%{}" type -> - "#{AWS.CodeGen.Name.to_snake_case(String.replace(type, ~r/com\.amazonaws\.[^#]+#/, ""))}()" + "#{AWS.CodeGen.Name.to_snake_case(String.replace(type, ~r/com\.(amazonaws|amazon)\.[^#]+#/, ""))}()" end end @@ -217,7 +213,7 @@ defmodule AWS.CodeGen.Types do "\#{}" type -> - "#{AWS.CodeGen.Name.to_snake_case(String.replace(type, ~r/com\.amazonaws\.[^#]+#/, ""))}()" + "#{AWS.CodeGen.Name.to_snake_case(String.replace(type, ~r/com\.(amazonaws|amazon)\.[^#]+#/, ""))}()" end end @@ -237,7 +233,7 @@ defmodule AWS.CodeGen.Types do type -> normal = - "{:ok, #{AWS.CodeGen.Name.to_snake_case(String.replace(type, ~r/com\.amazonaws\.[^#]+#/, ""))}(), any()}" + "{:ok, #{AWS.CodeGen.Name.to_snake_case(String.replace(type, ~r/com\.(amazonaws|amazon)\.[^#]+#/, ""))}(), any()}" errors = if is_list(action.errors) do @@ -266,7 +262,7 @@ defmodule AWS.CodeGen.Types do type -> normal = - "{ok, #{AWS.CodeGen.Name.to_snake_case(String.replace(type, ~r/com\.amazonaws\.[^#]+#/, ""))}(), tuple()}" + "{ok, #{AWS.CodeGen.Name.to_snake_case(String.replace(type, ~r/com\.(amazonaws|amazon)\.[^#]+#/, ""))}(), tuple()}" errors = if is_list(action.errors) do diff --git a/lib/aws_codegen/util.ex b/lib/aws_codegen/util.ex index d35ca6b..648bf8c 100644 --- a/lib/aws_codegen/util.ex +++ b/lib/aws_codegen/util.ex @@ -45,22 +45,19 @@ defmodule AWS.CodeGen.Util do [] [{_name, shape}] -> - Enum.reduce( + Enum.map( shape.members, - [], fn - {name, %{"traits" => traits}}, acc -> + {name, %{"traits" => traits}} -> if Map.has_key?(traits, "smithy.api#required") do - [name <> " Required: true" | acc] + name <> " Required: true" else - [name <> " Required: false" | acc] + name <> " Required: false" end - - {name, _shape}, acc -> - [name <> " Required: false" | acc] + {name, _shape} -> + name <> " Required: false" end ) - |> Enum.reverse() end end diff --git a/priv/post.erl.eex b/priv/post.erl.eex index 544ce52..5218926 100644 --- a/priv/post.erl.eex +++ b/priv/post.erl.eex @@ -8,10 +8,10 @@ -include_lib("hackney/include/hackney_lib.hrl"). -<%= for {type_name, type_fields} <- AWS.CodeGen.Types.types(context) do %> +<%= for {type_name, type_fields} <- AWS.CodeGen.Types.types(context) |> Enum.sort(fn {type_a, _}, {type_b, _} -> type_a < type_b end) do %> %% Example: %% <%= type_name %>() :: #{ -<%= Enum.map_join(type_fields, ",\n", fn {field_name, field_type} -> +<%= Enum.map_join(type_fields |> Enum.sort(fn {field_a, _}, {field_b, _} -> field_a < field_b end), ",\n", fn {field_name, field_type} -> ~s{%% #{field_name}#{field_type}} end) %> %% } @@ -21,8 +21,8 @@ end) %> fn action -> errors = action.errors if not is_nil(errors) do - errors_snakecased = errors |> Enum.map(fn error -> AWS.CodeGen.Name.to_snake_case(String.replace(error["target"], ~r/com\.amazonaws\.[^#]+#/, "")) end) - all_types = AWS.CodeGen.Types.types(context) + errors_snakecased = errors |> Enum.map(fn error -> AWS.CodeGen.Name.to_snake_case(String.replace(error["target"], ~r/com\.(amazonaws|amazon)\.[^#]+#/, "")) end) + all_types = AWS.CodeGen.Types.types(context) |> Enum.sort(fn {type_a, _}, {type_b, _} -> type_a < type_b end) error_types = Enum.reduce(all_types, [], fn {type_name, _type_fields}, acc -> diff --git a/priv/post.ex.eex b/priv/post.ex.eex index 7388696..551a052 100644 --- a/priv/post.ex.eex +++ b/priv/post.ex.eex @@ -11,29 +11,29 @@ defmodule <%= context.module_name %> do alias AWS.Client alias AWS.Request - <%= for {type_name, type_fields} <- AWS.CodeGen.Types.types(context) do %> -@typedoc """ + <%= for {type_name, type_fields} <- AWS.CodeGen.Types.types(context) |> Enum.sort(fn {type_a, _}, {type_b, _} -> type_a < type_b end) do %> +<%= if length(type_fields) == 0 and context.module_name == "AWS.HealthLake" and type_name == "list_tags_for_resource_request" do %><% else %>@typedoc """ ## Example: - <%= if map_size(type_fields) == 0 do %> + <%= if length(type_fields) == 0 do %> <%= "#{type_name}() :: %{}" %> <% else %> <%= "#{type_name}() :: %{" %> - <%= Enum.map_join(type_fields, ",\n ", fn {field_name, field_type} -> + <%= Enum.map_join(type_fields |> Enum.sort(fn {field_a, _}, {field_b, _} -> field_a < field_b end), ",\n ", fn {field_name, field_type} -> ~s{ #{field_name}#{field_type}} end) %> } <% end %> """ -@type <%= if map_size(type_fields) == 0 do "#{type_name}() :: %{}" else "#{type_name}() :: %{(String.t() | atom()) => any()}" end %> -<% end %> +@type <%= if length(type_fields) == 0 do "#{type_name}() :: %{}" else "#{type_name}() :: %{(String.t() | atom()) => any()}" end %> +<% end %><% end %> <%= Enum.map(context.actions, fn action -> errors = action.errors if not is_nil(errors) do - errors_snakecased = Enum.map(errors, fn error -> AWS.CodeGen.Name.to_snake_case(String.replace(error["target"], ~r/com\.amazonaws\.[^#]+#/, "")) end) - all_types = AWS.CodeGen.Types.types(context) + errors_snakecased = Enum.map(errors, fn error -> AWS.CodeGen.Name.to_snake_case(String.replace(error["target"], ~r/com\.(amazonaws|amazon)\.[^#]+#/, "")) end) + all_types = AWS.CodeGen.Types.types(context) |> Enum.sort(fn {type_a, _}, {type_b, _} -> type_a < type_b end) error_types = Enum.reduce(all_types, [], fn {type_name, _type_fields}, acc -> diff --git a/priv/rest.erl.eex b/priv/rest.erl.eex index e20eec2..bccf76e 100644 --- a/priv/rest.erl.eex +++ b/priv/rest.erl.eex @@ -10,13 +10,13 @@ <% end %> -include_lib("hackney/include/hackney_lib.hrl"). -<%= for {type_name, type_fields} <- AWS.CodeGen.Types.types(context) do %> +<%= for {type_name, type_fields} <- AWS.CodeGen.Types.types(context) |> Enum.sort(fn {type_a, _}, {type_b, _} -> type_a < type_b end) do %> <%= if Enum.empty?(type_fields) do %>%% Example: %% <%= type_name %>() :: #{} -type <%= "#{type_name}()" %> :: #{}.<% else %> %% Example: %% <%= type_name %>() :: #{ -<%= Enum.map_join(type_fields, ",\n", fn {field_name, field_type} -> +<%= Enum.map_join(type_fields |> Enum.sort(fn {field_a, _}, {field_b, _} -> field_a < field_b end), ",\n", fn {field_name, field_type} -> ~s{%% #{field_name}#{field_type}} end) %> %% } @@ -26,8 +26,8 @@ end) %> fn action -> errors = action.errors if not is_nil(errors) do - errors_snakecased = errors |> Enum.map(fn error -> AWS.CodeGen.Name.to_snake_case(String.replace(error["target"], ~r/com\.amazonaws\.[^#]+#/, "")) end) - all_types = AWS.CodeGen.Types.types(context) + errors_snakecased = errors |> Enum.map(fn error -> AWS.CodeGen.Name.to_snake_case(String.replace(error["target"], ~r/com\.(amazonaws|amazon)\.[^#]+#/, "")) end) + all_types = AWS.CodeGen.Types.types(context) |> Enum.sort(fn {type_a, _}, {type_b, _} -> type_a < type_b end) error_types = Enum.reduce(all_types, [], fn {type_name, _type_fields}, acc -> diff --git a/priv/rest.ex.eex b/priv/rest.ex.eex index fdde6e3..8d97843 100644 --- a/priv/rest.ex.eex +++ b/priv/rest.ex.eex @@ -11,7 +11,7 @@ defmodule <%= context.module_name %> do alias AWS.Client alias AWS.Request - <%= for {type_name, type_fields} <- AWS.CodeGen.Types.types(context) do %> + <%= for {type_name, type_fields} <- AWS.CodeGen.Types.types(context) |> Enum.sort(fn {type_a, _}, {type_b, _} -> type_a < type_b end) do %> @typedoc """ ## Example: @@ -19,7 +19,7 @@ defmodule <%= context.module_name %> do <%= "#{type_name}() :: %{}" %> <% else %> <%= "#{type_name}() :: %{" %> - <%= Enum.map_join(type_fields, ",\n ", fn {field_name, field_type} -> + <%= Enum.map_join(type_fields |> Enum.sort(fn {field_a, _}, {field_b, _} -> field_a < field_b end), ",\n ", fn {field_name, field_type} -> ~s{ #{field_name}#{field_type}} end) %> } @@ -32,8 +32,8 @@ defmodule <%= context.module_name %> do fn action -> errors = action.errors if not is_nil(errors) do - errors_snakecased = errors |> Enum.map(fn error -> AWS.CodeGen.Name.to_snake_case(String.replace(error["target"], ~r/com\.amazonaws\.[^#]+#/, "")) end) - all_types = AWS.CodeGen.Types.types(context) + errors_snakecased = errors |> Enum.map(fn error -> AWS.CodeGen.Name.to_snake_case(String.replace(error["target"], ~r/com\.(amazonaws|amazon)\.[^#]+#/, "")) end) + all_types = AWS.CodeGen.Types.types(context) |> Enum.sort(fn {type_a, _}, {type_b, _} -> type_a < type_b end) error_types = Enum.reduce(all_types, [], fn {type_name, _type_fields}, acc -> @@ -80,7 +80,7 @@ defmodule <%= context.module_name %> do else headers end<% end %> - query_params = []<%= for parameter <- Enum.reverse(action.query_parameters) do %> + query_params = []<%= for parameter <- action.query_parameters do %> query_params = if !is_nil(<%= parameter.code_name %>) do [{"<%= parameter.location_name %>", <%= parameter.code_name %>} | query_params] else diff --git a/test/aws_codegen_test.exs b/test/aws_codegen_test.exs index 4e7f7a1..3b63740 100644 --- a/test/aws_codegen_test.exs +++ b/test/aws_codegen_test.exs @@ -298,7 +298,7 @@ defmodule AWS.CodeGenTest do %{context | actions: [action]} |> AWS.CodeGen.render("priv/rest.ex.eex") |> IO.iodata_to_binary() - + IO.puts(inspect(result)) assert result == String.trim_leading(""" # WARNING: DO NOT EDIT, AUTO-GENERATED CODE! @@ -496,15 +496,15 @@ defmodule AWS.CodeGenTest do query_params = [] query_params = - if !is_nil(external_id) do - [{\"externalId\", external_id} | query_params] + if !is_nil(channel_arn) do + [{\"channelArn\", channel_arn} | query_params] else query_params end query_params = - if !is_nil(channel_arn) do - [{\"channelArn\", channel_arn} | query_params] + if !is_nil(external_id) do + [{\"externalId\", external_id} | query_params] else query_params end diff --git a/test/fixtures/generated/data_exchange.ex b/test/fixtures/generated/data_exchange.ex index 34f12e9..7ea202e 100644 --- a/test/fixtures/generated/data_exchange.ex +++ b/test/fixtures/generated/data_exchange.ex @@ -48,223 +48,203 @@ defmodule AWS.DataExchange do ## Example: - redshift_data_share_details() :: %{ - "Arn" => String.t() | atom(), - "Database" => String.t() | atom(), - "Function" => String.t() | atom(), - "Schema" => String.t() | atom(), - "Table" => String.t() | atom(), - "View" => String.t() | atom() - } + accept_data_grant_request() :: %{} """ - @type redshift_data_share_details() :: %{(String.t() | atom()) => any()} + @type accept_data_grant_request() :: %{} @typedoc """ ## Example: - import_asset_from_api_gateway_api_response_details() :: %{ - "ApiDescription" => String.t() | atom(), - "ApiId" => String.t() | atom(), - "ApiKey" => String.t() | atom(), - "ApiName" => String.t() | atom(), - "ApiSpecificationMd5Hash" => String.t() | atom(), - "ApiSpecificationUploadUrl" => String.t() | atom(), - "ApiSpecificationUploadUrlExpiresAt" => non_neg_integer(), + accept_data_grant_response() :: %{ + "AcceptanceState" => String.t() | atom(), + "AcceptedAt" => non_neg_integer(), + "Arn" => String.t() | atom(), + "CreatedAt" => non_neg_integer(), "DataSetId" => String.t() | atom(), - "ProtocolType" => String.t() | atom(), - "RevisionId" => String.t() | atom(), - "Stage" => String.t() | atom() + "Description" => String.t() | atom(), + "EndsAt" => non_neg_integer(), + "GrantDistributionScope" => String.t() | atom(), + "Id" => String.t() | atom(), + "Name" => String.t() | atom(), + "ReceiverPrincipal" => String.t() | atom(), + "SenderPrincipal" => String.t() | atom(), + "UpdatedAt" => non_neg_integer() } """ - @type import_asset_from_api_gateway_api_response_details() :: %{(String.t() | atom()) => any()} + @type accept_data_grant_response() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - cancel_job_request() :: %{} + access_denied_exception() :: %{ + "Message" => String.t() | atom() + } """ - @type cancel_job_request() :: %{} + @type access_denied_exception() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - event_action_entry() :: %{ - "Action" => action(), - "Arn" => String.t() | atom(), - "CreatedAt" => non_neg_integer(), - "Event" => event(), - "Id" => String.t() | atom(), - "UpdatedAt" => non_neg_integer() + action() :: %{ + "ExportRevisionToS3" => auto_export_revision_to_s3_request_details() } """ - @type event_action_entry() :: %{(String.t() | atom()) => any()} + @type action() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - scope_details() :: %{ - "LakeFormationTagPolicies" => list(lake_formation_tag_policy_details()), - "RedshiftDataShares" => list(redshift_data_share_details()), - "S3DataAccesses" => list(s3_data_access_details()) + api_gateway_api_asset() :: %{ + "ApiDescription" => String.t() | atom(), + "ApiEndpoint" => String.t() | atom(), + "ApiId" => String.t() | atom(), + "ApiKey" => String.t() | atom(), + "ApiName" => String.t() | atom(), + "ApiSpecificationDownloadUrl" => String.t() | atom(), + "ApiSpecificationDownloadUrlExpiresAt" => non_neg_integer(), + "ProtocolType" => String.t() | atom(), + "Stage" => String.t() | atom() } """ - @type scope_details() :: %{(String.t() | atom()) => any()} + @type api_gateway_api_asset() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - get_data_set_response() :: %{ - optional("Arn") => String.t() | atom(), - optional("AssetType") => String.t() | atom(), - optional("CreatedAt") => non_neg_integer(), - optional("Description") => String.t() | atom(), - optional("Id") => String.t() | atom(), - optional("Name") => String.t() | atom(), - optional("Origin") => String.t() | atom(), - optional("OriginDetails") => origin_details(), - optional("SourceId") => String.t() | atom(), - optional("Tags") => map(), - optional("UpdatedAt") => non_neg_integer() + asset_destination_entry() :: %{ + "AssetId" => String.t() | atom(), + "Bucket" => String.t() | atom(), + "Key" => String.t() | atom() } """ - @type get_data_set_response() :: %{(String.t() | atom()) => any()} + @type asset_destination_entry() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - accept_data_grant_request() :: %{} + asset_details() :: %{ + "ApiGatewayApiAsset" => api_gateway_api_asset(), + "LakeFormationDataPermissionAsset" => lake_formation_data_permission_asset(), + "RedshiftDataShareAsset" => redshift_data_share_asset(), + "S3DataAccessAsset" => s3_data_access_asset(), + "S3SnapshotAsset" => s3_snapshot_asset() + } """ - @type accept_data_grant_request() :: %{} + @type asset_details() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - tag_resource_request() :: %{ - required("Tags") => map() + asset_entry() :: %{ + "Arn" => String.t() | atom(), + "AssetDetails" => asset_details(), + "AssetType" => String.t() | atom(), + "CreatedAt" => non_neg_integer(), + "DataSetId" => String.t() | atom(), + "Id" => String.t() | atom(), + "Name" => String.t() | atom(), + "RevisionId" => String.t() | atom(), + "SourceId" => String.t() | atom(), + "UpdatedAt" => non_neg_integer() } """ - @type tag_resource_request() :: %{(String.t() | atom()) => any()} + @type asset_entry() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - update_revision_response() :: %{ - optional("Arn") => String.t() | atom(), - optional("Comment") => String.t() | atom(), - optional("CreatedAt") => non_neg_integer(), - optional("DataSetId") => String.t() | atom(), - optional("Finalized") => boolean(), - optional("Id") => String.t() | atom(), - optional("RevocationComment") => String.t() | atom(), - optional("Revoked") => boolean(), - optional("RevokedAt") => non_neg_integer(), - optional("SourceId") => String.t() | atom(), - optional("UpdatedAt") => non_neg_integer() + asset_source_entry() :: %{ + "Bucket" => String.t() | atom(), + "Key" => String.t() | atom() } """ - @type update_revision_response() :: %{(String.t() | atom()) => any()} + @type asset_source_entry() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - get_revision_response() :: %{ - optional("Arn") => String.t() | atom(), - optional("Comment") => String.t() | atom(), - optional("CreatedAt") => non_neg_integer(), - optional("DataSetId") => String.t() | atom(), - optional("Finalized") => boolean(), - optional("Id") => String.t() | atom(), - optional("RevocationComment") => String.t() | atom(), - optional("Revoked") => boolean(), - optional("RevokedAt") => non_neg_integer(), - optional("SourceId") => String.t() | atom(), - optional("Tags") => map(), - optional("UpdatedAt") => non_neg_integer() + auto_export_revision_destination_entry() :: %{ + "Bucket" => String.t() | atom(), + "KeyPattern" => String.t() | atom() } """ - @type get_revision_response() :: %{(String.t() | atom()) => any()} + @type auto_export_revision_destination_entry() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - list_received_data_grants_request() :: %{ - optional("AcceptanceState") => list(String.t() | atom()), - optional("MaxResults") => integer(), - optional("NextToken") => String.t() | atom() + auto_export_revision_to_s3_request_details() :: %{ + "Encryption" => export_server_side_encryption(), + "RevisionDestination" => auto_export_revision_destination_entry() } """ - @type list_received_data_grants_request() :: %{(String.t() | atom()) => any()} + @type auto_export_revision_to_s3_request_details() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - list_data_sets_response() :: %{ - optional("DataSets") => list(data_set_entry()), - optional("NextToken") => String.t() | atom() - } + cancel_job_request() :: %{} """ - @type list_data_sets_response() :: %{(String.t() | atom()) => any()} + @type cancel_job_request() :: %{} @typedoc """ ## Example: - export_revisions_to_s3_response_details() :: %{ - "DataSetId" => String.t() | atom(), - "Encryption" => export_server_side_encryption(), - "EventActionArn" => String.t() | atom(), - "RevisionDestinations" => list(revision_destination_entry()) + conflict_exception() :: %{ + "Message" => String.t() | atom(), + "ResourceId" => String.t() | atom(), + "ResourceType" => String.t() | atom() } """ - @type export_revisions_to_s3_response_details() :: %{(String.t() | atom()) => any()} + @type conflict_exception() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - create_job_response() :: %{ - optional("Arn") => String.t() | atom(), - optional("CreatedAt") => non_neg_integer(), - optional("Details") => response_details(), - optional("Errors") => list(job_error()), - optional("Id") => String.t() | atom(), - optional("State") => String.t() | atom(), - optional("Type") => String.t() | atom(), - optional("UpdatedAt") => non_neg_integer() + create_data_grant_request() :: %{ + optional("Description") => String.t() | atom(), + optional("EndsAt") => non_neg_integer(), + optional("Tags") => map(), + required("GrantDistributionScope") => String.t() | atom(), + required("Name") => String.t() | atom(), + required("ReceiverPrincipal") => String.t() | atom(), + required("SourceDataSetId") => String.t() | atom() } """ - @type create_job_response() :: %{(String.t() | atom()) => any()} + @type create_data_grant_request() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - get_received_data_grant_response() :: %{ + create_data_grant_response() :: %{ "AcceptanceState" => String.t() | atom(), "AcceptedAt" => non_neg_integer(), "Arn" => String.t() | atom(), @@ -277,178 +257,192 @@ defmodule AWS.DataExchange do "Name" => String.t() | atom(), "ReceiverPrincipal" => String.t() | atom(), "SenderPrincipal" => String.t() | atom(), + "SourceDataSetId" => String.t() | atom(), + "Tags" => map(), "UpdatedAt" => non_neg_integer() } """ - @type get_received_data_grant_response() :: %{(String.t() | atom()) => any()} + @type create_data_grant_response() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - l_f_tag() :: %{ - "TagKey" => [String.t() | atom()], - "TagValues" => list([String.t() | atom()]()) + create_data_set_request() :: %{ + optional("Tags") => map(), + required("AssetType") => String.t() | atom(), + required("Description") => String.t() | atom(), + required("Name") => String.t() | atom() } """ - @type l_f_tag() :: %{(String.t() | atom()) => any()} + @type create_data_set_request() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - list_received_data_grants_response() :: %{ - "DataGrantSummaries" => list(received_data_grant_summaries_entry()), - "NextToken" => String.t() | atom() + create_data_set_response() :: %{ + optional("Arn") => String.t() | atom(), + optional("AssetType") => String.t() | atom(), + optional("CreatedAt") => non_neg_integer(), + optional("Description") => String.t() | atom(), + optional("Id") => String.t() | atom(), + optional("Name") => String.t() | atom(), + optional("Origin") => String.t() | atom(), + optional("OriginDetails") => origin_details(), + optional("SourceId") => String.t() | atom(), + optional("Tags") => map(), + optional("UpdatedAt") => non_neg_integer() } """ - @type list_received_data_grants_response() :: %{(String.t() | atom()) => any()} + @type create_data_set_response() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - redshift_data_share_asset_source_entry() :: %{ - "DataShareArn" => String.t() | atom() + create_event_action_request() :: %{ + required("Action") => action(), + required("Event") => event() } """ - @type redshift_data_share_asset_source_entry() :: %{(String.t() | atom()) => any()} + @type create_event_action_request() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - create_event_action_request() :: %{ - required("Action") => action(), - required("Event") => event() + create_event_action_response() :: %{ + optional("Action") => action(), + optional("Arn") => String.t() | atom(), + optional("CreatedAt") => non_neg_integer(), + optional("Event") => event(), + optional("Id") => String.t() | atom(), + optional("UpdatedAt") => non_neg_integer() } """ - @type create_event_action_request() :: %{(String.t() | atom()) => any()} + @type create_event_action_response() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - send_data_set_notification_request() :: %{ - optional("ClientToken") => String.t() | atom(), - optional("Comment") => String.t() | atom(), - optional("Details") => notification_details(), - optional("Scope") => scope_details(), + create_job_request() :: %{ + required("Details") => request_details(), required("Type") => String.t() | atom() } """ - @type send_data_set_notification_request() :: %{(String.t() | atom()) => any()} + @type create_job_request() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - get_revision_request() :: %{} + create_job_response() :: %{ + optional("Arn") => String.t() | atom(), + optional("CreatedAt") => non_neg_integer(), + optional("Details") => response_details(), + optional("Errors") => list(job_error()), + optional("Id") => String.t() | atom(), + optional("State") => String.t() | atom(), + optional("Type") => String.t() | atom(), + optional("UpdatedAt") => non_neg_integer() + } """ - @type get_revision_request() :: %{} + @type create_job_response() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - import_asset_from_signed_url_job_error_details() :: %{ - "AssetName" => String.t() | atom() + create_revision_request() :: %{ + optional("Comment") => String.t() | atom(), + optional("Tags") => map() } """ - @type import_asset_from_signed_url_job_error_details() :: %{(String.t() | atom()) => any()} + @type create_revision_request() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - list_jobs_request() :: %{ + create_revision_response() :: %{ + optional("Arn") => String.t() | atom(), + optional("Comment") => String.t() | atom(), + optional("CreatedAt") => non_neg_integer(), optional("DataSetId") => String.t() | atom(), - optional("MaxResults") => integer(), - optional("NextToken") => String.t() | atom(), - optional("RevisionId") => String.t() | atom() + optional("Finalized") => boolean(), + optional("Id") => String.t() | atom(), + optional("RevocationComment") => String.t() | atom(), + optional("Revoked") => boolean(), + optional("RevokedAt") => non_neg_integer(), + optional("SourceId") => String.t() | atom(), + optional("Tags") => map(), + optional("UpdatedAt") => non_neg_integer() } """ - @type list_jobs_request() :: %{(String.t() | atom()) => any()} + @type create_revision_response() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - create_data_grant_response() :: %{ - "AcceptanceState" => String.t() | atom(), - "AcceptedAt" => non_neg_integer(), - "Arn" => String.t() | atom(), - "CreatedAt" => non_neg_integer(), + create_s3_data_access_from_s3_bucket_request_details() :: %{ + "AssetSource" => s3_data_access_asset_source_entry(), "DataSetId" => String.t() | atom(), - "Description" => String.t() | atom(), - "EndsAt" => non_neg_integer(), - "GrantDistributionScope" => String.t() | atom(), - "Id" => String.t() | atom(), - "Name" => String.t() | atom(), - "ReceiverPrincipal" => String.t() | atom(), - "SenderPrincipal" => String.t() | atom(), - "SourceDataSetId" => String.t() | atom(), - "Tags" => map(), - "UpdatedAt" => non_neg_integer() - } - - """ - @type create_data_grant_response() :: %{(String.t() | atom()) => any()} - - @typedoc """ - - ## Example: - - start_job_response() :: %{} - - """ - @type start_job_response() :: %{} - - @typedoc """ - - ## Example: - - redshift_data_share_asset() :: %{ - "Arn" => String.t() | atom() + "RevisionId" => String.t() | atom() } """ - @type redshift_data_share_asset() :: %{(String.t() | atom()) => any()} + @type create_s3_data_access_from_s3_bucket_request_details() :: %{ + (String.t() | atom()) => any() + } @typedoc """ ## Example: - list_data_sets_request() :: %{ - optional("MaxResults") => integer(), - optional("NextToken") => String.t() | atom(), - optional("Origin") => String.t() | atom() + create_s3_data_access_from_s3_bucket_response_details() :: %{ + "AssetSource" => s3_data_access_asset_source_entry(), + "DataSetId" => String.t() | atom(), + "RevisionId" => String.t() | atom() } """ - @type list_data_sets_request() :: %{(String.t() | atom()) => any()} + @type create_s3_data_access_from_s3_bucket_response_details() :: %{ + (String.t() | atom()) => any() + } @typedoc """ ## Example: - notification_details() :: %{ - "DataUpdate" => data_update_request_details(), - "Deprecation" => deprecation_request_details(), - "SchemaChange" => schema_change_request_details() + data_grant_summary_entry() :: %{ + "AcceptanceState" => String.t() | atom(), + "AcceptedAt" => non_neg_integer(), + "Arn" => String.t() | atom(), + "CreatedAt" => non_neg_integer(), + "DataSetId" => String.t() | atom(), + "EndsAt" => non_neg_integer(), + "Id" => String.t() | atom(), + "Name" => String.t() | atom(), + "ReceiverPrincipal" => String.t() | atom(), + "SenderPrincipal" => String.t() | atom(), + "SourceDataSetId" => String.t() | atom(), + "UpdatedAt" => non_neg_integer() } """ - @type notification_details() :: %{(String.t() | atom()) => any()} + @type data_grant_summary_entry() :: %{(String.t() | atom()) => any()} @typedoc """ @@ -474,342 +468,269 @@ defmodule AWS.DataExchange do ## Example: - list_jobs_response() :: %{ - optional("Jobs") => list(job_entry()), - optional("NextToken") => String.t() | atom() + data_update_request_details() :: %{ + "DataUpdatedAt" => non_neg_integer() } """ - @type list_jobs_response() :: %{(String.t() | atom()) => any()} + @type data_update_request_details() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - create_job_request() :: %{ - required("Details") => request_details(), - required("Type") => String.t() | atom() + database_l_f_tag_policy() :: %{ + "Expression" => list(l_f_tag()) } """ - @type create_job_request() :: %{(String.t() | atom()) => any()} + @type database_l_f_tag_policy() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - untag_resource_request() :: %{ - required("TagKeys") => list(String.t() | atom()) + database_l_f_tag_policy_and_permissions() :: %{ + "Expression" => list(l_f_tag()), + "Permissions" => list(String.t() | atom()) } """ - @type untag_resource_request() :: %{(String.t() | atom()) => any()} + @type database_l_f_tag_policy_and_permissions() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - database_l_f_tag_policy_and_permissions() :: %{ - "Expression" => list(l_f_tag()), - "Permissions" => list(String.t() | atom()) - } + delete_asset_request() :: %{} """ - @type database_l_f_tag_policy_and_permissions() :: %{(String.t() | atom()) => any()} + @type delete_asset_request() :: %{} @typedoc """ ## Example: - import_asset_from_api_gateway_api_request_details() :: %{ - "ApiDescription" => String.t() | atom(), - "ApiId" => String.t() | atom(), - "ApiKey" => String.t() | atom(), - "ApiName" => String.t() | atom(), - "ApiSpecificationMd5Hash" => String.t() | atom(), - "DataSetId" => String.t() | atom(), - "ProtocolType" => String.t() | atom(), - "RevisionId" => String.t() | atom(), - "Stage" => String.t() | atom() - } + delete_data_grant_request() :: %{} """ - @type import_asset_from_api_gateway_api_request_details() :: %{(String.t() | atom()) => any()} + @type delete_data_grant_request() :: %{} @typedoc """ ## Example: - kms_key_to_grant() :: %{ - "KmsKeyArn" => String.t() | atom() - } + delete_data_set_request() :: %{} """ - @type kms_key_to_grant() :: %{(String.t() | atom()) => any()} + @type delete_data_set_request() :: %{} @typedoc """ ## Example: - send_api_asset_response() :: %{ - optional("Body") => String.t() | atom(), - optional("ResponseHeaders") => map() - } + delete_event_action_request() :: %{} """ - @type send_api_asset_response() :: %{(String.t() | atom()) => any()} + @type delete_event_action_request() :: %{} @typedoc """ ## Example: - export_server_side_encryption() :: %{ - "KmsKeyArn" => String.t() | atom(), - "Type" => String.t() | atom() + delete_revision_request() :: %{} + + """ + @type delete_revision_request() :: %{} + + @typedoc """ + + ## Example: + + deprecation_request_details() :: %{ + "DeprecationAt" => non_neg_integer() } """ - @type export_server_side_encryption() :: %{(String.t() | atom()) => any()} + @type deprecation_request_details() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - lake_formation_tag_policy_details() :: %{ - "Database" => String.t() | atom(), - "Table" => String.t() | atom() + details() :: %{ + "ImportAssetFromSignedUrlJobErrorDetails" => import_asset_from_signed_url_job_error_details(), + "ImportAssetsFromS3JobErrorDetails" => list(asset_source_entry()) } """ - @type lake_formation_tag_policy_details() :: %{(String.t() | atom()) => any()} + @type details() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - update_data_set_response() :: %{ - optional("Arn") => String.t() | atom(), - optional("AssetType") => String.t() | atom(), - optional("CreatedAt") => non_neg_integer(), - optional("Description") => String.t() | atom(), - optional("Id") => String.t() | atom(), - optional("Name") => String.t() | atom(), - optional("Origin") => String.t() | atom(), - optional("OriginDetails") => origin_details(), - optional("SourceId") => String.t() | atom(), - optional("UpdatedAt") => non_neg_integer() + event() :: %{ + "RevisionPublished" => revision_published() } """ - @type update_data_set_response() :: %{(String.t() | atom()) => any()} + @type event() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - revision_entry() :: %{ + event_action_entry() :: %{ + "Action" => action(), "Arn" => String.t() | atom(), - "Comment" => String.t() | atom(), "CreatedAt" => non_neg_integer(), - "DataSetId" => String.t() | atom(), - "Finalized" => boolean(), + "Event" => event(), "Id" => String.t() | atom(), - "RevocationComment" => String.t() | atom(), - "Revoked" => boolean(), - "RevokedAt" => non_neg_integer(), - "SourceId" => String.t() | atom(), "UpdatedAt" => non_neg_integer() } """ - @type revision_entry() :: %{(String.t() | atom()) => any()} + @type event_action_entry() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - update_asset_response() :: %{ - optional("Arn") => String.t() | atom(), - optional("AssetDetails") => asset_details(), - optional("AssetType") => String.t() | atom(), - optional("CreatedAt") => non_neg_integer(), - optional("DataSetId") => String.t() | atom(), - optional("Id") => String.t() | atom(), - optional("Name") => String.t() | atom(), - optional("RevisionId") => String.t() | atom(), - optional("SourceId") => String.t() | atom(), - optional("UpdatedAt") => non_neg_integer() + export_asset_to_signed_url_request_details() :: %{ + "AssetId" => String.t() | atom(), + "DataSetId" => String.t() | atom(), + "RevisionId" => String.t() | atom() } """ - @type update_asset_response() :: %{(String.t() | atom()) => any()} + @type export_asset_to_signed_url_request_details() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - schema_change_details() :: %{ - "Description" => String.t() | atom(), - "Name" => String.t() | atom(), - "Type" => String.t() | atom() + export_asset_to_signed_url_response_details() :: %{ + "AssetId" => String.t() | atom(), + "DataSetId" => String.t() | atom(), + "RevisionId" => String.t() | atom(), + "SignedUrl" => String.t() | atom(), + "SignedUrlExpiresAt" => non_neg_integer() } """ - @type schema_change_details() :: %{(String.t() | atom()) => any()} + @type export_asset_to_signed_url_response_details() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - create_data_grant_request() :: %{ - optional("Description") => String.t() | atom(), - optional("EndsAt") => non_neg_integer(), - optional("Tags") => map(), - required("GrantDistributionScope") => String.t() | atom(), - required("Name") => String.t() | atom(), - required("ReceiverPrincipal") => String.t() | atom(), - required("SourceDataSetId") => String.t() | atom() - } - - """ - @type create_data_grant_request() :: %{(String.t() | atom()) => any()} - - @typedoc """ - - ## Example: - - get_received_data_grant_request() :: %{} - - """ - @type get_received_data_grant_request() :: %{} - - @typedoc """ - - ## Example: - - list_data_set_revisions_response() :: %{ - optional("NextToken") => String.t() | atom(), - optional("Revisions") => list(revision_entry()) - } - - """ - @type list_data_set_revisions_response() :: %{(String.t() | atom()) => any()} - - @typedoc """ - - ## Example: - - export_asset_to_signed_url_response_details() :: %{ - "AssetId" => String.t() | atom(), + export_assets_to_s3_request_details() :: %{ + "AssetDestinations" => list(asset_destination_entry()), "DataSetId" => String.t() | atom(), - "RevisionId" => String.t() | atom(), - "SignedUrl" => String.t() | atom(), - "SignedUrlExpiresAt" => non_neg_integer() + "Encryption" => export_server_side_encryption(), + "RevisionId" => String.t() | atom() } """ - @type export_asset_to_signed_url_response_details() :: %{(String.t() | atom()) => any()} + @type export_assets_to_s3_request_details() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - export_asset_to_signed_url_request_details() :: %{ - "AssetId" => String.t() | atom(), + export_assets_to_s3_response_details() :: %{ + "AssetDestinations" => list(asset_destination_entry()), "DataSetId" => String.t() | atom(), + "Encryption" => export_server_side_encryption(), "RevisionId" => String.t() | atom() } """ - @type export_asset_to_signed_url_request_details() :: %{(String.t() | atom()) => any()} + @type export_assets_to_s3_response_details() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - list_revision_assets_request() :: %{ - optional("MaxResults") => integer(), - optional("NextToken") => String.t() | atom() + export_revisions_to_s3_request_details() :: %{ + "DataSetId" => String.t() | atom(), + "Encryption" => export_server_side_encryption(), + "RevisionDestinations" => list(revision_destination_entry()) } """ - @type list_revision_assets_request() :: %{(String.t() | atom()) => any()} + @type export_revisions_to_s3_request_details() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - conflict_exception() :: %{ - "Message" => String.t() | atom(), - "ResourceId" => String.t() | atom(), - "ResourceType" => String.t() | atom() + export_revisions_to_s3_response_details() :: %{ + "DataSetId" => String.t() | atom(), + "Encryption" => export_server_side_encryption(), + "EventActionArn" => String.t() | atom(), + "RevisionDestinations" => list(revision_destination_entry()) } """ - @type conflict_exception() :: %{(String.t() | atom()) => any()} + @type export_revisions_to_s3_response_details() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - resource_not_found_exception() :: %{ - "Message" => String.t() | atom(), - "ResourceId" => String.t() | atom(), - "ResourceType" => String.t() | atom() + export_server_side_encryption() :: %{ + "KmsKeyArn" => String.t() | atom(), + "Type" => String.t() | atom() } """ - @type resource_not_found_exception() :: %{(String.t() | atom()) => any()} + @type export_server_side_encryption() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - import_assets_from_lake_formation_tag_policy_response_details() :: %{ - "CatalogId" => String.t() | atom(), - "DataSetId" => String.t() | atom(), - "Database" => database_l_f_tag_policy_and_permissions(), - "RevisionId" => String.t() | atom(), - "RoleArn" => String.t() | atom(), - "Table" => table_l_f_tag_policy_and_permissions() - } + get_asset_request() :: %{} """ - @type import_assets_from_lake_formation_tag_policy_response_details() :: %{ - (String.t() | atom()) => any() - } + @type get_asset_request() :: %{} @typedoc """ ## Example: - table_l_f_tag_policy_and_permissions() :: %{ - "Expression" => list(l_f_tag()), - "Permissions" => list(String.t() | atom()) + get_asset_response() :: %{ + optional("Arn") => String.t() | atom(), + optional("AssetDetails") => asset_details(), + optional("AssetType") => String.t() | atom(), + optional("CreatedAt") => non_neg_integer(), + optional("DataSetId") => String.t() | atom(), + optional("Id") => String.t() | atom(), + optional("Name") => String.t() | atom(), + optional("RevisionId") => String.t() | atom(), + optional("SourceId") => String.t() | atom(), + optional("UpdatedAt") => non_neg_integer() } """ - @type table_l_f_tag_policy_and_permissions() :: %{(String.t() | atom()) => any()} + @type get_asset_response() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - export_assets_to_s3_request_details() :: %{ - "AssetDestinations" => list(asset_destination_entry()), - "DataSetId" => String.t() | atom(), - "Encryption" => export_server_side_encryption(), - "RevisionId" => String.t() | atom() - } + get_data_grant_request() :: %{} """ - @type export_assets_to_s3_request_details() :: %{(String.t() | atom()) => any()} + @type get_data_grant_request() :: %{} @typedoc """ ## Example: - accept_data_grant_response() :: %{ + get_data_grant_response() :: %{ "AcceptanceState" => String.t() | atom(), "AcceptedAt" => non_neg_integer(), "Arn" => String.t() | atom(), @@ -822,63 +743,52 @@ defmodule AWS.DataExchange do "Name" => String.t() | atom(), "ReceiverPrincipal" => String.t() | atom(), "SenderPrincipal" => String.t() | atom(), + "SourceDataSetId" => String.t() | atom(), + "Tags" => map(), "UpdatedAt" => non_neg_integer() } """ - @type accept_data_grant_response() :: %{(String.t() | atom()) => any()} - - @typedoc """ - - ## Example: - - create_data_set_request() :: %{ - optional("Tags") => map(), - required("AssetType") => String.t() | atom(), - required("Description") => String.t() | atom(), - required("Name") => String.t() | atom() - } - - """ - @type create_data_set_request() :: %{(String.t() | atom()) => any()} + @type get_data_grant_response() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - export_assets_to_s3_response_details() :: %{ - "AssetDestinations" => list(asset_destination_entry()), - "DataSetId" => String.t() | atom(), - "Encryption" => export_server_side_encryption(), - "RevisionId" => String.t() | atom() - } + get_data_set_request() :: %{} """ - @type export_assets_to_s3_response_details() :: %{(String.t() | atom()) => any()} + @type get_data_set_request() :: %{} @typedoc """ ## Example: - list_revision_assets_response() :: %{ - optional("Assets") => list(asset_entry()), - optional("NextToken") => String.t() | atom() + get_data_set_response() :: %{ + optional("Arn") => String.t() | atom(), + optional("AssetType") => String.t() | atom(), + optional("CreatedAt") => non_neg_integer(), + optional("Description") => String.t() | atom(), + optional("Id") => String.t() | atom(), + optional("Name") => String.t() | atom(), + optional("Origin") => String.t() | atom(), + optional("OriginDetails") => origin_details(), + optional("SourceId") => String.t() | atom(), + optional("Tags") => map(), + optional("UpdatedAt") => non_neg_integer() } """ - @type list_revision_assets_response() :: %{(String.t() | atom()) => any()} + @type get_data_set_response() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - details() :: %{ - "ImportAssetFromSignedUrlJobErrorDetails" => import_asset_from_signed_url_job_error_details(), - "ImportAssetsFromS3JobErrorDetails" => list(asset_source_entry()) - } + get_event_action_request() :: %{} """ - @type details() :: %{(String.t() | atom()) => any()} + @type get_event_action_request() :: %{} @typedoc """ @@ -900,1315 +810,1405 @@ defmodule AWS.DataExchange do ## Example: - get_event_action_request() :: %{} + get_job_request() :: %{} """ - @type get_event_action_request() :: %{} + @type get_job_request() :: %{} @typedoc """ ## Example: - create_s3_data_access_from_s3_bucket_request_details() :: %{ - "AssetSource" => s3_data_access_asset_source_entry(), - "DataSetId" => String.t() | atom(), - "RevisionId" => String.t() | atom() + get_job_response() :: %{ + optional("Arn") => String.t() | atom(), + optional("CreatedAt") => non_neg_integer(), + optional("Details") => response_details(), + optional("Errors") => list(job_error()), + optional("Id") => String.t() | atom(), + optional("State") => String.t() | atom(), + optional("Type") => String.t() | atom(), + optional("UpdatedAt") => non_neg_integer() } """ - @type create_s3_data_access_from_s3_bucket_request_details() :: %{ - (String.t() | atom()) => any() - } + @type get_job_response() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - delete_event_action_request() :: %{} + get_received_data_grant_request() :: %{} """ - @type delete_event_action_request() :: %{} + @type get_received_data_grant_request() :: %{} @typedoc """ ## Example: - schema_change_request_details() :: %{ - "Changes" => list(schema_change_details()), - "SchemaChangeAt" => non_neg_integer() + get_received_data_grant_response() :: %{ + "AcceptanceState" => String.t() | atom(), + "AcceptedAt" => non_neg_integer(), + "Arn" => String.t() | atom(), + "CreatedAt" => non_neg_integer(), + "DataSetId" => String.t() | atom(), + "Description" => String.t() | atom(), + "EndsAt" => non_neg_integer(), + "GrantDistributionScope" => String.t() | atom(), + "Id" => String.t() | atom(), + "Name" => String.t() | atom(), + "ReceiverPrincipal" => String.t() | atom(), + "SenderPrincipal" => String.t() | atom(), + "UpdatedAt" => non_neg_integer() } """ - @type schema_change_request_details() :: %{(String.t() | atom()) => any()} + @type get_received_data_grant_response() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - create_data_set_response() :: %{ + get_revision_request() :: %{} + + """ + @type get_revision_request() :: %{} + + @typedoc """ + + ## Example: + + get_revision_response() :: %{ optional("Arn") => String.t() | atom(), - optional("AssetType") => String.t() | atom(), + optional("Comment") => String.t() | atom(), optional("CreatedAt") => non_neg_integer(), - optional("Description") => String.t() | atom(), + optional("DataSetId") => String.t() | atom(), + optional("Finalized") => boolean(), optional("Id") => String.t() | atom(), - optional("Name") => String.t() | atom(), - optional("Origin") => String.t() | atom(), - optional("OriginDetails") => origin_details(), + optional("RevocationComment") => String.t() | atom(), + optional("Revoked") => boolean(), + optional("RevokedAt") => non_neg_integer(), optional("SourceId") => String.t() | atom(), optional("Tags") => map(), optional("UpdatedAt") => non_neg_integer() } """ - @type create_data_set_response() :: %{(String.t() | atom()) => any()} + @type get_revision_response() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - database_l_f_tag_policy() :: %{ - "Expression" => list(l_f_tag()) + import_asset_from_api_gateway_api_request_details() :: %{ + "ApiDescription" => String.t() | atom(), + "ApiId" => String.t() | atom(), + "ApiKey" => String.t() | atom(), + "ApiName" => String.t() | atom(), + "ApiSpecificationMd5Hash" => String.t() | atom(), + "DataSetId" => String.t() | atom(), + "ProtocolType" => String.t() | atom(), + "RevisionId" => String.t() | atom(), + "Stage" => String.t() | atom() } """ - @type database_l_f_tag_policy() :: %{(String.t() | atom()) => any()} + @type import_asset_from_api_gateway_api_request_details() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - s3_data_access_asset() :: %{ - "Bucket" => String.t() | atom(), - "KeyPrefixes" => list(String.t() | atom()), - "Keys" => list(String.t() | atom()), - "KmsKeysToGrant" => list(kms_key_to_grant()), - "S3AccessPointAlias" => String.t() | atom(), - "S3AccessPointArn" => String.t() | atom() - } + import_asset_from_api_gateway_api_response_details() :: %{ + "ApiDescription" => String.t() | atom(), + "ApiId" => String.t() | atom(), + "ApiKey" => String.t() | atom(), + "ApiName" => String.t() | atom(), + "ApiSpecificationMd5Hash" => String.t() | atom(), + "ApiSpecificationUploadUrl" => String.t() | atom(), + "ApiSpecificationUploadUrlExpiresAt" => non_neg_integer(), + "DataSetId" => String.t() | atom(), + "ProtocolType" => String.t() | atom(), + "RevisionId" => String.t() | atom(), + "Stage" => String.t() | atom() + } """ - @type s3_data_access_asset() :: %{(String.t() | atom()) => any()} + @type import_asset_from_api_gateway_api_response_details() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - list_tags_for_resource_response() :: %{ - optional("Tags") => map() + import_asset_from_signed_url_job_error_details() :: %{ + "AssetName" => String.t() | atom() } """ - @type list_tags_for_resource_response() :: %{(String.t() | atom()) => any()} + @type import_asset_from_signed_url_job_error_details() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - revoke_revision_request() :: %{ - required("RevocationComment") => String.t() | atom() + import_asset_from_signed_url_request_details() :: %{ + "AssetName" => String.t() | atom(), + "DataSetId" => String.t() | atom(), + "Md5Hash" => String.t() | atom(), + "RevisionId" => String.t() | atom() } """ - @type revoke_revision_request() :: %{(String.t() | atom()) => any()} + @type import_asset_from_signed_url_request_details() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - table_l_f_tag_policy() :: %{ - "Expression" => list(l_f_tag()) + import_asset_from_signed_url_response_details() :: %{ + "AssetName" => String.t() | atom(), + "DataSetId" => String.t() | atom(), + "Md5Hash" => String.t() | atom(), + "RevisionId" => String.t() | atom(), + "SignedUrl" => String.t() | atom(), + "SignedUrlExpiresAt" => non_neg_integer() } """ - @type table_l_f_tag_policy() :: %{(String.t() | atom()) => any()} + @type import_asset_from_signed_url_response_details() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - update_event_action_request() :: %{ - optional("Action") => action() + import_assets_from_lake_formation_tag_policy_request_details() :: %{ + "CatalogId" => String.t() | atom(), + "DataSetId" => String.t() | atom(), + "Database" => database_l_f_tag_policy_and_permissions(), + "RevisionId" => String.t() | atom(), + "RoleArn" => String.t() | atom(), + "Table" => table_l_f_tag_policy_and_permissions() } """ - @type update_event_action_request() :: %{(String.t() | atom()) => any()} + @type import_assets_from_lake_formation_tag_policy_request_details() :: %{ + (String.t() | atom()) => any() + } @typedoc """ ## Example: - delete_revision_request() :: %{} + import_assets_from_lake_formation_tag_policy_response_details() :: %{ + "CatalogId" => String.t() | atom(), + "DataSetId" => String.t() | atom(), + "Database" => database_l_f_tag_policy_and_permissions(), + "RevisionId" => String.t() | atom(), + "RoleArn" => String.t() | atom(), + "Table" => table_l_f_tag_policy_and_permissions() + } """ - @type delete_revision_request() :: %{} + @type import_assets_from_lake_formation_tag_policy_response_details() :: %{ + (String.t() | atom()) => any() + } @typedoc """ ## Example: - lake_formation_data_permission_details() :: %{ - "LFTagPolicy" => l_f_tag_policy_details() + import_assets_from_redshift_data_shares_request_details() :: %{ + "AssetSources" => list(redshift_data_share_asset_source_entry()), + "DataSetId" => String.t() | atom(), + "RevisionId" => String.t() | atom() } """ - @type lake_formation_data_permission_details() :: %{(String.t() | atom()) => any()} + @type import_assets_from_redshift_data_shares_request_details() :: %{ + (String.t() | atom()) => any() + } @typedoc """ ## Example: - get_asset_response() :: %{ - optional("Arn") => String.t() | atom(), - optional("AssetDetails") => asset_details(), - optional("AssetType") => String.t() | atom(), - optional("CreatedAt") => non_neg_integer(), - optional("DataSetId") => String.t() | atom(), - optional("Id") => String.t() | atom(), - optional("Name") => String.t() | atom(), - optional("RevisionId") => String.t() | atom(), - optional("SourceId") => String.t() | atom(), - optional("UpdatedAt") => non_neg_integer() + import_assets_from_redshift_data_shares_response_details() :: %{ + "AssetSources" => list(redshift_data_share_asset_source_entry()), + "DataSetId" => String.t() | atom(), + "RevisionId" => String.t() | atom() } """ - @type get_asset_response() :: %{(String.t() | atom()) => any()} + @type import_assets_from_redshift_data_shares_response_details() :: %{ + (String.t() | atom()) => any() + } @typedoc """ ## Example: - start_job_request() :: %{} + import_assets_from_s3_request_details() :: %{ + "AssetSources" => list(asset_source_entry()), + "DataSetId" => String.t() | atom(), + "RevisionId" => String.t() | atom() + } """ - @type start_job_request() :: %{} + @type import_assets_from_s3_request_details() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - update_event_action_response() :: %{ - optional("Action") => action(), - optional("Arn") => String.t() | atom(), - optional("CreatedAt") => non_neg_integer(), - optional("Event") => event(), - optional("Id") => String.t() | atom(), - optional("UpdatedAt") => non_neg_integer() + import_assets_from_s3_response_details() :: %{ + "AssetSources" => list(asset_source_entry()), + "DataSetId" => String.t() | atom(), + "RevisionId" => String.t() | atom() } """ - @type update_event_action_response() :: %{(String.t() | atom()) => any()} + @type import_assets_from_s3_response_details() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - s3_data_access_asset_source_entry() :: %{ - "Bucket" => String.t() | atom(), - "KeyPrefixes" => list(String.t() | atom()), - "Keys" => list(String.t() | atom()), - "KmsKeysToGrant" => list(kms_key_to_grant()) + internal_server_exception() :: %{ + "Message" => String.t() | atom() } """ - @type s3_data_access_asset_source_entry() :: %{(String.t() | atom()) => any()} + @type internal_server_exception() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - create_s3_data_access_from_s3_bucket_response_details() :: %{ - "AssetSource" => s3_data_access_asset_source_entry(), - "DataSetId" => String.t() | atom(), - "RevisionId" => String.t() | atom() + job_entry() :: %{ + "Arn" => String.t() | atom(), + "CreatedAt" => non_neg_integer(), + "Details" => response_details(), + "Errors" => list(job_error()), + "Id" => String.t() | atom(), + "State" => String.t() | atom(), + "Type" => String.t() | atom(), + "UpdatedAt" => non_neg_integer() } """ - @type create_s3_data_access_from_s3_bucket_response_details() :: %{ - (String.t() | atom()) => any() - } + @type job_entry() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - data_update_request_details() :: %{ - "DataUpdatedAt" => non_neg_integer() + job_error() :: %{ + "Code" => String.t() | atom(), + "Details" => details(), + "LimitName" => String.t() | atom(), + "LimitValue" => float(), + "Message" => String.t() | atom(), + "ResourceId" => String.t() | atom(), + "ResourceType" => String.t() | atom() } """ - @type data_update_request_details() :: %{(String.t() | atom()) => any()} + @type job_error() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - api_gateway_api_asset() :: %{ - "ApiDescription" => String.t() | atom(), - "ApiEndpoint" => String.t() | atom(), - "ApiId" => String.t() | atom(), - "ApiKey" => String.t() | atom(), - "ApiName" => String.t() | atom(), - "ApiSpecificationDownloadUrl" => String.t() | atom(), - "ApiSpecificationDownloadUrlExpiresAt" => non_neg_integer(), - "ProtocolType" => String.t() | atom(), - "Stage" => String.t() | atom() + kms_key_to_grant() :: %{ + "KmsKeyArn" => String.t() | atom() } """ - @type api_gateway_api_asset() :: %{(String.t() | atom()) => any()} + @type kms_key_to_grant() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - origin_details() :: %{ - "DataGrantId" => String.t() | atom(), - "ProductId" => String.t() | atom() + l_f_resource_details() :: %{ + "Database" => database_l_f_tag_policy(), + "Table" => table_l_f_tag_policy() } """ - @type origin_details() :: %{(String.t() | atom()) => any()} + @type l_f_resource_details() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - internal_server_exception() :: %{ - "Message" => String.t() | atom() + l_f_tag() :: %{ + "TagKey" => [String.t() | atom()], + "TagValues" => list([String.t() | atom()]()) } """ - @type internal_server_exception() :: %{(String.t() | atom()) => any()} + @type l_f_tag() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - send_data_set_notification_response() :: %{} + l_f_tag_policy_details() :: %{ + "CatalogId" => String.t() | atom(), + "ResourceDetails" => l_f_resource_details(), + "ResourceType" => String.t() | atom() + } """ - @type send_data_set_notification_response() :: %{} + @type l_f_tag_policy_details() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - delete_data_set_request() :: %{} + lake_formation_data_permission_asset() :: %{ + "LakeFormationDataPermissionDetails" => lake_formation_data_permission_details(), + "LakeFormationDataPermissionType" => String.t() | atom(), + "Permissions" => list(String.t() | atom()), + "RoleArn" => String.t() | atom() + } """ - @type delete_data_set_request() :: %{} + @type lake_formation_data_permission_asset() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - l_f_resource_details() :: %{ - "Database" => database_l_f_tag_policy(), - "Table" => table_l_f_tag_policy() + lake_formation_data_permission_details() :: %{ + "LFTagPolicy" => l_f_tag_policy_details() } """ - @type l_f_resource_details() :: %{(String.t() | atom()) => any()} + @type lake_formation_data_permission_details() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - create_revision_response() :: %{ - optional("Arn") => String.t() | atom(), - optional("Comment") => String.t() | atom(), - optional("CreatedAt") => non_neg_integer(), - optional("DataSetId") => String.t() | atom(), - optional("Finalized") => boolean(), - optional("Id") => String.t() | atom(), - optional("RevocationComment") => String.t() | atom(), - optional("Revoked") => boolean(), - optional("RevokedAt") => non_neg_integer(), - optional("SourceId") => String.t() | atom(), - optional("Tags") => map(), - optional("UpdatedAt") => non_neg_integer() + lake_formation_tag_policy_details() :: %{ + "Database" => String.t() | atom(), + "Table" => String.t() | atom() } """ - @type create_revision_response() :: %{(String.t() | atom()) => any()} + @type lake_formation_tag_policy_details() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - asset_entry() :: %{ - "Arn" => String.t() | atom(), - "AssetDetails" => asset_details(), - "AssetType" => String.t() | atom(), - "CreatedAt" => non_neg_integer(), - "DataSetId" => String.t() | atom(), - "Id" => String.t() | atom(), - "Name" => String.t() | atom(), - "RevisionId" => String.t() | atom(), - "SourceId" => String.t() | atom(), - "UpdatedAt" => non_neg_integer() + list_data_grants_request() :: %{ + optional("MaxResults") => integer(), + optional("NextToken") => String.t() | atom() } """ - @type asset_entry() :: %{(String.t() | atom()) => any()} + @type list_data_grants_request() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - s3_data_access_details() :: %{ - "KeyPrefixes" => list(String.t() | atom()), - "Keys" => list(String.t() | atom()) + list_data_grants_response() :: %{ + "DataGrantSummaries" => list(data_grant_summary_entry()), + "NextToken" => String.t() | atom() } """ - @type s3_data_access_details() :: %{(String.t() | atom()) => any()} + @type list_data_grants_response() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - asset_details() :: %{ - "ApiGatewayApiAsset" => api_gateway_api_asset(), - "LakeFormationDataPermissionAsset" => lake_formation_data_permission_asset(), - "RedshiftDataShareAsset" => redshift_data_share_asset(), - "S3DataAccessAsset" => s3_data_access_asset(), - "S3SnapshotAsset" => s3_snapshot_asset() + list_data_set_revisions_request() :: %{ + optional("MaxResults") => integer(), + optional("NextToken") => String.t() | atom() } """ - @type asset_details() :: %{(String.t() | atom()) => any()} + @type list_data_set_revisions_request() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - event() :: %{ - "RevisionPublished" => revision_published() + list_data_set_revisions_response() :: %{ + optional("NextToken") => String.t() | atom(), + optional("Revisions") => list(revision_entry()) } """ - @type event() :: %{(String.t() | atom()) => any()} + @type list_data_set_revisions_response() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - action() :: %{ - "ExportRevisionToS3" => auto_export_revision_to_s3_request_details() + list_data_sets_request() :: %{ + optional("MaxResults") => integer(), + optional("NextToken") => String.t() | atom(), + optional("Origin") => String.t() | atom() } """ - @type action() :: %{(String.t() | atom()) => any()} + @type list_data_sets_request() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - import_assets_from_s3_response_details() :: %{ - "AssetSources" => list(asset_source_entry()), - "DataSetId" => String.t() | atom(), - "RevisionId" => String.t() | atom() + list_data_sets_response() :: %{ + optional("DataSets") => list(data_set_entry()), + optional("NextToken") => String.t() | atom() } """ - @type import_assets_from_s3_response_details() :: %{(String.t() | atom()) => any()} + @type list_data_sets_response() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - delete_asset_request() :: %{} + list_event_actions_request() :: %{ + optional("EventSourceId") => String.t() | atom(), + optional("MaxResults") => integer(), + optional("NextToken") => String.t() | atom() + } """ - @type delete_asset_request() :: %{} + @type list_event_actions_request() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - import_assets_from_redshift_data_shares_request_details() :: %{ - "AssetSources" => list(redshift_data_share_asset_source_entry()), - "DataSetId" => String.t() | atom(), - "RevisionId" => String.t() | atom() + list_event_actions_response() :: %{ + optional("EventActions") => list(event_action_entry()), + optional("NextToken") => String.t() | atom() } """ - @type import_assets_from_redshift_data_shares_request_details() :: %{ - (String.t() | atom()) => any() - } + @type list_event_actions_response() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - revision_published() :: %{ - "DataSetId" => String.t() | atom() + list_jobs_request() :: %{ + optional("DataSetId") => String.t() | atom(), + optional("MaxResults") => integer(), + optional("NextToken") => String.t() | atom(), + optional("RevisionId") => String.t() | atom() } """ - @type revision_published() :: %{(String.t() | atom()) => any()} + @type list_jobs_request() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - access_denied_exception() :: %{ - "Message" => String.t() | atom() + list_jobs_response() :: %{ + optional("Jobs") => list(job_entry()), + optional("NextToken") => String.t() | atom() } """ - @type access_denied_exception() :: %{(String.t() | atom()) => any()} + @type list_jobs_response() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - update_asset_request() :: %{ - required("Name") => String.t() | atom() + list_received_data_grants_request() :: %{ + optional("AcceptanceState") => list(String.t() | atom()), + optional("MaxResults") => integer(), + optional("NextToken") => String.t() | atom() } """ - @type update_asset_request() :: %{(String.t() | atom()) => any()} + @type list_received_data_grants_request() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - import_assets_from_redshift_data_shares_response_details() :: %{ - "AssetSources" => list(redshift_data_share_asset_source_entry()), - "DataSetId" => String.t() | atom(), - "RevisionId" => String.t() | atom() + list_received_data_grants_response() :: %{ + "DataGrantSummaries" => list(received_data_grant_summaries_entry()), + "NextToken" => String.t() | atom() } """ - @type import_assets_from_redshift_data_shares_response_details() :: %{ - (String.t() | atom()) => any() - } + @type list_received_data_grants_response() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - auto_export_revision_destination_entry() :: %{ - "Bucket" => String.t() | atom(), - "KeyPattern" => String.t() | atom() + list_revision_assets_request() :: %{ + optional("MaxResults") => integer(), + optional("NextToken") => String.t() | atom() } """ - @type auto_export_revision_destination_entry() :: %{(String.t() | atom()) => any()} + @type list_revision_assets_request() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - asset_source_entry() :: %{ - "Bucket" => String.t() | atom(), - "Key" => String.t() | atom() + list_revision_assets_response() :: %{ + optional("Assets") => list(asset_entry()), + optional("NextToken") => String.t() | atom() } """ - @type asset_source_entry() :: %{(String.t() | atom()) => any()} + @type list_revision_assets_response() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - data_grant_summary_entry() :: %{ - "AcceptanceState" => String.t() | atom(), - "AcceptedAt" => non_neg_integer(), - "Arn" => String.t() | atom(), - "CreatedAt" => non_neg_integer(), - "DataSetId" => String.t() | atom(), - "EndsAt" => non_neg_integer(), - "Id" => String.t() | atom(), - "Name" => String.t() | atom(), - "ReceiverPrincipal" => String.t() | atom(), - "SenderPrincipal" => String.t() | atom(), - "SourceDataSetId" => String.t() | atom(), - "UpdatedAt" => non_neg_integer() - } + list_tags_for_resource_request() :: %{} """ - @type data_grant_summary_entry() :: %{(String.t() | atom()) => any()} + @type list_tags_for_resource_request() :: %{} @typedoc """ ## Example: - get_job_response() :: %{ - optional("Arn") => String.t() | atom(), - optional("CreatedAt") => non_neg_integer(), - optional("Details") => response_details(), - optional("Errors") => list(job_error()), - optional("Id") => String.t() | atom(), - optional("State") => String.t() | atom(), - optional("Type") => String.t() | atom(), - optional("UpdatedAt") => non_neg_integer() + list_tags_for_resource_response() :: %{ + optional("Tags") => map() } """ - @type get_job_response() :: %{(String.t() | atom()) => any()} + @type list_tags_for_resource_response() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - get_data_grant_request() :: %{} + notification_details() :: %{ + "DataUpdate" => data_update_request_details(), + "Deprecation" => deprecation_request_details(), + "SchemaChange" => schema_change_request_details() + } """ - @type get_data_grant_request() :: %{} + @type notification_details() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - validation_exception() :: %{ - "ExceptionCause" => String.t() | atom(), - "Message" => String.t() | atom() + origin_details() :: %{ + "DataGrantId" => String.t() | atom(), + "ProductId" => String.t() | atom() } """ - @type validation_exception() :: %{(String.t() | atom()) => any()} + @type origin_details() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - list_tags_for_resource_request() :: %{} + received_data_grant_summaries_entry() :: %{ + "AcceptanceState" => String.t() | atom(), + "AcceptedAt" => non_neg_integer(), + "Arn" => String.t() | atom(), + "CreatedAt" => non_neg_integer(), + "DataSetId" => String.t() | atom(), + "EndsAt" => non_neg_integer(), + "Id" => String.t() | atom(), + "Name" => String.t() | atom(), + "ReceiverPrincipal" => String.t() | atom(), + "SenderPrincipal" => String.t() | atom(), + "UpdatedAt" => non_neg_integer() + } """ - @type list_tags_for_resource_request() :: %{} + @type received_data_grant_summaries_entry() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - auto_export_revision_to_s3_request_details() :: %{ - "Encryption" => export_server_side_encryption(), - "RevisionDestination" => auto_export_revision_destination_entry() + redshift_data_share_asset() :: %{ + "Arn" => String.t() | atom() } """ - @type auto_export_revision_to_s3_request_details() :: %{(String.t() | atom()) => any()} + @type redshift_data_share_asset() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - l_f_tag_policy_details() :: %{ - "CatalogId" => String.t() | atom(), - "ResourceDetails" => l_f_resource_details(), - "ResourceType" => String.t() | atom() + redshift_data_share_asset_source_entry() :: %{ + "DataShareArn" => String.t() | atom() } """ - @type l_f_tag_policy_details() :: %{(String.t() | atom()) => any()} + @type redshift_data_share_asset_source_entry() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - deprecation_request_details() :: %{ - "DeprecationAt" => non_neg_integer() + redshift_data_share_details() :: %{ + "Arn" => String.t() | atom(), + "Database" => String.t() | atom(), + "Function" => String.t() | atom(), + "Schema" => String.t() | atom(), + "Table" => String.t() | atom(), + "View" => String.t() | atom() } """ - @type deprecation_request_details() :: %{(String.t() | atom()) => any()} + @type redshift_data_share_details() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - service_limit_exceeded_exception() :: %{ - "LimitName" => String.t() | atom(), - "LimitValue" => float(), - "Message" => String.t() | atom() + request_details() :: %{ + "CreateS3DataAccessFromS3Bucket" => create_s3_data_access_from_s3_bucket_request_details(), + "ExportAssetToSignedUrl" => export_asset_to_signed_url_request_details(), + "ExportAssetsToS3" => export_assets_to_s3_request_details(), + "ExportRevisionsToS3" => export_revisions_to_s3_request_details(), + "ImportAssetFromApiGatewayApi" => import_asset_from_api_gateway_api_request_details(), + "ImportAssetFromSignedUrl" => import_asset_from_signed_url_request_details(), + "ImportAssetsFromLakeFormationTagPolicy" => import_assets_from_lake_formation_tag_policy_request_details(), + "ImportAssetsFromRedshiftDataShares" => import_assets_from_redshift_data_shares_request_details(), + "ImportAssetsFromS3" => import_assets_from_s3_request_details() } """ - @type service_limit_exceeded_exception() :: %{(String.t() | atom()) => any()} + @type request_details() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - get_asset_request() :: %{} + resource_not_found_exception() :: %{ + "Message" => String.t() | atom(), + "ResourceId" => String.t() | atom(), + "ResourceType" => String.t() | atom() + } """ - @type get_asset_request() :: %{} + @type resource_not_found_exception() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - list_data_grants_request() :: %{ - optional("MaxResults") => integer(), - optional("NextToken") => String.t() | atom() + response_details() :: %{ + "CreateS3DataAccessFromS3Bucket" => create_s3_data_access_from_s3_bucket_response_details(), + "ExportAssetToSignedUrl" => export_asset_to_signed_url_response_details(), + "ExportAssetsToS3" => export_assets_to_s3_response_details(), + "ExportRevisionsToS3" => export_revisions_to_s3_response_details(), + "ImportAssetFromApiGatewayApi" => import_asset_from_api_gateway_api_response_details(), + "ImportAssetFromSignedUrl" => import_asset_from_signed_url_response_details(), + "ImportAssetsFromLakeFormationTagPolicy" => import_assets_from_lake_formation_tag_policy_response_details(), + "ImportAssetsFromRedshiftDataShares" => import_assets_from_redshift_data_shares_response_details(), + "ImportAssetsFromS3" => import_assets_from_s3_response_details() } """ - @type list_data_grants_request() :: %{(String.t() | atom()) => any()} + @type response_details() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - get_job_request() :: %{} + revision_destination_entry() :: %{ + "Bucket" => String.t() | atom(), + "KeyPattern" => String.t() | atom(), + "RevisionId" => String.t() | atom() + } """ - @type get_job_request() :: %{} + @type revision_destination_entry() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - throttling_exception() :: %{ - "Message" => String.t() | atom() + revision_entry() :: %{ + "Arn" => String.t() | atom(), + "Comment" => String.t() | atom(), + "CreatedAt" => non_neg_integer(), + "DataSetId" => String.t() | atom(), + "Finalized" => boolean(), + "Id" => String.t() | atom(), + "RevocationComment" => String.t() | atom(), + "Revoked" => boolean(), + "RevokedAt" => non_neg_integer(), + "SourceId" => String.t() | atom(), + "UpdatedAt" => non_neg_integer() } """ - @type throttling_exception() :: %{(String.t() | atom()) => any()} + @type revision_entry() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - delete_data_grant_request() :: %{} + revision_published() :: %{ + "DataSetId" => String.t() | atom() + } """ - @type delete_data_grant_request() :: %{} + @type revision_published() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - send_api_asset_request() :: %{ - optional("Body") => String.t() | atom(), - optional("Method") => String.t() | atom(), - optional("Path") => String.t() | atom(), - optional("QueryStringParameters") => map(), - optional("RequestHeaders") => map(), - required("AssetId") => String.t() | atom(), - required("DataSetId") => String.t() | atom(), - required("RevisionId") => String.t() | atom() + revoke_revision_request() :: %{ + required("RevocationComment") => String.t() | atom() } """ - @type send_api_asset_request() :: %{(String.t() | atom()) => any()} + @type revoke_revision_request() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - get_data_set_request() :: %{} + revoke_revision_response() :: %{ + optional("Arn") => String.t() | atom(), + optional("Comment") => String.t() | atom(), + optional("CreatedAt") => non_neg_integer(), + optional("DataSetId") => String.t() | atom(), + optional("Finalized") => boolean(), + optional("Id") => String.t() | atom(), + optional("RevocationComment") => String.t() | atom(), + optional("Revoked") => boolean(), + optional("RevokedAt") => non_neg_integer(), + optional("SourceId") => String.t() | atom(), + optional("UpdatedAt") => non_neg_integer() + } """ - @type get_data_set_request() :: %{} + @type revoke_revision_response() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - create_revision_request() :: %{ - optional("Comment") => String.t() | atom(), - optional("Tags") => map() + s3_data_access_asset() :: %{ + "Bucket" => String.t() | atom(), + "KeyPrefixes" => list(String.t() | atom()), + "Keys" => list(String.t() | atom()), + "KmsKeysToGrant" => list(kms_key_to_grant()), + "S3AccessPointAlias" => String.t() | atom(), + "S3AccessPointArn" => String.t() | atom() } """ - @type create_revision_request() :: %{(String.t() | atom()) => any()} + @type s3_data_access_asset() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - import_assets_from_s3_request_details() :: %{ - "AssetSources" => list(asset_source_entry()), - "DataSetId" => String.t() | atom(), - "RevisionId" => String.t() | atom() + s3_data_access_asset_source_entry() :: %{ + "Bucket" => String.t() | atom(), + "KeyPrefixes" => list(String.t() | atom()), + "Keys" => list(String.t() | atom()), + "KmsKeysToGrant" => list(kms_key_to_grant()) } """ - @type import_assets_from_s3_request_details() :: %{(String.t() | atom()) => any()} + @type s3_data_access_asset_source_entry() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - lake_formation_data_permission_asset() :: %{ - "LakeFormationDataPermissionDetails" => lake_formation_data_permission_details(), - "LakeFormationDataPermissionType" => String.t() | atom(), - "Permissions" => list(String.t() | atom()), - "RoleArn" => String.t() | atom() + s3_data_access_details() :: %{ + "KeyPrefixes" => list(String.t() | atom()), + "Keys" => list(String.t() | atom()) } """ - @type lake_formation_data_permission_asset() :: %{(String.t() | atom()) => any()} + @type s3_data_access_details() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - list_event_actions_request() :: %{ - optional("EventSourceId") => String.t() | atom(), - optional("MaxResults") => integer(), - optional("NextToken") => String.t() | atom() + s3_snapshot_asset() :: %{ + "Size" => float() } """ - @type list_event_actions_request() :: %{(String.t() | atom()) => any()} + @type s3_snapshot_asset() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - list_data_grants_response() :: %{ - "DataGrantSummaries" => list(data_grant_summary_entry()), - "NextToken" => String.t() | atom() + schema_change_details() :: %{ + "Description" => String.t() | atom(), + "Name" => String.t() | atom(), + "Type" => String.t() | atom() } """ - @type list_data_grants_response() :: %{(String.t() | atom()) => any()} + @type schema_change_details() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - list_data_set_revisions_request() :: %{ - optional("MaxResults") => integer(), - optional("NextToken") => String.t() | atom() + schema_change_request_details() :: %{ + "Changes" => list(schema_change_details()), + "SchemaChangeAt" => non_neg_integer() } """ - @type list_data_set_revisions_request() :: %{(String.t() | atom()) => any()} + @type schema_change_request_details() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - asset_destination_entry() :: %{ - "AssetId" => String.t() | atom(), - "Bucket" => String.t() | atom(), - "Key" => String.t() | atom() + scope_details() :: %{ + "LakeFormationTagPolicies" => list(lake_formation_tag_policy_details()), + "RedshiftDataShares" => list(redshift_data_share_details()), + "S3DataAccesses" => list(s3_data_access_details()) } """ - @type asset_destination_entry() :: %{(String.t() | atom()) => any()} + @type scope_details() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - get_data_grant_response() :: %{ - "AcceptanceState" => String.t() | atom(), - "AcceptedAt" => non_neg_integer(), - "Arn" => String.t() | atom(), - "CreatedAt" => non_neg_integer(), - "DataSetId" => String.t() | atom(), - "Description" => String.t() | atom(), - "EndsAt" => non_neg_integer(), - "GrantDistributionScope" => String.t() | atom(), - "Id" => String.t() | atom(), - "Name" => String.t() | atom(), - "ReceiverPrincipal" => String.t() | atom(), - "SenderPrincipal" => String.t() | atom(), - "SourceDataSetId" => String.t() | atom(), - "Tags" => map(), - "UpdatedAt" => non_neg_integer() + send_api_asset_request() :: %{ + optional("Body") => String.t() | atom(), + optional("Method") => String.t() | atom(), + optional("Path") => String.t() | atom(), + optional("QueryStringParameters") => map(), + optional("RequestHeaders") => map(), + required("AssetId") => String.t() | atom(), + required("DataSetId") => String.t() | atom(), + required("RevisionId") => String.t() | atom() } """ - @type get_data_grant_response() :: %{(String.t() | atom()) => any()} + @type send_api_asset_request() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - list_event_actions_response() :: %{ - optional("EventActions") => list(event_action_entry()), - optional("NextToken") => String.t() | atom() + send_api_asset_response() :: %{ + optional("Body") => String.t() | atom(), + optional("ResponseHeaders") => map() } """ - @type list_event_actions_response() :: %{(String.t() | atom()) => any()} + @type send_api_asset_response() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - request_details() :: %{ - "CreateS3DataAccessFromS3Bucket" => create_s3_data_access_from_s3_bucket_request_details(), - "ExportAssetToSignedUrl" => export_asset_to_signed_url_request_details(), - "ExportAssetsToS3" => export_assets_to_s3_request_details(), - "ExportRevisionsToS3" => export_revisions_to_s3_request_details(), - "ImportAssetFromApiGatewayApi" => import_asset_from_api_gateway_api_request_details(), - "ImportAssetFromSignedUrl" => import_asset_from_signed_url_request_details(), - "ImportAssetsFromLakeFormationTagPolicy" => import_assets_from_lake_formation_tag_policy_request_details(), - "ImportAssetsFromRedshiftDataShares" => import_assets_from_redshift_data_shares_request_details(), - "ImportAssetsFromS3" => import_assets_from_s3_request_details() + send_data_set_notification_request() :: %{ + optional("ClientToken") => String.t() | atom(), + optional("Comment") => String.t() | atom(), + optional("Details") => notification_details(), + optional("Scope") => scope_details(), + required("Type") => String.t() | atom() } """ - @type request_details() :: %{(String.t() | atom()) => any()} + @type send_data_set_notification_request() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - job_entry() :: %{ - "Arn" => String.t() | atom(), - "CreatedAt" => non_neg_integer(), - "Details" => response_details(), - "Errors" => list(job_error()), - "Id" => String.t() | atom(), - "State" => String.t() | atom(), - "Type" => String.t() | atom(), - "UpdatedAt" => non_neg_integer() + send_data_set_notification_response() :: %{} + + """ + @type send_data_set_notification_response() :: %{} + + @typedoc """ + + ## Example: + + service_limit_exceeded_exception() :: %{ + "LimitName" => String.t() | atom(), + "LimitValue" => float(), + "Message" => String.t() | atom() } """ - @type job_entry() :: %{(String.t() | atom()) => any()} + @type service_limit_exceeded_exception() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - import_asset_from_signed_url_request_details() :: %{ - "AssetName" => String.t() | atom(), - "DataSetId" => String.t() | atom(), - "Md5Hash" => String.t() | atom(), - "RevisionId" => String.t() | atom() + start_job_request() :: %{} + + """ + @type start_job_request() :: %{} + + @typedoc """ + + ## Example: + + start_job_response() :: %{} + + """ + @type start_job_response() :: %{} + + @typedoc """ + + ## Example: + + table_l_f_tag_policy() :: %{ + "Expression" => list(l_f_tag()) } """ - @type import_asset_from_signed_url_request_details() :: %{(String.t() | atom()) => any()} + @type table_l_f_tag_policy() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - import_asset_from_signed_url_response_details() :: %{ - "AssetName" => String.t() | atom(), - "DataSetId" => String.t() | atom(), - "Md5Hash" => String.t() | atom(), - "RevisionId" => String.t() | atom(), - "SignedUrl" => String.t() | atom(), - "SignedUrlExpiresAt" => non_neg_integer() + table_l_f_tag_policy_and_permissions() :: %{ + "Expression" => list(l_f_tag()), + "Permissions" => list(String.t() | atom()) } """ - @type import_asset_from_signed_url_response_details() :: %{(String.t() | atom()) => any()} + @type table_l_f_tag_policy_and_permissions() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - response_details() :: %{ - "CreateS3DataAccessFromS3Bucket" => create_s3_data_access_from_s3_bucket_response_details(), - "ExportAssetToSignedUrl" => export_asset_to_signed_url_response_details(), - "ExportAssetsToS3" => export_assets_to_s3_response_details(), - "ExportRevisionsToS3" => export_revisions_to_s3_response_details(), - "ImportAssetFromApiGatewayApi" => import_asset_from_api_gateway_api_response_details(), - "ImportAssetFromSignedUrl" => import_asset_from_signed_url_response_details(), - "ImportAssetsFromLakeFormationTagPolicy" => import_assets_from_lake_formation_tag_policy_response_details(), - "ImportAssetsFromRedshiftDataShares" => import_assets_from_redshift_data_shares_response_details(), - "ImportAssetsFromS3" => import_assets_from_s3_response_details() + tag_resource_request() :: %{ + required("Tags") => map() } """ - @type response_details() :: %{(String.t() | atom()) => any()} + @type tag_resource_request() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - import_assets_from_lake_formation_tag_policy_request_details() :: %{ - "CatalogId" => String.t() | atom(), - "DataSetId" => String.t() | atom(), - "Database" => database_l_f_tag_policy_and_permissions(), - "RevisionId" => String.t() | atom(), - "RoleArn" => String.t() | atom(), - "Table" => table_l_f_tag_policy_and_permissions() + throttling_exception() :: %{ + "Message" => String.t() | atom() } """ - @type import_assets_from_lake_formation_tag_policy_request_details() :: %{ - (String.t() | atom()) => any() - } + @type throttling_exception() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - received_data_grant_summaries_entry() :: %{ - "AcceptanceState" => String.t() | atom(), - "AcceptedAt" => non_neg_integer(), - "Arn" => String.t() | atom(), - "CreatedAt" => non_neg_integer(), - "DataSetId" => String.t() | atom(), - "EndsAt" => non_neg_integer(), - "Id" => String.t() | atom(), - "Name" => String.t() | atom(), - "ReceiverPrincipal" => String.t() | atom(), - "SenderPrincipal" => String.t() | atom(), - "UpdatedAt" => non_neg_integer() + untag_resource_request() :: %{ + required("TagKeys") => list(String.t() | atom()) } """ - @type received_data_grant_summaries_entry() :: %{(String.t() | atom()) => any()} + @type untag_resource_request() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - update_revision_request() :: %{ - optional("Comment") => String.t() | atom(), - optional("Finalized") => boolean() + update_asset_request() :: %{ + required("Name") => String.t() | atom() } """ - @type update_revision_request() :: %{(String.t() | atom()) => any()} + @type update_asset_request() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - s3_snapshot_asset() :: %{ - "Size" => float() + update_asset_response() :: %{ + optional("Arn") => String.t() | atom(), + optional("AssetDetails") => asset_details(), + optional("AssetType") => String.t() | atom(), + optional("CreatedAt") => non_neg_integer(), + optional("DataSetId") => String.t() | atom(), + optional("Id") => String.t() | atom(), + optional("Name") => String.t() | atom(), + optional("RevisionId") => String.t() | atom(), + optional("SourceId") => String.t() | atom(), + optional("UpdatedAt") => non_neg_integer() } """ - @type s3_snapshot_asset() :: %{(String.t() | atom()) => any()} + @type update_asset_response() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - export_revisions_to_s3_request_details() :: %{ - "DataSetId" => String.t() | atom(), - "Encryption" => export_server_side_encryption(), - "RevisionDestinations" => list(revision_destination_entry()) + update_data_set_request() :: %{ + optional("Description") => String.t() | atom(), + optional("Name") => String.t() | atom() } """ - @type export_revisions_to_s3_request_details() :: %{(String.t() | atom()) => any()} + @type update_data_set_request() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - revoke_revision_response() :: %{ + update_data_set_response() :: %{ optional("Arn") => String.t() | atom(), - optional("Comment") => String.t() | atom(), + optional("AssetType") => String.t() | atom(), optional("CreatedAt") => non_neg_integer(), - optional("DataSetId") => String.t() | atom(), - optional("Finalized") => boolean(), + optional("Description") => String.t() | atom(), optional("Id") => String.t() | atom(), - optional("RevocationComment") => String.t() | atom(), - optional("Revoked") => boolean(), - optional("RevokedAt") => non_neg_integer(), + optional("Name") => String.t() | atom(), + optional("Origin") => String.t() | atom(), + optional("OriginDetails") => origin_details(), optional("SourceId") => String.t() | atom(), optional("UpdatedAt") => non_neg_integer() } """ - @type revoke_revision_response() :: %{(String.t() | atom()) => any()} + @type update_data_set_response() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - job_error() :: %{ - "Code" => String.t() | atom(), - "Details" => details(), - "LimitName" => String.t() | atom(), - "LimitValue" => float(), - "Message" => String.t() | atom(), - "ResourceId" => String.t() | atom(), - "ResourceType" => String.t() | atom() + update_event_action_request() :: %{ + optional("Action") => action() } """ - @type job_error() :: %{(String.t() | atom()) => any()} + @type update_event_action_request() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - update_data_set_request() :: %{ - optional("Description") => String.t() | atom(), - optional("Name") => String.t() | atom() + update_event_action_response() :: %{ + optional("Action") => action(), + optional("Arn") => String.t() | atom(), + optional("CreatedAt") => non_neg_integer(), + optional("Event") => event(), + optional("Id") => String.t() | atom(), + optional("UpdatedAt") => non_neg_integer() } """ - @type update_data_set_request() :: %{(String.t() | atom()) => any()} + @type update_event_action_response() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - revision_destination_entry() :: %{ - "Bucket" => String.t() | atom(), - "KeyPattern" => String.t() | atom(), - "RevisionId" => String.t() | atom() + update_revision_request() :: %{ + optional("Comment") => String.t() | atom(), + optional("Finalized") => boolean() } """ - @type revision_destination_entry() :: %{(String.t() | atom()) => any()} + @type update_revision_request() :: %{(String.t() | atom()) => any()} @typedoc """ ## Example: - create_event_action_response() :: %{ - optional("Action") => action(), + update_revision_response() :: %{ optional("Arn") => String.t() | atom(), + optional("Comment") => String.t() | atom(), optional("CreatedAt") => non_neg_integer(), - optional("Event") => event(), + optional("DataSetId") => String.t() | atom(), + optional("Finalized") => boolean(), optional("Id") => String.t() | atom(), + optional("RevocationComment") => String.t() | atom(), + optional("Revoked") => boolean(), + optional("RevokedAt") => non_neg_integer(), + optional("SourceId") => String.t() | atom(), optional("UpdatedAt") => non_neg_integer() } """ - @type create_event_action_response() :: %{(String.t() | atom()) => any()} + @type update_revision_response() :: %{(String.t() | atom()) => any()} + + @typedoc """ + + ## Example: + + validation_exception() :: %{ + "ExceptionCause" => String.t() | atom(), + "Message" => String.t() | atom() + } + + """ + @type validation_exception() :: %{(String.t() | atom()) => any()} @type accept_data_grant_errors() :: - throttling_exception() - | validation_exception() - | access_denied_exception() - | internal_server_exception() + validation_exception() + | throttling_exception() | resource_not_found_exception() + | internal_server_exception() | conflict_exception() + | access_denied_exception() @type cancel_job_errors() :: - throttling_exception() - | validation_exception() - | internal_server_exception() + validation_exception() + | throttling_exception() | resource_not_found_exception() + | internal_server_exception() | conflict_exception() @type create_data_grant_errors() :: - throttling_exception() + validation_exception() + | throttling_exception() | service_limit_exceeded_exception() - | validation_exception() - | access_denied_exception() - | internal_server_exception() | resource_not_found_exception() + | internal_server_exception() + | access_denied_exception() @type create_data_set_errors() :: - throttling_exception() + validation_exception() + | throttling_exception() | service_limit_exceeded_exception() - | validation_exception() - | access_denied_exception() | internal_server_exception() + | access_denied_exception() @type create_event_action_errors() :: - throttling_exception() + validation_exception() + | throttling_exception() | service_limit_exceeded_exception() - | validation_exception() - | access_denied_exception() | internal_server_exception() + | access_denied_exception() @type create_job_errors() :: - throttling_exception() - | validation_exception() - | access_denied_exception() - | internal_server_exception() + validation_exception() + | throttling_exception() | resource_not_found_exception() + | internal_server_exception() | conflict_exception() + | access_denied_exception() @type create_revision_errors() :: - throttling_exception() - | validation_exception() - | access_denied_exception() - | internal_server_exception() + validation_exception() + | throttling_exception() | resource_not_found_exception() + | internal_server_exception() + | access_denied_exception() @type delete_asset_errors() :: - throttling_exception() - | validation_exception() - | access_denied_exception() - | internal_server_exception() + validation_exception() + | throttling_exception() | resource_not_found_exception() + | internal_server_exception() | conflict_exception() + | access_denied_exception() @type delete_data_grant_errors() :: - throttling_exception() - | validation_exception() - | access_denied_exception() - | internal_server_exception() + validation_exception() + | throttling_exception() | resource_not_found_exception() + | internal_server_exception() + | access_denied_exception() @type delete_data_set_errors() :: - throttling_exception() - | validation_exception() - | access_denied_exception() - | internal_server_exception() + validation_exception() + | throttling_exception() | resource_not_found_exception() + | internal_server_exception() | conflict_exception() + | access_denied_exception() @type delete_event_action_errors() :: - throttling_exception() - | validation_exception() - | internal_server_exception() + validation_exception() + | throttling_exception() | resource_not_found_exception() + | internal_server_exception() @type delete_revision_errors() :: - throttling_exception() - | validation_exception() - | access_denied_exception() - | internal_server_exception() + validation_exception() + | throttling_exception() | resource_not_found_exception() + | internal_server_exception() | conflict_exception() + | access_denied_exception() @type get_asset_errors() :: - throttling_exception() - | validation_exception() - | internal_server_exception() + validation_exception() + | throttling_exception() | resource_not_found_exception() + | internal_server_exception() @type get_data_grant_errors() :: - throttling_exception() - | validation_exception() - | access_denied_exception() - | internal_server_exception() + validation_exception() + | throttling_exception() | resource_not_found_exception() + | internal_server_exception() + | access_denied_exception() @type get_data_set_errors() :: - throttling_exception() - | validation_exception() - | internal_server_exception() + validation_exception() + | throttling_exception() | resource_not_found_exception() + | internal_server_exception() @type get_event_action_errors() :: - throttling_exception() - | validation_exception() - | internal_server_exception() + validation_exception() + | throttling_exception() | resource_not_found_exception() + | internal_server_exception() @type get_job_errors() :: - throttling_exception() - | validation_exception() - | internal_server_exception() + validation_exception() + | throttling_exception() | resource_not_found_exception() + | internal_server_exception() @type get_received_data_grant_errors() :: - throttling_exception() - | validation_exception() - | access_denied_exception() - | internal_server_exception() + validation_exception() + | throttling_exception() | resource_not_found_exception() + | internal_server_exception() + | access_denied_exception() @type get_revision_errors() :: - throttling_exception() - | validation_exception() - | internal_server_exception() + validation_exception() + | throttling_exception() | resource_not_found_exception() + | internal_server_exception() @type list_data_grants_errors() :: - throttling_exception() - | validation_exception() - | access_denied_exception() - | internal_server_exception() + validation_exception() + | throttling_exception() | resource_not_found_exception() + | internal_server_exception() + | access_denied_exception() @type list_data_set_revisions_errors() :: - throttling_exception() - | validation_exception() - | internal_server_exception() + validation_exception() + | throttling_exception() | resource_not_found_exception() + | internal_server_exception() @type list_data_sets_errors() :: - throttling_exception() - | validation_exception() - | internal_server_exception() + validation_exception() + | throttling_exception() | resource_not_found_exception() + | internal_server_exception() @type list_event_actions_errors() :: - throttling_exception() - | validation_exception() - | internal_server_exception() + validation_exception() + | throttling_exception() | resource_not_found_exception() + | internal_server_exception() @type list_jobs_errors() :: - throttling_exception() - | validation_exception() - | internal_server_exception() + validation_exception() + | throttling_exception() | resource_not_found_exception() + | internal_server_exception() @type list_received_data_grants_errors() :: - throttling_exception() - | validation_exception() - | access_denied_exception() - | internal_server_exception() + validation_exception() + | throttling_exception() | resource_not_found_exception() + | internal_server_exception() + | access_denied_exception() @type list_revision_assets_errors() :: - throttling_exception() - | validation_exception() - | internal_server_exception() + validation_exception() + | throttling_exception() | resource_not_found_exception() + | internal_server_exception() @type revoke_revision_errors() :: - throttling_exception() - | validation_exception() - | access_denied_exception() - | internal_server_exception() + validation_exception() + | throttling_exception() | resource_not_found_exception() + | internal_server_exception() | conflict_exception() + | access_denied_exception() @type send_api_asset_errors() :: - throttling_exception() - | validation_exception() - | access_denied_exception() - | internal_server_exception() + validation_exception() + | throttling_exception() | resource_not_found_exception() + | internal_server_exception() + | access_denied_exception() @type send_data_set_notification_errors() :: - throttling_exception() - | validation_exception() - | access_denied_exception() - | internal_server_exception() + validation_exception() + | throttling_exception() | resource_not_found_exception() + | internal_server_exception() | conflict_exception() + | access_denied_exception() @type start_job_errors() :: - throttling_exception() - | validation_exception() - | access_denied_exception() - | internal_server_exception() + validation_exception() + | throttling_exception() | resource_not_found_exception() + | internal_server_exception() | conflict_exception() + | access_denied_exception() @type update_asset_errors() :: - throttling_exception() - | validation_exception() - | access_denied_exception() - | internal_server_exception() + validation_exception() + | throttling_exception() | resource_not_found_exception() + | internal_server_exception() | conflict_exception() + | access_denied_exception() @type update_data_set_errors() :: - throttling_exception() - | validation_exception() - | access_denied_exception() - | internal_server_exception() + validation_exception() + | throttling_exception() | resource_not_found_exception() + | internal_server_exception() + | access_denied_exception() @type update_event_action_errors() :: - throttling_exception() - | validation_exception() - | access_denied_exception() - | internal_server_exception() + validation_exception() + | throttling_exception() | resource_not_found_exception() + | internal_server_exception() + | access_denied_exception() @type update_revision_errors() :: - throttling_exception() - | validation_exception() - | access_denied_exception() - | internal_server_exception() + validation_exception() + | throttling_exception() | resource_not_found_exception() + | internal_server_exception() | conflict_exception() + | access_denied_exception() def metadata do %{ @@ -2738,15 +2738,15 @@ defmodule AWS.DataExchange do query_params = [] query_params = - if !is_nil(next_token) do - [{"nextToken", next_token} | query_params] + if !is_nil(max_results) do + [{"maxResults", max_results} | query_params] else query_params end query_params = - if !is_nil(max_results) do - [{"maxResults", max_results} | query_params] + if !is_nil(next_token) do + [{"nextToken", next_token} | query_params] else query_params end @@ -2783,15 +2783,15 @@ defmodule AWS.DataExchange do query_params = [] query_params = - if !is_nil(next_token) do - [{"nextToken", next_token} | query_params] + if !is_nil(max_results) do + [{"maxResults", max_results} | query_params] else query_params end query_params = - if !is_nil(max_results) do - [{"maxResults", max_results} | query_params] + if !is_nil(next_token) do + [{"nextToken", next_token} | query_params] else query_params end @@ -2831,8 +2831,8 @@ defmodule AWS.DataExchange do query_params = [] query_params = - if !is_nil(origin) do - [{"origin", origin} | query_params] + if !is_nil(max_results) do + [{"maxResults", max_results} | query_params] else query_params end @@ -2845,8 +2845,8 @@ defmodule AWS.DataExchange do end query_params = - if !is_nil(max_results) do - [{"maxResults", max_results} | query_params] + if !is_nil(origin) do + [{"origin", origin} | query_params] else query_params end @@ -2882,8 +2882,8 @@ defmodule AWS.DataExchange do query_params = [] query_params = - if !is_nil(next_token) do - [{"nextToken", next_token} | query_params] + if !is_nil(event_source_id) do + [{"eventSourceId", event_source_id} | query_params] else query_params end @@ -2896,8 +2896,8 @@ defmodule AWS.DataExchange do end query_params = - if !is_nil(event_source_id) do - [{"eventSourceId", event_source_id} | query_params] + if !is_nil(next_token) do + [{"nextToken", next_token} | query_params] else query_params end @@ -2935,29 +2935,29 @@ defmodule AWS.DataExchange do query_params = [] query_params = - if !is_nil(revision_id) do - [{"revisionId", revision_id} | query_params] + if !is_nil(data_set_id) do + [{"dataSetId", data_set_id} | query_params] else query_params end query_params = - if !is_nil(next_token) do - [{"nextToken", next_token} | query_params] + if !is_nil(max_results) do + [{"maxResults", max_results} | query_params] else query_params end query_params = - if !is_nil(max_results) do - [{"maxResults", max_results} | query_params] + if !is_nil(next_token) do + [{"nextToken", next_token} | query_params] else query_params end query_params = - if !is_nil(data_set_id) do - [{"dataSetId", data_set_id} | query_params] + if !is_nil(revision_id) do + [{"revisionId", revision_id} | query_params] else query_params end @@ -2993,8 +2993,8 @@ defmodule AWS.DataExchange do query_params = [] query_params = - if !is_nil(next_token) do - [{"nextToken", next_token} | query_params] + if !is_nil(acceptance_state) do + [{"acceptanceState", acceptance_state} | query_params] else query_params end @@ -3007,8 +3007,8 @@ defmodule AWS.DataExchange do end query_params = - if !is_nil(acceptance_state) do - [{"acceptanceState", acceptance_state} | query_params] + if !is_nil(next_token) do + [{"nextToken", next_token} | query_params] else query_params end @@ -3049,15 +3049,15 @@ defmodule AWS.DataExchange do query_params = [] query_params = - if !is_nil(next_token) do - [{"nextToken", next_token} | query_params] + if !is_nil(max_results) do + [{"maxResults", max_results} | query_params] else query_params end query_params = - if !is_nil(max_results) do - [{"maxResults", max_results} | query_params] + if !is_nil(next_token) do + [{"nextToken", next_token} | query_params] else query_params end From 1a4c62e130380179808c575d78ae1af3c64f6d5d Mon Sep 17 00:00:00 2001 From: Onno Vos Date: Sun, 26 Jul 2026 20:23:51 +0200 Subject: [PATCH 2/2] Ignore health_lake for now since it has both health_lake as well as awshealthlakedatatransformationfrontendservice wrapped in the same spec file --- lib/aws_codegen.ex | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/lib/aws_codegen.ex b/lib/aws_codegen.ex index 384ac92..9e6c591 100644 --- a/lib/aws_codegen.ex +++ b/lib/aws_codegen.ex @@ -90,7 +90,6 @@ defmodule AWS.CodeGen do @spec generate(:elixir | :erlang, binary(), binary(), binary()) :: :ok def generate(language, spec_base_path, template_base_path, output_base_path) do endpoints_spec = get_endpoints_spec(spec_base_path) - tasks = Enum.map( api_specs(spec_base_path, language), @@ -99,10 +98,15 @@ defmodule AWS.CodeGen do IO.puts("Skipping due to error") Task.async(fn -> :ok end) else - output_path = Path.join(output_base_path, spec.filename) - Task.async(fn -> - generate_code(spec, language, endpoints_spec, template_base_path, output_path) - end) + if spec.filename == "health_lake.ex" or spec.filename == "aws_healthlake.erl" do + IO.puts("Skipping health_lake due to known issues with the spec since it has another frontend service wrapped in the same spec") + Task.async(fn -> :ok end) + else + output_path = Path.join(output_base_path, spec.filename) + Task.async(fn -> + generate_code(spec, language, endpoints_spec, template_base_path, output_path) + end) + end end end )