Current section

Files

Jump to
gleam_erlang src gleam@erlang@atom.erl
Raw

src/gleam@erlang@atom.erl

-module(gleam@erlang@atom).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([from_string/1, create_from_string/1, to_string/1, from_dynamic/1]).
-export_type([atom_/0, from_string_error/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 atom_() :: any().
-type from_string_error() :: atom_not_loaded.
-file("/Users/louis/src/gleam/erlang/src/gleam/erlang/atom.gleam", 43).
?DOC(
" Finds an existing Atom for the given String.\n"
"\n"
" If no atom is found in the virtual machine's atom table for the String then\n"
" an error is returned.\n"
"\n"
" ## Examples\n"
" ```gleam\n"
" from_string(\"ok\")\n"
" // -> Ok(create_from_string(\"ok\"))\n"
" ```\n"
" ```gleam\n"
" from_string(\"some_new_atom\")\n"
" // -> Error(AtomNotLoaded)\n"
" ```\n"
).
-spec from_string(binary()) -> {ok, atom_()} | {error, from_string_error()}.
from_string(A) ->
gleam_erlang_ffi:atom_from_string(A).
-file("/Users/louis/src/gleam/erlang/src/gleam/erlang/atom.gleam", 55).
?DOC(
" Creates an atom from a string, inserting a new value into the virtual\n"
" machine's atom table if an atom does not already exist for the given\n"
" string.\n"
"\n"
" We must be careful when using this function as there is a limit to the\n"
" number of atom that can fit in the virtual machine's atom table. Never\n"
" convert user input into atoms as filling the atom table will cause the\n"
" virtual machine to crash!\n"
).
-spec create_from_string(binary()) -> atom_().
create_from_string(A) ->
erlang:binary_to_atom(A).
-file("/Users/louis/src/gleam/erlang/src/gleam/erlang/atom.gleam", 68).
?DOC(
" Returns a `String` corresponding to the text representation of the given\n"
" `Atom`.\n"
"\n"
" ## Examples\n"
" ```gleam\n"
" let ok_atom = create_from_string(\"ok\")\n"
" to_string(ok_atom)\n"
" // -> \"ok\"\n"
" ```\n"
).
-spec to_string(atom_()) -> binary().
to_string(A) ->
erlang:atom_to_binary(A).
-file("/Users/louis/src/gleam/erlang/src/gleam/erlang/atom.gleam", 85).
?DOC(
" Checks to see whether a `Dynamic` value is an atom, and return the atom if\n"
" it is.\n"
"\n"
" ## Examples\n"
" ```gleam\n"
" import gleam/dynamic\n"
" from_dynamic(dynamic.from(create_from_string(\"hello\")))\n"
" // -> Ok(create_from_string(\"hello\"))\n"
" ```\n"
" ```gleam\n"
" from_dynamic(dynamic.from(123))\n"
" // -> Error([DecodeError(expected: \"Atom\", found: \"Int\", path: [])])\n"
" ```\n"
).
-spec from_dynamic(gleam@dynamic:dynamic_()) -> {ok, atom_()} |
{error, list(gleam@dynamic@decode:decode_error())}.
from_dynamic(From) ->
gleam_erlang_ffi:atom_from_dynamic(From).