Trait shipyard::BorrowInfo

source ·
pub unsafe trait BorrowInfo {
    // Required methods
    fn borrow_info(info: &mut Vec<TypeInfo>);
    fn enable_tracking(
        enable_tracking_fn: &mut Vec<fn(_: &AllStorages) -> Result<(), GetStorage>>,
    );
}
Expand description

Explains to a workload which storage are borrowed by a system.

§Safety

Must accurately list everything borrowed.

§Example of manual implementation:

use shipyard::{BorrowInfo, info::TypeInfo, track, View, UniqueView};

struct CameraView<'v> {
    camera: UniqueView<'v, Camera>,
    position: View<'v, Position>,
}

// SAFE: All storages info is recorded.
unsafe impl BorrowInfo for CameraView<'_> {
    fn borrow_info(info: &mut Vec<TypeInfo>) {
        <UniqueView<'_, Camera>>::borrow_info(info);
        <View<'_, Position>>::borrow_info(info);
    }
    fn enable_tracking(
        _: &mut Vec<
            for<'a> fn(&'a shipyard::AllStorages) -> Result<(), shipyard::error::GetStorage>,
        >,
    ) {}
}

Required Methods§

source

fn borrow_info(info: &mut Vec<TypeInfo>)

This information is used during workload creation to determine which systems can run in parallel.

A borrow error might happen if the information is not correct.

source

fn enable_tracking( enable_tracking_fn: &mut Vec<fn(_: &AllStorages) -> Result<(), GetStorage>>, )

Enable tracking on the World where this storage is borrowed.

Object Safety§

This trait is not object safe.

Implementations on Foreign Types§

source§

impl BorrowInfo for ()

source§

impl<A: BorrowInfo> BorrowInfo for (A,)

source§

fn borrow_info(info: &mut Vec<TypeInfo>)

source§

fn enable_tracking( enable_tracking_fn: &mut Vec<fn(_: &AllStorages) -> Result<(), GetStorage>>, )

source§

impl<A: BorrowInfo, B: BorrowInfo> BorrowInfo for (A, B)

source§

fn borrow_info(info: &mut Vec<TypeInfo>)

source§

fn enable_tracking( enable_tracking_fn: &mut Vec<fn(_: &AllStorages) -> Result<(), GetStorage>>, )

source§

impl<A: BorrowInfo, B: BorrowInfo, C: BorrowInfo> BorrowInfo for (A, B, C)

source§

fn borrow_info(info: &mut Vec<TypeInfo>)

source§

fn enable_tracking( enable_tracking_fn: &mut Vec<fn(_: &AllStorages) -> Result<(), GetStorage>>, )

source§

impl<A: BorrowInfo, B: BorrowInfo, C: BorrowInfo, D: BorrowInfo> BorrowInfo for (A, B, C, D)

source§

fn borrow_info(info: &mut Vec<TypeInfo>)

source§

fn enable_tracking( enable_tracking_fn: &mut Vec<fn(_: &AllStorages) -> Result<(), GetStorage>>, )

source§

impl<A: BorrowInfo, B: BorrowInfo, C: BorrowInfo, D: BorrowInfo, E: BorrowInfo> BorrowInfo for (A, B, C, D, E)

source§

fn borrow_info(info: &mut Vec<TypeInfo>)

source§

fn enable_tracking( enable_tracking_fn: &mut Vec<fn(_: &AllStorages) -> Result<(), GetStorage>>, )

source§

impl<A: BorrowInfo, B: BorrowInfo, C: BorrowInfo, D: BorrowInfo, E: BorrowInfo, F: BorrowInfo> BorrowInfo for (A, B, C, D, E, F)

source§

fn borrow_info(info: &mut Vec<TypeInfo>)

source§

fn enable_tracking( enable_tracking_fn: &mut Vec<fn(_: &AllStorages) -> Result<(), GetStorage>>, )

source§

impl<A: BorrowInfo, B: BorrowInfo, C: BorrowInfo, D: BorrowInfo, E: BorrowInfo, F: BorrowInfo, G: BorrowInfo> BorrowInfo for (A, B, C, D, E, F, G)

source§

fn borrow_info(info: &mut Vec<TypeInfo>)

source§

fn enable_tracking( enable_tracking_fn: &mut Vec<fn(_: &AllStorages) -> Result<(), GetStorage>>, )

source§

impl<A: BorrowInfo, B: BorrowInfo, C: BorrowInfo, D: BorrowInfo, E: BorrowInfo, F: BorrowInfo, G: BorrowInfo, H: BorrowInfo> BorrowInfo for (A, B, C, D, E, F, G, H)

source§

fn borrow_info(info: &mut Vec<TypeInfo>)

source§

fn enable_tracking( enable_tracking_fn: &mut Vec<fn(_: &AllStorages) -> Result<(), GetStorage>>, )

source§

impl<A: BorrowInfo, B: BorrowInfo, C: BorrowInfo, D: BorrowInfo, E: BorrowInfo, F: BorrowInfo, G: BorrowInfo, H: BorrowInfo, I: BorrowInfo> BorrowInfo for (A, B, C, D, E, F, G, H, I)

source§

fn borrow_info(info: &mut Vec<TypeInfo>)

source§

fn enable_tracking( enable_tracking_fn: &mut Vec<fn(_: &AllStorages) -> Result<(), GetStorage>>, )

source§

impl<A: BorrowInfo, B: BorrowInfo, C: BorrowInfo, D: BorrowInfo, E: BorrowInfo, F: BorrowInfo, G: BorrowInfo, H: BorrowInfo, I: BorrowInfo, J: BorrowInfo> BorrowInfo for (A, B, C, D, E, F, G, H, I, J)

source§

fn borrow_info(info: &mut Vec<TypeInfo>)

source§

fn enable_tracking( enable_tracking_fn: &mut Vec<fn(_: &AllStorages) -> Result<(), GetStorage>>, )

source§

impl<T: BorrowInfo> BorrowInfo for Option<T>

source§

fn borrow_info(info: &mut Vec<TypeInfo>)

source§

fn enable_tracking( enable_tracking: &mut Vec<fn(_: &AllStorages) -> Result<(), GetStorage>>, )

Implementors§

source§

impl<'a> BorrowInfo for AllStoragesView<'a>

source§

impl<'a> BorrowInfo for AllStoragesViewMut<'a>

source§

impl<'a> BorrowInfo for EntitiesView<'a>

source§

impl<'a> BorrowInfo for EntitiesViewMut<'a>

source§

impl<'a, T: Send + Sync + Component, Track> BorrowInfo for View<'a, T, Track>
where Track: Tracking,

source§

impl<'a, T: Send + Sync + Component, Track> BorrowInfo for ViewMut<'a, T, Track>
where Track: Tracking,

source§

impl<'a, T: Send + Sync + Unique> BorrowInfo for UniqueView<'a, T>

source§

impl<'a, T: Send + Sync + Unique> BorrowInfo for UniqueViewMut<'a, T>

source§

impl<'a, T: Send + Component, Track> BorrowInfo for NonSync<View<'a, T, Track>>
where Track: Tracking,

source§

impl<'a, T: Send + Component, Track> BorrowInfo for NonSync<ViewMut<'a, T, Track>>
where Track: Tracking,

source§

impl<'a, T: Send + Unique> BorrowInfo for NonSync<UniqueView<'a, T>>

source§

impl<'a, T: Send + Unique> BorrowInfo for NonSync<UniqueViewMut<'a, T>>

source§

impl<'a, T: Sync + Component, Track> BorrowInfo for NonSend<View<'a, T, Track>>
where Track: Tracking,

source§

impl<'a, T: Sync + Component, Track> BorrowInfo for NonSend<ViewMut<'a, T, Track>>
where Track: Tracking,

source§

impl<'a, T: Sync + Unique> BorrowInfo for NonSend<UniqueView<'a, T>>

source§

impl<'a, T: Sync + Unique> BorrowInfo for NonSend<UniqueViewMut<'a, T>>

source§

impl<'a, T: Component, Track> BorrowInfo for NonSendSync<View<'a, T, Track>>
where Track: Tracking,

source§

impl<'a, T: Component, Track> BorrowInfo for NonSendSync<ViewMut<'a, T, Track>>
where Track: Tracking,

source§

impl<'a, T: Unique> BorrowInfo for NonSendSync<UniqueView<'a, T>>

source§

impl<'a, T: Unique> BorrowInfo for NonSendSync<UniqueViewMut<'a, T>>