ferrunix_core::dependency_builder

Trait DepBuilder

source
pub trait DepBuilder<R> {
    // Required methods
    fn build(
        registry: &Registry,
        ctor: fn(_: Self) -> R,
        _: SealToken,
    ) -> Option<R>
       where R: Sized;
    fn as_typeids(_: SealToken) -> Vec<TypeId>;
}
Expand description

The DepBuilder trait is the key to specify a variable amount of dependencies in the Registry::with_deps call from Registry.

The trait is implemented by the DepBuilderImpl! macro for 0-ary, to 10-ary tuples (e.g., (T1,), (T1, T2), etc.), which allows these tuples to be passed as a single type parameter into Registry::with_deps.

This trait is sealed, meaning it cannot be implemented or called by any downstream crates.

Required Methods§

source

fn build(registry: &Registry, ctor: fn(_: Self) -> R, _: SealToken) -> Option<R>
where R: Sized,

When implemented, this should validate that all dependencies which are part of Self exist to construct the type R. If the dependencies cannot be fulfilled, None must be returned.

If the dependencies can be fulfilled, they must be constructed as an N-ary tuple (same length and types as Self) and passed as the argument to ctor. ctor is a user provided constructor for the type R.

An implementation for tuples is provided by DepBuilderImpl!.

We advise against manually implementing build.

source

fn as_typeids(_: SealToken) -> Vec<TypeId>

Constructs a Vec of std::any::TypeIds from the types in Self. The resulting vector must have the same length as Self.

An implementation for tuples is provided by DepBuilderImpl!.

We advise against manually implementing as_typeids.

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<R> DepBuilder<R> for ()
where R: Registerable,

source§

fn build( _registry: &Registry, ctor: fn(_: Self) -> R, _: SealToken, ) -> Option<R>

source§

fn as_typeids(_: SealToken) -> Vec<TypeId>

source§

impl<R, T1> DepBuilder<R> for (T1,)
where R: Registerable, T1: Dep,

source§

fn build(registry: &Registry, ctor: fn(_: Self) -> R, _: SealToken) -> Option<R>

source§

fn as_typeids(_: SealToken) -> Vec<TypeId>

source§

impl<R, T1, T2> DepBuilder<R> for (T1, T2)
where R: Registerable, T1: Dep, T2: Dep,

source§

fn build(registry: &Registry, ctor: fn(_: Self) -> R, _: SealToken) -> Option<R>

source§

fn as_typeids(_: SealToken) -> Vec<TypeId>

source§

impl<R, T1, T2, T3> DepBuilder<R> for (T1, T2, T3)
where R: Registerable, T1: Dep, T2: Dep, T3: Dep,

source§

fn build(registry: &Registry, ctor: fn(_: Self) -> R, _: SealToken) -> Option<R>

source§

fn as_typeids(_: SealToken) -> Vec<TypeId>

source§

impl<R, T1, T2, T3, T4> DepBuilder<R> for (T1, T2, T3, T4)
where R: Registerable, T1: Dep, T2: Dep, T3: Dep, T4: Dep,

source§

fn build(registry: &Registry, ctor: fn(_: Self) -> R, _: SealToken) -> Option<R>

source§

fn as_typeids(_: SealToken) -> Vec<TypeId>

source§

impl<R, T1, T2, T3, T4, T5> DepBuilder<R> for (T1, T2, T3, T4, T5)
where R: Registerable, T1: Dep, T2: Dep, T3: Dep, T4: Dep, T5: Dep,

source§

fn build(registry: &Registry, ctor: fn(_: Self) -> R, _: SealToken) -> Option<R>

source§

fn as_typeids(_: SealToken) -> Vec<TypeId>

source§

impl<R, T1, T2, T3, T4, T5, T6> DepBuilder<R> for (T1, T2, T3, T4, T5, T6)
where R: Registerable, T1: Dep, T2: Dep, T3: Dep, T4: Dep, T5: Dep, T6: Dep,

source§

fn build(registry: &Registry, ctor: fn(_: Self) -> R, _: SealToken) -> Option<R>

source§

fn as_typeids(_: SealToken) -> Vec<TypeId>

source§

impl<R, T1, T2, T3, T4, T5, T6, T8> DepBuilder<R> for (T1, T2, T3, T4, T5, T6, T8)
where R: Registerable, T1: Dep, T2: Dep, T3: Dep, T4: Dep, T5: Dep, T6: Dep, T8: Dep,

source§

fn build(registry: &Registry, ctor: fn(_: Self) -> R, _: SealToken) -> Option<R>

source§

fn as_typeids(_: SealToken) -> Vec<TypeId>

source§

impl<R, T1, T2, T3, T4, T5, T6, T8, T9> DepBuilder<R> for (T1, T2, T3, T4, T5, T6, T8, T9)
where R: Registerable, T1: Dep, T2: Dep, T3: Dep, T4: Dep, T5: Dep, T6: Dep, T8: Dep, T9: Dep,

source§

fn build(registry: &Registry, ctor: fn(_: Self) -> R, _: SealToken) -> Option<R>

source§

fn as_typeids(_: SealToken) -> Vec<TypeId>

Implementors§