pub struct DependencyMap { /* private fields */ }
Expand description

A DI container with multiple dependencies.

This DI container stores types by their corresponding type identifiers. It cannot prove at compile-time that a type of a requested value exists within the container, so if you do not provide necessary types but they were requested, it will panic.

Examples

use dptree::di::{DependencyMap, DependencySupplier};

let mut container = DependencyMap::new();
container.insert(5_i32);
container.insert("abc");

assert_eq!(container.get(), Arc::new(5_i32));
assert_eq!(container.get(), Arc::new("abc"));

// If a type of a value already exists within the container, it will be replaced.
let old_value = container.insert(10_i32).unwrap();

assert_eq!(old_value, Arc::new(5_i32));
assert_eq!(container.get(), Arc::new(10_i32));

When a value is not found within the container, it will panic:

use dptree::di::{DependencyMap, DependencySupplier};
let mut container = DependencyMap::new();
container.insert(10i32);
container.insert(true);
container.insert("static str");

// thread 'main' panicked at 'alloc::string::String was requested, but not provided. Available types:
//    &str
//    bool
//    i32
// ', /media/hirrolot/772CF8924BEBB279/Documents/Rust/dptree/src/di.rs:150:17
// note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
let string: Arc<String> = container.get();

Implementations§

source§

impl DependencyMap

source

pub fn new() -> DependencyMap

source

pub fn insert<T>(&mut self, item: T) -> Option<Arc<T>>where T: Send + Sync + 'static,

Inserts a value into the container.

If the container do not has this type present, None is returned. Otherwise, the value is updated, and the old value is returned.

source

pub fn insert_container(&mut self, container: DependencyMap)

Inserts all dependencies from another container into itself.

source

pub fn remove<T>(&mut self) -> Option<Arc<T>>where T: Send + Sync + 'static,

Removes a value from the container.

If the container do not has this type present, None is returned. Otherwise, the value is removed and returned.

Trait Implementations§

source§

impl Clone for DependencyMap

source§

fn clone(&self) -> DependencyMap

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for DependencyMap

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
source§

impl Default for DependencyMap

source§

fn default() -> DependencyMap

Returns the “default value” for a type. Read more
source§

impl<V> DependencySupplier<V> for DependencyMapwhere V: Send + Sync + 'static,

source§

fn get(&self) -> Arc<V>

Get the value. Read more
source§

impl<T> Insert<T> for DependencyMapwhere T: Send + Sync + 'static,

source§

fn insert(&mut self, value: T) -> Option<Arc<T>>

Inserts value into itself, returning the previous value, if exists.
source§

impl PartialEq<DependencyMap> for DependencyMap

source§

fn eq(&self, other: &DependencyMap) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

const: unstable · source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

const: unstable · source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> Erasable for T

§

unsafe fn unerase(this: NonNull<Erased>) -> NonNull<T>

Unerase this erased pointer. Read more
§

const ACK_1_1_0: bool = true

Available on non-enforce_1_1_0_semantics only.
Whether this implementor has acknowledged the 1.1.0 update to unerase’s documented implementation requirements. Read more
§

fn erase(this: NonNull<Self>) -> NonNull<Erased>

Turn this erasable pointer into an erased pointer. Read more
source§

impl<T> From<T> for T

const: unstable · source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> FromRef<T> for Twhere T: Clone,

§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere U: From<T>,

const: unstable · source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> ToOwned for Twhere T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
const: unstable · source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
const: unstable · source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for Twhere V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more