View Source ExTwilio.Parser (ExTwilio v0.10.0)
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
@type error() :: {:error, map(), http_status_code()}
@type http_status_code() :: number()
@type key() :: String.t()
@type metadata() :: map()
@type parsed_list_response() :: success_list() | error()
@type success() :: {:ok, map()}
@type success_delete() :: :ok
Functions
@spec parse(HTTPoison.Response.t(), module()) :: success() | error()
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"}}
@spec parse_list(HTTPoison.Response.t(), 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(json, Resource, "resources")
{:ok, [%Resource{sid: "first"}, %Resource{sid: "second"}], %{"next_page" => 10}}