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 |
Functions
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
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"]
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
Specs:
- params(binary) :: params
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("=")
%{}
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