2019-12-08 18:44:04 +00:00
|
|
|
defmodule Shortnr.Transport.Text do
|
2019-12-31 02:50:39 +00:00
|
|
|
@moduledoc """
|
|
|
|
This modules contains functions to decode and encode text formatted http requests and responses.
|
|
|
|
"""
|
|
|
|
|
2019-12-08 18:44:04 +00:00
|
|
|
import Plug.Conn
|
2019-12-26 21:11:43 +00:00
|
|
|
alias Shortnr.Transport.HTTP
|
2019-12-08 18:44:04 +00:00
|
|
|
alias Shortnr.URL
|
|
|
|
|
2019-12-26 21:11:43 +00:00
|
|
|
@spec decode_request(Plug.Conn.t()) :: HTTP.ok_error()
|
2019-12-08 18:44:04 +00:00
|
|
|
def decode_request(conn) do
|
|
|
|
{:ok, body, conn} = read_body(conn)
|
|
|
|
{:ok, body, conn}
|
|
|
|
end
|
|
|
|
|
2019-12-26 21:11:43 +00:00
|
|
|
@spec encode_response(HTTP.ok_error()) :: HTTP.ok_error()
|
2019-12-08 18:44:04 +00:00
|
|
|
def encode_response(ok_error = {:error, _, _}), do: ok_error
|
|
|
|
|
|
|
|
def encode_response({:ok, [], conn}) do
|
|
|
|
{:ok, "", conn}
|
|
|
|
end
|
|
|
|
|
|
|
|
def encode_response({:ok, body, conn}) when is_list(body) do
|
|
|
|
{:ok, for(item <- body, into: "", do: "#{item}\n"), conn}
|
|
|
|
end
|
|
|
|
|
|
|
|
def encode_response({:ok, %URL{url: url}, conn}) do
|
|
|
|
{:ok, url, conn}
|
|
|
|
end
|
|
|
|
|
|
|
|
def encode_response({:ok, body, conn}) do
|
|
|
|
{:ok, "#{body}", conn}
|
|
|
|
end
|
|
|
|
end
|