ExTwilio v0.1.9 ExTwilio.Parser
A JSON parser tuned specifically for Twilio API responses. Based on Poison's excellent JSON decoder.
Summary
Functions
Parse a response expected to contain a single resource. If you pass in a module as the first argument, the JSON will be parsed into that module's __struct__
Parse a response expected to contain multiple resources. If you pass in a module as the first argument, the JSON will be parsed into that module's __struct__
Types
error :: {:error, String.t, http_status_code}
http_status_code :: number
metadata :: map
parsed_response :: success | error
success :: {:ok, [map]}
success_delete :: :ok
success_list :: {:ok, [map], metadata}
Functions
Parse a response expected to contain a single resource. If you pass in a module as the first argument, the JSON will be parsed into that module's __struct__
.
Examples
Given you have a module named Resource
, defined like this:
defmodule Resource do
defstruct sid: nil
end
You can parse JSON into that module's struct like so:
iex> response = %{body: "{ \"sid\": \"AD34123\" }", status_code: 200}
...> ExTwilio.Parser.parse(response, Resource)
{:ok, %Resource{sid: "AD34123"}}
You can also parse into a regular map if you want.
iex> response = %{body: "{ \"sid\": \"AD34123\" }", status_code: 200}
...> ExTwilio.Parser.parse(response, %{})
{:ok, %{"sid" => "AD34123"}}
Specs
parse_list(response, module, key) ::
success_list |
error
Parse a response expected to contain multiple resources. If you pass in a module as the first argument, the JSON will be parsed into that module's __struct__
.
Examples
Given you have a module named Resource
, defined like this:
defmodule Resource do
defstruct sid: nil
end
And the JSON you are parsing looks like this:
{
"resources": [{
"sid": "first"
}, {
"sid": "second"
}],
"next_page": 10
}
You can parse the the JSON like this:
ExTwilio.Parser.parse_list(Resource, json, "resources")
{:ok, [%Resource{sid: "first"}, %Resource{sid: "second"}], %{"next_page" => 10}}