@@ -1089,7 +1089,7 @@ impl<'a, 'lua> Serialize for SerializableTable<'a, 'lua> {
10891089 where
10901090 S : Serializer ,
10911091 {
1092- use crate :: serde:: de:: { check_value_for_skip, MapPairs } ;
1092+ use crate :: serde:: de:: { check_value_for_skip, MapPairs , RecursionGuard } ;
10931093 use crate :: value:: SerializableValue ;
10941094
10951095 let convert_result = |res : Result < ( ) > , serialize_err : Option < S :: Error > | match res {
@@ -1101,15 +1101,15 @@ impl<'a, 'lua> Serialize for SerializableTable<'a, 'lua> {
11011101
11021102 let options = self . options ;
11031103 let visited = & self . visited ;
1104- visited . borrow_mut ( ) . insert ( self . table . to_pointer ( ) ) ;
1104+ let _guard = RecursionGuard :: new ( & self . table , visited ) ;
11051105
11061106 // Array
11071107 let len = self . table . raw_len ( ) ;
11081108 if len > 0 || self . table . is_array ( ) {
11091109 let mut seq = serializer. serialize_seq ( Some ( len) ) ?;
11101110 let mut serialize_err = None ;
11111111 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)
11131113 . map_err ( |err| Error :: SerializeError ( err. to_string ( ) ) ) ?;
11141114 if skip {
11151115 // continue iteration
@@ -1129,9 +1129,9 @@ impl<'a, 'lua> Serialize for SerializableTable<'a, 'lua> {
11291129 let mut map = serializer. serialize_map ( None ) ?;
11301130 let mut serialize_err = None ;
11311131 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)
11331133 . 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)
11351135 . map_err ( |err| Error :: SerializeError ( err. to_string ( ) ) ) ?;
11361136 if skip_key || skip_value {
11371137 // continue iteration
0 commit comments