mirror of
https://github.com/mlua-rs/mlua
synced 2026-06-08 16:05:43 +00:00
Add AnyUserData::wrap_ser function
This commit is contained in:
@@ -1116,6 +1116,16 @@ impl AnyUserData {
|
||||
pub fn wrap<T: MaybeSend + 'static>(data: T) -> impl IntoLua {
|
||||
WrappedUserdata(move |lua| lua.create_any_userdata(data))
|
||||
}
|
||||
|
||||
/// Wraps any Rust type that implements [`Serialize`], returning an opaque type that implements
|
||||
/// [`IntoLua`] trait.
|
||||
///
|
||||
/// This function uses [`Lua::create_ser_any_userdata()`] under the hood.
|
||||
#[cfg(feature = "serialize")]
|
||||
#[cfg_attr(docsrs, doc(cfg(feature = "serialize")))]
|
||||
pub fn wrap_ser<T: Serialize + MaybeSend + 'static>(data: T) -> impl IntoLua {
|
||||
WrappedUserdata(move |lua| lua.create_ser_any_userdata(data))
|
||||
}
|
||||
}
|
||||
|
||||
impl<F> IntoLua for WrappedUserdata<F>
|
||||
|
||||
+18
-6
@@ -4,8 +4,8 @@ use std::collections::HashMap;
|
||||
use std::error::Error as StdError;
|
||||
|
||||
use mlua::{
|
||||
DeserializeOptions, Error, ExternalResult, Lua, LuaSerdeExt, Result as LuaResult, SerializeOptions,
|
||||
UserData, Value,
|
||||
AnyUserData, DeserializeOptions, Error, ExternalResult, IntoLua, Lua, LuaSerdeExt, Result as LuaResult,
|
||||
SerializeOptions, UserData, Value,
|
||||
};
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
@@ -72,18 +72,30 @@ fn test_serialize() -> Result<(), Box<dyn StdError>> {
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_serialize_any_userdata() -> Result<(), Box<dyn StdError>> {
|
||||
fn test_serialize_any_userdata() {
|
||||
let lua = Lua::new();
|
||||
|
||||
let json_val = serde_json::json!({
|
||||
"a": 1,
|
||||
"b": "test",
|
||||
});
|
||||
let json_ud = lua.create_ser_any_userdata(json_val)?;
|
||||
let json_str = serde_json::to_string_pretty(&json_ud)?;
|
||||
let json_ud = lua.create_ser_any_userdata(json_val).unwrap();
|
||||
let json_str = serde_json::to_string_pretty(&json_ud).unwrap();
|
||||
assert_eq!(json_str, "{\n \"a\": 1,\n \"b\": \"test\"\n}");
|
||||
}
|
||||
|
||||
Ok(())
|
||||
#[test]
|
||||
fn test_serialize_wrapped_any_userdata() {
|
||||
let lua = Lua::new();
|
||||
|
||||
let json_val = serde_json::json!({
|
||||
"a": 1,
|
||||
"b": "test",
|
||||
});
|
||||
let ud = AnyUserData::wrap_ser(json_val);
|
||||
let json_ud = ud.into_lua(&lua).unwrap();
|
||||
let json_str = serde_json::to_string(&json_ud).unwrap();
|
||||
assert_eq!(json_str, "{\"a\":1,\"b\":\"test\"}");
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
||||
Reference in New Issue
Block a user