Current section

Files

Jump to
cangaroo src cangaroo.erl
Raw

src/cangaroo.erl

-module(cangaroo).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/cangaroo.gleam").
-export([start/0, open/2, close/1, send/2, set_loopback/2, recv_own_messages/2, set_filters/2, set_error_filter/2]).
-export_type([can_socket/0, can_error/0]).
-opaque can_socket() :: {can_socket, gleam@erlang@process:pid_()}.
-type can_error() :: interface_bound |
{unknown_error, gleam@erlang@atom:atom_()}.
-file("src/cangaroo.gleam", 51).
-spec start() -> {ok, can_socket()} | {error, gleam@erlang@atom:atom_()}.
start() ->
{Status, Pid} = 'Elixir.Excansock':start_link(),
case erlang:atom_to_binary(Status) of
<<"ok"/utf8>> ->
{ok, {can_socket, Pid}};
_ ->
{error, Status}
end.
-file("src/cangaroo.gleam", 59).
-spec open(can_socket(), binary()) -> {ok, nil} | {error, can_error()}.
open(Socket, Interface) ->
Raw = 'Elixir.Excansock':open(erlang:element(2, Socket), Interface, false),
Ok = erlang:binary_to_atom(<<"ok"/utf8>>),
Error_tuple_decoder = begin
gleam@dynamic@decode:subfield(
[0],
{decoder, fun gleam@dynamic@decode:decode_dynamic/1},
fun(Tag_dyn) ->
gleam@dynamic@decode:subfield(
[1],
{decoder, fun gleam@dynamic@decode:decode_dynamic/1},
fun(Reason_dyn) ->
Tag = gleam_erlang_ffi:identity(Tag_dyn),
Reason = gleam_erlang_ffi:identity(Reason_dyn),
case {Tag =:= erlang:binary_to_atom(<<"error"/utf8>>),
Reason =:= erlang:binary_to_atom(<<"ebound"/utf8>>)} of
{true, true} ->
gleam@dynamic@decode:success(
{error, interface_bound}
);
{_, _} ->
gleam@dynamic@decode:success(
{error, {unknown_error, Reason}}
)
end
end
)
end
)
end,
Success_atom_decoder = begin
gleam@dynamic@decode:then(
{decoder, fun gleam@dynamic@decode:decode_dynamic/1},
fun(Result_dyn) ->
Result = gleam_erlang_ffi:identity(Result_dyn),
case Result =:= Ok of
true ->
gleam@dynamic@decode:success({ok, nil});
_ ->
gleam@dynamic@decode:success(
{error, {unknown_error, Result}}
)
end
end
)
end,
Decoder = gleam@dynamic@decode:one_of(
Error_tuple_decoder,
[Success_atom_decoder]
),
case gleam@dynamic@decode:run(Raw, Decoder) of
{ok, Result@1} ->
Result@1;
_ ->
{error,
{unknown_error,
erlang:binary_to_atom(<<"unparsable_return"/utf8>>)}}
end.
-file("src/cangaroo.gleam", 129).
-spec check_status(gleam@erlang@atom:atom_()) -> {ok, nil} |
{error, gleam@erlang@atom:atom_()}.
check_status(Status) ->
case erlang:atom_to_binary(Status) of
<<"ok"/utf8>> ->
{ok, nil};
_ ->
{error, Status}
end.
-file("src/cangaroo.gleam", 93).
-spec close(can_socket()) -> {ok, nil} | {error, gleam@erlang@atom:atom_()}.
close(Socket) ->
Status = 'Elixir.Excansock':close(erlang:element(2, Socket)),
check_status(Status).
-file("src/cangaroo.gleam", 98).
-spec send(can_socket(), cangaroo@bridge:can_frame()) -> {ok, nil} |
{error, gleam@erlang@atom:atom_()}.
send(Socket, Frame) ->
Status = 'Elixir.Excansock':send(erlang:element(2, Socket), Frame),
check_status(Status).
-file("src/cangaroo.gleam", 103).
-spec set_loopback(can_socket(), boolean()) -> {ok, nil} |
{error, gleam@erlang@atom:atom_()}.
set_loopback(Socket, Value) ->
Status = 'Elixir.Excansock':set_loopback(erlang:element(2, Socket), Value),
check_status(Status).
-file("src/cangaroo.gleam", 108).
-spec recv_own_messages(can_socket(), boolean()) -> {ok, nil} |
{error, gleam@erlang@atom:atom_()}.
recv_own_messages(Socket, Value) ->
Status = 'Elixir.Excansock':recv_own_messages(
erlang:element(2, Socket),
Value
),
check_status(Status).
-file("src/cangaroo.gleam", 116).
-spec set_filters(can_socket(), list(cangaroo@bridge:can_filter())) -> {ok, nil} |
{error, gleam@erlang@atom:atom_()}.
set_filters(Socket, Filters) ->
Status = 'Elixir.Excansock':set_filters(erlang:element(2, Socket), Filters),
check_status(Status).
-file("src/cangaroo.gleam", 121).
-spec set_error_filter(can_socket(), integer()) -> {ok, nil} |
{error, gleam@erlang@atom:atom_()}.
set_error_filter(Socket, Filter) ->
Status = 'Elixir.Excansock':set_error_filter(
erlang:element(2, Socket),
Filter
),
check_status(Status).