aboutsummaryrefslogtreecommitdiff
path: root/src/lua/serde/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/lua/serde/mod.rs')
-rw-r--r--src/lua/serde/mod.rs57
1 files changed, 57 insertions, 0 deletions
diff --git a/src/lua/serde/mod.rs b/src/lua/serde/mod.rs
new file mode 100644
index 0000000..82a928a
--- /dev/null
+++ b/src/lua/serde/mod.rs
@@ -0,0 +1,57 @@
+// vendored from https://github.com/zrkn/rlua_serde because it dependend on an outdated rlua version
+// Copyright (c) 2018 zrkn <zrkn@email.su>, 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<String>,
+//! }
+//!
+//! 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<T: serde::Serialize>(lua: Context, t: T) -> Result<Value, Error> {
+ let serializer = ser::Serializer { lua };
+ Ok(t.serialize(serializer)?)
+}
+
+pub fn from_value<'de, T: serde::Deserialize<'de>>(value: Value<'de>) -> Result<T, Error> {
+ let deserializer = de::Deserializer { value };
+ Ok(T::deserialize(deserializer)?)
+}