Skip to main content

include/livery.hrl

-ifndef(LIVERY_HRL).
-define(LIVERY_HRL, true).

-record(livery_req, {
    protocol = h1 :: h1 | h2 | h3,
    method = <<"GET">> :: binary(),
    scheme = <<"http">> :: binary(),
    authority = <<>> :: binary(),
    path = <<"/">> :: binary(),
    raw_query = <<>> :: binary(),
    bindings = #{} :: #{binary() => binary()},
    headers = [] :: [{binary(), binary()}],
    peer = undefined :: {inet:ip_address(), inet:port_number()} | undefined,
    tls = undefined :: undefined | map(),
    body = empty ::
        empty
        | {buffered, iodata()}
        | {stream, term()},
    adapter = undefined :: module() | undefined,
    stream = undefined :: term(),
    engine_pid = undefined :: pid() | undefined,
    notifier_pid = undefined :: pid() | undefined,
    disc_ref = undefined :: reference() | undefined,
    req_id = <<>> :: binary(),
    started_at = undefined :: integer() | undefined,
    meta = #{} :: map(),
    config = undefined :: term()
}).

-record(livery_resp, {
    status = 200 :: 100..599,
    headers = [] :: [{binary(), binary()}],
    body = {full, <<>>} ::
        {full, iodata()}
        | {chunked, fun((term()) -> ok | {error, term()})}
        | {sse, fun((term()) -> ok | {error, term()})}
        | {deferred, fun(() -> term())}
        | {file, file:name_all(), undefined | {non_neg_integer(), non_neg_integer() | eof}}
        | {upgrade, ws | wt, term()}
        | empty
        | taken_over,
    trailers ::
        undefined
        | [{binary(), binary()}]
        | fun(() -> [{binary(), binary()}]),
    %% Early-response inbound-drain budget for HTTP/1.1. When a handler
    %% commits this response before the request body is fully read, h1
    %% drains the leftover inbound body before closing so the client
    %% reads the response. `default' uses the listener budget; `none'
    %% disables the drain (close immediately); `{MaxBytes, MaxMs}' (either
    %% component `infinity') bounds it for this response only. Honored on
    %% full responses; streaming responses use the listener budget.
    early_response_drain = default ::
        default
        | none
        | {non_neg_integer() | infinity, non_neg_integer() | infinity}
}).

-endif.