1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
use crate::context::actor_registry::ActorRegistryErrors;
use crate::context::extensions::ExtensionErrors;
use crate::system::System;

#[derive(thiserror::Error, Debug)]
pub enum InjectError {
    #[error(transparent)]
    ExtensionErrors(#[from] ExtensionErrors),
    #[error(transparent)]
    ActorRegistryErrors(#[from] ActorRegistryErrors),
}

/// Sample:
/// ```
///# use uactor::di::{Inject, InjectError};
///# use uactor::system::System;
///
/// pub struct References {
///     var1: String,
///     var2: String,
/// }
///
/// impl Inject for References {
///     async fn inject(system: &System) -> Result<Self, InjectError>
///         where
///             Self: Sized
///     {
///         let var1 = system.get_service::<String>()?.clone();
///         let var2 = system.get_service::<String>()?.clone();
///         Ok(Self { var1: var1, var2: var2 })
///     }
/// }
/// ```
pub trait Inject {
    async fn inject(system: &System) -> Result<Self, InjectError>
        where
            Self: Sized;
}

impl Inject for () {
    async fn inject(_: &System) -> Result<Self, InjectError>
        where
            Self: Sized,
    {
        Ok(())
    }
}