-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).