// vendored from https://github.com/zrkn/rlua_serde because it dependend on an outdated rlua version // Copyright (c) 2018 zrkn , licensed under the MIT License //! This crate allows you to serialize and deserialize any type that implements //! `serde::Serialize` and `serde::Deserialize` into/from `rlua::Value`. //! //! Implementation is similar to `serde_json::Value` //! //! Example usage: //! //! ```rust //! extern crate serde; //! #[macro_use] //! extern crate serde_derive; //! extern crate rlua; //! extern crate rlua_serde; //! //! fn main() { //! #[derive(Serialize, Deserialize)] //! struct Foo { //! bar: u32, //! baz: Vec, //! } //! //! let lua = rlua::Lua::new(); //! lua.context(|lua| { //! let foo = Foo { //! bar: 42, //! baz: vec![String::from("fizz"), String::from("buzz")], //! }; //! //! let value = rlua_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(); //! }); //! } //! ``` pub mod de; pub mod error; pub mod ser; use rlua::{Context, Error, Value}; pub fn to_value(lua: Context, t: T) -> Result { let serializer = ser::Serializer { 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)?) }