@@ -6,9 +6,12 @@ use serde::ser::{self, Serialize, SerializeMap, SerializeSeq, Serializer};
66
77pub fn serialize ( py : Python , obj : PyObject ) -> PyResult < PyObject > {
88 let typerefs = TypeRefs :: new ( py) ;
9- let s: Result < Vec < u8 > , JsonError > = serde_json:: to_vec (
10- & SerializePyObject { py : py, refs : & typerefs, obj : obj. as_ref ( py) }
11- ) . map_err ( |error| JsonError :: InvalidConversion { error } ) ;
9+ let s: Result < Vec < u8 > , JsonError > = serde_json:: to_vec ( & SerializePyObject {
10+ py : py,
11+ refs : & typerefs,
12+ obj : obj. as_ref ( py) ,
13+ } )
14+ . map_err ( |error| JsonError :: InvalidConversion { error } ) ;
1215 Ok ( PyBytes :: new ( py, ( s?) . as_slice ( ) ) . into ( ) )
1316}
1417
@@ -17,7 +20,6 @@ pub enum JsonError {
1720}
1821
1922impl From < JsonError > for PyErr {
20-
2123 fn from ( h : JsonError ) -> PyErr {
2224 match h {
2325 JsonError :: InvalidConversion { error } => {
@@ -41,7 +43,6 @@ pub struct TypeRefs {
4143}
4244
4345impl TypeRefs {
44-
4546 pub fn new ( py : Python ) -> TypeRefs {
4647 TypeRefs {
4748 str : PyUnicode :: new ( py, "python" ) . as_ref ( py) . get_type_ptr ( ) ,
@@ -64,31 +65,34 @@ pub struct SerializePyObject<'p, 'a> {
6465}
6566
6667impl < ' p , ' a > Serialize for SerializePyObject < ' p , ' a > {
67-
6868 fn serialize < S > ( & self , serializer : S ) -> Result < S :: Ok , S :: Error >
6969 where
7070 S : Serializer ,
7171 {
7272 let obj_ptr = self . obj . get_type_ptr ( ) ;
7373 if obj_ptr == self . refs . str {
74- let val: & PyUnicode = self . obj . extract ( ) . unwrap ( ) ;
75- serializer. serialize_str (
76- unsafe { std:: str:: from_utf8_unchecked ( val. as_bytes ( ) ) }
77- )
74+ let val: & PyUnicode = self . obj . extract ( ) . unwrap ( ) ;
75+ serializer. serialize_str ( unsafe { std:: str:: from_utf8_unchecked ( val. as_bytes ( ) ) } )
7876 } else if obj_ptr == self . refs . bytes {
7977 let val: & PyBytes = self . obj . extract ( ) . unwrap ( ) ;
80- serializer. serialize_str (
81- unsafe { std:: str:: from_utf8_unchecked ( val. as_bytes ( ) ) }
82- )
78+ serializer. serialize_str ( unsafe { std:: str:: from_utf8_unchecked ( val. as_bytes ( ) ) } )
8379 } else if obj_ptr == self . refs . dict {
8480 let val: & PyDict = self . obj . extract ( ) . unwrap ( ) ;
8581 let len = val. len ( ) ;
8682 if len != 0 {
8783 let mut map = serializer. serialize_map ( Some ( len) ) ?;
8884 for ( key, value) in val. iter ( ) {
8985 map. serialize_entry (
90- & SerializePyObject { py : self . py , refs : self . refs , obj : key } ,
91- & SerializePyObject { py : self . py , refs : self . refs , obj : value } ,
86+ & SerializePyObject {
87+ py : self . py ,
88+ refs : self . refs ,
89+ obj : key,
90+ } ,
91+ & SerializePyObject {
92+ py : self . py ,
93+ refs : self . refs ,
94+ obj : value,
95+ } ,
9296 ) ?;
9397 }
9498 map. end ( )
@@ -101,8 +105,11 @@ impl<'p, 'a> Serialize for SerializePyObject<'p, 'a> {
101105 if len != 0 {
102106 let mut seq = serializer. serialize_seq ( Some ( len) ) ?;
103107 for element in val {
104- seq. serialize_element (
105- & SerializePyObject { py : self . py , refs : self . refs , obj : element } ) ?
108+ seq. serialize_element ( & SerializePyObject {
109+ py : self . py ,
110+ refs : self . refs ,
111+ obj : element,
112+ } ) ?
106113 }
107114 seq. end ( )
108115 } else {
@@ -114,24 +121,27 @@ impl<'p, 'a> Serialize for SerializePyObject<'p, 'a> {
114121 if len != 0 {
115122 let mut seq = serializer. serialize_seq ( Some ( len) ) ?;
116123 for element in val {
117- seq. serialize_element (
118- & SerializePyObject { py : self . py , refs : self . refs , obj : element }
119- ) ?
124+ seq. serialize_element ( & SerializePyObject {
125+ py : self . py ,
126+ refs : self . refs ,
127+ obj : element,
128+ } ) ?
120129 }
121130 seq. end ( )
122131 } else {
123132 serializer. serialize_seq ( None ) . unwrap ( ) . end ( )
124133 }
125134 } else if obj_ptr == self . refs . bool {
126- let val: & PyBool = self . obj . extract ( ) . unwrap ( ) ;
127- serializer. serialize_bool ( val. is_true ( ) )
135+ let val: & PyBool = self . obj . extract ( ) . unwrap ( ) ;
136+ serializer. serialize_bool ( val. is_true ( ) )
128137 } else if obj_ptr == self . refs . int {
129138 if let Ok ( val) = <i64 as FromPyObject >:: extract ( self . obj ) {
130139 serializer. serialize_i64 ( val)
131140 } else {
132- Err ( ser:: Error :: custom (
133- format_args ! ( "Integer exceeds 64-bit max: {:?}" , self . obj)
134- ) )
141+ Err ( ser:: Error :: custom ( format_args ! (
142+ "Integer exceeds 64-bit max: {:?}" ,
143+ self . obj
144+ ) ) )
135145 }
136146 } else if obj_ptr == self . refs . float {
137147 let val: & PyFloat = self . obj . extract ( ) . unwrap ( ) ;
0 commit comments