From 83c075c72bd07747f0ad59a448ae8a4a58d9e402 Mon Sep 17 00:00:00 2001 From: Alex Orlenko Date: Thu, 29 Feb 2024 22:45:23 +0000 Subject: [PATCH] Implement `IntoLua` for `RegistryKey` --- src/conversion.rs | 12 ++++++++++++ tests/conversion.rs | 20 ++++++++++++++------ 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/src/conversion.rs b/src/conversion.rs index 47c1ce0..dc076f9 100644 --- a/src/conversion.rs +++ b/src/conversion.rs @@ -421,6 +421,18 @@ impl<'lua> FromLua<'lua> for Error { } } +impl<'lua> IntoLua<'lua> for RegistryKey { + #[inline] + fn into_lua(self, lua: &'lua Lua) -> Result> { + lua.registry_value(&self) + } + + #[inline] + unsafe fn push_into_stack(self, lua: &'lua Lua) -> Result<()> { + <&RegistryKey>::push_into_stack(&self, lua) + } +} + impl<'lua> IntoLua<'lua> for &RegistryKey { #[inline] fn into_lua(self, lua: &'lua Lua) -> Result> { diff --git a/tests/conversion.rs b/tests/conversion.rs index 6854eff..a312f11 100644 --- a/tests/conversion.rs +++ b/tests/conversion.rs @@ -232,14 +232,22 @@ fn test_owned_anyuserdata_into_lua() -> Result<()> { fn test_registry_value_into_lua() -> Result<()> { let lua = Lua::new(); - let t = lua.create_table()?; - let r = lua.create_registry_value(t)?; - let f = lua.create_function(|_, t: Table| t.raw_set("hello", "world"))?; + // Direct conversion + let s = lua.create_string("hello, world")?; + let r = lua.create_registry_value(&s)?; + let value1 = lua.pack(&r)?; + let value2 = lua.pack(r)?; + assert_eq!(value1.as_str(), Some("hello, world")); + assert_eq!(value2.to_pointer(), value2.to_pointer()); - f.call(&r)?; - let v = r.into_lua(&lua)?; - let t = v.as_table().unwrap(); + // Push into stack + let t = lua.create_table()?; + let r = lua.create_registry_value(&t)?; + let f = lua.create_function(|_, (t, k, v): (Table, Value, Value)| t.set(k, v))?; + f.call((&r, "hello", "world"))?; + f.call((r, "welcome", "to the jungle"))?; assert_eq!(t.get::<_, String>("hello")?, "world"); + assert_eq!(t.get::<_, String>("welcome")?, "to the jungle"); // Try to set nil registry key let r_nil = lua.create_registry_value(Value::Nil)?;