Skip to main content

Resolve

Trait Resolve 

Source
pub trait Resolve<S>:
    Clone
    + Send
    + Sync
    + Sized
    + 'static {
    // Required methods
    fn dependencies(into: &mut Vec<TypeId>);
    fn resolve(registry: &Registry<S>) -> Result<Self>;
}
Expand description

The dependencies a component declares through Component::Deps.

A dependency is a hard requirement: the component cannot boot or run without it. Arc<T> requires T to be registered and, when T is itself a component, orders it before the dependent. Option<Arc<T>> takes the same ordering when T is present and resolves to None when it is not. Tuples combine up to eight dependencies; () declares none.

A component that merely uses another when it happens to be there, and serves without it, does not declare it here. It resolves the value at the point of use and expresses a preferred start order through run_priority.

Resolution happens once before Bootable::boot and once before each run generation, in the registry, after every dependency has had its chance to be registered. A missing dependency is one error naming the component and the missing type.

Required Methods§

Source

fn dependencies(into: &mut Vec<TypeId>)

The types this value requires. The registry turns registered components among them into ordering edges.

Source

fn resolve(registry: &Registry<S>) -> Result<Self>

Resolve the value from the registry.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementations on Foreign Types§

Source§

impl<S: 'static, A: Resolve<S>, B: Resolve<S>, C: Resolve<S>, D: Resolve<S>, E: Resolve<S>, F: Resolve<S>, G: Resolve<S>, H: Resolve<S>> Resolve<S> for (A, B, C, D, E, F, G, H)

Source§

fn dependencies(into: &mut Vec<TypeId>)

Source§

fn resolve(registry: &Registry<S>) -> Result<Self>

Source§

impl<S: 'static, A: Resolve<S>, B: Resolve<S>, C: Resolve<S>, D: Resolve<S>, E: Resolve<S>, F: Resolve<S>, G: Resolve<S>> Resolve<S> for (A, B, C, D, E, F, G)

Source§

fn dependencies(into: &mut Vec<TypeId>)

Source§

fn resolve(registry: &Registry<S>) -> Result<Self>

Source§

impl<S: 'static, A: Resolve<S>, B: Resolve<S>, C: Resolve<S>, D: Resolve<S>, E: Resolve<S>, F: Resolve<S>> Resolve<S> for (A, B, C, D, E, F)

Source§

fn dependencies(into: &mut Vec<TypeId>)

Source§

fn resolve(registry: &Registry<S>) -> Result<Self>

Source§

impl<S: 'static, A: Resolve<S>, B: Resolve<S>, C: Resolve<S>, D: Resolve<S>, E: Resolve<S>> Resolve<S> for (A, B, C, D, E)

Source§

fn dependencies(into: &mut Vec<TypeId>)

Source§

fn resolve(registry: &Registry<S>) -> Result<Self>

Source§

impl<S: 'static, A: Resolve<S>, B: Resolve<S>, C: Resolve<S>, D: Resolve<S>> Resolve<S> for (A, B, C, D)

Source§

fn dependencies(into: &mut Vec<TypeId>)

Source§

fn resolve(registry: &Registry<S>) -> Result<Self>

Source§

impl<S: 'static, A: Resolve<S>, B: Resolve<S>, C: Resolve<S>> Resolve<S> for (A, B, C)

Source§

fn dependencies(into: &mut Vec<TypeId>)

Source§

fn resolve(registry: &Registry<S>) -> Result<Self>

Source§

impl<S: 'static, A: Resolve<S>, B: Resolve<S>> Resolve<S> for (A, B)

Source§

fn dependencies(into: &mut Vec<TypeId>)

Source§

fn resolve(registry: &Registry<S>) -> Result<Self>

Source§

impl<S: 'static, A: Resolve<S>> Resolve<S> for (A,)

Source§

fn dependencies(into: &mut Vec<TypeId>)

Source§

fn resolve(registry: &Registry<S>) -> Result<Self>

Source§

impl<S: 'static, T: Any + Send + Sync> Resolve<S> for Arc<T>

Source§

fn dependencies(into: &mut Vec<TypeId>)

Source§

fn resolve(registry: &Registry<S>) -> Result<Self>

Source§

impl<S: 'static, T: Any + Send + Sync> Resolve<S> for Option<Arc<T>>

Source§

fn dependencies(into: &mut Vec<TypeId>)

Source§

fn resolve(registry: &Registry<S>) -> Result<Self>

Source§

impl<S: 'static> Resolve<S> for ()

Implementors§