Trait ResourceSet

Source
pub trait ResourceSet<'a> {
    type Result: 'a;

    // Required method
    unsafe fn fetch_unchecked(resources: &'a UnsafeResources) -> Self::Result;

    // Provided methods
    fn fetch_mut(resources: &'a mut Resources) -> Self::Result { ... }
    fn fetch(resources: &'a Resources) -> Self::Result
       where Self: ReadOnly { ... }
}
Expand description

Trait which is implemented for tuples of resources and singular resources. This abstracts fetching resources to allow for ergonomic fetching.

§Example:

struct TypeA(usize);
struct TypeB(usize);

let mut resources = Resources::default();
resources.insert(TypeA(55));
resources.insert(TypeB(12));

{
    let (a, mut b) = <(Read<TypeA>, Write<TypeB>)>::fetch_mut(&mut resources);
    assert_ne!(a.0, b.0);
    b.0 = a.0;
}

{
    let (a, b) = <(Read<TypeA>, Read<TypeB>)>::fetch(&resources);
    assert_eq!(a.0, b.0);
}

Required Associated Types§

Source

type Result: 'a

The resource reference returned during a fetch.

Required Methods§

Source

unsafe fn fetch_unchecked(resources: &'a UnsafeResources) -> Self::Result

Fetches all defined resources, without checking mutability.

§Safety

It is up to the end user to validate proper mutability rules across the resources being accessed.

Provided Methods§

Source

fn fetch_mut(resources: &'a mut Resources) -> Self::Result

Fetches all defined resources.

Source

fn fetch(resources: &'a Resources) -> Self::Result
where Self: ReadOnly,

Fetches all defined resources.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl<'a> ResourceSet<'a> for ()

Source§

impl<'a, A, B, C, D, E, F, G, H> ResourceSet<'a> for (A, B, C, D, E, F, G, H)
where A: ResourceSet<'a>, B: ResourceSet<'a>, C: ResourceSet<'a>, D: ResourceSet<'a>, E: ResourceSet<'a>, F: ResourceSet<'a>, G: ResourceSet<'a>, H: ResourceSet<'a>,

Source§

type Result = (<A as ResourceSet<'a>>::Result, <B as ResourceSet<'a>>::Result, <C as ResourceSet<'a>>::Result, <D as ResourceSet<'a>>::Result, <E as ResourceSet<'a>>::Result, <F as ResourceSet<'a>>::Result, <G as ResourceSet<'a>>::Result, <H as ResourceSet<'a>>::Result)

Source§

unsafe fn fetch_unchecked( resources: &'a UnsafeResources, ) -> <(A, B, C, D, E, F, G, H) as ResourceSet<'a>>::Result

Source§

impl<'a, B, C, D, E, F, G, H> ResourceSet<'a> for (B, C, D, E, F, G, H)
where B: ResourceSet<'a>, C: ResourceSet<'a>, D: ResourceSet<'a>, E: ResourceSet<'a>, F: ResourceSet<'a>, G: ResourceSet<'a>, H: ResourceSet<'a>,

Source§

type Result = (<B as ResourceSet<'a>>::Result, <C as ResourceSet<'a>>::Result, <D as ResourceSet<'a>>::Result, <E as ResourceSet<'a>>::Result, <F as ResourceSet<'a>>::Result, <G as ResourceSet<'a>>::Result, <H as ResourceSet<'a>>::Result)

Source§

unsafe fn fetch_unchecked( resources: &'a UnsafeResources, ) -> <(B, C, D, E, F, G, H) as ResourceSet<'a>>::Result

Source§

impl<'a, C, D, E, F, G, H> ResourceSet<'a> for (C, D, E, F, G, H)
where C: ResourceSet<'a>, D: ResourceSet<'a>, E: ResourceSet<'a>, F: ResourceSet<'a>, G: ResourceSet<'a>, H: ResourceSet<'a>,

Source§

type Result = (<C as ResourceSet<'a>>::Result, <D as ResourceSet<'a>>::Result, <E as ResourceSet<'a>>::Result, <F as ResourceSet<'a>>::Result, <G as ResourceSet<'a>>::Result, <H as ResourceSet<'a>>::Result)

Source§

unsafe fn fetch_unchecked( resources: &'a UnsafeResources, ) -> <(C, D, E, F, G, H) as ResourceSet<'a>>::Result

Source§

impl<'a, D, E, F, G, H> ResourceSet<'a> for (D, E, F, G, H)
where D: ResourceSet<'a>, E: ResourceSet<'a>, F: ResourceSet<'a>, G: ResourceSet<'a>, H: ResourceSet<'a>,

Source§

type Result = (<D as ResourceSet<'a>>::Result, <E as ResourceSet<'a>>::Result, <F as ResourceSet<'a>>::Result, <G as ResourceSet<'a>>::Result, <H as ResourceSet<'a>>::Result)

Source§

unsafe fn fetch_unchecked( resources: &'a UnsafeResources, ) -> <(D, E, F, G, H) as ResourceSet<'a>>::Result

Source§

impl<'a, E, F, G, H> ResourceSet<'a> for (E, F, G, H)
where E: ResourceSet<'a>, F: ResourceSet<'a>, G: ResourceSet<'a>, H: ResourceSet<'a>,

Source§

type Result = (<E as ResourceSet<'a>>::Result, <F as ResourceSet<'a>>::Result, <G as ResourceSet<'a>>::Result, <H as ResourceSet<'a>>::Result)

Source§

unsafe fn fetch_unchecked( resources: &'a UnsafeResources, ) -> <(E, F, G, H) as ResourceSet<'a>>::Result

Source§

impl<'a, F, G, H> ResourceSet<'a> for (F, G, H)
where F: ResourceSet<'a>, G: ResourceSet<'a>, H: ResourceSet<'a>,

Source§

type Result = (<F as ResourceSet<'a>>::Result, <G as ResourceSet<'a>>::Result, <H as ResourceSet<'a>>::Result)

Source§

unsafe fn fetch_unchecked( resources: &'a UnsafeResources, ) -> <(F, G, H) as ResourceSet<'a>>::Result

Source§

impl<'a, G, H> ResourceSet<'a> for (G, H)
where G: ResourceSet<'a>, H: ResourceSet<'a>,

Source§

type Result = (<G as ResourceSet<'a>>::Result, <H as ResourceSet<'a>>::Result)

Source§

unsafe fn fetch_unchecked( resources: &'a UnsafeResources, ) -> <(G, H) as ResourceSet<'a>>::Result

Source§

impl<'a, H> ResourceSet<'a> for (H,)
where H: ResourceSet<'a>,

Source§

type Result = (<H as ResourceSet<'a>>::Result,)

Source§

unsafe fn fetch_unchecked( resources: &'a UnsafeResources, ) -> <(H,) as ResourceSet<'a>>::Result

Implementors§

Source§

impl<'a, T> ResourceSet<'a> for Read<T>
where T: Resource,

Source§

impl<'a, T> ResourceSet<'a> for Write<T>
where T: Resource,