[][src]Struct mlua::Lua

pub struct Lua { /* fields omitted */ }

Top level Lua struct which holds the Lua state itself.

Methods

impl Lua[src]

pub fn new() -> Lua[src]

Creates a new Lua state and loads standard library without the debug library.

pub fn new_with(libs: StdLib) -> Lua[src]

Creates a new Lua state and loads the specified set of standard libraries.

Use the StdLib flags to specifiy the libraries you want to load.

pub fn load_from_std_lib(&self, libs: StdLib) -> Result<()>[src]

Loads the specified set of standard libraries into an existing Lua state.

Use the StdLib flags to specifiy the libraries you want to load.

pub unsafe fn init_from_ptr(state: *mut lua_State) -> Lua[src]

Constructs a new Lua instance from the existing state.

pub fn gc_is_running(&self) -> bool[src]

Returns true if the garbage collector is currently running automatically.

pub fn gc_stop(&self)[src]

Stop the Lua GC from running

pub fn gc_restart(&self)[src]

Restarts the Lua GC if it is not running

pub fn gc_collect(&self) -> Result<()>[src]

Perform a full garbage-collection cycle.

It may be necessary to call this function twice to collect all currently unreachable objects. Once to finish the current gc cycle, and once to start and finish the next cycle.

pub fn gc_step(&self) -> Result<bool>[src]

Steps the garbage collector one indivisible step.

Returns true if this has finished a collection cycle.

pub fn gc_step_kbytes(&self, kbytes: c_int) -> Result<bool>[src]

Steps the garbage collector as though memory had been allocated.

if kbytes is 0, then this is the same as calling gc_step. Returns true if this step has finished a collection cycle.

pub fn gc_set_pause(&self, pause: c_int) -> c_int[src]

Sets the 'pause' value of the collector.

Returns the previous value of 'pause'. More information can be found in the Lua 5.3 documentation.

pub fn gc_set_step_multiplier(&self, step_multiplier: c_int) -> c_int[src]

Sets the 'step multiplier' value of the collector.

Returns the previous value of the 'step multiplier'. More information can be found in the Lua 5.3 documentation.

pub fn load<'lua, 'a, S: ?Sized>(&'lua self, source: &'a S) -> Chunk<'lua, 'a> where
    S: AsRef<[u8]>, 
[src]

Returns Lua source code as a Chunk builder type.

In order to actually compile or run the resulting code, you must call Chunk::exec or similar on the returned builder. Code is not even parsed until one of these methods is called.

pub fn create_string<S: ?Sized>(&self, s: &S) -> Result<String> where
    S: AsRef<[u8]>, 
[src]

Create and return an interned Lua string. Lua strings can be arbitrary u8 data including embedded nulls, so in addition to &str and &String, you can also pass plain &[u8] here.

pub fn create_table(&self) -> Result<Table>[src]

Creates and returns a new table.

pub fn create_table_from<'lua, K, V, I>(
    &'lua self,
    cont: I
) -> Result<Table<'lua>> where
    K: ToLua<'lua>,
    V: ToLua<'lua>,
    I: IntoIterator<Item = (K, V)>, 
[src]

Creates a table and fills it with values from an iterator.

pub fn create_sequence_from<'lua, T, I>(
    &'lua self,
    cont: I
) -> Result<Table<'lua>> where
    T: ToLua<'lua>,
    I: IntoIterator<Item = T>, 
[src]

Creates a table from an iterator of values, using 1.. as the keys.

pub fn create_function<'lua, 'callback, A, R, F>(
    &'lua self,
    func: F
) -> Result<Function<'lua>> where
    A: FromLuaMulti<'callback>,
    R: ToLuaMulti<'callback>,
    F: 'static + Send + Fn(&'callback Lua, A) -> Result<R>, 
[src]

Wraps a Rust function or closure, creating a callable Lua function handle to it.

The function's return value is always a Result: If the function returns Err, the error is raised as a Lua error, which can be caught using (x)pcall or bubble up to the Rust code that invoked the Lua code. This allows using the ? operator to propagate errors through intermediate Lua code.

If the function returns Ok, the contained value will be converted to one or more Lua values. For details on Rust-to-Lua conversions, refer to the ToLua and ToLuaMulti traits.

Examples

Create a function which prints its argument:

let greet = lua.create_function(|_, name: String| {
    println!("Hello, {}!", name);
    Ok(())
});

Use tuples to accept multiple arguments:

let print_person = lua.create_function(|_, (name, age): (String, u8)| {
    println!("{} is {} years old!", name, age);
    Ok(())
});

pub fn create_function_mut<'lua, 'callback, A, R, F>(
    &'lua self,
    func: F
) -> Result<Function<'lua>> where
    A: FromLuaMulti<'callback>,
    R: ToLuaMulti<'callback>,
    F: 'static + Send + FnMut(&'callback Lua, A) -> Result<R>, 
[src]

Wraps a Rust mutable closure, creating a callable Lua function handle to it.

This is a version of create_function that accepts a FnMut argument. Refer to create_function for more information about the implementation.

pub fn create_thread<'lua>(
    &'lua self,
    func: Function<'lua>
) -> Result<Thread<'lua>>
[src]

Wraps a Lua function into a new thread (or coroutine).

Equivalent to coroutine.create.

pub fn create_userdata<T>(&self, data: T) -> Result<AnyUserData> where
    T: 'static + Send + UserData
[src]

Create a Lua userdata object from a custom userdata type.

pub fn globals(&self) -> Table[src]

Returns a handle to the global environment.

pub fn current_thread<'lua>(&'lua self) -> Thread<'lua>[src]

Returns a handle to the active Thread. For calls to Lua this will be the main Lua thread, for parameters given to a callback, this will be whatever Lua thread called the callback.

pub fn scope<'scope, 'lua: 'scope, F, R>(&'lua self, f: F) -> R where
    F: FnOnce(&Scope<'lua, 'scope>) -> R, 
[src]

Calls the given function with a Scope parameter, giving the function the ability to create userdata and callbacks from rust types that are !Send or non-'static.

The lifetime of any function or userdata created through Scope lasts only until the completion of this method call, on completion all such created values are automatically dropped and Lua references to them are invalidated. If a script accesses a value created through Scope outside of this method, a Lua error will result. Since we can ensure the lifetime of values created through Scope, and we know that Lua cannot be sent to another thread while Scope is live, it is safe to allow !Send datatypes and whose lifetimes only outlive the scope lifetime.

Inside the scope callback, all handles created through Scope will share the same unique 'lua lifetime of the parent Lua. This allows scoped and non-scoped values to be mixed in API calls, which is very useful (e.g. passing a scoped userdata to a non-scoped function). However, this also enables handles to scoped values to be trivially leaked from the given callback. This is not dangerous, though! After the callback returns, all scoped values are invalidated, which means that though references may exist, the Rust types backing them have dropped. Function types will error when called, and AnyUserData will be typeless. It would be impossible to prevent handles to scoped values from escaping anyway, since you would always be able to smuggle them through Lua state.

pub fn coerce_string<'lua>(
    &'lua self,
    v: Value<'lua>
) -> Result<Option<String<'lua>>>
[src]

Attempts to coerce a Lua value into a String in a manner consistent with Lua's internal behavior.

To succeed, the value must be a string (in which case this is a no-op), an integer, or a number.

pub fn coerce_integer(&self, v: Value) -> Result<Option<Integer>>[src]

Attempts to coerce a Lua value into an integer in a manner consistent with Lua's internal behavior.

To succeed, the value must be an integer, a floating point number that has an exact representation as an integer, or a string that can be converted to an integer. Refer to the Lua manual for details.

pub fn coerce_number(&self, v: Value) -> Result<Option<Number>>[src]

Attempts to coerce a Lua value into a Number in a manner consistent with Lua's internal behavior.

To succeed, the value must be a number or a string that can be converted to a number. Refer to the Lua manual for details.

pub fn pack<'lua, T: ToLua<'lua>>(&'lua self, t: T) -> Result<Value<'lua>>[src]

Converts a value that implements ToLua into a Value instance.

pub fn unpack<'lua, T: FromLua<'lua>>(
    &'lua self,
    value: Value<'lua>
) -> Result<T>
[src]

Converts a Value instance into a value that implements FromLua.

pub fn pack_multi<'lua, T: ToLuaMulti<'lua>>(
    &'lua self,
    t: T
) -> Result<MultiValue<'lua>>
[src]

Converts a value that implements ToLuaMulti into a MultiValue instance.

pub fn unpack_multi<'lua, T: FromLuaMulti<'lua>>(
    &'lua self,
    value: MultiValue<'lua>
) -> Result<T>
[src]

Converts a MultiValue instance into a value that implements FromLuaMulti.

pub fn set_named_registry_value<'lua, S: ?Sized, T>(
    &'lua self,
    name: &S,
    t: T
) -> Result<()> where
    S: AsRef<[u8]>,
    T: ToLua<'lua>, 
[src]

Set a value in the Lua registry based on a string name.

This value will be available to rust from all Lua instances which share the same main state.

pub fn named_registry_value<'lua, S: ?Sized, T>(
    &'lua self,
    name: &S
) -> Result<T> where
    S: AsRef<[u8]>,
    T: FromLua<'lua>, 
[src]

Get a value from the Lua registry based on a string name.

Any Lua instance which shares the underlying main state may call this method to get a value previously set by set_named_registry_value.

pub fn unset_named_registry_value<'lua, S: ?Sized>(
    &'lua self,
    name: &S
) -> Result<()> where
    S: AsRef<[u8]>, 
[src]

Removes a named value in the Lua registry.

Equivalent to calling set_named_registry_value with a value of Nil.

pub fn create_registry_value<'lua, T: ToLua<'lua>>(
    &'lua self,
    t: T
) -> Result<RegistryKey>
[src]

Place a value in the Lua registry with an auto-generated key.

This value will be available to rust from all Lua instances which share the same main state.

Be warned, garbage collection of values held inside the registry is not automatic, see RegistryKey for more details.

pub fn registry_value<'lua, T: FromLua<'lua>>(
    &'lua self,
    key: &RegistryKey
) -> Result<T>
[src]

Get a value from the Lua registry by its RegistryKey

Any Lua instance which shares the underlying main state may call this method to get a value previously placed by create_registry_value.

pub fn remove_registry_value(&self, key: RegistryKey) -> Result<()>[src]

Removes a value from the Lua registry.

You may call this function to manually remove a value placed in the registry with create_registry_value. In addition to manual RegistryKey removal, you can also call expire_registry_values to automatically remove values from the registry whose RegistryKeys have been dropped.

pub fn owns_registry_value(&self, key: &RegistryKey) -> bool[src]

Returns true if the given RegistryKey was created by a Lua which shares the underlying main state with this Lua instance.

Other than this, methods that accept a RegistryKey will return Error::MismatchedRegistryKey if passed a RegistryKey that was not created with a matching Lua state.

pub fn expire_registry_values(&self)[src]

Remove any registry values whose RegistryKeys have all been dropped.

Unlike normal handle values, RegistryKeys do not automatically remove themselves on Drop, but you can call this method to remove any unreachable registry values not manually removed by Lua::remove_registry_value.

Trait Implementations

impl Drop for Lua[src]

impl Send for Lua[src]

Auto Trait Implementations

impl !RefUnwindSafe for Lua

impl !Sync for Lua

impl Unpin for Lua

impl !UnwindSafe for Lua

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.