@@ -97,6 +97,7 @@ impl Dict {
97
97
}
98
98
}
99
99
impl Serialize for Dict {
100
+ #[ inline( never) ]
100
101
fn serialize < S > ( & self , serializer : S ) -> Result < S :: Ok , S :: Error >
101
102
where
102
103
S : Serializer ,
@@ -118,54 +119,59 @@ impl Serialize for Dict {
118
119
pydict_next ! ( self . ptr, & mut pos, & mut next_key, & mut next_value) ;
119
120
120
121
// key
121
- {
122
- let key_ob_type = ob_type ! ( key) ;
123
- if unlikely ! ( !is_class_by_type!( key_ob_type, STR_TYPE ) ) {
124
- err ! ( SerializeError :: KeyMustBeStr )
125
- }
126
- let key_as_str = unicode_to_str ( key) ;
127
- if unlikely ! ( key_as_str. is_none( ) ) {
128
- err ! ( SerializeError :: InvalidStr )
129
- }
130
- map. serialize_key ( key_as_str. unwrap ( ) ) . unwrap ( ) ;
122
+ let key_ob_type = ob_type ! ( key) ;
123
+ if unlikely ! ( !is_class_by_type!( key_ob_type, STR_TYPE ) ) {
124
+ err ! ( SerializeError :: KeyMustBeStr )
125
+ }
126
+ let key_as_str = unicode_to_str ( key) ;
127
+ if unlikely ! ( key_as_str. is_none( ) ) {
128
+ err ! ( SerializeError :: InvalidStr )
131
129
}
132
130
133
131
// value
134
- {
135
- let value_ob_type = ob_type ! ( value) ;
136
- if is_class_by_type ! ( value_ob_type, STR_TYPE ) {
137
- map. serialize_value ( & StrSerializer :: new ( value) ) ?;
138
- } else if is_class_by_type ! ( value_ob_type, INT_TYPE ) {
139
- if unlikely ! ( opt_enabled!( self . state. opts( ) , STRICT_INTEGER ) ) {
140
- map. serialize_value ( & Int53Serializer :: new ( value) ) ?;
141
- } else {
142
- map. serialize_value ( & IntSerializer :: new ( value) ) ?;
143
- }
144
- } else if is_class_by_type ! ( value_ob_type, BOOL_TYPE ) {
145
- map. serialize_value ( & BoolSerializer :: new ( value) ) ?;
146
- } else if is_class_by_type ! ( value_ob_type, NONE_TYPE ) {
147
- map. serialize_value ( & NoneSerializer :: new ( ) ) ?;
148
- } else if is_class_by_type ! ( value_ob_type, FLOAT_TYPE ) {
149
- map. serialize_value ( & FloatSerializer :: new ( value) ) ?;
150
- } else if is_class_by_type ! ( value_ob_type, DICT_TYPE ) {
151
- let pyvalue = DictGenericSerializer :: new ( value, self . state , self . default ) ;
152
- map. serialize_value ( & pyvalue) ?;
153
- } else if is_class_by_type ! ( value_ob_type, LIST_TYPE ) {
154
- if ffi ! ( Py_SIZE ( value) ) == 0 {
155
- map. serialize_value ( & ZeroListSerializer :: new ( ) ) ?;
156
- } else {
157
- let pyvalue =
158
- ListTupleSerializer :: from_list ( value, self . state , self . default ) ;
159
- map. serialize_value ( & pyvalue) ?;
160
- }
161
- } else if is_class_by_type ! ( value_ob_type, DATETIME_TYPE )
162
- && opt_disabled ! ( self . state. opts( ) , PASSTHROUGH_DATETIME )
163
- {
164
- map. serialize_value ( & DateTime :: new ( value, self . state . opts ( ) ) ) ?;
132
+ let value_ob_type = ob_type ! ( value) ;
133
+ if is_class_by_type ! ( value_ob_type, STR_TYPE ) {
134
+ map. serialize_key ( key_as_str. unwrap ( ) ) . unwrap ( ) ;
135
+ map. serialize_value ( & StrSerializer :: new ( value) ) ?;
136
+ } else if is_class_by_type ! ( value_ob_type, INT_TYPE ) {
137
+ if unlikely ! ( opt_enabled!( self . state. opts( ) , STRICT_INTEGER ) ) {
138
+ map. serialize_key ( key_as_str. unwrap ( ) ) . unwrap ( ) ;
139
+ map. serialize_value ( & Int53Serializer :: new ( value) ) ?;
140
+ } else {
141
+ map. serialize_key ( key_as_str. unwrap ( ) ) . unwrap ( ) ;
142
+ map. serialize_value ( & IntSerializer :: new ( value) ) ?;
143
+ }
144
+ } else if is_class_by_type ! ( value_ob_type, BOOL_TYPE ) {
145
+ map. serialize_key ( key_as_str. unwrap ( ) ) . unwrap ( ) ;
146
+ map. serialize_value ( & BoolSerializer :: new ( value) ) ?;
147
+ } else if is_class_by_type ! ( value_ob_type, NONE_TYPE ) {
148
+ map. serialize_key ( key_as_str. unwrap ( ) ) . unwrap ( ) ;
149
+ map. serialize_value ( & NoneSerializer :: new ( ) ) ?;
150
+ } else if is_class_by_type ! ( value_ob_type, FLOAT_TYPE ) {
151
+ map. serialize_key ( key_as_str. unwrap ( ) ) . unwrap ( ) ;
152
+ map. serialize_value ( & FloatSerializer :: new ( value) ) ?;
153
+ } else if is_class_by_type ! ( value_ob_type, DICT_TYPE ) {
154
+ let pyvalue = DictGenericSerializer :: new ( value, self . state , self . default ) ;
155
+ map. serialize_key ( key_as_str. unwrap ( ) ) . unwrap ( ) ;
156
+ map. serialize_value ( & pyvalue) ?;
157
+ } else if is_class_by_type ! ( value_ob_type, LIST_TYPE ) {
158
+ if ffi ! ( Py_SIZE ( value) ) == 0 {
159
+ map. serialize_key ( key_as_str. unwrap ( ) ) . unwrap ( ) ;
160
+ map. serialize_value ( & ZeroListSerializer :: new ( ) ) ?;
165
161
} else {
166
- let pyvalue = PyObjectSerializer :: new ( value, self . state , self . default ) ;
162
+ let pyvalue = ListTupleSerializer :: from_list ( value, self . state , self . default ) ;
163
+ map. serialize_key ( key_as_str. unwrap ( ) ) . unwrap ( ) ;
167
164
map. serialize_value ( & pyvalue) ?;
168
165
}
166
+ } else if is_class_by_type ! ( value_ob_type, DATETIME_TYPE )
167
+ && opt_disabled ! ( self . state. opts( ) , PASSTHROUGH_DATETIME )
168
+ {
169
+ map. serialize_key ( key_as_str. unwrap ( ) ) . unwrap ( ) ;
170
+ map. serialize_value ( & DateTime :: new ( value, self . state . opts ( ) ) ) ?;
171
+ } else {
172
+ let pyvalue = PyObjectSerializer :: new ( value, self . state , self . default ) ;
173
+ map. serialize_key ( key_as_str. unwrap ( ) ) . unwrap ( ) ;
174
+ map. serialize_value ( & pyvalue) ?;
169
175
}
170
176
}
171
177
@@ -257,6 +263,7 @@ impl DictNonStrKey {
257
263
}
258
264
}
259
265
266
+ #[ inline( never) ]
260
267
fn pyobject_to_string (
261
268
key : * mut pyo3_ffi:: PyObject ,
262
269
opts : crate :: opt:: Opt ,
0 commit comments