Packages

A Gleam WebSocket consumer for AT Protocol Jetstream events

Current section

Files

Jump to
goose src goose_ffi.erl
Raw

src/goose_ffi.erl

-module(goose_ffi).
-export([priv_dir/0, decompress_using_ddict_safe/2, decompress_streaming_safe/2]).
%% Get the priv directory for the goose application
priv_dir() ->
case code:priv_dir(goose) of
{error, _} -> "./priv";
Path when is_list(Path) -> list_to_binary(Path);
Path -> Path
end.
%% Safe wrapper for ezstd:decompress_using_ddict that always returns Result type
decompress_using_ddict_safe(Data, DDict) ->
case ezstd:decompress_using_ddict(Data, DDict) of
Result when is_binary(Result) ->
{ok, Result};
Result when is_list(Result) ->
{ok, iolist_to_binary(Result)};
{error, Err} when is_binary(Err) ->
%% Keep error as binary (Gleam String)
{error, Err};
{error, Err} when is_list(Err) ->
%% Convert list to binary
{error, list_to_binary(Err)};
{error, Err} ->
%% Convert any other type to binary
{error, list_to_binary(lists:flatten(io_lib:format("~p", [Err])))}
end.
%% Safe wrapper for ezstd:decompress_streaming that always returns Result type
decompress_streaming_safe(DCtx, Data) ->
case ezstd:decompress_streaming(DCtx, Data) of
Result when is_binary(Result) ->
{ok, Result};
Result when is_list(Result) ->
{ok, iolist_to_binary(Result)};
{error, Err} when is_binary(Err) ->
%% Keep error as binary (Gleam String)
{error, Err};
{error, Err} when is_list(Err) ->
%% Convert list to binary
{error, list_to_binary(Err)};
{error, Err} ->
%% Convert any other type to binary
{error, list_to_binary(lists:flatten(io_lib:format("~p", [Err])))}
end.