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.