A trait to define common buffer behavior
| 26 | |
| 27 | /// A trait to define common buffer behavior |
| 28 | pub trait PyBufferProtocol<'py>: IntoPyObject<'py> { |
| 29 | fn as_slice(&self) -> &[u8]; |
| 30 | |
| 31 | /// Consume self to build a bytes |
| 32 | fn into_bytes(self, py: Python<'py>) -> PyResult<Py<PyAny>> { |
| 33 | let buffer = self.into_py_any(py)?; |
| 34 | unsafe { PyObject::from_owned_ptr_or_err(py, ffi::PyBytes_FromObject(buffer.as_ptr())) } |
| 35 | } |
| 36 | |
| 37 | /// Consume self to build a bytes |
| 38 | fn into_bytes_ref(self, py: Python<'py>) -> PyResult<Bound<'py, PyAny>> { |
| 39 | let buffer = self.into_py_any(py)?; |
| 40 | unsafe { Bound::from_owned_ptr_or_err(py, ffi::PyBytes_FromObject(buffer.as_ptr())) } |
| 41 | } |
| 42 | } |
| 43 | |
| 44 | macro_rules! impl_buffer { |
| 45 | ($name:ident, $inner_type:ty) => { |