Auto-indexing service and GraphQL API for AT Protocol Records
quickslice.slices.network/
atproto
gleam
graphql
1-module(zip_helper_ffi).
2-export([unzip_file/2]).
3
4%% Extract a ZIP file to a destination directory
5%% Uses Erlang's built-in :zip.unzip/2 function
6unzip_file(ZipPath, Destination) ->
7 %% Convert Gleam strings (binaries) to Erlang strings (lists)
8 ZipPathList = binary_to_list(ZipPath),
9 DestinationList = binary_to_list(Destination),
10 Options = [{cwd, DestinationList}],
11 case zip:unzip(ZipPathList, Options) of
12 {ok, _FileList} -> {ok, nil};
13 {error, Reason} -> {error, format_error(Reason)}
14 end.
15
16%% Format error reason as a binary string
17format_error(Reason) when is_atom(Reason) ->
18 list_to_binary(atom_to_list(Reason));
19format_error(Reason) when is_list(Reason) ->
20 list_to_binary(Reason);
21format_error(Reason) ->
22 list_to_binary(io_lib:format("~p", [Reason])).