Plug.Conn.Utils
Utilities for working with connection data
Summary
Types
Functions
- 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.
- validate_utf8!(binary, exception, context)
Validates the given binary is valid UTF-8.
Types
params()
Specs
params() :: %{optional(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
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"]
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 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
params(t)
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("foo=\"bar\"; baz=\"boing\"") %{"foo" => "bar", "baz" => "boing"} iex> params("foo=\"bar;\"; baz=\"boing\"") %{"foo" => "bar;", "baz" => "boing"} 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
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
validate_utf8!(binary, exception, context)
Specs
validate_utf8!(binary(), module(), binary()) :: :ok | no_return()
Validates the given binary is valid UTF-8.
© 2013 Plataformatec
Licensed under the Apache License, Version 2.0.
https://hexdocs.pm/plug/Plug.Conn.Utils.html