@@ -7,6 +7,7 @@ use pyo3::types::{PyDict, PyList};
77
88use crate :: definitions:: DefinitionsBuilder ;
99use crate :: definitions:: { DefinitionRef , RecursionSafeCache } ;
10+ use crate :: serializers:: DuckTypingSerMode ;
1011
1112use crate :: tools:: SchemaDict ;
1213
@@ -93,8 +94,12 @@ impl TypeSerializer for DefinitionRefSerializer {
9394 ) -> PyResult < PyObject > {
9495 self . definition . read ( |comb_serializer| {
9596 let comb_serializer = comb_serializer. unwrap ( ) ;
96- let mut guard = extra. recursion_guard ( value, self . definition . id ( ) ) ?;
97- comb_serializer. to_python ( value, include, exclude, guard. state ( ) )
97+ if extra. duck_typing_ser_mode != DuckTypingSerMode :: Inferred {
98+ comb_serializer. to_python ( value, include, exclude, extra)
99+ } else {
100+ let mut guard = extra. recursion_guard ( value, self . definition . id ( ) ) ?;
101+ comb_serializer. to_python ( value, include, exclude, guard. state ( ) )
102+ }
98103 } )
99104 }
100105
@@ -112,10 +117,14 @@ impl TypeSerializer for DefinitionRefSerializer {
112117 ) -> Result < S :: Ok , S :: Error > {
113118 self . definition . read ( |comb_serializer| {
114119 let comb_serializer = comb_serializer. unwrap ( ) ;
115- let mut guard = extra
116- . recursion_guard ( value, self . definition . id ( ) )
117- . map_err ( py_err_se_err) ?;
118- comb_serializer. serde_serialize ( value, serializer, include, exclude, guard. state ( ) )
120+ if extra. duck_typing_ser_mode != DuckTypingSerMode :: Inferred {
121+ comb_serializer. serde_serialize ( value, serializer, include, exclude, extra)
122+ } else {
123+ let mut guard = extra
124+ . recursion_guard ( value, self . definition . id ( ) )
125+ . map_err ( py_err_se_err) ?;
126+ comb_serializer. serde_serialize ( value, serializer, include, exclude, guard. state ( ) )
127+ }
119128 } )
120129 }
121130
0 commit comments