Skip to content

Commit 3040954

Browse files
author
Ashu Goel
committed
[endpoint] allow for not auto-decoding just the results field of the response
1 parent bcac0c3 commit 3040954

File tree

2 files changed

+15
-7
lines changed

2 files changed

+15
-7
lines changed

lib/endpoint.ex

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ defmodule SparkPost.Endpoint do
3232
"id" => "102258558346809186", "name" => "102258558346809186",
3333
"state" => "Success"}, ...], status_code: 200}
3434
"""
35-
def request(method, endpoint, body \\ %{}, headers \\ %{}, options \\ []) do
35+
def request(method, endpoint, body \\ %{}, headers \\ %{}, options \\ [], decode_results \\ true) do
3636
url = Application.get_env(:sparkpost, :api_endpoint, @default_endpoint) <> endpoint
3737

3838
{:ok, request_body} = encode_request_body(body)
@@ -49,7 +49,7 @@ defmodule SparkPost.Endpoint do
4949
|> Keyword.put(:recv_timeout, Application.get_env(:sparkpost, :http_recv_timeout, 8000))
5050

5151
HTTPoison.request(method, url, request_body, request_headers, request_options)
52-
|> handle_response
52+
|> handle_response(decode_results)
5353
end
5454

5555
def marshal_response(response, struct_type, subkey\\nil)
@@ -70,12 +70,16 @@ defmodule SparkPost.Endpoint do
7070
response
7171
end
7272

73-
defp handle_response({:ok, %HTTPoison.Response{status_code: code, body: body}}) when code >= 200 and code < 300 do
73+
defp handle_response({:ok, %HTTPoison.Response{status_code: code, body: body}}, decode_results) when code >= 200 and code < 300 do
7474
decoded_body = decode_response_body(body)
75-
%SparkPost.Endpoint.Response{status_code: 200, results: decoded_body.results}
75+
if decode_results do
76+
%SparkPost.Endpoint.Response{status_code: 200, results: decoded_body.results}
77+
else
78+
%SparkPost.Endpoint.Response{status_code: 200, results: decoded_body}
79+
end
7680
end
7781

78-
defp handle_response({:ok, %HTTPoison.Response{status_code: code, body: body}}) when code >= 400 do
82+
defp handle_response({:ok, %HTTPoison.Response{status_code: code, body: body}}, _decode_results) when code >= 400 do
7983
decoded_body = decode_response_body(body)
8084
if Map.has_key?(decoded_body, :errors) do
8185
%SparkPost.Endpoint.Error{status_code: code, errors: decoded_body.errors}

lib/suppression_list.ex

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,11 @@ defmodule SparkPost.SuppressionList do
2929
- description: Description of entries to include in the search.
3030
"""
3131
def search(params \\ []) do
32-
response = Endpoint.request(:get, "suppression-list", %{}, %{}, [params: params])
33-
struct(SparkPost.SuppressionList.SearchResult, response)
32+
response = Endpoint.request(:get, "suppression-list", %{}, %{}, [params: params], false)
33+
case response do
34+
%SparkPost.Endpoint.Response{results: body} ->
35+
struct(SparkPost.SuppressionList.SearchResult, body)
36+
_ -> response
37+
end
3438
end
3539
end

0 commit comments

Comments
 (0)