-module(gleam@dynamic).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/gleam/dynamic.gleam").
-export([classify/1, bool/1, string/1, float/1, int/1, bit_array/1, list/1, array/1, properties/1, nil/0]).
-export_type([dynamic_/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 dynamic_() :: any().

-file("src/gleam/dynamic.gleam", 30).
?DOC(
    " Return a string indicating the type of the dynamic value.\n"
    "\n"
    " This function may be useful for constructing error messages or logs. If you\n"
    " want to turn dynamic data into well typed data then you want the\n"
    " `gleam/dynamic/decode` module.\n"
    "\n"
    " ```gleam\n"
    " classify(string(\"Hello\"))\n"
    " // -> \"String\"\n"
    " ```\n"
).
-spec classify(dynamic_()) -> binary().
classify(Data) ->
    gleam_stdlib:classify_dynamic(Data).

-file("src/gleam/dynamic.gleam", 36).
?DOC(" Create a dynamic value from a bool.\n").
-spec bool(boolean()) -> dynamic_().
bool(A) ->
    gleam_stdlib:identity(A).

-file("src/gleam/dynamic.gleam", 44).
?DOC(
    " Create a dynamic value from a string.\n"
    "\n"
    " On Erlang this will be a binary string rather than a character list.\n"
).
-spec string(binary()) -> dynamic_().
string(A) ->
    gleam_stdlib:identity(A).

-file("src/gleam/dynamic.gleam", 50).
?DOC(" Create a dynamic value from a float.\n").
-spec float(float()) -> dynamic_().
float(A) ->
    gleam_stdlib:identity(A).

-file("src/gleam/dynamic.gleam", 56).
?DOC(" Create a dynamic value from an int.\n").
-spec int(integer()) -> dynamic_().
int(A) ->
    gleam_stdlib:identity(A).

-file("src/gleam/dynamic.gleam", 62).
?DOC(" Create a dynamic value from a bit array.\n").
-spec bit_array(bitstring()) -> dynamic_().
bit_array(A) ->
    gleam_stdlib:identity(A).

-file("src/gleam/dynamic.gleam", 68).
?DOC(" Create a dynamic value from a list.\n").
-spec list(list(dynamic_())) -> dynamic_().
list(A) ->
    gleam_stdlib:identity(A).

-file("src/gleam/dynamic.gleam", 77).
?DOC(
    " Create a dynamic value from a list, converting it to a sequential runtime\n"
    " format rather than the regular list format.\n"
    "\n"
    " On Erlang this will be a tuple, on JavaScript this will be an array.\n"
).
-spec array(list(dynamic_())) -> dynamic_().
array(A) ->
    erlang:list_to_tuple(A).

-file("src/gleam/dynamic.gleam", 85).
?DOC(
    " Create a dynamic value made an unordered series of keys and values, where\n"
    " the keys are unique.\n"
    "\n"
    " On Erlang this will be a map, on JavaScript this will be a Gleam dict\n"
    " object.\n"
).
-spec properties(list({dynamic_(), dynamic_()})) -> dynamic_().
properties(Entries) ->
    gleam_stdlib:identity(maps:from_list(Entries)).

-file("src/gleam/dynamic.gleam", 94).
?DOC(
    " A dynamic value representing nothing.\n"
    "\n"
    " On Erlang this will be the atom `nil`, on JavaScript this will be\n"
    " `undefined`.\n"
).
-spec nil() -> dynamic_().
nil() ->
    gleam_stdlib:identity(nil).
