Current section
Files
Jump to
Current section
Files
src/grpcbox.erl
%%%-------------------------------------------------------------------
%% @doc grpc client
%% @end
%%%-------------------------------------------------------------------
-module(grpcbox).
-export([start_server/0,
start_server/1,
child_spec/5]).
-include_lib("chatterbox/include/http2.hrl").
-type encoding() :: identity | gzip | deflate | snappy | atom().
-type metadata() :: #{headers := grpcbox_metadata:t(),
trailers := grpcbox_metadata:t()}.
-type server_opts() :: #{server_opts => settings(), %% TODO: change this in chatterbox to be under a module
grpc_opts => #{service_protos := [module()]},
listen_opts => #{port => inet:port_number(),
ip => inet:ip_address(),
socket_options => [gen_tcp:option()]},
pool_opts => #{size => integer()},
transport_opts => #{ssl => boolean(),
keyfile => file:filename_all(),
certfile => file:filename_all(),
cacertfile => file:filename_all()}}.
-export_type([metadata/0,
server_opts/0,
encoding/0]).
start_server() ->
GrpcOpts = application:get_env(grpcbox, grpc_opts, #{}),
ServerOpts = application:get_env(grpcbox, server_opts, #{}),
ListenOpts = application:get_env(grpcbox, listen_opts, #{}),
PoolOpts = application:get_env(grpcbox, pool_opts, #{}),
TransportOpts = application:get_env(grpcbox, transport_opts, #{}),
grpcbox_services_simple_sup:start_child(#{server_opts => ServerOpts,
grpc_opts => GrpcOpts,
listen_opts => ListenOpts,
pool_opts => PoolOpts,
transport_opts => TransportOpts}).
start_server(Opts) ->
grpcbox_services_simple_sup:start_child(Opts).
child_spec(ServerOpts, GrpcOpts, ListenOpts, PoolOpts, TransportOpts) ->
#{id => grpcbox_services_sup,
start => {grpcbox_services_sup, start_link, [ServerOpts, GrpcOpts, ListenOpts,
PoolOpts, TransportOpts]},
type => supervisor,
restart => permanent,
shutdown => 1000}.