Trait mlua::serde::LuaSerdeExt[][src]

pub trait LuaSerdeExt<'lua> {
    fn null(&'lua self) -> Result<Value<'lua>>;
fn array_metatable(&'lua self) -> Result<Table<'lua>>;
fn to_value<T: Serialize + ?Sized>(&'lua self, t: &T) -> Result<Value<'lua>>;
fn from_value<T: Deserialize<'lua>>(
        &'lua self,
        value: Value<'lua>
    ) -> Result<T>; }
This is supported on crate feature serialize only.

Required methods

fn null(&'lua self) -> Result<Value<'lua>>[src]

A special value (lightuserdata) to encode/decode optional (none) values.

Requires feature = "serialize"

Example

use std::collections::HashMap;
use mlua::{Lua, Result, LuaSerdeExt};

fn main() -> Result<()> {
    let lua = Lua::new();
    lua.globals().set("null", lua.null()?)?;

    let val = lua.load(r#"{a = null}"#).eval()?;
    let map: HashMap<String, Option<String>> = lua.from_value(val)?;
    assert_eq!(map["a"], None);

    Ok(())
}

fn array_metatable(&'lua self) -> Result<Table<'lua>>[src]

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 as the # operator on that table.

Requires feature = "serialize"

Example

use mlua::{Lua, Result, LuaSerdeExt};
use serde_json::Value as JsonValue;

fn main() -> Result<()> {
    let lua = Lua::new();
    lua.globals().set("array_mt", lua.array_metatable()?)?;

    // Encode as an empty array (no sequence part in the lua table)
    let val = lua.load("setmetatable({a = 5}, array_mt)").eval()?;
    let j: JsonValue = lua.from_value(val)?;
    assert_eq!(j.to_string(), "[]");

    // Encode as object
    let val = lua.load("{a = 5}").eval()?;
    let j: JsonValue = lua.from_value(val)?;
    assert_eq!(j.to_string(), r#"{"a":5}"#);

    Ok(())
}

fn to_value<T: Serialize + ?Sized>(&'lua self, t: &T) -> Result<Value<'lua>>[src]

Converts T into a Value instance.

Requires feature = "serialize"

Example

use mlua::{Lua, Result, LuaSerdeExt};
use serde::Serialize;

#[derive(Serialize)]
struct User {
    name: String,
    age: u8,
}

fn main() -> Result<()> {
    let lua = Lua::new();
    let u = User {
        name: "John Smith".into(),
        age: 20,
    };
    lua.globals().set("user", lua.to_value(&u)?)?;
    lua.load(r#"
        assert(user["name"] == "John Smith")
        assert(user["age"] == 20)
    "#).exec()
}

fn from_value<T: Deserialize<'lua>>(&'lua self, value: Value<'lua>) -> Result<T>[src]

Deserializes a Value into any serde deserializable object.

Requires feature = "serialize"

Example

use mlua::{Lua, Result, LuaSerdeExt};
use serde::Deserialize;

#[derive(Deserialize, Debug, PartialEq)]
struct User {
    name: String,
    age: u8,
}

fn main() -> Result<()> {
    let lua = Lua::new();
    let val = lua.load(r#"{name = "John Smith", age = 20}"#).eval()?;
    let u: User = lua.from_value(val)?;

    assert_eq!(u, User { name: "John Smith".into(), age: 20 });

    Ok(())
}
Loading content...

Implementors

impl<'lua> LuaSerdeExt<'lua> for Lua[src]

Loading content...