aboutsummaryrefslogtreecommitdiff
path: root/gen
diff options
context:
space:
mode:
Diffstat (limited to 'gen')
-rw-r--r--gen/src/gleam@dynamic.erl5
-rw-r--r--gen/test/gleam@dynamic_test.erl28
2 files changed, 31 insertions, 2 deletions
diff --git a/gen/src/gleam@dynamic.erl b/gen/src/gleam@dynamic.erl
index e20db87..09a442b 100644
--- a/gen/src/gleam@dynamic.erl
+++ b/gen/src/gleam@dynamic.erl
@@ -1,7 +1,7 @@
-module(gleam@dynamic).
-compile(no_auto_import).
--export([from/1, unsafe_coerce/1, string/1, int/1, float/1, atom/1, bool/1, thunk/1, list/2, field/2]).
+-export([from/1, unsafe_coerce/1, string/1, int/1, float/1, atom/1, bool/1, thunk/1, list/2, field/2, element/2]).
from(A) ->
gleam_stdlib:identity(A).
@@ -38,3 +38,6 @@ list(Dynamic, DecoderType) ->
field(A, B) ->
gleam_stdlib:decode_field(A, B).
+
+element(A, B) ->
+ gleam_stdlib:decode_element(A, B).
diff --git a/gen/test/gleam@dynamic_test.erl b/gen/test/gleam@dynamic_test.erl
index d233dbc..ec559b5 100644
--- a/gen/test/gleam@dynamic_test.erl
+++ b/gen/test/gleam@dynamic_test.erl
@@ -1,7 +1,7 @@
-module(gleam@dynamic_test).
-compile(no_auto_import).
--export([string_test/0, int_test/0, float_test/0, thunk_test/0, bool_test/0, atom_test/0, list_test/0, field_test/0]).
+-export([string_test/0, int_test/0, float_test/0, thunk_test/0, bool_test/0, atom_test/0, list_test/0, field_test/0, element_test/0]).
string_test() ->
gleam@expect:equal(
@@ -168,3 +168,29 @@ field_test() ->
),
gleam@expect:is_error(gleam@dynamic:field(gleam@dynamic:from(1), OkAtom)),
gleam@expect:is_error(gleam@dynamic:field(gleam@dynamic:from([]), [])).
+
+element_test() ->
+ {ok, OkAtom} = gleam@atom:from_string(<<"ok">>),
+ {ok, ErrorAtom} = gleam@atom:from_string(<<"ok">>),
+ OkOneStruct = {OkAtom, 1},
+ gleam@expect:equal(
+ gleam@dynamic:element(gleam@dynamic:from(OkOneStruct), 0),
+ {ok, gleam@dynamic:from(OkAtom)}
+ ),
+ gleam@expect:equal(
+ gleam@dynamic:element(gleam@dynamic:from(OkOneStruct), 1),
+ {ok, gleam@dynamic:from(1)}
+ ),
+ gleam@expect:is_error(
+ gleam@dynamic:element(gleam@dynamic:from(OkOneStruct), 2)
+ ),
+ gleam@expect:is_error(
+ gleam@dynamic:element(gleam@dynamic:from(OkOneStruct), -1)
+ ),
+ gleam@expect:is_error(gleam@dynamic:element(gleam@dynamic:from(1), 0)),
+ gleam@expect:is_error(
+ gleam@dynamic:element(
+ gleam@dynamic:from(gleam@map:insert(gleam@map:new(), 1, OkAtom)),
+ 0
+ )
+ ).