Skip to content

ruanpienaar/holster

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

41 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

holster

A Gun holster

Quickstart

$ make
$ ./rebar3 shell
erl> {ok, _} = application:ensure_all_started(holster).

Description:

holster makes the gun interaction simpler, by hiding out some of the fancy footwork required. Support for long running connections (http2), and simple requests. connection get's teared down for simple requests after each request.

( req/2/3/4/5 )

holster:req(req_type(), Uri :: string()) =
  {response, Resonse :: {resp_code() :: non_neg_integer(), 
                         gun:resp_headers(),
                         response() :: binary()} |
  {response, ErrResponse :: term()}

Example simple request

holster:req(get, "http://www.google.com").

Stay connected request:

holster:stay_connected_req(Uri :: string()) =
  {
     {ok, pid()}, {response, Resonse :: {resp_code() :: non_neg_integer(), 
                                         resp_headers(),
                                         response() :: binary()}} |
     {response, ErrResponse :: term()}
  }

and then all other subsequent requests made with the pid:

holster:another_request(get, Uri :: string(), PidOrOpts :: pid()) =
  {response, Resonse :: {resp_code() :: non_neg_integer(), 
                         resp_headers() :: proplists:proplist(),
                         response() :: binary()} | 
  {response, ErrResponse :: term()}

Basic erlang process approach

holster:simple_proc_req(req_type(), Uri :: string()) =
  {response, Resonse :: {resp_code() :: non_neg_integer(), 
                         resp_headers() :: proplists:proplist(),
                         response() :: binary()} | 
  {response, ErrResponse :: term()}

Websocket request:

ws_connect(uri_string:uri_string(), gun:opts()) = 
  {ok, pid(), gun:resp_headers()} | 
  {error, {ws_upgrade, timeout}}.

Websocket request example:

{ok, <0.167.0>,
    [{<<"upgrade">>, <<"websocket">>},
     {<<"connection">>, <<"Upgrade">>},
     {<<"sec-websocket-accept">>, <<"nRurElfkCM9Jf2Obkkcm5rqfpy8=">>},
     {<<"date">>, <<"Sun, 10 Mar 2024 13:33:34 GMT">>},
     {<<"server">>, <<"Python/3.12 websockets/12.0">>}]} = holster:ws_connect("ws:\/\/localhost:8765", #{}).

ok = holster:ws_req(<0.167.0>, {text, <<"test">>}).