Current section
Files
Jump to
Current section
Files
lib/parsers/plug_parser.ex
defimpl OneAndDone.Parser, for: Plug.Conn do
@moduledoc """
Turns a `Plug.Conn` into a `OneAndDone.Request` `OneAndDone.Response`.
"""
alias OneAndDone.Request
alias OneAndDone.Response
@doc """
Builds a OneAndDone.Request from a Plug.Conn.
"""
@spec build_request(Plug.Conn.t()) :: OneAndDone.Request.t()
def build_request(%Plug.Conn{} = conn) do
request = %Request{
host: conn.host,
port: conn.port,
scheme: conn.scheme,
method: conn.method,
path: conn.request_path,
query_string: conn.query_string,
body: conn.body_params
}
case request do
%Request{body: %Plug.Conn.Unfetched{}} -> raise OneAndDone.Errors.PlugUnfetchedBodyError
_ -> request
end
end
@doc """
Builds a OneAndDone.Response from a Plug.Conn.
"""
@spec build_response(Plug.Conn.t()) :: OneAndDone.Response.t()
def build_response(%Plug.Conn{} = conn) do
%Response{
request_hash: OneAndDone.Parser.build_request(conn) |> OneAndDone.Request.hash(),
status: conn.status,
body: conn.resp_body,
cookies: conn.resp_cookies,
headers: conn.resp_headers
}
end
end