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