Current section
Files
Jump to
Current section
Files
src/elli_swagger.erl
-module(elli_swagger).
-export([get_json_documentation/0]).
-export([start/2]).
start(ElliHandlers, Port) ->
ElliHandlerWithSwagger = [{elli_swagger_handler, []}|ElliHandlers],
ElliMiddlewareArgs = [{mods, ElliHandlerWithSwagger}],
elli:start_link([{callback, elli_middleware}, {callback_args, ElliMiddlewareArgs}, {port, Port}]).
get_json_documentation() ->
Callback = application:get_env(elli_swagger, elli_swagger_documentation_callback, undefined),
Metadata = application:get_env(elli_swagger, swagger_metadata, #{openapi => <<"3.0.0">>}),
Documentation = get_documentation(Callback, #{}),
jsx:encode(maps:merge(Metadata, Documentation)).
get_documentation(undefined, Acc) ->
Acc;
get_documentation([], Accumulator) ->
Accumulator;
get_documentation([Callback|CallbackList], Accumulator) ->
Documentation = Callback:documentation(),
get_documentation(CallbackList, maps:merge(Documentation, Accumulator));
get_documentation(Callback, #{}) ->
Callback:documentation().