Current section
Files
Jump to
Current section
Files
src/carotte.erl
-module(carotte).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/carotte.gleam").
-export([default_client/0, with_username/2, with_password/2, with_virtual_host/2, with_host/2, with_port/2, with_channel_max/2, with_frame_max/2, with_heartbeat/2, with_connection_timeout/2, start/1, close/1]).
-export_type([client/0, carotte_error/0, builder/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.
-opaque client() :: {client, gleam@erlang@process:pid_()}.
-type carotte_error() :: blocked |
closed |
{auth_failure, binary()} |
process_not_found |
{already_registered, binary()} |
{not_found, binary()} |
{access_refused, binary()} |
{precondition_failed, binary()} |
{resource_locked, binary()} |
{channel_closed, binary()} |
{connection_refused, binary()} |
{connection_timeout, binary()} |
{frame_error, binary()} |
{internal_error, binary()} |
{invalid_path, binary()} |
{no_route, binary()} |
{not_allowed, binary()} |
{not_implemented, binary()} |
{unexpected_frame, binary()} |
{command_invalid, binary()} |
{unknown_error, binary()}.
-opaque builder() :: {builder,
binary(),
binary(),
binary(),
binary(),
integer(),
integer(),
integer(),
integer(),
integer()}.
-file("src/carotte.gleam", 54).
?DOC(
" Create a new client builder with default settings.\n"
" Uses guest/guest credentials on localhost:5672.\n"
" \n"
" ## Example\n"
" ```gleam\n"
" let client = carotte.default_client(process.new_name(\"my_client\"))\n"
" |> carotte.start()\n"
" ```\n"
).
-spec default_client() -> builder().
default_client() ->
{builder,
<<"guest"/utf8>>,
<<"guest"/utf8>>,
<<"/"/utf8>>,
<<"localhost"/utf8>>,
5672,
2074,
0,
10,
60000}.
-file("src/carotte.gleam", 69).
?DOC(" Set the username for authentication\n").
-spec with_username(builder(), binary()) -> builder().
with_username(Builder, Username) ->
{builder,
Username,
erlang:element(3, Builder),
erlang:element(4, Builder),
erlang:element(5, Builder),
erlang:element(6, Builder),
erlang:element(7, Builder),
erlang:element(8, Builder),
erlang:element(9, Builder),
erlang:element(10, Builder)}.
-file("src/carotte.gleam", 74).
?DOC(" Set the password for authentication\n").
-spec with_password(builder(), binary()) -> builder().
with_password(Builder, Password) ->
{builder,
erlang:element(2, Builder),
Password,
erlang:element(4, Builder),
erlang:element(5, Builder),
erlang:element(6, Builder),
erlang:element(7, Builder),
erlang:element(8, Builder),
erlang:element(9, Builder),
erlang:element(10, Builder)}.
-file("src/carotte.gleam", 79).
?DOC(" Set the virtual host to connect to\n").
-spec with_virtual_host(builder(), binary()) -> builder().
with_virtual_host(Builder, Virtual_host) ->
{builder,
erlang:element(2, Builder),
erlang:element(3, Builder),
Virtual_host,
erlang:element(5, Builder),
erlang:element(6, Builder),
erlang:element(7, Builder),
erlang:element(8, Builder),
erlang:element(9, Builder),
erlang:element(10, Builder)}.
-file("src/carotte.gleam", 84).
?DOC(" Set the hostname or IP address of the RabbitMQ server\n").
-spec with_host(builder(), binary()) -> builder().
with_host(Builder, Host) ->
{builder,
erlang:element(2, Builder),
erlang:element(3, Builder),
erlang:element(4, Builder),
Host,
erlang:element(6, Builder),
erlang:element(7, Builder),
erlang:element(8, Builder),
erlang:element(9, Builder),
erlang:element(10, Builder)}.
-file("src/carotte.gleam", 89).
?DOC(" Set the port number for the RabbitMQ server (default: 5672)\n").
-spec with_port(builder(), integer()) -> builder().
with_port(Builder, Port) ->
{builder,
erlang:element(2, Builder),
erlang:element(3, Builder),
erlang:element(4, Builder),
erlang:element(5, Builder),
Port,
erlang:element(7, Builder),
erlang:element(8, Builder),
erlang:element(9, Builder),
erlang:element(10, Builder)}.
-file("src/carotte.gleam", 94).
?DOC(" Set the maximum number of channels (default: 2074)\n").
-spec with_channel_max(builder(), integer()) -> builder().
with_channel_max(Builder, Channel_max) ->
{builder,
erlang:element(2, Builder),
erlang:element(3, Builder),
erlang:element(4, Builder),
erlang:element(5, Builder),
erlang:element(6, Builder),
Channel_max,
erlang:element(8, Builder),
erlang:element(9, Builder),
erlang:element(10, Builder)}.
-file("src/carotte.gleam", 99).
?DOC(" Set the maximum frame size in bytes (0 = no limit)\n").
-spec with_frame_max(builder(), integer()) -> builder().
with_frame_max(Builder, Frame_max) ->
{builder,
erlang:element(2, Builder),
erlang:element(3, Builder),
erlang:element(4, Builder),
erlang:element(5, Builder),
erlang:element(6, Builder),
erlang:element(7, Builder),
Frame_max,
erlang:element(9, Builder),
erlang:element(10, Builder)}.
-file("src/carotte.gleam", 104).
?DOC(" Set the heartbeat interval in seconds (default: 10)\n").
-spec with_heartbeat(builder(), integer()) -> builder().
with_heartbeat(Builder, Heartbeat) ->
{builder,
erlang:element(2, Builder),
erlang:element(3, Builder),
erlang:element(4, Builder),
erlang:element(5, Builder),
erlang:element(6, Builder),
erlang:element(7, Builder),
erlang:element(8, Builder),
Heartbeat,
erlang:element(10, Builder)}.
-file("src/carotte.gleam", 109).
?DOC(" Set the connection timeout in milliseconds (default: 60000)\n").
-spec with_connection_timeout(builder(), integer()) -> builder().
with_connection_timeout(Builder, Connection_timeout) ->
{builder,
erlang:element(2, Builder),
erlang:element(3, Builder),
erlang:element(4, Builder),
erlang:element(5, Builder),
erlang:element(6, Builder),
erlang:element(7, Builder),
erlang:element(8, Builder),
erlang:element(9, Builder),
Connection_timeout}.
-file("src/carotte.gleam", 126).
?DOC(
" Start a RabbitMQ client connection.\n"
" Returns an actor.StartResult which contains the client on success.\n"
" \n"
" ## Example\n"
" ```gleam\n"
" case carotte.start(builder) {\n"
" Ok(client) -> // Use the client\n"
" Error(actor.InitFailed(msg)) -> // Handle connection error\n"
" }\n"
" ```\n"
).
-spec start(builder()) -> {ok, client()} | {error, carotte_error()}.
start(Builder) ->
begin
Result = carotte_ffi:start(
erlang:element(2, Builder),
erlang:element(3, Builder),
erlang:element(4, Builder),
erlang:element(5, Builder),
erlang:element(6, Builder),
erlang:element(7, Builder),
erlang:element(8, Builder),
erlang:element(9, Builder),
erlang:element(10, Builder)
),
case Result of
{ok, X} ->
{ok, {client, X}};
{error, E} ->
{error, E}
end
end.
-file("src/carotte.gleam", 156).
?DOC(
" Close the RabbitMQ client connection.\n"
" This will close all channels and the underlying AMQP connection.\n"
).
-spec close(client()) -> {ok, nil} | {error, carotte_error()}.
close(Client) ->
carotte_ffi:close(Client).