Struct nvim_utils::prelude::LuaFunction
source · pub struct LuaFunction<'lua>(_);
Expand description
Handle to an internal Lua function.
Implementations§
source§impl<'lua> Function<'lua>
impl<'lua> Function<'lua>
sourcepub fn call<A, R>(&self, args: A) -> Result<R, Error>where
A: ToLuaMulti<'lua>,
R: FromLuaMulti<'lua>,
pub fn call<A, R>(&self, args: A) -> Result<R, Error>where A: ToLuaMulti<'lua>, R: FromLuaMulti<'lua>,
Calls the function, passing args
as function arguments.
The function’s return values are converted to the generic type R
.
Examples
Call Lua’s built-in tostring
function:
let globals = lua.globals();
let tostring: Function = globals.get("tostring")?;
assert_eq!(tostring.call::<_, String>(123)?, "123");
Call a function with multiple arguments:
let sum: Function = lua.load(
r#"
function(a, b)
return a + b
end
"#).eval()?;
assert_eq!(sum.call::<_, u32>((3, 4))?, 3 + 4);
sourcepub fn call_async<'fut, A, R>(
&self,
args: A
) -> Pin<Box<dyn Future<Output = Result<R, Error>> + 'fut, Global>>where
'lua: 'fut,
A: ToLuaMulti<'lua>,
R: FromLuaMulti<'lua> + 'fut,
pub fn call_async<'fut, A, R>( &self, args: A ) -> Pin<Box<dyn Future<Output = Result<R, Error>> + 'fut, Global>>where 'lua: 'fut, A: ToLuaMulti<'lua>, R: FromLuaMulti<'lua> + 'fut,
Returns a future that, when polled, calls self
, passing args
as function arguments,
and drives the execution.
Internally it wraps the function to an AsyncThread
.
Requires feature = "async"
Examples
use std::time::Duration;
use futures_timer::Delay;
let sleep = lua.create_async_function(move |_lua, n: u64| async move {
Delay::new(Duration::from_millis(n)).await;
Ok(())
})?;
sleep.call_async(10).await?;
sourcepub fn bind<A>(&self, args: A) -> Result<Function<'lua>, Error>where
A: ToLuaMulti<'lua>,
pub fn bind<A>(&self, args: A) -> Result<Function<'lua>, Error>where A: ToLuaMulti<'lua>,
Returns a function that, when called, calls self
, passing args
as the first set of
arguments.
If any arguments are passed to the returned function, they will be passed after args
.
Examples
let sum: Function = lua.load(
r#"
function(a, b)
return a + b
end
"#).eval()?;
let bound_a = sum.bind(1)?;
assert_eq!(bound_a.call::<_, u32>(2)?, 1 + 2);
let bound_a_and_b = sum.bind(13)?.bind(57)?;
assert_eq!(bound_a_and_b.call::<_, u32>(())?, 13 + 57);
sourcepub fn info(&self) -> FunctionInfo
pub fn info(&self) -> FunctionInfo
Returns information about the function.
Corresponds to the >Sn
what mask for lua_getinfo
when applied to the function.
Trait Implementations§
Auto Trait Implementations§
impl<'lua> !RefUnwindSafe for Function<'lua>
impl<'lua> !Send for Function<'lua>
impl<'lua> !Sync for Function<'lua>
impl<'lua> Unpin for Function<'lua>
impl<'lua> !UnwindSafe for Function<'lua>
Blanket Implementations§
source§impl<'lua, T> FromLuaMulti<'lua> for Twhere
T: FromLua<'lua>,
impl<'lua, T> FromLuaMulti<'lua> for Twhere T: FromLua<'lua>,
source§fn from_lua_multi(values: MultiValue<'lua>, lua: &'lua Lua) -> Result<T, Error>
fn from_lua_multi(values: MultiValue<'lua>, lua: &'lua Lua) -> Result<T, Error>
Performs the conversion. Read more
source§impl<'lua, T> ToLuaMulti<'lua> for Twhere
T: ToLua<'lua>,
impl<'lua, T> ToLuaMulti<'lua> for Twhere T: ToLua<'lua>,
source§fn to_lua_multi(self, lua: &'lua Lua) -> Result<MultiValue<'lua>, Error>
fn to_lua_multi(self, lua: &'lua Lua) -> Result<MultiValue<'lua>, Error>
Performs the conversion.