@@ -9,8 +9,8 @@ use bytes::{BufMut, BytesMut};
99use postgres_protocol:: types;
1010use pyo3:: {
1111 types:: {
12- PyAnyMethods , PyBool , PyBytes , PyDict , PyDictMethods , PyFloat , PyInt , PyList ,
13- PyListMethods , PyString , PyTuple , PyTypeMethods ,
12+ PyAnyMethods , PyBool , PyBytes , PyDate , PyDateTime , PyDict , PyDictMethods , PyFloat , PyInt ,
13+ PyList , PyListMethods , PyString , PyTime , PyTuple , PyTypeMethods ,
1414 } ,
1515 Bound , Py , PyAny , Python , ToPyObject ,
1616} ;
@@ -303,28 +303,6 @@ pub fn py_to_rust(parameter: &pyo3::Bound<'_, PyAny>) -> RustPSQLDriverPyResult<
303303 return Ok ( PythonDTO :: PyBytes ( parameter. extract :: < Vec < u8 > > ( ) ?) ) ;
304304 }
305305
306- if parameter. get_type ( ) . name ( ) ? == "datetime" {
307- let timestamp_tz = parameter. extract :: < DateTime < FixedOffset > > ( ) ;
308- if let Ok ( pydatetime_tz) = timestamp_tz {
309- return Ok ( PythonDTO :: PyDateTimeTz ( pydatetime_tz) ) ;
310- }
311-
312- let timestamp_no_tz = parameter. extract :: < NaiveDateTime > ( ) ;
313- if let Ok ( pydatetime_no_tz) = timestamp_no_tz {
314- return Ok ( PythonDTO :: PyDateTime ( pydatetime_no_tz) ) ;
315- }
316-
317- return Err ( RustPSQLDriverError :: PyToRustValueConversionError (
318- "Can not convert you datetime to rust type" . into ( ) ,
319- ) ) ;
320- }
321-
322- if parameter. get_type ( ) . name ( ) ? == "UUID" {
323- return Ok ( PythonDTO :: PyUUID ( Uuid :: parse_str (
324- parameter. str ( ) ?. extract :: < & str > ( ) ?,
325- ) ?) ) ;
326- }
327-
328306 if parameter. is_instance_of :: < PyText > ( ) {
329307 return Ok ( PythonDTO :: PyText ( parameter. extract :: < PyText > ( ) ?. inner ( ) ) ) ;
330308 }
@@ -366,22 +344,30 @@ pub fn py_to_rust(parameter: &pyo3::Bound<'_, PyAny>) -> RustPSQLDriverPyResult<
366344 return Ok ( PythonDTO :: PyIntI32 ( parameter. extract :: < i32 > ( ) ?) ) ;
367345 }
368346
369- if parameter. get_type ( ) . name ( ) ? == "date" {
370- return Ok ( PythonDTO :: PyDate ( parameter. extract :: < NaiveDate > ( ) ?) ) ;
347+ if parameter. is_instance_of :: < PyDateTime > ( ) {
348+ let timestamp_tz = parameter. extract :: < DateTime < FixedOffset > > ( ) ;
349+ if let Ok ( pydatetime_tz) = timestamp_tz {
350+ return Ok ( PythonDTO :: PyDateTimeTz ( pydatetime_tz) ) ;
351+ }
352+
353+ let timestamp_no_tz = parameter. extract :: < NaiveDateTime > ( ) ;
354+ if let Ok ( pydatetime_no_tz) = timestamp_no_tz {
355+ return Ok ( PythonDTO :: PyDateTime ( pydatetime_no_tz) ) ;
356+ }
357+
358+ return Err ( RustPSQLDriverError :: PyToRustValueConversionError (
359+ "Can not convert you datetime to rust type" . into ( ) ,
360+ ) ) ;
371361 }
372362
373- // if parameter.is_instance_of::<PyDate>() {
374- // return Ok(PythonDTO::PyDate(parameter.extract::<NaiveDate>()?));
375- // }
363+ if parameter. is_instance_of :: < PyDate > ( ) {
364+ return Ok ( PythonDTO :: PyDate ( parameter. extract :: < NaiveDate > ( ) ?) ) ;
365+ }
376366
377- if parameter. get_type ( ) . name ( ) ? == "time" {
367+ if parameter. is_instance_of :: < PyTime > ( ) {
378368 return Ok ( PythonDTO :: PyTime ( parameter. extract :: < NaiveTime > ( ) ?) ) ;
379369 }
380370
381- // if parameter.is_instance_of::<PyTime>() {
382- // return Ok(PythonDTO::PyTime(parameter.extract::<NaiveTime>()?));
383- // }
384-
385371 if parameter. is_instance_of :: < PyList > ( ) | parameter. is_instance_of :: < PyTuple > ( ) {
386372 let mut items = Vec :: new ( ) ;
387373 for inner in parameter. iter ( ) ? {
@@ -439,6 +425,12 @@ pub fn py_to_rust(parameter: &pyo3::Bound<'_, PyAny>) -> RustPSQLDriverPyResult<
439425 ) ) ;
440426 }
441427
428+ if parameter. get_type ( ) . name ( ) ? == "UUID" {
429+ return Ok ( PythonDTO :: PyUUID ( Uuid :: parse_str (
430+ parameter. str ( ) ?. extract :: < & str > ( ) ?,
431+ ) ?) ) ;
432+ }
433+
442434 if let Ok ( id_address) = parameter. extract :: < IpAddr > ( ) {
443435 return Ok ( PythonDTO :: PyIpAddress ( id_address) ) ;
444436 }
0 commit comments