-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.