Struct pyo3::types::PyByteArray [−][src]
#[repr(transparent)]pub struct PyByteArray(_);
Expand description
Represents a Python bytearray
.
Implementations
Creates a new Python bytearray object.
The byte string is initialized by copying the data from the &[u8]
.
Creates a new Python bytearray
object with an init
closure to write its contents.
Before calling init
the bytearray is zero-initialised.
- If Python raises a MemoryError on the allocation,
new_with
will return it insideErr
. - If
init
returnsErr(e)
,new_with
will returnErr(e)
. - If
init
returnsOk(())
,new_with
will returnOk(&PyByteArray)
.
Example
use pyo3::{prelude::*, types::PyByteArray};
Python::with_gil(|py| -> PyResult<()> {
let py_bytearray = PyByteArray::new_with(py, 10, |bytes: &mut [u8]| {
bytes.copy_from_slice(b"Hello Rust");
Ok(())
})?;
let bytearray: &[u8] = unsafe { py_bytearray.as_bytes() };
assert_eq!(bytearray, b"Hello Rust");
Ok(())
});
pub fn from<'p, I>(py: Python<'p>, src: &'p I) -> PyResult<&'p PyByteArray> where
I: AsPyPointer,
pub fn from<'p, I>(py: Python<'p>, src: &'p I) -> PyResult<&'p PyByteArray> where
I: AsPyPointer,
Creates a new Python bytearray object from another PyObject that implements the buffer protocol.
Get the start of the buffer containing the contents of the bytearray.
Note that this bytearray object is both shared and mutable, and the backing buffer may be reallocated if the bytearray is resized. This can occur from Python code as well as from Rust via PyByteArray::resize.
As a result, the returned pointer should be dereferenced only if since calling this method no Python code has executed, PyByteArray::resize has not been called.
Get the contents of this buffer as a slice.
Safety
This bytearray must not be resized or edited while holding the slice.
Safety Detail
This method is equivalent to std::slice::from_raw_parts(self.data(), self.len())
, and so
all the safety notes of std::slice::from_raw_parts
apply here.
In particular, note that this bytearray object is both shared and mutable, and the backing buffer may be reallocated if the bytearray is resized. Mutations can occur from Python code as well as from Rust, via PyByteArray::as_bytes_mut and PyByteArray::resize.
Extreme care should be exercised when using this slice, as the Rust compiler will make optimizations based on the assumption the contents of this slice cannot change. This can easily lead to undefined behavior.
As a result, this slice should only be used for short-lived operations to read this bytearray without executing any Python code, such as copying into a Vec.
Get the contents of this buffer as a mutable slice.
Safety
This slice should only be used for short-lived operations that write to this bytearray without executing any Python code. See the safety note for PyByteArray::as_bytes.
Copies the contents of the bytearray to a Rust vector.
Example
let bytearray = PyByteArray::new(py, b"Hello World.");
let mut copied_message = bytearray.to_vec();
assert_eq!(b"Hello World.", copied_message.as_slice());
copied_message[11] = b'!';
assert_eq!(b"Hello World!", copied_message.as_slice());
let locals = [("bytearray", bytearray)].into_py_dict(py);
py.run("assert bytearray == b'Hello World.'", None, Some(locals)).unwrap();
Resizes the bytearray object to the new length len
.
Note that this will invalidate any pointers obtained by PyByteArray::data, as well as any (unsafe) slices obtained from PyByteArray::as_bytes and PyByteArray::as_bytes_mut.
Methods from Deref<Target = PyAny>
Convert this PyAny to a concrete Python type.
Determines whether this object has the given attribute.
This is equivalent to the Python expression hasattr(self, attr_name)
.
Retrieves an attribute value.
This is equivalent to the Python expression self.attr_name
.
pub fn setattr<N, V>(&self, attr_name: N, value: V) -> PyResult<()> where
N: ToBorrowedObject,
V: ToBorrowedObject,
pub fn setattr<N, V>(&self, attr_name: N, value: V) -> PyResult<()> where
N: ToBorrowedObject,
V: ToBorrowedObject,
Sets an attribute value.
This is equivalent to the Python expression self.attr_name = value
.
Deletes an attribute.
This is equivalent to the Python expression del self.attr_name
.
Compares two Python objects.
This is equivalent to:
if self == other:
return Equal
elif a < b:
return Less
elif a > b:
return Greater
else:
raise TypeError("PyAny::compare(): All comparisons returned false")
pub fn rich_compare<O>(
&self,
other: O,
compare_op: CompareOp
) -> PyResult<&PyAny> where
O: ToPyObject,
pub fn rich_compare<O>(
&self,
other: O,
compare_op: CompareOp
) -> PyResult<&PyAny> where
O: ToPyObject,
Compares two Python objects.
Depending on the value of compare_op
, this is equivalent to one of the
following Python expressions:
- CompareOp::Eq:
self == other
- CompareOp::Ne:
self != other
- CompareOp::Lt:
self < other
- CompareOp::Le:
self <= other
- CompareOp::Gt:
self > other
- CompareOp::Ge:
self >= other
Determines whether this object is callable.
Calls the object.
This is equivalent to the Python expression self(*args, **kwargs)
.
Calls the object without arguments.
This is equivalent to the Python expression self()
.
Calls the object with only positional arguments.
This is equivalent to the Python expression self(*args)
.
Calls a method on the object.
This is equivalent to the Python expression self.name(*args, **kwargs)
.
Example
use pyo3::types::IntoPyDict;
let gil = Python::acquire_gil();
let py = gil.python();
let list = vec![3, 6, 5, 4, 7].to_object(py);
let dict = vec![("reverse", true)].into_py_dict(py);
list.call_method(py, "sort", (), Some(dict)).unwrap();
assert_eq!(list.extract::<Vec<i32>>(py).unwrap(), vec![7, 6, 5, 4, 3]);
let new_element = 1.to_object(py);
list.call_method(py, "append", (new_element,), None).unwrap();
assert_eq!(list.extract::<Vec<i32>>(py).unwrap(), vec![7, 6, 5, 4, 3, 1]);
Calls a method on the object without arguments.
This is equivalent to the Python expression self.name()
.
Calls a method on the object with only positional arguments.
This is equivalent to the Python expression self.name(*args)
.
Returns whether the object is considered to be true.
This is equivalent to the Python expression bool(self)
.
Returns whether the object is considered to be None.
This is equivalent to the Python expression self is None
.
Returns true if the sequence or mapping has a length of 0.
This is equivalent to the Python expression len(self) == 0
.
Gets an item from the collection.
This is equivalent to the Python expression self[key]
.
pub fn set_item<K, V>(&self, key: K, value: V) -> PyResult<()> where
K: ToBorrowedObject,
V: ToBorrowedObject,
pub fn set_item<K, V>(&self, key: K, value: V) -> PyResult<()> where
K: ToBorrowedObject,
V: ToBorrowedObject,
Sets a collection item value.
This is equivalent to the Python expression self[key] = value
.
Deletes an item from the collection.
This is equivalent to the Python expression del self[key]
.
Takes an object and returns an iterator for it.
This is typically a new iterator but if the argument is an iterator, this returns itself.
Returns the Python type pointer for this object.
Casts the PyObject to a concrete Python object type.
This can cast only to native Python types, not types implemented in Rust.
Extracts some type from the Python object.
This is a wrapper function around FromPyObject::extract()
.
Returns the reference count for the Python object.
Computes the “repr” representation of self.
This is equivalent to the Python expression repr(self)
.
Computes the “str” representation of self.
This is equivalent to the Python expression str(self)
.
Retrieves the hash code of self.
This is equivalent to the Python expression hash(self)
.
Returns the length of the sequence or mapping.
This is equivalent to the Python expression len(self)
.
Returns the list of attributes of this object.
This is equivalent to the Python expression dir(self)
.
Checks whether this object is an instance of type T
.
This is equivalent to the Python expression isinstance(self, T)
.
Trait Implementations
Performs the conversion.
Performs the conversion.
Performs the conversion.
type BaseLayout = PyObject
type BaseLayout = PyObject
Layout of Basetype.
type Initializer = PyNativeTypeInitializer<Self>
type Initializer = PyNativeTypeInitializer<Self>
Initializer for layout
type AsRefTarget = Self
type AsRefTarget = Self
Utility type to make Py::as_ref work
PyTypeObject instance for this type.
Checks if object
is an instance of this type or a subclass of this type.
Class doc string
Checks if object
is an instance of this type.
Auto Trait Implementations
impl !RefUnwindSafe for PyByteArray
impl !Send for PyByteArray
impl !Sync for PyByteArray
impl Unpin for PyByteArray
impl UnwindSafe for PyByteArray
Blanket Implementations
Mutably borrows from an owned value. Read more
Convert from an arbitrary PyObject
. Read more
Convert from an arbitrary borrowed PyObject
. Read more
Convert from an arbitrary PyObject
or panic. Read more
Convert from an arbitrary PyObject
or panic. Read more
Convert from an arbitrary PyObject
. Read more
Convert from an arbitrary borrowed PyObject
. Read more
Convert from an arbitrary borrowed PyObject
. Read more
Cast from a concrete Python object type to PyObject.
Cast from a concrete Python object type to PyObject. With exact type check.
Returns the safe abstraction over the type object.