Skip to main content

src/oaisp@internal@emit.erl

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