-module(oaisp@internal@emit).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/oaisp/internal/emit.gleam").
-export([encode/1, to_string/1, decoder/0, parse/1]).
-export_type([document/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 document() :: {document,
oaisp@info:info(),
list(oaisp@endpoint:endpoint())}.
-file("src/oaisp/internal/emit.gleam", 21).
?DOC(false).
-spec encode(document()) -> gleam@json:json().
encode(Document) ->
gleam@json:object(
[{<<"info"/utf8>>, oaisp@info:to_json(erlang:element(2, Document))},
{<<"endpoints"/utf8>>,
gleam@json:array(
erlang:element(3, Document),
fun oaisp@endpoint:to_json/1
)}]
).
-file("src/oaisp/internal/emit.gleam", 29).
?DOC(false).
-spec to_string(document()) -> binary().
to_string(Document) ->
gleam@json:to_string(encode(Document)).
-file("src/oaisp/internal/emit.gleam", 34).
?DOC(false).
-spec decoder() -> gleam@dynamic@decode:decoder(document()).
decoder() ->
gleam@dynamic@decode:field(
<<"info"/utf8>>,
oaisp@info:decoder(),
fun(Document_info) ->
gleam@dynamic@decode:field(
<<"endpoints"/utf8>>,
gleam@dynamic@decode:list(oaisp@endpoint:decoder()),
fun(Endpoints) ->
gleam@dynamic@decode:success(
{document, Document_info, Endpoints}
)
end
)
end
).
-file("src/oaisp/internal/emit.gleam", 41).
?DOC(false).
-spec parse(binary()) -> {ok, document()} | {error, gleam@json:decode_error()}.
parse(Input) ->
gleam@json:parse(Input, decoder()).