diff --git a/src/serde/mod.rs b/src/serde/mod.rs index 8b83c21..877b889 100644 --- a/src/serde/mod.rs +++ b/src/serde/mod.rs @@ -2,7 +2,7 @@ use std::os::raw::c_void; -use serde::{Deserialize, Serialize}; +use serde::{de::DeserializeOwned, ser::Serialize}; use crate::error::Result; use crate::lua::Lua; @@ -13,7 +13,7 @@ use crate::value::Value; /// Trait for serializing/deserializing Lua values using Serde. #[cfg_attr(docsrs, doc(cfg(feature = "serialize")))] -pub trait LuaSerdeExt<'lua>: Sealed { +pub trait LuaSerdeExt: Sealed { /// A special value (lightuserdata) to encode/decode optional (none) values. /// /// Requires `feature = "serialize"` @@ -35,7 +35,7 @@ pub trait LuaSerdeExt<'lua>: Sealed { /// Ok(()) /// } /// ``` - fn null(&'lua self) -> Value<'lua>; + fn null(&self) -> Value; /// A metatable attachable to a Lua table to systematically encode it as Array (instead of Map). /// As result, encoded Array will contain only sequence part of the table, with the same length @@ -66,7 +66,7 @@ pub trait LuaSerdeExt<'lua>: Sealed { /// Ok(()) /// } /// ``` - fn array_metatable(&'lua self) -> Table<'lua>; + fn array_metatable(&self) -> Table; /// Converts `T` into a [`Value`] instance. /// @@ -99,7 +99,7 @@ pub trait LuaSerdeExt<'lua>: Sealed { /// "#).exec() /// } /// ``` - fn to_value(&'lua self, t: &T) -> Result>; + fn to_value<'lua, T: Serialize + ?Sized>(&'lua self, t: &T) -> Result>; /// Converts `T` into a [`Value`] instance with options. /// @@ -124,7 +124,7 @@ pub trait LuaSerdeExt<'lua>: Sealed { /// "#).exec() /// } /// ``` - fn to_value_with(&'lua self, t: &T, options: ser::Options) -> Result> + fn to_value_with<'lua, T>(&'lua self, t: &T, options: ser::Options) -> Result> where T: Serialize + ?Sized; @@ -157,7 +157,7 @@ pub trait LuaSerdeExt<'lua>: Sealed { /// } /// ``` #[allow(clippy::wrong_self_convention)] - fn from_value>(&'lua self, value: Value<'lua>) -> Result; + fn from_value(&self, value: Value) -> Result; /// Deserializes a [`Value`] into any serde deserializable object with options. /// @@ -189,49 +189,46 @@ pub trait LuaSerdeExt<'lua>: Sealed { /// } /// ``` #[allow(clippy::wrong_self_convention)] - fn from_value_with>( - &'lua self, - value: Value<'lua>, - options: de::Options, - ) -> Result; + fn from_value_with(&self, value: Value, options: de::Options) + -> Result; } -impl<'lua> LuaSerdeExt<'lua> for Lua { - fn null(&'lua self) -> Value<'lua> { +impl LuaSerdeExt for Lua { + fn null(&self) -> Value { Value::NULL } - fn array_metatable(&'lua self) -> Table<'lua> { + fn array_metatable(&self) -> Table { unsafe { push_array_metatable(self.ref_thread()); Table(self.pop_ref_thread()) } } - fn to_value(&'lua self, t: &T) -> Result> + fn to_value<'lua, T>(&'lua self, t: &T) -> Result> where T: Serialize + ?Sized, { t.serialize(ser::Serializer::new(self)) } - fn to_value_with(&'lua self, t: &T, options: ser::Options) -> Result> + fn to_value_with<'lua, T>(&'lua self, t: &T, options: ser::Options) -> Result> where T: Serialize + ?Sized, { t.serialize(ser::Serializer::new_with_options(self, options)) } - fn from_value(&'lua self, value: Value<'lua>) -> Result + fn from_value(&self, value: Value) -> Result where - T: Deserialize<'lua>, + T: DeserializeOwned, { T::deserialize(de::Deserializer::new(value)) } - fn from_value_with(&'lua self, value: Value<'lua>, options: de::Options) -> Result + fn from_value_with(&self, value: Value, options: de::Options) -> Result where - T: Deserialize<'lua>, + T: DeserializeOwned, { T::deserialize(de::Deserializer::new_with_options(value, options)) }