-module(touch_grass@file_system@read_directory). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/touch_grass/file_system/read_directory.gleam"). -export([encode/1]). -export_type([entry/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. ?MODULEDOC( " Read all the entries in a directory.\n" " Excludes self `.` and parent `..`\n" " \n" " The closest syscall is `getdents` but most other ecosystems use the read directory terminology\n" " - Node.js `fs.readdirSync`\n" " - In the browser `directoryHandle.entries()`\n" " - C standard library readdir\n" " \n" " This effect includes status information about the returned entires.\n" ). -type entry() :: directory | {file, integer()}. -file("src/touch_grass/file_system/read_directory.gleam", 33). -spec entry_encode({binary(), entry()}) -> eyg@interpreter@value:value(any(), any()). entry_encode(Entry) -> {Name, Entry@1} = Entry, Type_ = case Entry@1 of directory -> {tagged, <<"Directory"/utf8>>, eyg@interpreter@value:unit()}; {file, Size} -> {tagged, <<"File"/utf8>>, {record, maps:from_list([{<<"size"/utf8>>, {integer, Size}}])}} end, {record, maps:from_list( [{<<"name"/utf8>>, {string, Name}}, {<<"type"/utf8>>, Type_}] )}. -file("src/touch_grass/file_system/read_directory.gleam", 26). -spec encode({ok, list({binary(), entry()})} | {error, binary()}) -> eyg@interpreter@value:value(any(), any()). encode(Result) -> case Result of {ok, Entries} -> eyg@interpreter@value:ok( {linked_list, gleam@list:map(Entries, fun entry_encode/1)} ); {error, Reason} -> eyg@interpreter@value:error({string, Reason}) end.