//! This crate allows you to serialize and deserialize any type that implements //! `serde::Serialize` and `serde::Deserialize` into/from `mlua::Value`. //! //! Implementation is similar to `serde_json::Value` //! //! Example usage: //! //! ```rust //! extern crate serde; //! #[macro_use] //! extern crate serde_derive; //! extern crate mlua; //! extern crate mlua_serde; //! //! fn main() { //! #[derive(Serialize, Deserialize)] //! struct Foo { //! bar: u32, //! baz: Vec, //! } //! //! let lua = mlua::Lua::new(); //! let foo = Foo { //! bar: 42, //! baz: vec![String::from("fizz"), String::from("buzz")], //! }; //! //! let value = mlua_serde::to_value(&lua, &foo).unwrap(); //! lua.globals().set("value", value).unwrap(); //! lua.load( //! r#" //! assert(value["bar"] == 42) //! assert(value["baz"][2] == "buzz") //! "#).exec().unwrap(); //! } //! ``` extern crate mlua; #[macro_use] extern crate serde; #[cfg(test)] #[macro_use] extern crate serde_derive; pub mod error; pub mod ser; pub mod de; use mlua::{Lua, Value, Error}; pub fn to_value<'lua, T: serde::Serialize>(lua: &'lua Lua, t: T) -> Result, Error> { let serializer = ser::Serializer { lua: &lua }; Ok(t.serialize(serializer)?) } pub fn from_value<'de, T: serde::Deserialize<'de>>(value: Value<'de>) -> Result { let deserializer = de::Deserializer { value }; Ok(T::deserialize(deserializer)?) }