Auto-indexing service and GraphQL API for AT Protocol Records quickslice.slices.network/
atproto gleam graphql
at main 22 lines 810 B view raw
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])).