Current section

Files

Jump to
oaspec src oaspec@internal@util@content_type.erl
Raw

src/oaspec@internal@util@content_type.erl

-module(oaspec@internal@util@content_type).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/oaspec/internal/util/content_type.gleam").
-export([from_string/1, is_json_compatible/1, is_xml_compatible/1, to_string/1, is_supported/1, is_supported_request/1, is_supported_response/1]).
-export_type([content_type/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.
?MODULEDOC(false).
-type content_type() :: application_json |
text_plain |
multipart_form_data |
form_url_encoded |
application_octet_stream |
application_xml |
text_xml |
wildcard |
{unsupported_content_type, binary()}.
-file("src/oaspec/internal/util/content_type.gleam", 51).
?DOC(false).
-spec from_string(binary()) -> content_type().
from_string(Content_type) ->
case Content_type of
<<"application/json"/utf8>> ->
application_json;
<<"text/plain"/utf8>> ->
text_plain;
<<"application/x-ndjson"/utf8>> ->
text_plain;
<<"multipart/form-data"/utf8>> ->
multipart_form_data;
<<"application/x-www-form-urlencoded"/utf8>> ->
form_url_encoded;
<<"application/octet-stream"/utf8>> ->
application_octet_stream;
<<"application/xml"/utf8>> ->
application_xml;
<<"text/xml"/utf8>> ->
text_xml;
<<"*/*"/utf8>> ->
wildcard;
Other ->
case gleam_stdlib:string_ends_with(Other, <<"+json"/utf8>>) of
true ->
application_json;
false ->
case gleam_stdlib:string_ends_with(Other, <<"+xml"/utf8>>) of
true ->
application_xml;
false ->
case gleam_stdlib:string_starts_with(
Other,
<<"text/"/utf8>>
) of
true ->
text_plain;
false ->
case gleam_stdlib:string_starts_with(
Other,
<<"application/"/utf8>>
) of
true ->
application_octet_stream;
false ->
{unsupported_content_type, Other}
end
end
end
end
end.
-file("src/oaspec/internal/util/content_type.gleam", 95).
?DOC(false).
-spec is_json_compatible(binary()) -> boolean().
is_json_compatible(S) ->
(S =:= <<"application/json"/utf8>>) orelse gleam_stdlib:string_ends_with(
S,
<<"+json"/utf8>>
).
-file("src/oaspec/internal/util/content_type.gleam", 101).
?DOC(false).
-spec is_xml_compatible(binary()) -> boolean().
is_xml_compatible(S) ->
((S =:= <<"application/xml"/utf8>>) orelse (S =:= <<"text/xml"/utf8>>))
orelse gleam_stdlib:string_ends_with(S, <<"+xml"/utf8>>).
-file("src/oaspec/internal/util/content_type.gleam", 106).
?DOC(false).
-spec to_string(content_type()) -> binary().
to_string(Content_type) ->
case Content_type of
application_json ->
<<"application/json"/utf8>>;
text_plain ->
<<"text/plain"/utf8>>;
multipart_form_data ->
<<"multipart/form-data"/utf8>>;
form_url_encoded ->
<<"application/x-www-form-urlencoded"/utf8>>;
application_octet_stream ->
<<"application/octet-stream"/utf8>>;
application_xml ->
<<"application/xml"/utf8>>;
text_xml ->
<<"text/xml"/utf8>>;
wildcard ->
<<"*/*"/utf8>>;
{unsupported_content_type, S} ->
S
end.
-file("src/oaspec/internal/util/content_type.gleam", 121).
?DOC(false).
-spec is_supported(content_type()) -> boolean().
is_supported(Content_type) ->
case Content_type of
application_json ->
true;
text_plain ->
true;
multipart_form_data ->
true;
form_url_encoded ->
true;
application_octet_stream ->
true;
application_xml ->
true;
text_xml ->
true;
wildcard ->
true;
_ ->
false
end.
-file("src/oaspec/internal/util/content_type.gleam", 155).
?DOC(false).
-spec registry_has_supported(binary(), binary()) -> boolean().
registry_has_supported(Name, Category) ->
_pipe = oaspec@internal@capability:registry(),
gleam@list:any(
_pipe,
fun(C) ->
((erlang:element(2, C) =:= Name) andalso (erlang:element(3, C) =:= Category))
andalso (erlang:element(4, C) =:= supported)
end
).
-file("src/oaspec/internal/util/content_type.gleam", 139).
?DOC(false).
-spec is_supported_request(content_type()) -> boolean().
is_supported_request(Content_type) ->
case Content_type of
{unsupported_content_type, _} ->
false;
Ct ->
registry_has_supported(to_string(Ct), <<"request"/utf8>>)
end.
-file("src/oaspec/internal/util/content_type.gleam", 148).
?DOC(false).
-spec is_supported_response(content_type()) -> boolean().
is_supported_response(Content_type) ->
case Content_type of
{unsupported_content_type, _} ->
false;
Ct ->
registry_has_supported(to_string(Ct), <<"response"/utf8>>)
end.