Plug.Conn.Utils
Utilities for working with connection data
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 |
validate_utf8!(arg, context) | Validates the given binary is valid UTF-8 |
Types ↑
params :: [{binary, binary}]
Functions
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
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"]
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 their keys 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
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; baz=BOING")
%{"foo" => "bar", "baz" => "BOING"}
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
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
Specs:
- validate_utf8!(binary, binary) :: :ok | no_return
Validates the given binary is valid UTF-8.