Plug.Conn.Utils

Utilities for working with connection data

Source

Summary

content_type(binary)

Parses content type (without wildcards)

list(binary)

Parses a comma-separated list of header values

media_type(binary)

Parses media types (with wildcards)

params(t)

Parses headers parameters

token(token)

Parses a value as defined in [RFC-1341][1]. For convenience, trims whitespace at the end of the token. Returns false if 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/1 except wildcards are not accepted in the type nor in the 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 \"text/plain\"
{:ok, \"text\", \"plain\", %{}}

iex\> content_type \"x/*\"
:error

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

Specs:

  • list(binary) :: [binary]

Parses a comma-separated list of header values.

Examples

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

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

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

iex\> list(\"empties, , are,, filtered\")
[\"empties\", \"are\", \"filtered\"]
Source
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.

Returns:

  • {:ok, type, subtype, map_of_params} if everything goes fine
  • :error if the media type isn’t valid

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
Source
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; baz=BOING\")
%{\"foo\" =\> \"bar\", \"baz\" =\> \"BOING\"}

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

iex\> params(\"=\")
%{}
Source
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 if 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
Source