More inline attributes

This commit is contained in:
Alex Orlenko 2022-05-29 20:17:09 +01:00
parent 799b4e9f0d
commit 99becdb590
No known key found for this signature in database
GPG Key ID: 4C150C250863B96D
2 changed files with 41 additions and 1 deletions

View File

@ -250,18 +250,21 @@ impl<'lua> ToLua<'lua> for &str {
} }
impl<'lua> ToLua<'lua> for Cow<'_, str> { impl<'lua> ToLua<'lua> for Cow<'_, str> {
#[inline]
fn to_lua(self, lua: &'lua Lua) -> Result<Value<'lua>> { fn to_lua(self, lua: &'lua Lua) -> Result<Value<'lua>> {
Ok(Value::String(lua.create_string(self.as_bytes())?)) Ok(Value::String(lua.create_string(self.as_bytes())?))
} }
} }
impl<'lua> ToLua<'lua> for Box<str> { impl<'lua> ToLua<'lua> for Box<str> {
#[inline]
fn to_lua(self, lua: &'lua Lua) -> Result<Value<'lua>> { fn to_lua(self, lua: &'lua Lua) -> Result<Value<'lua>> {
Ok(Value::String(lua.create_string(&*self)?)) Ok(Value::String(lua.create_string(&*self)?))
} }
} }
impl<'lua> FromLua<'lua> for Box<str> { impl<'lua> FromLua<'lua> for Box<str> {
#[inline]
fn from_lua(value: Value<'lua>, lua: &'lua Lua) -> Result<Self> { fn from_lua(value: Value<'lua>, lua: &'lua Lua) -> Result<Self> {
let ty = value.type_name(); let ty = value.type_name();
Ok(lua Ok(lua
@ -278,12 +281,14 @@ impl<'lua> FromLua<'lua> for Box<str> {
} }
impl<'lua> ToLua<'lua> for CString { impl<'lua> ToLua<'lua> for CString {
#[inline]
fn to_lua(self, lua: &'lua Lua) -> Result<Value<'lua>> { fn to_lua(self, lua: &'lua Lua) -> Result<Value<'lua>> {
Ok(Value::String(lua.create_string(self.as_bytes())?)) Ok(Value::String(lua.create_string(self.as_bytes())?))
} }
} }
impl<'lua> FromLua<'lua> for CString { impl<'lua> FromLua<'lua> for CString {
#[inline]
fn from_lua(value: Value<'lua>, lua: &'lua Lua) -> Result<Self> { fn from_lua(value: Value<'lua>, lua: &'lua Lua) -> Result<Self> {
let ty = value.type_name(); let ty = value.type_name();
let string = lua let string = lua
@ -306,24 +311,28 @@ impl<'lua> FromLua<'lua> for CString {
} }
impl<'lua> ToLua<'lua> for &CStr { impl<'lua> ToLua<'lua> for &CStr {
#[inline]
fn to_lua(self, lua: &'lua Lua) -> Result<Value<'lua>> { fn to_lua(self, lua: &'lua Lua) -> Result<Value<'lua>> {
Ok(Value::String(lua.create_string(self.to_bytes())?)) Ok(Value::String(lua.create_string(self.to_bytes())?))
} }
} }
impl<'lua> ToLua<'lua> for Cow<'_, CStr> { impl<'lua> ToLua<'lua> for Cow<'_, CStr> {
#[inline]
fn to_lua(self, lua: &'lua Lua) -> Result<Value<'lua>> { fn to_lua(self, lua: &'lua Lua) -> Result<Value<'lua>> {
Ok(Value::String(lua.create_string(self.to_bytes())?)) Ok(Value::String(lua.create_string(self.to_bytes())?))
} }
} }
impl<'lua> ToLua<'lua> for BString { impl<'lua> ToLua<'lua> for BString {
#[inline]
fn to_lua(self, lua: &'lua Lua) -> Result<Value<'lua>> { fn to_lua(self, lua: &'lua Lua) -> Result<Value<'lua>> {
Ok(Value::String(lua.create_string(&self)?)) Ok(Value::String(lua.create_string(&self)?))
} }
} }
impl<'lua> FromLua<'lua> for BString { impl<'lua> FromLua<'lua> for BString {
#[inline]
fn from_lua(value: Value<'lua>, lua: &'lua Lua) -> Result<Self> { fn from_lua(value: Value<'lua>, lua: &'lua Lua) -> Result<Self> {
let ty = value.type_name(); let ty = value.type_name();
Ok(BString::from( Ok(BString::from(
@ -340,14 +349,16 @@ impl<'lua> FromLua<'lua> for BString {
} }
impl<'lua> ToLua<'lua> for &BStr { impl<'lua> ToLua<'lua> for &BStr {
#[inline]
fn to_lua(self, lua: &'lua Lua) -> Result<Value<'lua>> { fn to_lua(self, lua: &'lua Lua) -> Result<Value<'lua>> {
Ok(Value::String(lua.create_string(&self)?)) Ok(Value::String(lua.create_string(self)?))
} }
} }
macro_rules! lua_convert_int { macro_rules! lua_convert_int {
($x:ty) => { ($x:ty) => {
impl<'lua> ToLua<'lua> for $x { impl<'lua> ToLua<'lua> for $x {
#[inline]
fn to_lua(self, _: &'lua Lua) -> Result<Value<'lua>> { fn to_lua(self, _: &'lua Lua) -> Result<Value<'lua>> {
cast(self) cast(self)
.map(Value::Integer) .map(Value::Integer)
@ -362,6 +373,7 @@ macro_rules! lua_convert_int {
} }
impl<'lua> FromLua<'lua> for $x { impl<'lua> FromLua<'lua> for $x {
#[inline]
fn from_lua(value: Value<'lua>, lua: &'lua Lua) -> Result<Self> { fn from_lua(value: Value<'lua>, lua: &'lua Lua) -> Result<Self> {
let ty = value.type_name(); let ty = value.type_name();
(if let Value::Integer(i) = value { (if let Value::Integer(i) = value {
@ -405,6 +417,7 @@ lua_convert_int!(usize);
macro_rules! lua_convert_float { macro_rules! lua_convert_float {
($x:ty) => { ($x:ty) => {
impl<'lua> ToLua<'lua> for $x { impl<'lua> ToLua<'lua> for $x {
#[inline]
fn to_lua(self, _: &'lua Lua) -> Result<Value<'lua>> { fn to_lua(self, _: &'lua Lua) -> Result<Value<'lua>> {
cast(self) cast(self)
.ok_or_else(|| Error::ToLuaConversionError { .ok_or_else(|| Error::ToLuaConversionError {
@ -417,6 +430,7 @@ macro_rules! lua_convert_float {
} }
impl<'lua> FromLua<'lua> for $x { impl<'lua> FromLua<'lua> for $x {
#[inline]
fn from_lua(value: Value<'lua>, lua: &'lua Lua) -> Result<Self> { fn from_lua(value: Value<'lua>, lua: &'lua Lua) -> Result<Self> {
let ty = value.type_name(); let ty = value.type_name();
lua.coerce_number(value)? lua.coerce_number(value)?
@ -444,6 +458,7 @@ impl<'lua, T> ToLua<'lua> for &[T]
where where
T: Clone + ToLua<'lua>, T: Clone + ToLua<'lua>,
{ {
#[inline]
fn to_lua(self, lua: &'lua Lua) -> Result<Value<'lua>> { fn to_lua(self, lua: &'lua Lua) -> Result<Value<'lua>> {
Ok(Value::Table( Ok(Value::Table(
lua.create_sequence_from(self.iter().cloned())?, lua.create_sequence_from(self.iter().cloned())?,
@ -455,6 +470,7 @@ impl<'lua, T, const N: usize> ToLua<'lua> for [T; N]
where where
T: ToLua<'lua>, T: ToLua<'lua>,
{ {
#[inline]
fn to_lua(self, lua: &'lua Lua) -> Result<Value<'lua>> { fn to_lua(self, lua: &'lua Lua) -> Result<Value<'lua>> {
Ok(Value::Table(lua.create_sequence_from(self)?)) Ok(Value::Table(lua.create_sequence_from(self)?))
} }
@ -464,6 +480,7 @@ impl<'lua, T, const N: usize> FromLua<'lua> for [T; N]
where where
T: FromLua<'lua>, T: FromLua<'lua>,
{ {
#[inline]
fn from_lua(value: Value<'lua>, _lua: &'lua Lua) -> Result<Self> { fn from_lua(value: Value<'lua>, _lua: &'lua Lua) -> Result<Self> {
match value { match value {
#[cfg(feature = "luau")] #[cfg(feature = "luau")]
@ -496,24 +513,28 @@ where
} }
impl<'lua, T: ToLua<'lua>> ToLua<'lua> for Box<[T]> { impl<'lua, T: ToLua<'lua>> ToLua<'lua> for Box<[T]> {
#[inline]
fn to_lua(self, lua: &'lua Lua) -> Result<Value<'lua>> { fn to_lua(self, lua: &'lua Lua) -> Result<Value<'lua>> {
Ok(Value::Table(lua.create_sequence_from(self.into_vec())?)) Ok(Value::Table(lua.create_sequence_from(self.into_vec())?))
} }
} }
impl<'lua, T: FromLua<'lua>> FromLua<'lua> for Box<[T]> { impl<'lua, T: FromLua<'lua>> FromLua<'lua> for Box<[T]> {
#[inline]
fn from_lua(value: Value<'lua>, lua: &'lua Lua) -> Result<Self> { fn from_lua(value: Value<'lua>, lua: &'lua Lua) -> Result<Self> {
Ok(Vec::<T>::from_lua(value, lua)?.into_boxed_slice()) Ok(Vec::<T>::from_lua(value, lua)?.into_boxed_slice())
} }
} }
impl<'lua, T: ToLua<'lua>> ToLua<'lua> for Vec<T> { impl<'lua, T: ToLua<'lua>> ToLua<'lua> for Vec<T> {
#[inline]
fn to_lua(self, lua: &'lua Lua) -> Result<Value<'lua>> { fn to_lua(self, lua: &'lua Lua) -> Result<Value<'lua>> {
Ok(Value::Table(lua.create_sequence_from(self)?)) Ok(Value::Table(lua.create_sequence_from(self)?))
} }
} }
impl<'lua, T: FromLua<'lua>> FromLua<'lua> for Vec<T> { impl<'lua, T: FromLua<'lua>> FromLua<'lua> for Vec<T> {
#[inline]
fn from_lua(value: Value<'lua>, _lua: &'lua Lua) -> Result<Self> { fn from_lua(value: Value<'lua>, _lua: &'lua Lua) -> Result<Self> {
match value { match value {
#[cfg(feature = "luau")] #[cfg(feature = "luau")]
@ -535,6 +556,7 @@ impl<'lua, T: FromLua<'lua>> FromLua<'lua> for Vec<T> {
impl<'lua, K: Eq + Hash + ToLua<'lua>, V: ToLua<'lua>, S: BuildHasher> ToLua<'lua> impl<'lua, K: Eq + Hash + ToLua<'lua>, V: ToLua<'lua>, S: BuildHasher> ToLua<'lua>
for HashMap<K, V, S> for HashMap<K, V, S>
{ {
#[inline]
fn to_lua(self, lua: &'lua Lua) -> Result<Value<'lua>> { fn to_lua(self, lua: &'lua Lua) -> Result<Value<'lua>> {
Ok(Value::Table(lua.create_table_from(self)?)) Ok(Value::Table(lua.create_table_from(self)?))
} }
@ -543,6 +565,7 @@ impl<'lua, K: Eq + Hash + ToLua<'lua>, V: ToLua<'lua>, S: BuildHasher> ToLua<'lu
impl<'lua, K: Eq + Hash + FromLua<'lua>, V: FromLua<'lua>, S: BuildHasher + Default> FromLua<'lua> impl<'lua, K: Eq + Hash + FromLua<'lua>, V: FromLua<'lua>, S: BuildHasher + Default> FromLua<'lua>
for HashMap<K, V, S> for HashMap<K, V, S>
{ {
#[inline]
fn from_lua(value: Value<'lua>, _: &'lua Lua) -> Result<Self> { fn from_lua(value: Value<'lua>, _: &'lua Lua) -> Result<Self> {
if let Value::Table(table) = value { if let Value::Table(table) = value {
table.pairs().collect() table.pairs().collect()
@ -557,12 +580,14 @@ impl<'lua, K: Eq + Hash + FromLua<'lua>, V: FromLua<'lua>, S: BuildHasher + Defa
} }
impl<'lua, K: Ord + ToLua<'lua>, V: ToLua<'lua>> ToLua<'lua> for BTreeMap<K, V> { impl<'lua, K: Ord + ToLua<'lua>, V: ToLua<'lua>> ToLua<'lua> for BTreeMap<K, V> {
#[inline]
fn to_lua(self, lua: &'lua Lua) -> Result<Value<'lua>> { fn to_lua(self, lua: &'lua Lua) -> Result<Value<'lua>> {
Ok(Value::Table(lua.create_table_from(self)?)) Ok(Value::Table(lua.create_table_from(self)?))
} }
} }
impl<'lua, K: Ord + FromLua<'lua>, V: FromLua<'lua>> FromLua<'lua> for BTreeMap<K, V> { impl<'lua, K: Ord + FromLua<'lua>, V: FromLua<'lua>> FromLua<'lua> for BTreeMap<K, V> {
#[inline]
fn from_lua(value: Value<'lua>, _: &'lua Lua) -> Result<Self> { fn from_lua(value: Value<'lua>, _: &'lua Lua) -> Result<Self> {
if let Value::Table(table) = value { if let Value::Table(table) = value {
table.pairs().collect() table.pairs().collect()
@ -577,6 +602,7 @@ impl<'lua, K: Ord + FromLua<'lua>, V: FromLua<'lua>> FromLua<'lua> for BTreeMap<
} }
impl<'lua, T: Eq + Hash + ToLua<'lua>, S: BuildHasher> ToLua<'lua> for HashSet<T, S> { impl<'lua, T: Eq + Hash + ToLua<'lua>, S: BuildHasher> ToLua<'lua> for HashSet<T, S> {
#[inline]
fn to_lua(self, lua: &'lua Lua) -> Result<Value<'lua>> { fn to_lua(self, lua: &'lua Lua) -> Result<Value<'lua>> {
Ok(Value::Table(lua.create_table_from( Ok(Value::Table(lua.create_table_from(
self.into_iter().map(|val| (val, true)), self.into_iter().map(|val| (val, true)),
@ -585,6 +611,7 @@ impl<'lua, T: Eq + Hash + ToLua<'lua>, S: BuildHasher> ToLua<'lua> for HashSet<T
} }
impl<'lua, T: Eq + Hash + FromLua<'lua>, S: BuildHasher + Default> FromLua<'lua> for HashSet<T, S> { impl<'lua, T: Eq + Hash + FromLua<'lua>, S: BuildHasher + Default> FromLua<'lua> for HashSet<T, S> {
#[inline]
fn from_lua(value: Value<'lua>, _: &'lua Lua) -> Result<Self> { fn from_lua(value: Value<'lua>, _: &'lua Lua) -> Result<Self> {
match value { match value {
Value::Table(table) if table.len()? > 0 => table.sequence_values().collect(), Value::Table(table) if table.len()? > 0 => table.sequence_values().collect(),
@ -602,6 +629,7 @@ impl<'lua, T: Eq + Hash + FromLua<'lua>, S: BuildHasher + Default> FromLua<'lua>
} }
impl<'lua, T: Ord + ToLua<'lua>> ToLua<'lua> for BTreeSet<T> { impl<'lua, T: Ord + ToLua<'lua>> ToLua<'lua> for BTreeSet<T> {
#[inline]
fn to_lua(self, lua: &'lua Lua) -> Result<Value<'lua>> { fn to_lua(self, lua: &'lua Lua) -> Result<Value<'lua>> {
Ok(Value::Table(lua.create_table_from( Ok(Value::Table(lua.create_table_from(
self.into_iter().map(|val| (val, true)), self.into_iter().map(|val| (val, true)),
@ -610,6 +638,7 @@ impl<'lua, T: Ord + ToLua<'lua>> ToLua<'lua> for BTreeSet<T> {
} }
impl<'lua, T: Ord + FromLua<'lua>> FromLua<'lua> for BTreeSet<T> { impl<'lua, T: Ord + FromLua<'lua>> FromLua<'lua> for BTreeSet<T> {
#[inline]
fn from_lua(value: Value<'lua>, _: &'lua Lua) -> Result<Self> { fn from_lua(value: Value<'lua>, _: &'lua Lua) -> Result<Self> {
match value { match value {
Value::Table(table) if table.len()? > 0 => table.sequence_values().collect(), Value::Table(table) if table.len()? > 0 => table.sequence_values().collect(),

View File

@ -11,6 +11,7 @@ use crate::value::{FromLua, FromLuaMulti, MultiValue, Nil, ToLua, ToLuaMulti};
/// Result is convertible to `MultiValue` following the common Lua idiom of returning the result /// Result is convertible to `MultiValue` following the common Lua idiom of returning the result
/// on success, or in the case of an error, returning `nil` and an error message. /// on success, or in the case of an error, returning `nil` and an error message.
impl<'lua, T: ToLua<'lua>, E: ToLua<'lua>> ToLuaMulti<'lua> for StdResult<T, E> { impl<'lua, T: ToLua<'lua>, E: ToLua<'lua>> ToLuaMulti<'lua> for StdResult<T, E> {
#[inline]
fn to_lua_multi(self, lua: &'lua Lua) -> Result<MultiValue<'lua>> { fn to_lua_multi(self, lua: &'lua Lua) -> Result<MultiValue<'lua>> {
let mut result = MultiValue::new_or_cached(lua); let mut result = MultiValue::new_or_cached(lua);
match self { match self {
@ -25,6 +26,7 @@ impl<'lua, T: ToLua<'lua>, E: ToLua<'lua>> ToLuaMulti<'lua> for StdResult<T, E>
} }
impl<'lua, T: ToLua<'lua>> ToLuaMulti<'lua> for T { impl<'lua, T: ToLua<'lua>> ToLuaMulti<'lua> for T {
#[inline]
fn to_lua_multi(self, lua: &'lua Lua) -> Result<MultiValue<'lua>> { fn to_lua_multi(self, lua: &'lua Lua) -> Result<MultiValue<'lua>> {
let mut v = MultiValue::new_or_cached(lua); let mut v = MultiValue::new_or_cached(lua);
v.push_front(self.to_lua(lua)?); v.push_front(self.to_lua(lua)?);
@ -33,6 +35,7 @@ impl<'lua, T: ToLua<'lua>> ToLuaMulti<'lua> for T {
} }
impl<'lua, T: FromLua<'lua>> FromLuaMulti<'lua> for T { impl<'lua, T: FromLua<'lua>> FromLuaMulti<'lua> for T {
#[inline]
fn from_lua_multi(mut values: MultiValue<'lua>, lua: &'lua Lua) -> Result<Self> { fn from_lua_multi(mut values: MultiValue<'lua>, lua: &'lua Lua) -> Result<Self> {
let res = T::from_lua(values.pop_front().unwrap_or(Nil), lua); let res = T::from_lua(values.pop_front().unwrap_or(Nil), lua);
lua.cache_multivalue(values); lua.cache_multivalue(values);
@ -41,12 +44,14 @@ impl<'lua, T: FromLua<'lua>> FromLuaMulti<'lua> for T {
} }
impl<'lua> ToLuaMulti<'lua> for MultiValue<'lua> { impl<'lua> ToLuaMulti<'lua> for MultiValue<'lua> {
#[inline]
fn to_lua_multi(self, _: &'lua Lua) -> Result<MultiValue<'lua>> { fn to_lua_multi(self, _: &'lua Lua) -> Result<MultiValue<'lua>> {
Ok(self) Ok(self)
} }
} }
impl<'lua> FromLuaMulti<'lua> for MultiValue<'lua> { impl<'lua> FromLuaMulti<'lua> for MultiValue<'lua> {
#[inline]
fn from_lua_multi(values: MultiValue<'lua>, _: &'lua Lua) -> Result<Self> { fn from_lua_multi(values: MultiValue<'lua>, _: &'lua Lua) -> Result<Self> {
Ok(values) Ok(values)
} }
@ -124,6 +129,7 @@ impl<T> DerefMut for Variadic<T> {
} }
impl<'lua, T: ToLua<'lua>> ToLuaMulti<'lua> for Variadic<T> { impl<'lua, T: ToLua<'lua>> ToLuaMulti<'lua> for Variadic<T> {
#[inline]
fn to_lua_multi(self, lua: &'lua Lua) -> Result<MultiValue<'lua>> { fn to_lua_multi(self, lua: &'lua Lua) -> Result<MultiValue<'lua>> {
let mut values = MultiValue::new_or_cached(lua); let mut values = MultiValue::new_or_cached(lua);
values.refill(self.0.into_iter().map(|e| e.to_lua(lua)))?; values.refill(self.0.into_iter().map(|e| e.to_lua(lua)))?;
@ -132,6 +138,7 @@ impl<'lua, T: ToLua<'lua>> ToLuaMulti<'lua> for Variadic<T> {
} }
impl<'lua, T: FromLua<'lua>> FromLuaMulti<'lua> for Variadic<T> { impl<'lua, T: FromLua<'lua>> FromLuaMulti<'lua> for Variadic<T> {
#[inline]
fn from_lua_multi(mut values: MultiValue<'lua>, lua: &'lua Lua) -> Result<Self> { fn from_lua_multi(mut values: MultiValue<'lua>, lua: &'lua Lua) -> Result<Self> {
let res = values let res = values
.drain_all() .drain_all()
@ -146,12 +153,14 @@ impl<'lua, T: FromLua<'lua>> FromLuaMulti<'lua> for Variadic<T> {
macro_rules! impl_tuple { macro_rules! impl_tuple {
() => ( () => (
impl<'lua> ToLuaMulti<'lua> for () { impl<'lua> ToLuaMulti<'lua> for () {
#[inline]
fn to_lua_multi(self, lua: &'lua Lua) -> Result<MultiValue<'lua>> { fn to_lua_multi(self, lua: &'lua Lua) -> Result<MultiValue<'lua>> {
Ok(MultiValue::new_or_cached(lua)) Ok(MultiValue::new_or_cached(lua))
} }
} }
impl<'lua> FromLuaMulti<'lua> for () { impl<'lua> FromLuaMulti<'lua> for () {
#[inline]
fn from_lua_multi(values: MultiValue<'lua>, lua: &'lua Lua) -> Result<Self> { fn from_lua_multi(values: MultiValue<'lua>, lua: &'lua Lua) -> Result<Self> {
lua.cache_multivalue(values); lua.cache_multivalue(values);
Ok(()) Ok(())
@ -166,6 +175,7 @@ macro_rules! impl_tuple {
{ {
#[allow(unused_mut)] #[allow(unused_mut)]
#[allow(non_snake_case)] #[allow(non_snake_case)]
#[inline]
fn to_lua_multi(self, lua: &'lua Lua) -> Result<MultiValue<'lua>> { fn to_lua_multi(self, lua: &'lua Lua) -> Result<MultiValue<'lua>> {
let ($($name,)* $last,) = self; let ($($name,)* $last,) = self;
@ -181,6 +191,7 @@ macro_rules! impl_tuple {
{ {
#[allow(unused_mut)] #[allow(unused_mut)]
#[allow(non_snake_case)] #[allow(non_snake_case)]
#[inline]
fn from_lua_multi(mut values: MultiValue<'lua>, lua: &'lua Lua) -> Result<Self> { fn from_lua_multi(mut values: MultiValue<'lua>, lua: &'lua Lua) -> Result<Self> {
$(let $name = values.pop_front().unwrap_or(Nil);)* $(let $name = values.pop_front().unwrap_or(Nil);)*
let $last = FromLuaMulti::from_lua_multi(values, lua)?; let $last = FromLuaMulti::from_lua_multi(values, lua)?;