-module(gleam@erlang). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]). -export([format/1, term_to_binary/1, get_line/1, system_time/1, erlang_timestamp/0, rescue/1, binary_to_term/1, unsafe_binary_to_term/1, start_arguments/0, ensure_all_started/1, make_reference/0, reference_from_dynamic/1, priv_directory/1, bounded_phash2/2, phash2/1]). -export_type([safe/0, get_line_error/0, time_unit/0, crash/0, ensure_all_started_error/0, reference_/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. -type safe() :: safe. -type get_line_error() :: eof | no_data. -type time_unit() :: second | millisecond | microsecond | nanosecond. -type crash() :: {exited, gleam@dynamic:dynamic_()} | {thrown, gleam@dynamic:dynamic_()} | {errored, gleam@dynamic:dynamic_()}. -type ensure_all_started_error() :: {unknown_application, gleam@erlang@atom:atom_()} | {application_failed_to_start, gleam@erlang@atom:atom_(), gleam@dynamic:dynamic_()}. -type reference_() :: any(). -file("/Users/louis/src/gleam/erlang/src/gleam/erlang.gleam", 18). ?DOC( " Return a string representation of any term\n" "\n" " # Example\n" "\n" " ```gleam\n" " erlang.format(input)\n" " // -> {ok,<<\"Gleam\\n\">>}%\n" " ```\n" ). -spec format(any()) -> binary(). format(Term) -> unicode:characters_to_binary(io_lib:format(<<"~p"/utf8>>, [Term])). -file("/Users/louis/src/gleam/erlang/src/gleam/erlang.gleam", 28). ?DOC( " Returns a `BitArray` representing given value as an [Erlang external term][1].\n" "\n" " \n" "\n" " [1]: https://www.erlang.org/doc/apps/erts/erl_ext_dist\n" ). -spec term_to_binary(any()) -> bitstring(). term_to_binary(A) -> erlang:term_to_binary(A). -file("/Users/louis/src/gleam/erlang/src/gleam/erlang.gleam", 81). ?DOC( " Reads a line from standard input with the given prompt.\n" "\n" " # Example\n" "\n" " ```gleam\n" " get_line(\"Language: \")\n" " // > Language: <- Gleam\n" " // -> Ok(\"Gleam\\n\")\n" " ```\n" ). -spec get_line(binary()) -> {ok, binary()} | {error, get_line_error()}. get_line(Prompt) -> gleam_erlang_ffi:get_line(Prompt). -file("/Users/louis/src/gleam/erlang/src/gleam/erlang.gleam", 94). ?DOC( " Returns the current OS system time.\n" "\n" " \n" ). -spec system_time(time_unit()) -> integer(). system_time(A) -> os:system_time(A). -file("/Users/louis/src/gleam/erlang/src/gleam/erlang.gleam", 100). ?DOC( " Returns the current OS system time as a tuple of Ints\n" "\n" " \n" ). -spec erlang_timestamp() -> {integer(), integer(), integer()}. erlang_timestamp() -> os:timestamp(). -file("/Users/louis/src/gleam/erlang/src/gleam/erlang.gleam", 110). ?DOC( " Gleam doesn't offer any way to raise exceptions, but they may still occur\n" " due to bugs when working with unsafe code, such as when calling Erlang\n" " function.\n" "\n" " This function will catch any error thrown and convert it into a result\n" " rather than crashing the process.\n" ). -spec rescue(fun(() -> EZC)) -> {ok, EZC} | {error, crash()}. rescue(A) -> gleam_erlang_ffi:rescue(A). -file("/Users/louis/src/gleam/erlang/src/gleam/erlang.gleam", 42). ?DOC( " Decodes a value from a `BitArray` representing an [Erlang external term][1].\n" "\n" " \n" "\n" " [1]: https://www.erlang.org/doc/apps/erts/erl_ext_dist\n" ). -spec binary_to_term(bitstring()) -> {ok, gleam@dynamic:dynamic_()} | {error, nil}. binary_to_term(Binary) -> case gleam_erlang_ffi:rescue( fun() -> erlang:binary_to_term(Binary, [safe]) end ) of {ok, Term} -> {ok, Term}; {error, _} -> {error, nil} end. -file("/Users/louis/src/gleam/erlang/src/gleam/erlang.gleam", 57). ?DOC( " Decodes a value from a trusted `BitArray` representing an\n" " [Erlang external term][1].\n" "\n" " *Warning*: Do not use this function with untrusted input, this can lead to\n" " Denial-of-Service. More information in the [Erlang documentation][2].\n" "\n" " [1]: https://www.erlang.org/doc/apps/erts/erl_ext_dist\n" " [2]: https://www.erlang.org/doc/apps/erts/erlang.html#binary_to_term/1\n" ). -spec unsafe_binary_to_term(bitstring()) -> {ok, gleam@dynamic:dynamic_()} | {error, nil}. unsafe_binary_to_term(Binary) -> case gleam_erlang_ffi:rescue(fun() -> erlang:binary_to_term(Binary, []) end) of {ok, Term} -> {ok, Term}; {error, _} -> {error, nil} end. -file("/Users/louis/src/gleam/erlang/src/gleam/erlang.gleam", 125). ?DOC( " Get the arguments given to the program when it was started.\n" "\n" " This is sometimes called `argv` in other languages.\n" ). -spec start_arguments() -> list(binary()). start_arguments() -> _pipe = init:get_plain_arguments(), gleam@list:map(_pipe, fun unicode:characters_to_binary/1). -file("/Users/louis/src/gleam/erlang/src/gleam/erlang.gleam", 148). ?DOC( " Starts an OTP application's process tree in the background, as well as\n" " the trees of any applications that the given application depends upon. An\n" " OTP application typically maps onto a Gleam or Hex package.\n" "\n" " Returns a list of the applications that were started. Calling this function\n" " for application that have already been started is a no-op so you do not need\n" " to check the application state beforehand.\n" "\n" " In Gleam we prefer to not use these implicit background process trees, but\n" " you will likely still need to start the trees of OTP applications written in\n" " other BEAM languages such as Erlang or Elixir, including those included by\n" " default with Erlang/OTP.\n" "\n" " For more information see the OTP documentation.\n" " - \n" " - \n" ). -spec ensure_all_started(gleam@erlang@atom:atom_()) -> {ok, list(gleam@erlang@atom:atom_())} | {error, ensure_all_started_error()}. ensure_all_started(Application) -> gleam_erlang_ffi:ensure_all_started(Application). -file("/Users/louis/src/gleam/erlang/src/gleam/erlang.gleam", 171). ?DOC(" Create a new unique reference.\n"). -spec make_reference() -> reference_(). make_reference() -> erlang:make_ref(). -file("/Users/louis/src/gleam/erlang/src/gleam/erlang.gleam", 192). ?DOC( " Checks to see whether a `Dynamic` value is a Reference, and return the Reference if\n" " it is.\n" "\n" " ## Examples\n" "\n" " ```gleam\n" " import gleam/dynamic\n" "\n" " reference_from_dynamic(dynamic.from(make_reference()))\n" " // -> Ok(Reference)\n" " ```\n" "\n" " ```gleam\n" " import gleam/dynamic\n" "\n" " reference_from_dynamic(dynamic.from(123))\n" " // -> Error([DecodeError(expected: \"Reference\", found: \"Int\", path: [])])\n" " ```\n" ). -spec reference_from_dynamic(gleam@dynamic:dynamic_()) -> {ok, reference_()} | {error, list(gleam@dynamic@decode:decode_error())}. reference_from_dynamic(From) -> gleam_erlang_ffi:reference_from_dynamic(From). -file("/Users/louis/src/gleam/erlang/src/gleam/erlang.gleam", 209). ?DOC( " Returns the path of a package's `priv` directory, where extra non-Gleam\n" " or Erlang files are typically kept.\n" "\n" " Returns an error if no package was found with the given name.\n" "\n" " # Example\n" "\n" " ```gleam\n" " erlang.priv_directory(\"my_app\")\n" " // -> Ok(\"/some/location/my_app/priv\")\n" " ```\n" ). -spec priv_directory(binary()) -> {ok, binary()} | {error, nil}. priv_directory(Name) -> gleam_erlang_ffi:priv_directory(Name). -file("/Users/louis/src/gleam/erlang/src/gleam/erlang.gleam", 220). ?DOC( " Portable hash function that gives the same hash for the\n" " same Gleam/Erlang term regardless of machine architecture and\n" " ERTS version.\n" "\n" " The function returns a hash value for Term within the range 0..limit-1.\n" " The maximum value for limit is 2^32.\n" "\n" " \n" ). -spec bounded_phash2(any(), integer()) -> integer(). bounded_phash2(Term, Limit) -> erlang:phash2(Term, Limit). -file("/Users/louis/src/gleam/erlang/src/gleam/erlang.gleam", 224). ?DOC(" Equivalent to `bounded_phash2`, with a upper limit of 2^27-1\n"). -spec phash2(any()) -> integer(). phash2(Term) -> erlang:phash2(Term).