aboutsummaryrefslogtreecommitdiff
path: root/src/lua/serde/mod.rs
diff options
context:
space:
mode:
authorMartin Fischer <martin@push-f.com>2022-08-13 03:56:55 +0200
committerMartin Fischer <martin@push-f.com>2022-08-14 00:33:23 +0200
commit36e98c1b135f07ef9a5eec046b8f0fd6d93534d4 (patch)
treeda9c93ceb0e147695e1992c4d1678964af3be4bf /src/lua/serde/mod.rs
parentdc20e1df60c1e4e81d1e16e8f177a1c6956966b7 (diff)
add gitpad.decode_toml lua method
We are vendoring the rlua_serde crate because it currently depends on rlua 0.17, which is outdated and my attempts to contact the crate author were bounced by Yandex for somehow looking like spam.
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)?)
+}