@@ -3,8 +3,8 @@ use std::sync::Arc;
33
44use mlua:: {
55 AnyUserData , Error as LuaError , ExternalResult , Function , Integer as LuaInteger , IntoLuaMulti , Lua ,
6- LuaSerdeExt , MetaMethod , MultiValue , Result , String as LuaString , Table , UserData , UserDataMethods ,
7- UserDataRefMut , Value ,
6+ LuaSerdeExt , MetaMethod , MultiValue , Result , SerializeOptions , String as LuaString , Table , UserData ,
7+ UserDataMethods , UserDataRefMut , Value ,
88} ;
99use ouroboros:: self_referencing;
1010use serde:: { Serialize , Serializer } ;
@@ -188,9 +188,15 @@ struct LuaJsonMapIter {
188188 iter : serde_json:: map:: Iter < ' this > ,
189189}
190190
191- fn decode ( lua : & Lua , data : StringOrBytes ) -> Result < StdResult < Value , String > > {
191+ fn decode ( lua : & Lua , ( data, opts) : ( StringOrBytes , Option < Table > ) ) -> Result < StdResult < Value , String > > {
192+ let opts = opts. as_ref ( ) ;
193+ let mut options = SerializeOptions :: new ( ) ;
194+ if let Some ( enabled) = opts. and_then ( |t| t. get :: < bool > ( "set_array_metatable" ) . ok ( ) ) {
195+ options = options. set_array_metatable ( enabled) ;
196+ }
197+
192198 let json: serde_json:: Value = lua_try ! ( serde_json:: from_slice( & data. as_bytes_deref( ) ) . into_lua_err( ) ) ;
193- Ok ( Ok ( lua. to_value ( & json) ?) )
199+ Ok ( Ok ( lua. to_value_with ( & json, options ) ?) )
194200}
195201
196202fn decode_native ( lua : & Lua , data : StringOrBytes ) -> Result < StdResult < Value , String > > {
0 commit comments