Available on crate feature
bytes only.Expand description
Conversions to and from bytes’s Bytes.
This is useful for efficiently converting Python’s bytes types efficiently.
While bytes will be directly borrowed, converting from bytearray will result in a copy.
When converting Bytes back into Python, this will do a copy, just like &[u8] and Vec<u8>.
§When to use Bytes
Unless you specifically need Bytes for ref-counted ownership and sharing,
you may find that using &[u8], Vec<u8>, Bound<PyBytes>, or PyBackedBytes
is simpler for most use cases.
§Setup
To use this feature, add in your Cargo.toml:
[dependencies]
bytes = "1.10"
pyo3 = { version = "0.27.2", features = ["bytes"] }Note that you must use compatible versions of bytes and PyO3.
§Example
Rust code to create functions which return Bytes or take Bytes as arguments:
use pyo3::prelude::*;
use bytes::Bytes;
#[pyfunction]
fn get_message_bytes() -> Bytes {
Bytes::from_static(b"Hello Python!")
}
#[pyfunction]
fn num_bytes(bytes: Bytes) -> usize {
bytes.len()
}
#[pymodule]
fn my_module(m: &Bound<'_, PyModule>) -> PyResult<()> {
m.add_function(wrap_pyfunction!(get_message_bytes, m)?)?;
m.add_function(wrap_pyfunction!(num_bytes, m)?)?;
Ok(())
}Python code that calls these functions:
from my_module import get_message_bytes, num_bytes
message = get_message_bytes()
assert message == b"Hello Python!"
size = num_bytes(message)
assert size == 13