forked from loafle/openapi-generator-original
47 lines
1.5 KiB
Erlang
47 lines
1.5 KiB
Erlang
-module(openapi_server).
|
|
-moduledoc """
|
|
Echo Server API
|
|
""".
|
|
|
|
-define(DEFAULT_LOGIC_HANDLER, openapi_logic_handler).
|
|
|
|
-export([start/2]).
|
|
-ignore_xref([start/2]).
|
|
|
|
-spec start(term(), #{transport => tcp | ssl,
|
|
transport_opts => ranch:opts(),
|
|
protocol_opts => cowboy:opts(),
|
|
logic_handler => module()}) ->
|
|
{ok, pid()} | {error, any()}.
|
|
start(ID, Params) ->
|
|
Transport = maps:get(transport, Params, tcp),
|
|
TransportOpts = maps:get(transport_opts, Params, #{}),
|
|
ProtocolOpts = maps:get(procotol_opts, Params, #{}),
|
|
LogicHandler = maps:get(logic_handler, Params, ?DEFAULT_LOGIC_HANDLER),
|
|
CowboyOpts = get_cowboy_config(LogicHandler, ProtocolOpts),
|
|
case Transport of
|
|
ssl ->
|
|
cowboy:start_tls(ID, TransportOpts, CowboyOpts);
|
|
tcp ->
|
|
cowboy:start_clear(ID, TransportOpts, CowboyOpts)
|
|
end.
|
|
|
|
get_cowboy_config(LogicHandler, ExtraOpts) ->
|
|
DefaultOpts = get_default_opts(LogicHandler),
|
|
maps:fold(fun get_cowboy_config/3, DefaultOpts, ExtraOpts).
|
|
|
|
get_cowboy_config(env, #{dispatch := _Dispatch} = Env, AccIn) ->
|
|
AccIn#{env => Env};
|
|
get_cowboy_config(env, NewEnv, #{env := OldEnv} = AccIn) ->
|
|
Env = maps:merge(OldEnv, NewEnv),
|
|
AccIn#{env => Env};
|
|
get_cowboy_config(Key, Value, AccIn) ->
|
|
AccIn#{Key => Value}.
|
|
|
|
get_default_dispatch(LogicHandler) ->
|
|
Paths = openapi_router:get_paths(LogicHandler),
|
|
#{dispatch => cowboy_router:compile(Paths)}.
|
|
|
|
get_default_opts(LogicHandler) ->
|
|
#{env => get_default_dispatch(LogicHandler)}.
|