From 781ded573a8d8ecd36ab8c277d53f654b233e0ce Mon Sep 17 00:00:00 2001 From: Alex Orlenko Date: Sun, 19 Mar 2023 02:38:21 +0000 Subject: [PATCH] Seal LuaSerdeExt/TableExt/AnyUserDataExt --- src/lib.rs | 3 +++ src/serde/mod.rs | 3 ++- src/table.rs | 3 ++- src/userdata_ext.rs | 3 ++- 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index f3a12e4..c574f4a 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -240,4 +240,7 @@ pub(crate) mod private { impl Sealed for Error {} impl Sealed for std::result::Result {} + impl Sealed for Lua {} + impl Sealed for Table<'_> {} + impl Sealed for AnyUserData<'_> {} } diff --git a/src/serde/mod.rs b/src/serde/mod.rs index d0040f1..fefa44b 100644 --- a/src/serde/mod.rs +++ b/src/serde/mod.rs @@ -8,6 +8,7 @@ use serde::{Deserialize, Serialize}; use crate::error::Result; use crate::ffi; use crate::lua::Lua; +use crate::private::Sealed; use crate::table::Table; use crate::types::LightUserData; use crate::util::check_stack; @@ -15,7 +16,7 @@ use crate::value::Value; /// Trait for serializing/deserializing Lua values using Serde. #[cfg_attr(docsrs, doc(cfg(feature = "serialize")))] -pub trait LuaSerdeExt<'lua> { +pub trait LuaSerdeExt<'lua>: Sealed { /// A special value (lightuserdata) to encode/decode optional (none) values. /// /// Requires `feature = "serialize"` diff --git a/src/table.rs b/src/table.rs index 3da613c..6aab63f 100644 --- a/src/table.rs +++ b/src/table.rs @@ -11,6 +11,7 @@ use { use crate::error::{Error, Result}; use crate::ffi; use crate::function::Function; +use crate::private::Sealed; use crate::types::{Integer, LuaRef}; use crate::util::{assert_stack, check_stack, StackGuard}; use crate::value::{FromLua, FromLuaMulti, IntoLua, IntoLuaMulti, Nil, Value}; @@ -753,7 +754,7 @@ impl<'lua> AsRef> for Table<'lua> { } /// An extension trait for `Table`s that provides a variety of convenient functionality. -pub trait TableExt<'lua> { +pub trait TableExt<'lua>: Sealed { /// Calls the table as function assuming it has `__call` metamethod. /// /// The metamethod is called with the table as its first argument, followed by the passed arguments. diff --git a/src/userdata_ext.rs b/src/userdata_ext.rs index 26b2bc8..576b5f5 100644 --- a/src/userdata_ext.rs +++ b/src/userdata_ext.rs @@ -1,4 +1,5 @@ use crate::error::{Error, Result}; +use crate::private::Sealed; use crate::userdata::{AnyUserData, MetaMethod}; use crate::value::{FromLua, FromLuaMulti, IntoLua, IntoLuaMulti, Value}; @@ -6,7 +7,7 @@ use crate::value::{FromLua, FromLuaMulti, IntoLua, IntoLuaMulti, Value}; use {futures_core::future::LocalBoxFuture, futures_util::future}; /// An extension trait for [`AnyUserData`] that provides a variety of convenient functionality. -pub trait AnyUserDataExt<'lua> { +pub trait AnyUserDataExt<'lua>: Sealed { /// Gets the value associated to `key` from the userdata, assuming it has `__index` metamethod. fn get, V: FromLua<'lua>>(&self, key: K) -> Result;