-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 | {unsupported_content_type, binary()}. -file("src/oaspec/internal/util/content_type.gleam", 42). ?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; 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", 82). ?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", 88). ?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", 93). ?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>>; {unsupported_content_type, S} -> S end. -file("src/oaspec/internal/util/content_type.gleam", 107). ?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; _ -> false end. -file("src/oaspec/internal/util/content_type.gleam", 140). ?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", 124). ?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", 133). ?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.