Plug.Conn.Utils

Utilities for working with connection data

Summary

content_type(binary)

Parses content type (without wildcards)

list(binary)

Parses a comma-separated header list

media_type(binary)

Parses media types (with wildcards)

params(t)

Parses headers parameters

token(token)

Parses a value as defined in RFC-1341. For convenience, trims whitespace at the end of the token. Returns false is the token is invalid

Types

params :: [{binary, binary}]

Functions

content_type(binary)

Specs:

  • content_type(binary) :: {:ok, type :: binary, subtype :: binary, params} | :error

Parses content type (without wildcards).

It is similar to media_type/2 except wildcards are not accepted in type nor subtype.

Examples

iex> content_type "x-sample/json; charset=utf-8"
{:ok, "x-sample", "json", %{"charset" => "utf-8"}}

iex> content_type "x-sample/json  ; charset=utf-8  ; foo=bar"
{:ok, "x-sample", "json", %{"charset" => "utf-8", "foo" => "bar"}}

iex> content_type "\r\n text/plain;\r\n charset=utf-8\r\n"
{:ok, "text", "plain", %{"charset" => "utf-8"}}

iex> content_type "x/*"
:error

iex> content_type "*/*"
:error
list(binary)

Specs:

  • list(binary) :: [binary]

Parses a comma-separated header list.

Examples

iex> list("foo, bar")
["foo", "bar"]

iex> list("foobar")
["foobar"]

iex> list("")
[]

iex> list("empties, , are,, filtered")
["empties", "are", "filtered"]
media_type(binary)

Specs:

  • media_type(binary) :: {:ok, type :: binary, subtype :: binary, params} | :error

Parses media types (with wildcards).

Type and subtype are case insensitive while the sensitiveness of params depends on its key and therefore are not handled by this parser.

Examples

iex> media_type "text/plain"
{:ok, "text", "plain", %{}}

iex> media_type "APPLICATION/vnd.ms-data+XML"
{:ok, "application", "vnd.ms-data+xml", %{}}

iex> media_type "text/*; q=1.0"
{:ok, "text", "*", %{"q" => "1.0"}}

iex> media_type "*/*; q=1.0"
{:ok, "*", "*", %{"q" => "1.0"}}

iex> media_type "x y"
:error

iex> media_type "*/html"
:error

iex> media_type "/"
:error

iex> media_type "x/y z"
:error
params(t)

Specs:

Parses headers parameters.

Keys are case insensitive and downcased, invalid key-value pairs are discarded.

Examples

iex> params("foo=bar")
%{"foo" => "bar"}

iex> params("  foo=bar  ")
%{"foo" => "bar"}

iex> params("FOO=bar")
%{"foo" => "bar"}

iex> params("foo=BAR ; wat")
%{"foo" => "BAR"}

iex> params("=")
%{}
token(token)

Specs:

  • token(binary) :: binary | false

Parses a value as defined in RFC-1341. For convenience, trims whitespace at the end of the token. Returns false is the token is invalid.

Examples

iex> token("foo")
"foo"

iex> token("foo-bar")
"foo-bar"

iex> token("<foo>")
false

iex> token(~s["<foo>"])
"<foo>"

iex> token(~S["<f\oo>\"<b\ar>"])
"<foo>\"<bar>"

iex> token("foo  ")
"foo"

iex> token("foo bar")
false