@@ -1089,7 +1089,7 @@ impl<'a, 'lua> Serialize for SerializableTable<'a, 'lua> {
1089
1089
where
1090
1090
S : Serializer ,
1091
1091
{
1092
- use crate :: serde:: de:: { check_value_for_skip, MapPairs } ;
1092
+ use crate :: serde:: de:: { check_value_for_skip, MapPairs , RecursionGuard } ;
1093
1093
use crate :: value:: SerializableValue ;
1094
1094
1095
1095
let convert_result = |res : Result < ( ) > , serialize_err : Option < S :: Error > | match res {
@@ -1101,15 +1101,15 @@ impl<'a, 'lua> Serialize for SerializableTable<'a, 'lua> {
1101
1101
1102
1102
let options = self . options ;
1103
1103
let visited = & self . visited ;
1104
- visited . borrow_mut ( ) . insert ( self . table . to_pointer ( ) ) ;
1104
+ let _guard = RecursionGuard :: new ( & self . table , visited ) ;
1105
1105
1106
1106
// Array
1107
1107
let len = self . table . raw_len ( ) ;
1108
1108
if len > 0 || self . table . is_array ( ) {
1109
1109
let mut seq = serializer. serialize_seq ( Some ( len) ) ?;
1110
1110
let mut serialize_err = None ;
1111
1111
let res = self . table . for_each_value :: < Value > ( |value| {
1112
- let skip = check_value_for_skip ( & value, self . options , & self . visited )
1112
+ let skip = check_value_for_skip ( & value, self . options , visited)
1113
1113
. map_err ( |err| Error :: SerializeError ( err. to_string ( ) ) ) ?;
1114
1114
if skip {
1115
1115
// continue iteration
@@ -1129,9 +1129,9 @@ impl<'a, 'lua> Serialize for SerializableTable<'a, 'lua> {
1129
1129
let mut map = serializer. serialize_map ( None ) ?;
1130
1130
let mut serialize_err = None ;
1131
1131
let mut process_pair = |key, value| {
1132
- let skip_key = check_value_for_skip ( & key, self . options , & self . visited )
1132
+ let skip_key = check_value_for_skip ( & key, self . options , visited)
1133
1133
. map_err ( |err| Error :: SerializeError ( err. to_string ( ) ) ) ?;
1134
- let skip_value = check_value_for_skip ( & value, self . options , & self . visited )
1134
+ let skip_value = check_value_for_skip ( & value, self . options , visited)
1135
1135
. map_err ( |err| Error :: SerializeError ( err. to_string ( ) ) ) ?;
1136
1136
if skip_key || skip_value {
1137
1137
// continue iteration
0 commit comments