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()
Link to this type

parsed_list_response()

View Source
@type parsed_list_response() :: success_list() | error()
@type parsed_response() :: success() | error()
@type success() :: {:ok, map()}
@type success_delete() :: :ok
@type success_list() :: {:ok, [map()], metadata()}

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"}}
Link to this function

parse_list(response, module, key)

View Source
@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}}