@@ -111,13 +111,14 @@ pub fn py_to_js(vm: &mut VirtualMachine, py_obj: PyObjectRef) -> JsValue {
111
111
112
112
return func;
113
113
}
114
- // the browser module might not be injected
115
- if let Ok ( promise_type ) = browser_module :: import_promise_type ( vm ) {
116
- if objtype :: isinstance ( & py_obj , & promise_type ) {
117
- return browser_module :: get_promise_value ( & py_obj) . into ( ) ;
118
- }
114
+ }
115
+ // the browser module might not be injected
116
+ if let Ok ( promise_type ) = browser_module :: import_promise_type ( vm ) {
117
+ if objtype :: isinstance ( & py_obj, & promise_type ) {
118
+ return browser_module :: get_promise_value ( & py_obj ) . into ( ) ;
119
119
}
120
120
}
121
+
121
122
if objtype:: isinstance ( & py_obj, & vm. ctx . bytes_type ( ) )
122
123
|| objtype:: isinstance ( & py_obj, & vm. ctx . bytearray_type ( ) )
123
124
{
@@ -129,15 +130,8 @@ pub fn py_to_js(vm: &mut VirtualMachine, py_obj: PyObjectRef) -> JsValue {
129
130
}
130
131
arr. into ( )
131
132
} else {
132
- let dumps = rustpython_vm:: import:: import_module ( vm, std:: path:: PathBuf :: default ( ) , "json" )
133
- . expect ( "Couldn't get json module" )
134
- . get_attr ( "dumps" . into ( ) )
135
- . expect ( "Couldn't get json dumps" ) ;
136
- match vm. invoke ( dumps, PyFuncArgs :: new ( vec ! [ py_obj] , vec ! [ ] ) ) {
137
- Ok ( value) => {
138
- let json = vm. to_pystr ( & value) . unwrap ( ) ;
139
- js_sys:: JSON :: parse ( & json) . unwrap_or ( JsValue :: UNDEFINED )
140
- }
133
+ match rustpython_vm:: stdlib:: json:: ser_pyobject ( vm, & py_obj) {
134
+ Ok ( json) => js_sys:: JSON :: parse ( & json) . unwrap_or ( JsValue :: UNDEFINED ) ,
141
135
Err ( _) => JsValue :: UNDEFINED ,
142
136
}
143
137
}
@@ -229,19 +223,10 @@ pub fn js_to_py(vm: &mut VirtualMachine, js_val: JsValue) -> PyObjectRef {
229
223
// Because `JSON.stringify(undefined)` returns undefined
230
224
vm. get_none ( )
231
225
} else {
232
- let loads = rustpython_vm:: import:: import_module ( vm, std:: path:: PathBuf :: default ( ) , "json" )
233
- . expect ( "Couldn't get json module" )
234
- . get_attr ( "loads" . into ( ) )
235
- . expect ( "Couldn't get json dumps" ) ;
236
-
237
226
let json = match js_sys:: JSON :: stringify ( & js_val) {
238
227
Ok ( json) => String :: from ( json) ,
239
228
Err ( _) => return vm. get_none ( ) ,
240
229
} ;
241
- let py_json = vm. new_str ( json) ;
242
-
243
- vm. invoke ( loads, PyFuncArgs :: new ( vec ! [ py_json] , vec ! [ ] ) )
244
- // can safely unwrap because we know it's valid JSON
245
- . unwrap ( )
230
+ rustpython_vm:: stdlib:: json:: de_pyobject ( vm, & json) . unwrap_or_else ( |_| vm. get_none ( ) )
246
231
}
247
232
}
0 commit comments