diff options
author | Martin Fischer <martin@push-f.com> | 2022-08-13 03:56:55 +0200 |
---|---|---|
committer | Martin Fischer <martin@push-f.com> | 2022-08-14 00:33:23 +0200 |
commit | 36e98c1b135f07ef9a5eec046b8f0fd6d93534d4 (patch) | |
tree | da9c93ceb0e147695e1992c4d1678964af3be4bf /src/lua/serde/mod.rs | |
parent | dc20e1df60c1e4e81d1e16e8f177a1c6956966b7 (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.rs | 57 |
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)?) +} |