Current section
Files
Jump to
Current section
Files
src/touch_grass@file_system@read_file.erl
-module(touch_grass@file_system@read_file).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/touch_grass/file_system/read_file.gleam").
-export([decode/1, encode/1]).
-export_type([input/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 the contents of a file\n"
" \n"
" Accepts a limit by default, this should be large.\n"
" The effect doesn't assume a file is kept open and so streaming very large files should be handled as a different effect.\n"
).
-type input() :: {input, binary(), integer(), integer()}.
-file("src/touch_grass/file_system/read_file.gleam", 14).
-spec decode(eyg@interpreter@value:value(PYF, PYG)) -> {ok, input()} |
{error, eyg@interpreter@break:reason(PYF, PYG)}.
decode(Input) ->
gleam@result:'try'(
eyg@interpreter@cast:field(
<<"path"/utf8>>,
fun eyg@interpreter@cast:as_string/1,
Input
),
fun(Path) ->
gleam@result:'try'(
eyg@interpreter@cast:field(
<<"offset"/utf8>>,
fun eyg@interpreter@cast:as_integer/1,
Input
),
fun(Offset) ->
gleam@result:'try'(
eyg@interpreter@cast:field(
<<"limit"/utf8>>,
fun eyg@interpreter@cast:as_integer/1,
Input
),
fun(Limit) -> {ok, {input, Path, Offset, Limit}} end
)
end
)
end
).
-file("src/touch_grass/file_system/read_file.gleam", 21).
-spec encode({ok, bitstring()} | {error, binary()}) -> eyg@interpreter@value:value(any(), any()).
encode(Result) ->
case Result of
{ok, Data} ->
eyg@interpreter@value:ok({binary, Data});
{error, Reason} ->
eyg@interpreter@value:error({string, Reason})
end.