Utilities for working with connection data
Parses content type (without wildcards).
Parses a comma-separated list of header values.
Parses media types (with wildcards).
Parses headers parameters.
Parses a value as defined in RFC-1341.
Validates the given binary is valid UTF-8.
params() :: %{optional(binary()) => binary()}
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.
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()) :: [binary()]
Parses a comma-separated list of header values.
iex> list("foo, bar") ["foo", "bar"] iex> list("foobar") ["foobar"] iex> list("") [] iex> list("empties, , are,, filtered") ["empties", "are", "filtered"]
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 validiex> 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(binary()) :: params()
Parses headers parameters.
Keys are case insensitive and downcased, invalid key-value pairs are discarded.
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(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.
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(), 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