Packages
mist
6.0.3
6.0.3
6.0.2
6.0.1
6.0.0
5.0.4
5.0.3
5.0.2
5.0.1
5.0.0
5.0.0-rc1
4.0.7
4.0.6
4.0.5
4.0.4
4.0.3
4.0.2
4.0.1
4.0.0
3.0.0
2.0.0
1.2.0
1.1.0
1.0.0
1.0.0-rc3
1.0.0-rc2
1.0.0-rc1
0.17.0
0.15.0
0.14.3
0.14.2
0.14.1
0.14.0
0.13.2
0.13.1
0.13.0
0.12.0
0.11.0
0.10.0
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.3
0.8.2
0.8.1
0.8.0
0.7.1
0.7.0
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.3
0.3.2
0.3.1
0.3.0
0.2.1
0.2.0
0.1.3
a misty Gleam web server
Current section
Files
Jump to
Current section
Files
src/mist@internal@file.erl
-module(mist@internal@file).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/mist/internal/file.gleam").
-export([error_to_string/1, sendfile/6, open/1, stat/1, close/1]).
-export_type([file_descriptor/0, file_error/0, send_error/0, file/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(false).
-type file_descriptor() :: any().
-type file_error() :: is_dir | no_access | no_entry | unknown_file_error.
-type send_error() :: {file_err, file_error()} |
{socket_err, glisten@socket:socket_reason()}.
-type file() :: {file, file_descriptor(), integer()}.
-file("src/mist/internal/file.gleam", 15).
?DOC(false).
-spec error_to_string(file_error()) -> binary().
error_to_string(Error) ->
case Error of
is_dir ->
<<"IsDir"/utf8>>;
no_access ->
<<"NoAccess"/utf8>>;
no_entry ->
<<"NoEntry"/utf8>>;
unknown_file_error ->
<<"UnknownFileError"/utf8>>
end.
-file("src/mist/internal/file.gleam", 42).
?DOC(false).
-spec sendfile(
glisten@transport:transport(),
file_descriptor(),
glisten@socket:socket(),
integer(),
integer(),
list(any())
) -> {ok, nil} | {error, send_error()}.
sendfile(Transport, File_descriptor, Socket, Offset, Bytes, Options) ->
case Transport of
tcp ->
_pipe = file:sendfile(
File_descriptor,
Socket,
Offset,
Bytes,
Options
),
_pipe@1 = gleam@result:map_error(
_pipe,
fun(Field@0) -> {socket_err, Field@0} end
),
gleam@result:replace(_pipe@1, nil);
ssl = Transport@1 ->
_pipe@2 = file:pread(File_descriptor, Offset, Bytes),
_pipe@3 = gleam@result:map_error(
_pipe@2,
fun(Field@0) -> {file_err, Field@0} end
),
gleam@result:'try'(
_pipe@3,
fun(Bits) ->
_pipe@4 = glisten@transport:send(
Transport@1,
Socket,
gleam@bytes_tree:from_bit_array(Bits)
),
gleam@result:map_error(
_pipe@4,
fun(Field@0) -> {socket_err, Field@0} end
)
end
)
end.
-file("src/mist/internal/file.gleam", 84).
?DOC(false).
-spec open(bitstring()) -> {ok, file_descriptor()} | {error, file_error()}.
open(File) ->
mist_ffi:file_open(File).
-file("src/mist/internal/file.gleam", 33).
?DOC(false).
-spec stat(bitstring()) -> {ok, file()} | {error, file_error()}.
stat(Filename) ->
_pipe = Filename,
_pipe@1 = mist_ffi:file_open(_pipe),
gleam@result:map(
_pipe@1,
fun(Fd) ->
File_size = filelib:file_size(Filename),
{file, Fd, File_size}
end
).
-file("src/mist/internal/file.gleam", 90).
?DOC(false).
-spec close(file_descriptor()) -> {ok, nil} | {error, file_error()}.
close(File) ->
mist_ffi:file_close(File).