@@ -9,6 +9,7 @@ use pyo3::types::*;
99use pyo3:: wrap_pyfunction;
1010use pyo3:: { IntoPy , Py } ;
1111use std:: io:: { self , Cursor , Read , Seek , SeekFrom } ;
12+ use pyo3:: import_exception;
1213
1314// Since this module is being currently imported we assume the GIL is acquired.
1415// If it isn't, this module is the least of our problems
@@ -31,6 +32,8 @@ lazy_static! {
3132 } ;
3233}
3334
35+ import_exception ! ( amqp, FrameSyntaxError ) ;
36+
3437struct AMQPDeserializer < ' deserializer_l > {
3538 py : & ' deserializer_l Python < ' deserializer_l > ,
3639 format : & ' deserializer_l str ,
@@ -156,7 +159,7 @@ impl<'deserializer_l> AMQPDeserializer<'deserializer_l> {
156159 }
157160
158161 #[ inline]
159- fn read_item ( & mut self ) -> io :: Result < PyObject > {
162+ fn read_item ( & mut self ) -> PyResult < PyObject > {
160163 let ftype = self . cursor . read_u8 ( ) ? as char ;
161164 match ftype {
162165 'S' => {
@@ -187,7 +190,7 @@ impl<'deserializer_l> AMQPDeserializer<'deserializer_l> {
187190 't' => Ok ( ( self . cursor . read_u8 ( ) ? == 1 ) . to_object ( * self . py ) ) ,
188191 'T' => Ok ( self . read_timestamp ( ) ?. into ( ) ) ,
189192 'V' => Ok ( self . py . None ( ) ) ,
190- _ => Ok ( self . py . None ( ) ) , // TODO: Return error
193+ _ => Err ( FrameSyntaxError :: py_err ( format ! ( "Unknown value in table: '{}'" , ftype ) ) . into ( ) ) ,
191194 }
192195 }
193196
@@ -214,7 +217,7 @@ impl<'deserializer_l> AMQPDeserializer<'deserializer_l> {
214217 Ok ( array)
215218 }
216219
217- fn deserialize ( & mut self ) -> io :: Result < ( & ' deserializer_l PyList , u64 ) > {
220+ fn deserialize ( & mut self ) -> PyResult < ( & ' deserializer_l PyList , u64 ) > {
218221 let values = PyList :: empty ( * self . py ) ;
219222
220223 for p in self . format . chars ( ) {
@@ -266,7 +269,7 @@ impl<'deserializer_l> AMQPDeserializer<'deserializer_l> {
266269 values. append ( self . read_array ( ) ?) ?;
267270 }
268271 _ => {
269- // TODO: Handle errors correctly
272+ return Err ( FrameSyntaxError :: py_err ( format ! ( "Table type '{}' not handled by amqp." , p ) ) . into ( ) ) ;
270273 }
271274 }
272275 }
0 commit comments