|
| 1 | +# WARNING: DO NOT EDIT, AUTO-GENERATED CODE! |
| 2 | +# See https://github.com/jkakar/aws-codegen for more details. |
| 3 | + |
| 4 | +<%= if context.docstring != "%% @doc" do %><%= context.docstring %><%= end %> |
| 5 | +-module(<%= context.module_name %>). |
| 6 | + |
| 7 | +-export([<%= Enum.map(context.actions, fn(action) -> ["#{action.function_name}/#{action.arity - 1}", "#{action.function_name}/#{action.arity}"] end) |> List.flatten |> Enum.join(",\n ") %>]). |
| 8 | + |
| 9 | +-include_lib("hackney/include/hackney_lib.hrl"). |
| 10 | + |
| 11 | +%%==================================================================== |
| 12 | +%% API |
| 13 | +%%==================================================================== |
| 14 | +<%= for action <- context.actions do %> |
| 15 | +<%= action.docstring %><%= if action.method =="GET" do %> |
| 16 | +<%= action.function_name %>(Client<%= AWS.CodeGen.RestJSONService.function_parameters(:erlang, action) %>) |
| 17 | + when is_map(Client), is_map(Input), is_list(HTTPOptions) -> |
| 18 | + <%= action.function_name %>(Client<%= AWS.CodeGen.RestJSONService.function_parameters(:erlang, action) %>, []). |
| 19 | +<%= action.function_name %>(Client<%= AWS.CodeGen.RestJSONService.function_parameters(:erlang, action) %>, HTTPOptions) |
| 20 | + when is_map(Client), is_map(Input), is_list(HTTPOptions) -> |
| 21 | + URL = "<%= AWS.CodeGen.RestJSONService.Action.url(:erlang, action) %>" |
| 22 | + Headers = []<%= for parameter <- action.request_header_parameters do %> |
| 23 | + if !is_nil(<%= parameter.code_name %>) do |
| 24 | + Headers = [{"<%= parameter.name %>", <%= parameter.code_name %>}|headers] |
| 25 | + end<%= end %><%= if length(action.response_header_parameters) > 0 do %> |
| 26 | + case request(Client, get, URL, Headers, undefined, HTTPOptions, <%= inspect(action.success_status_code) %>) do |
| 27 | + {:ok, body, response} -><%= for parameter <- action.response_header_parameters do %> |
| 28 | + if !is_nil(response.headers["<%= parameter.name %>"]) do |
| 29 | + body = %{body | "<%= parameter.name %>" => response.headers["<%= parameter.name %>"]} |
| 30 | + end<%= end %> |
| 31 | + {:ok, body, response} |
| 32 | + result -> |
| 33 | + result |
| 34 | + end<% else %> |
| 35 | + request(Client, get, URL, Headers, undefined, HTTPOptions, <%= inspect(action.success_status_code) %>)<% end %><% else %> |
| 36 | +<%= action.function_name %>(Client<%= AWS.CodeGen.RestJSONService.function_parameters(:erlang, action) %>, Input) |
| 37 | + when is_map(Client), is_map(Input)) -> |
| 38 | + <%= action.function_name %>(Client<%= AWS.CodeGen.RestJSONService.function_parameters(:erlang, action) %>, Input, []). |
| 39 | +<%= action.function_name %>(Client<%= AWS.CodeGen.RestJSONService.function_parameters(:erlang, action) %>, Input, HTTPOptions) -> |
| 40 | + when is_map(Client), is_map(Input), is_list(HTTPOptions) -> |
| 41 | + URL = "<%= AWS.CodeGen.RestJSONService.Action.url(:erlang, action) %>" |
| 42 | + {Input1, Headers} = extract_request_headers(Input, [ |
| 43 | + |
| 44 | + |
| 45 | + Headers = []<%= for parameter <- action.request_header_parameters do %> |
| 46 | + if Dict.has_key?(input, "<%= parameter.name %>") do |
| 47 | + Headers = [{"<%= parameter.name %>", input["<%= parameter.name %>"]}|headers] |
| 48 | + input = Dict.delete(input, "<%= parameter.name %>") |
| 49 | + end<%= end %><%= if length(action.response_header_parameters) > 0 do %> |
| 50 | + case request(client, <%= AWS.CodeGen.RestJSONService.Action.method(:erlang, action) %>, url, headers, input, options, <%= inspect(action.success_status_code) %>) do |
| 51 | + {:ok, body, response} -><%= for parameter <- action.response_header_parameters do %> |
| 52 | + if !is_nil(response.headers["<%= parameter.name %>"]) do |
| 53 | + body = %{body | "<%= parameter.name %>" => response.headers["<%= parameter.name %>"]} |
| 54 | + end<%= end %> |
| 55 | + {:ok, body, response} |
| 56 | + result -> |
| 57 | + result |
| 58 | + end<% else %> |
| 59 | + request(Client, <%= AWS.CodeGen.RestJSONService.Action.method(:erlang, action) %>, URL, Headers, Input, HTTPOptions, <%= inspect(action.success_status_code) %>)<% end %><% end %> |
| 60 | +<% end %> |
| 61 | +%%==================================================================== |
| 62 | +%% Internal functions |
| 63 | +%%==================================================================== |
| 64 | + |
| 65 | +extract_request_headers(Input, Names) -> |
| 66 | + extract_request_headers(Input, [], Names). |
| 67 | +extract_request_headers(Input, Headers, []) -> |
| 68 | + {Input, Headers}. |
| 69 | +extract_request_headers(Input, Headers, [Name|Rest]) -> |
| 70 | + Headers1 = case maps:get(Name, Input, undefined) of |
| 71 | + undefined -> Headers; |
| 72 | + Value -> [{Name, Value}|Headers] |
| 73 | + end, |
| 74 | + extract_request_headers(maps:remove(Name, Input), Headers1, Rest). |
| 75 | + |
| 76 | +request(Client, Method, URL, Headers, Input, HTTPOptions, SuccessStatusCode) -> |
| 77 | + Client1 = Client#{service => <<"<%= context.endpoint_prefix %>">>}, |
| 78 | + Host = aws_util:binary_join([<<"<%= context.endpoint_prefix %>.">>, |
| 79 | + maps:get(region, Client1), |
| 80 | + <<".">>, |
| 81 | + maps:get(endpoint, Client1)], |
| 82 | + <<"">>), |
| 83 | + URL = aws_util:binary_join([<<"https://">>, Host, <<"/">>], <<"">>), |
| 84 | + Headers = [{<<"Host">>, Host}, |
| 85 | + {<<"Content-Type">>, <<"application/x-amz-json-<%= context.json_version %>">>}, |
| 86 | + {<<"X-Amz-Target">>, << <<"<%= context.target_prefix %>.">>/binary, Action/binary>>}], |
| 87 | + Payload = enode_payload(Input), |
| 88 | + Headers1 = aws_request:sign_request(Client1, <<"POST">>, URL, Headers, Payload), |
| 89 | + perform_request(Method, URL, Payload, Headers1, HTTPOptions, SuccessStatusCode). |
| 90 | + |
| 91 | +perform_request(Method, URL, Payload, Headers, HTTPOptions, undefined) -> |
| 92 | + case hackney:request(Method, URL, Headers, Payload, HTTPOptions) of |
| 93 | + Response = {ok, 200, ResponseHeaders, Client} -> |
| 94 | + {ok, Body} = hackney:body(Client), |
| 95 | + {ok, jsx:decode(Body, [return_maps]), Response}; |
| 96 | + Response = {ok, 202, ResponseHeaders, Client} -> |
| 97 | + {ok, Body} = hackney:body(Client), |
| 98 | + {ok, jsx:decode(Body, [return_maps]), Response}; |
| 99 | + Response = {ok, 204, ResponseHeaders, Client} -> |
| 100 | + {ok, Body} = hackney:body(Client), |
| 101 | + {ok, jsx:decode(Body, [return_maps]), Response}; |
| 102 | + Response = {ok, _StatusCode, ResponseHeaders, Client} -> |
| 103 | + {ok, Body} = hackney:body(Client), |
| 104 | + Reason = maps:get(<<"__type">>, jsx:decode(Body, [return_maps])), |
| 105 | + {error, Reason, {StatusCode, ResponseHeaders, Client}}; |
| 106 | + {error, Reason} -> |
| 107 | + {error, Reason} |
| 108 | + end; |
| 109 | +perform_request(Method, URL, Payload, Headers, HTTPOptions, SuccessStatusCode) -> |
| 110 | + case hackney:request(Method, URL, Headers, Payload, HTTPOptions) of |
| 111 | + Response = {ok, SuccessStatusCode, ResponseHeaders, Client} -> |
| 112 | + {ok, Body} = hackney:body(Client), |
| 113 | + {ok, jsx:decode(Body, [return_maps]), Response}; |
| 114 | + Response = {ok, _StatusCode, ResponseHeaders, Client} -> |
| 115 | + {ok, Body} = hackney:body(Client), |
| 116 | + Reason = maps:get(<<"__type">>, jsx:decode(Body, [return_maps])), |
| 117 | + {error, Reason, {StatusCode, ResponseHeaders, Client}}; |
| 118 | + {error, Reason} -> |
| 119 | + {error, Reason} |
| 120 | + end. |
0 commit comments