Current section
Files
Jump to
Current section
Files
src/multipartkit@part.erl
-module(multipartkit@part).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/multipartkit/part.gleam").
-export([new/5, all_headers/1, name/1, filename/1, content_type/1, body/1, header/2, headers/2]).
-export_type([part/0]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
-opaque part() :: {part,
list({binary(), binary()}),
gleam@option:option(binary()),
gleam@option:option(binary()),
gleam@option:option(binary()),
bitstring()}.
-file("src/multipartkit/part.gleam", 46).
?DOC(
" Construct a `Part`. The `name`, `filename`, and `content_type` fields\n"
" are not re-derived from the `headers` list — pass the values you\n"
" expect callers to see, or use `parser.parse` for automatic\n"
" derivation.\n"
).
-spec new(
list({binary(), binary()}),
gleam@option:option(binary()),
gleam@option:option(binary()),
gleam@option:option(binary()),
bitstring()
) -> part().
new(Headers, Name, Filename, Content_type, Body) ->
{part, Headers, Name, Filename, Content_type, Body}.
-file("src/multipartkit/part.gleam", 63).
?DOC(" All headers as `(name, value)` pairs in input order.\n").
-spec all_headers(part()) -> list({binary(), binary()}).
all_headers(Part) ->
erlang:element(2, Part).
-file("src/multipartkit/part.gleam", 70).
?DOC(
" The convenience `name` field derived from `Content-Disposition` for\n"
" `form-data` parts, or `None` for non-form parts and parts without a\n"
" disposition header.\n"
).
-spec name(part()) -> gleam@option:option(binary()).
name(Part) ->
erlang:element(3, Part).
-file("src/multipartkit/part.gleam", 76).
?DOC(
" The convenience `filename` field derived from `Content-Disposition`\n"
" for `form-data` parts, or `None`.\n"
).
-spec filename(part()) -> gleam@option:option(binary()).
filename(Part) ->
erlang:element(4, Part).
-file("src/multipartkit/part.gleam", 82).
?DOC(
" The `Content-Type` header value, or `None` if the part has no\n"
" `Content-Type` header.\n"
).
-spec content_type(part()) -> gleam@option:option(binary()).
content_type(Part) ->
erlang:element(5, Part).
-file("src/multipartkit/part.gleam", 87).
?DOC(" The raw body bytes of the part.\n").
-spec body(part()) -> bitstring().
body(Part) ->
erlang:element(6, Part).
-file("src/multipartkit/part.gleam", 106).
-spec find_header(list({binary(), binary()}), binary()) -> list(binary()).
find_header(Headers, Name) ->
gleam@list:filter_map(
Headers,
fun(Entry) ->
case multipartkit@internal@text:equals_ci(
erlang:element(1, Entry),
Name
) of
true ->
{ok, erlang:element(2, Entry)};
false ->
{error, nil}
end
end
).
-file("src/multipartkit/part.gleam", 93).
?DOC(
" Return the first header value whose name matches `name` ASCII\n"
" case-insensitively.\n"
).
-spec header(part(), binary()) -> gleam@option:option(binary()).
header(Part, Name) ->
case find_header(erlang:element(2, Part), Name) of
[First | _] ->
{some, First};
[] ->
none
end.
-file("src/multipartkit/part.gleam", 102).
?DOC(
" Return all header values whose name matches `name` ASCII case-insensitively\n"
" in the order they appear in the part headers.\n"
).
-spec headers(part(), binary()) -> list(binary()).
headers(Part, Name) ->
find_header(erlang:element(2, Part), Name).