Plug.Conn.Utils

Plug.Conn.Utils

Utilities for working with connection data

Summary

Types

params()

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

params() :: %{optional(binary) => binary}

Functions

content_type(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.

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)

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)

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)

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)

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)

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

在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号

意见反馈
返回顶部