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

http_status_code :: number
metadata :: map
response :: %{body: String.t, status_code: number}
success :: {:ok, [map]}
success_list :: {:ok, [map], metadata}

Functions

parse(response, module)

Specs

parse(response, 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"}}
parse_list(response, module, key)

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}}