pub struct ValueStorage<T: Copy> {
pub inner: ValueStorageInner<T>,
}Expand description
Generic storage for PyBevy value types (Copy types like Vec3, Quat, etc.)
Supports two modes:
Owned: Python-created value, stored directly (no heap allocation)Borrowed: Reference to field in a component (e.g., transform.translation)
§Type Parameters
T: The value type (must implementCopyfor efficient storage)
§Safety
Borrowed variant contains a raw pointer to value data in a component.
The ValidityFlagWithMode ensures this pointer is only dereferenced during
system execution when the pointer is guaranteed to be valid, and tracks
whether the component was accessed mutably or immutably.
Fields§
§inner: ValueStorageInner<T>Implementations§
Source§impl<T: Copy> ValueStorage<T>
impl<T: Copy> ValueStorage<T>
Sourcepub fn as_ref(&self) -> Result<&T, StorageError>
pub fn as_ref(&self) -> Result<&T, StorageError>
Get immutable reference to the value, checking validity
§Errors
Returns StorageError::InvalidAccess if the borrowed reference is no longer valid
(i.e., accessed outside of system execution context)
Sourcepub fn as_mut(&mut self) -> Result<&mut T, StorageError>
pub fn as_mut(&mut self) -> Result<&mut T, StorageError>
Get mutable reference to the value, checking validity and write permission
§Errors
Returns StorageError if:
- The borrowed reference is no longer valid
- The value was borrowed immutably (Ref) but mutable access is attempted
Sourcepub fn get(&self) -> Result<T, StorageError>
pub fn get(&self) -> Result<T, StorageError>
Get the current value (returns a copy)
For owned values, returns a copy. For borrowed values, copies the current value.
§Errors
Returns error if borrowed value is no longer valid
Sourcepub fn borrow_field<F: Clone, S>(
&self,
field_accessor: impl Fn(&T) -> &F,
) -> Result<S, StorageError>where
S: BorrowableStorage<F>,
pub fn borrow_field<F: Clone, S>(
&self,
field_accessor: impl Fn(&T) -> &F,
) -> Result<S, StorageError>where
S: BorrowableStorage<F>,
Helper to borrow a field from the value storage
This reduces boilerplate in field getters by unifying the owned/borrowed cases. Similar to ComponentStorage::borrow_field, but works with ValueStorage.
For owned storage (including read-only snapshots), returns a read-only snapshot of the field. For borrowed storage, returns a borrowed pointer into the underlying data.
Sourcepub fn borrow_field_as<F: Clone, S, W>(
&self,
field_accessor: impl Fn(&T) -> &F,
) -> Result<W, StorageError>where
S: BorrowableStorage<F>,
W: FromBorrowedStorage<S>,
pub fn borrow_field_as<F: Clone, S, W>(
&self,
field_accessor: impl Fn(&T) -> &F,
) -> Result<W, StorageError>where
S: BorrowableStorage<F>,
W: FromBorrowedStorage<S>,
Helper to borrow a field and wrap it in the final Python type
Combines borrow_field with FromBorrowedStorage::from_borrowed to reduce boilerplate.
Trait Implementations§
Source§impl<T: Copy> BorrowableStorage<T> for ValueStorage<T>
impl<T: Copy> BorrowableStorage<T> for ValueStorage<T>
Source§impl<T: Copy> Clone for ValueStorage<T>
impl<T: Copy> Clone for ValueStorage<T>
Source§impl<T> PartialEq for ValueStorage<T>
impl<T> PartialEq for ValueStorage<T>
impl<T: Copy + Send> Send for ValueStorage<T>
impl<T: Copy + Sync> Sync for ValueStorage<T>
Auto Trait Implementations§
impl<T> Freeze for ValueStorage<T>where
T: Freeze,
impl<T> RefUnwindSafe for ValueStorage<T>where
T: RefUnwindSafe,
impl<T> Unpin for ValueStorage<T>where
T: Unpin,
impl<T> UnsafeUnpin for ValueStorage<T>where
T: UnsafeUnpin,
impl<T> UnwindSafe for ValueStorage<T>where
T: UnwindSafe + RefUnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more