From 6eba0586bfe636eb3227a3dafff2401d385bc462 Mon Sep 17 00:00:00 2001 From: DynamicCake <128557765+DynamicCake@users.noreply.github.com> Date: Sat, 7 Mar 2026 23:14:30 -1000 Subject: [PATCH] Make index and set_index take all `Value`s --- src/glua.gleam | 8 +++---- test/glua_test.gleam | 51 +++++++++++++++++++++++++++++++++----------- 2 files changed, 42 insertions(+), 17 deletions(-) diff --git a/src/glua.gleam b/src/glua.gleam index d9715a1..102038a 100644 --- a/src/glua.gleam +++ b/src/glua.gleam @@ -1201,7 +1201,7 @@ pub fn call_function_by_name( /// }) /// // -> Ok("fixed value") /// ``` -pub fn index(table ref: Value, key key: String) -> Action(Value, e) { +pub fn index(table ref: Value, key key: Value) -> Action(Value, e) { Action(do_index(_, ref, key)) } @@ -1209,7 +1209,7 @@ pub fn index(table ref: Value, key key: String) -> Action(Value, e) { fn do_index( state: Lua, ref: Value, - key: String, + key: Value, ) -> Result(#(Lua, Value), Error(e)) /// Sets `value` under `key` of the provided table. @@ -1237,7 +1237,7 @@ fn do_index( /// ``` pub fn new_index( table ref: Value, - key key: String, + key key: Value, value val: Value, ) -> Action(Nil, e) { Action(do_new_index(_, ref, key, val)) @@ -1247,6 +1247,6 @@ pub fn new_index( fn do_new_index( state: Lua, ref: Value, - key: String, + key: Value, val: Value, ) -> Result(#(Lua, Nil), Error(e)) diff --git a/test/glua_test.gleam b/test/glua_test.gleam index d4f7d80..5584e08 100644 --- a/test/glua_test.gleam +++ b/test/glua_test.gleam @@ -925,20 +925,28 @@ pub fn decode_function_test() { pub fn index_test() { let assert Ok(#(state, tbl)) = glua.exec(glua.new(), { - glua.table([#(glua.string("a_key"), glua.string("a value"))]) + glua.table([ + #(glua.string("a_key"), glua.string("a value")), + #(glua.int(4), glua.string("another value")), + ]) }) assert glua.run( state, - glua.index(tbl, "a_key") |> glua.returning(decode.string), + glua.index(tbl, glua.string("a_key")) |> glua.returning(decode.string), ) == Ok("a value") + assert glua.run( + state, + glua.index(tbl, glua.int(4)) |> glua.returning(decode.string), + ) + == Ok("another value") assert glua.run(state, { use tbl <- glua.then( glua.table([#(glua.string("a_key"), glua.string("a value"))]), ) - glua.index(tbl, "other_key") + glua.index(tbl, glua.string("other_key")) }) == Error(glua.KeyNotFound(["other_key"])) @@ -971,13 +979,22 @@ pub fn index_test() { glua.success(tbl) }) - assert glua.run(state, glua.index(tbl, "1") |> glua.returning(decode.string)) + assert glua.run( + state, + glua.index(tbl, glua.string("1")) |> glua.returning(decode.string), + ) == Ok("integer") - assert glua.run(state, glua.index(tbl, "a") |> glua.returning(decode.string)) + assert glua.run( + state, + glua.index(tbl, glua.string("a")) |> glua.returning(decode.string), + ) == Ok("other") - assert glua.run(state, glua.index(tbl, "2") |> glua.returning(decode.int)) + assert glua.run( + state, + glua.index(tbl, glua.string("2")) |> glua.returning(decode.int), + ) == Error( glua.UnexpectedResultType([decode.DecodeError("Int", "String", [])]), ) @@ -987,8 +1004,8 @@ pub fn new_index_test() { let assert Ok(#(state, tbl)) = glua.exec(glua.new(), { glua.table([]) }) assert glua.run(state, { - use _ <- glua.then(glua.new_index(tbl, "a_key", glua.int(1))) - glua.index(tbl, "a_key") |> glua.returning(decode.int) + use _ <- glua.then(glua.new_index(tbl, glua.string("a_key"), glua.int(1))) + glua.index(tbl, glua.string("a_key")) |> glua.returning(decode.int) }) == Ok(1) @@ -1018,14 +1035,18 @@ pub fn new_index_test() { }) assert glua.run(state, { - use _ <- glua.then(glua.new_index(tbl, "a_key", glua.int(6))) - glua.index(tbl, "a_key") |> glua.returning(decode.int) + use _ <- glua.then(glua.new_index(tbl, glua.string("a_key"), glua.int(6))) + glua.index(tbl, glua.string("a_key")) |> glua.returning(decode.int) }) == Ok(36) assert glua.run(state, { - use _ <- glua.then(glua.new_index(tbl, "other_key", glua.int(7))) - glua.index(tbl, "other_key") |> glua.returning(decode.int) + use _ <- glua.then(glua.new_index( + tbl, + glua.string("other_key"), + glua.int(7), + )) + glua.index(tbl, glua.string("other_key")) |> glua.returning(decode.int) }) == Ok(49) @@ -1050,5 +1071,9 @@ pub fn new_index_test() { let assert Error(glua.LuaRuntimeException( exception: glua.ErrorCall(message: "read-only table", level: _), state: _, - )) = glua.run(state, glua.new_index(tbl, "my_key", glua.string("my value"))) + )) = + glua.run( + state, + glua.new_index(tbl, glua.string("my_key"), glua.string("my value")), + ) }