Trait mlua::LuaSerdeExt [−][src]
pub trait LuaSerdeExt<'lua> { fn null(&'lua self) -> Value<'lua>; fn array_metatable(&'lua self) -> Table<'lua>; fn to_value<T: Serialize + ?Sized>(&'lua self, t: &T) -> Result<Value<'lua>>; fn to_value_with<T: ?Sized>(
&'lua self,
t: &T,
options: Options
) -> Result<Value<'lua>>
where
T: Serialize; fn from_value<T: Deserialize<'lua>>(
&'lua self,
value: Value<'lua>
) -> Result<T>; }
Expand description
Trait for serializing/deserializing Lua values using Serde.
Required methods
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) -> Table<'lua>
fn array_metatable(&'lua self) -> Table<'lua>
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(()) }
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() }
Converts T
into a Value
instance with options.
Requires feature = "serialize"
Example
use mlua::{Lua, Result, LuaSerdeExt, SerializeOptions}; fn main() -> Result<()> { let lua = Lua::new(); let v = vec![1, 2, 3]; let options = SerializeOptions::new().set_array_metatable(false); lua.globals().set("v", lua.to_value_with(&v, options)?)?; lua.load(r#" assert(#v == 3 and v[1] == 1 and v[2] == 2 and v[3] == 3) assert(getmetatable(v) == nil) "#).exec() }
fn from_value<T: Deserialize<'lua>>(&'lua self, value: Value<'lua>) -> Result<T>
fn from_value<T: Deserialize<'lua>>(&'lua self, value: Value<'lua>) -> Result<T>
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(()) }