@@ -10,7 +10,9 @@ use pyo3::types::PyAnyMethods;
1010use crate :: types;
1111
1212// Common error message generation
13- fn generate_non_convertible_buffer_error_msg ( pyobj : & pyo3:: Bound < ' _ , pyo3:: PyAny > ) -> String {
13+ fn generate_non_convertible_buffer_error_msg (
14+ pyobj : & pyo3:: Borrowed < ' _ , ' _ , pyo3:: PyAny > ,
15+ ) -> String {
1416 if pyobj. is_instance_of :: < pyo3:: types:: PyString > ( ) {
1517 format ! (
1618 "Cannot convert \" {}\" instance to a buffer.\n Did you mean to pass a bytestring instead?" ,
@@ -26,7 +28,7 @@ fn generate_non_convertible_buffer_error_msg(pyobj: &pyo3::Bound<'_, pyo3::PyAny
2628
2729#[ cfg( Py_3_11 ) ]
2830fn _extract_buffer_length (
29- pyobj : & pyo3:: Bound < ' _ , pyo3:: PyAny > ,
31+ pyobj : & pyo3:: Borrowed < ' _ , ' _ , pyo3:: PyAny > ,
3032 mutable : bool ,
3133) -> pyo3:: PyResult < ( Option < pyo3:: buffer:: PyBuffer < u8 > > , usize , usize ) > {
3234 let buf = pyo3:: buffer:: PyBuffer :: < u8 > :: get ( pyobj) . map_err ( |_| {
@@ -45,7 +47,7 @@ fn _extract_buffer_length(
4547
4648#[ cfg( not( Py_3_11 ) ) ]
4749fn _extract_buffer_length < ' p > (
48- pyobj : & pyo3:: Bound < ' p , pyo3:: PyAny > ,
50+ pyobj : & pyo3:: Borrowed < ' _ , ' p , pyo3:: PyAny > ,
4951 mutable : bool ,
5052) -> pyo3:: PyResult < ( pyo3:: Bound < ' p , pyo3:: PyAny > , usize , usize ) > {
5153 let py = pyobj. py ( ) ;
@@ -101,9 +103,11 @@ impl<'a> CffiBuf<'a> {
101103 }
102104}
103105
104- impl < ' a > pyo3:: conversion:: FromPyObject < ' a > for CffiBuf < ' a > {
105- fn extract_bound ( pyobj : & pyo3:: Bound < ' a , pyo3:: PyAny > ) -> pyo3:: PyResult < Self > {
106- let ( bufobj, ptrval, len) = _extract_buffer_length ( pyobj, false ) ?;
106+ impl < ' p > pyo3:: conversion:: FromPyObject < ' _ , ' p > for CffiBuf < ' p > {
107+ type Error = pyo3:: PyErr ;
108+
109+ fn extract ( pyobj : pyo3:: Borrowed < ' _ , ' p , pyo3:: PyAny > ) -> pyo3:: PyResult < Self > {
110+ let ( bufobj, ptrval, len) = _extract_buffer_length ( & pyobj, false ) ?;
107111 let buf = if len == 0 {
108112 & [ ]
109113 } else {
@@ -118,7 +122,7 @@ impl<'a> pyo3::conversion::FromPyObject<'a> for CffiBuf<'a> {
118122 unsafe { slice:: from_raw_parts ( ptrval as * const u8 , len) }
119123 } ;
120124 Ok ( CffiBuf {
121- pyobj : pyobj. clone ( ) ,
125+ pyobj : pyobj. to_owned ( ) ,
122126 _bufobj : bufobj,
123127 buf,
124128 } )
@@ -140,9 +144,11 @@ impl CffiMutBuf<'_> {
140144 }
141145}
142146
143- impl < ' a > pyo3:: conversion:: FromPyObject < ' a > for CffiMutBuf < ' a > {
144- fn extract_bound ( pyobj : & pyo3:: Bound < ' a , pyo3:: PyAny > ) -> pyo3:: PyResult < Self > {
145- let ( bufobj, ptrval, len) = _extract_buffer_length ( pyobj, true ) ?;
147+ impl < ' p > pyo3:: conversion:: FromPyObject < ' _ , ' p > for CffiMutBuf < ' p > {
148+ type Error = pyo3:: PyErr ;
149+
150+ fn extract ( pyobj : pyo3:: Borrowed < ' _ , ' p , pyo3:: PyAny > ) -> pyo3:: PyResult < Self > {
151+ let ( bufobj, ptrval, len) = _extract_buffer_length ( & pyobj, true ) ?;
146152 let buf = if len == 0 {
147153 & mut [ ]
148154 } else {
@@ -157,7 +163,7 @@ impl<'a> pyo3::conversion::FromPyObject<'a> for CffiMutBuf<'a> {
157163 unsafe { slice:: from_raw_parts_mut ( ptrval as * mut u8 , len) }
158164 } ;
159165 Ok ( CffiMutBuf {
160- _pyobj : pyobj. clone ( ) ,
166+ _pyobj : pyobj. to_owned ( ) ,
161167 _bufobj : bufobj,
162168 buf,
163169 } )
0 commit comments