params do
requires :a
optional :b
end
compile to
@parameters [
%{key: :a, required: true},
%{key: :b, required: false}
]
params do
requires :a
optional :b
end
compile to
@parameters [
%{key: :a, required: true},
%{key: :b, required: false}
]
params do
requires :a
optional :b
end
get do
IO.inspect params
end
compile to
@parameters [
%{key: :a, required: true},
%{key: :b, required: false}
]
def route(%Plug.Conn{method: "GET", path_info: [], params: plug_params}, _) do
params = AnotherModule.parse_params(@parameters, plug_params)
IO.inspect params
end
helper
defmodule AnotherModule do
def parse_params(maru_params, plug_params), do: parse_params(maru_params, plug_params, %{})
defp parse_params([], plug_params, result), do: result
defp parse_params([h|t], plug_params, result) do
value = case {h[:required], plug_params[to_string(h[:key])]} do
{true, nil} -> raise "required #{h.key}"
{_, value} -> value
end
parse_params(t, plug_params, put_in(result, h[:key], value)
end
end
params do
requires :a, validator: fn _, _ -> true end
optional :b
end
get do
IO.inspect params
end
compile to
@parameters [
%{key: :a, required: true, valudator: quote do fn _ -> true end},
%{key: :b, required: false}
]
def route(%Plug.Conn{method: "GET", path_info: [], params: plug_params}, _) do
params = AnotherModule.parse_params(@parameters, plug_params)
IO.inspect params
end
helper
defmodule AnotherModule do
def parse_params(maru_params, plug_params), do: parse_params(maru_params, plug_params, %{})
defp parse_params([], plug_params, result), do: result
defp parse_params([h|t], plug_params, result) do
value = case {h[:required], plug_params[to_string(h[:key])]} do
{true, nil} -> raise "required #{h.key}"
{_, value} -> value
end
if Map.has_key?(h, :validator) do
h[:validator].(value) || raise "validat error"
end
parse_params(t, plug_params, put_in(result, h[:key], value)
end
end