Skip to content

Commit 13446d0

Browse files
committed
WIP
1 parent 7655f55 commit 13446d0

File tree

2 files changed

+41
-17
lines changed

2 files changed

+41
-17
lines changed

lib/aws_codegen/rest_service.ex

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -137,21 +137,32 @@ defmodule AWS.CodeGen.RestService do
137137
end
138138

139139
@doc """
140-
Render function parameter, if any, in a way that can be inserted directly
140+
Render required function parameters, if any, in a way that can be inserted directly
141141
into the code template.
142142
"""
143-
def function_parameters(action) do
143+
def required_function_parameters(action) do
144+
function_parameters(action, false)
145+
end
146+
147+
@doc """
148+
Render function parameters, if any, in a way that can be inserted directly
149+
into the code template. It can be asked to only return the required ones.
150+
"""
151+
def function_parameters(action, required_only \\ false) do
144152
language = action.language
145153

146154
Enum.join([
147155
join_parameters(action.url_parameters, language)
148156
| case action.method do
149157
"GET" ->
150-
[
151-
join_parameters(action.query_parameters, language),
152-
join_parameters(action.request_header_parameters, language)
153-
]
154-
158+
parameters = action.query_parameters ++ action.request_header_parameters
159+
case required_only do
160+
true ->
161+
[join_parameters(parameters, language)]
162+
false ->
163+
required_parameters = Enum.filter(parameters, fn param -> param.required end)
164+
[join_parameters(required_parameters, language)]
165+
end
155166
_ ->
156167
[]
157168
end
@@ -187,7 +198,15 @@ defmodule AWS.CodeGen.RestService do
187198
len_for_method =
188199
case method do
189200
"GET" ->
190-
2 + length(request_header_parameters) + length(query_parameters)
201+
case language do
202+
:elixir ->
203+
2 + length(request_header_parameters) + length(query_parameters)
204+
:erlang ->
205+
filterFn = fn param -> param.required end
206+
all_parameters = request_header_parameters ++ query_parameters
207+
required_parameters = Enum.filter(all_parameters, filterFn)
208+
4 + length(required_parameters)
209+
end
191210

192211
_ ->
193212
3

priv/rest.erl.eex

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<%= if context.docstring != "%% @doc" do %><%= context.docstring %><% end %>
55
-module(<%= context.module_name %>).
66

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 ") %>]).
7+
-export([<%= Enum.map(context.actions, fn(action) -> ["#{action.function_name}/#{action.arity - 3}", "#{action.function_name}/#{action.arity - 1}", "#{action.function_name}/#{action.arity}"] end) |> List.flatten |> Enum.join(",\n ") %>]).
88

99
-include_lib("hackney/include/hackney_lib.hrl").
1010

@@ -13,27 +13,32 @@
1313
%%====================================================================
1414
<%= for action <- context.actions do %>
1515
<%= action.docstring %><%= if action.method == "GET" do %>
16-
<%= action.function_name %>(Client<%= AWS.CodeGen.RestService.function_parameters(action) %>)
16+
<%= action.function_name %>(Client<%= AWS.CodeGen.RestService.required_function_parameters(action) %>)
1717
when is_map(Client) ->
18-
<%= action.function_name %>(Client<%= AWS.CodeGen.RestService.function_parameters(action) %>, []).
19-
<%= action.function_name %>(Client<%= AWS.CodeGen.RestService.function_parameters(action) %>, Options)
20-
when is_map(Client), is_list(Options) ->
18+
<%= action.function_name %>(Client<%= AWS.CodeGen.RestService.required_function_parameters(action) %>, #{}, #{}).
19+
20+
<%= action.function_name %>(Client<%= AWS.CodeGen.RestService.required_function_parameters(action) %>, QueryMap, HeadersMap)
21+
when is_map(Client), is_map(QueryMap), is_map(HeadersMap) ->
22+
<%= action.function_name %>(Client<%= AWS.CodeGen.RestService.required_function_parameters(action) %>, QueryMap, HeadersMap, []).
23+
24+
<%= action.function_name %>(Client<%= AWS.CodeGen.RestService.required_function_parameters(action) %>, QueryMap, HeadersMap, Options)
25+
when is_map(Client), is_map(QueryMap), is_map(HeadersMap), is_list(Options) ->
2126
Path = ["<%= AWS.CodeGen.RestService.Action.url_path(action) %>"],
2227
SuccessStatusCode = <%= if is_nil(action.success_status_code), do: "undefined", else: inspect(action.success_status_code) %>,
2328
<%= if length(action.request_header_parameters) > 0 do %>
2429
Headers0 =
2530
[<%= for parameter <- Enum.drop(action.request_header_parameters, -1) do %>
26-
{<<"<%= parameter.location_name %>">>, <%= parameter.code_name %>},<% end %><%= for parameter <- Enum.slice action.request_header_parameters, -1..-1 do %>
27-
{<<"<%= parameter.location_name %>">>, <%= parameter.code_name %>}
31+
{<<"<%= parameter.location_name %>">>, maps:get(<<"<%= parameter.location_name %>">>, HeadersMap, undefined)},<% end %><%= for parameter <- Enum.slice action.request_header_parameters, -1..-1 do %>
32+
{<<"<%= parameter.location_name %>">>, maps:get(<<"<%= parameter.location_name %>">>, HeadersMap, undefined)}
2833
<% end %>],
2934
Headers = [H || {_, V} = H <- Headers0, V =/= undefined],
3035
<% else %>
3136
Headers = [],
3237
<% end %><%= if length(action.query_parameters) > 0 do %>
3338
Query0_ =
3439
[<%= for parameter <- Enum.drop(action.query_parameters, -1) do %>
35-
{<<"<%= parameter.location_name %>">>, <%= parameter.code_name %>},<% end %><%= for parameter <- Enum.slice action.query_parameters, -1..-1 do %>
36-
{<<"<%= parameter.location_name %>">>, <%= parameter.code_name %>}
40+
{<<"<%= parameter.location_name %>">>, maps:get(<<"<%= parameter.location_name %>">>, QueryMap, undefined)},<% end %><%= for parameter <- Enum.slice action.query_parameters, -1..-1 do %>
41+
{<<"<%= parameter.location_name %>">>, maps:get(<<"<%= parameter.location_name %>">>, QueryMap, undefined)}
3742
<% end %>],
3843
Query_ = [H || {_, V} = H <- Query0_, V =/= undefined],
3944
<% else %>

0 commit comments

Comments
 (0)