Packages
raxx
0.11.0
1.1.0
1.0.1
1.0.0
1.0.0-rc.3
1.0.0-rc.2
retired
1.0.0-rc.1
retired
1.0.0-rc.0
retired
0.18.1
0.18.0
0.17.6
0.17.5
0.17.4
0.17.3
0.17.2
0.17.1
0.17.0
0.16.1
0.16.0
retired
0.15.11
0.15.10
0.15.9
0.15.8
0.15.7
0.15.6
0.15.5
0.15.4
0.15.3
0.15.2
0.15.1
0.15.0
0.14.14
0.14.13
0.14.12
0.14.11
0.14.10
0.14.9
0.14.8
0.14.7
0.14.6
0.14.5
0.14.4
0.14.3
0.14.2
0.14.1
0.14.0
0.13.0
0.12.3
0.12.2
0.12.1
0.12.0
0.11.1
0.11.0
0.10.5
0.10.4
0.10.3
0.10.2
0.10.1
0.10.0
0.9.0
0.8.2
0.8.1
0.8.0
0.7.1
0.7.0
0.6.0
0.5.2
0.5.1
0.5.0
0.4.3
0.4.2
0.4.1
0.4.0
0.3.0
0.2.0
0.1.0
0.0.1
Interface for HTTP webservers, frameworks and clients.
Current section
Files
Jump to
Current section
Files
lib/raxx/transfer_encoding.ex
defmodule Raxx.TransferEncoding do
@moduledoc """
Manipulate transfer-encoding header on raxx messages
"""
@field_name "transfer-encoding"
@doc """
Read transfer-encoding of the HTTP message.
## Examples
iex> %Raxx.Request{headers: [{"transfer-encoding", "chunked"}]} |> Raxx.TransferEncoding.fetch
{:ok, "chunked"}
iex> %Raxx.Request{headers: []} |> Raxx.TransferEncoding.fetch
{:error, :field_value_not_specified}
iex> %Raxx.Request{headers: [{"transfer-encoding", "chunked"}, {"transfer-encoding", "gzip"}]} |> Raxx.TransferEncoding.fetch
{:error, :duplicated_field}
"""
def fetch(%{headers: headers}) do
case :proplists.lookup_all(@field_name,headers) do
[{@field_name, field_binary}] ->
{:ok, field_binary}
[] ->
{:error, :field_value_not_specified}
_ ->
{:error, :duplicated_field}
end
end
@doc """
Is a transfer-encoding value specified for this HTTP message
## Examples
iex> %Raxx.Request{headers: [{"transfer-encoding", "chunked"}]} |> Raxx.TransferEncoding.set?
true
iex> %Raxx.Request{headers: []} |> Raxx.TransferEncoding.set?
false
"""
def set?(request) do
!({:error, :field_value_not_specified} == fetch(request))
end
@doc """
Set the transfer-encoding of a HTTP message.
## Examples
iex> %Raxx.Request{} |> Raxx.TransferEncoding.set("chunked") |> Map.get(:headers)
[{"transfer-encoding", "chunked"}]
iex> %Raxx.Request{headers: [{"transfer-encoding", "unknown"}]} |> Raxx.TransferEncoding.set("chunked") |> Map.get(:headers)
[{"transfer-encoding", "chunked"}]
"""
def set(message = %{headers: headers}, value) when value >= 0 do
headers = :proplists.delete(@field_name, headers)
headers = [{@field_name, value} | headers]
%{message | headers: headers}
end
end