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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
use std::time::Duration;
use anthill_di::types::{AddDependencyError, BuildDependencyError, TypeInfo, MapComponentError};
use thiserror::Error;
use anthill_di_configuration_extension::types::LoadConfigurationError;

#[derive(Error, Debug)]
pub enum AppRunError {
    #[error("Service start timeout expired: [{timeout_duration:?}] [{service_type_info:?}]")]
    ServiceStartTimeoutExpired { timeout_duration: Duration, service_type_info: TypeInfo, },
    #[error("Service end timeout expired: [{timeout_duration:?}] [{service_type_info:?}]")]
    ServiceStopTimeoutExpired { timeout_duration: Duration, service_type_info: TypeInfo, },
    #[error("Ioc add dependency error: [{0:?}]")]
    IocAddDependencyError(AddDependencyError),
    #[error("Ioc build dependency error: [{0:?}]")]
    IocBuildDependencyError(BuildDependencyError),
    #[error("Ioc map dependency error: [{0:?}]")]
    IocMapComponentError(MapComponentError),
    #[error("Load configuration error: [{0:?}]")]
    LoadConfigurationError(LoadConfigurationError),
}

impl PartialEq for AppRunError {
    fn eq(&self, other: &Self) -> bool {
        match (self, other) {
            (Self::ServiceStartTimeoutExpired { timeout_duration: l_timeout_duration, service_type_info: l_service_type_info }, Self::ServiceStartTimeoutExpired { timeout_duration: r_timeout_duration, service_type_info: r_service_type_info }) => l_timeout_duration == r_timeout_duration && l_service_type_info == r_service_type_info,
            (Self::ServiceStopTimeoutExpired { timeout_duration: l_timeout_duration, service_type_info: l_service_type_info }, Self::ServiceStopTimeoutExpired { timeout_duration: r_timeout_duration, service_type_info: r_service_type_info }) => l_timeout_duration == r_timeout_duration && l_service_type_info == r_service_type_info,
            (Self::IocAddDependencyError(l0), Self::IocAddDependencyError(r0)) => l0 == r0,
            (Self::IocBuildDependencyError(l0), Self::IocBuildDependencyError(r0)) => l0 == r0,
            (Self::IocMapComponentError(l0), Self::IocMapComponentError(r0)) => l0 == r0,
            (Self::LoadConfigurationError(..), Self::LoadConfigurationError(..)) => true,
            _ => false,
        }
    }
}

pub type AppRunResult = Result<(), AppRunError>;

#[derive(Error, Debug, PartialEq)]
pub enum AddServiceError {
    #[error("Ioc add dependency error: [{0:?}]")]
    IocAddDependencyError(AddDependencyError),
    #[error("Ioc build dependency error: [{0:?}]")]
    IocBuildDependencyError(BuildDependencyError),
    #[error("Ioc map dependency error: [{0:?}]")]
    IocMapComponentError(MapComponentError),
}

pub type AddServiceResult = Result<(), AddServiceError>;

#[derive(Error, Debug, PartialEq)]
pub enum AddStartupError {
    #[error("Ioc add dependency error: [{0:?}]")]
    IocAddDependencyError(AddDependencyError),
    // #[error("Ioc build dependency error: [{0:?}]")]
    // IocBuildDependencyError(BuildDependencyError),
    #[error("Ioc map dependency error: [{0:?}]")]
    IocMapComponentError(MapComponentError),
}

pub type AddStartupResult = Result<(), AddStartupError>;

#[derive(Error, Debug, PartialEq)]
pub enum AddLifeTimeManagerError {
    #[error("Ioc add dependency error: [{0:?}]")]
    IocAddDependencyError(AddDependencyError),
    // #[error("Ioc build dependency error: [{0:?}]")]
    // IocBuildDependencyError(BuildDependencyError),
    #[error("Ioc map dependency error: [{0:?}]")]
    IocMapComponentError(MapComponentError),
}

pub type AddLifeTimeManagerResult = Result<(), AddLifeTimeManagerError>;

#[derive(Error, Debug)]
pub enum RegisterDefaultConfigurationError {
    #[error("Ioc add dependency error: [{0:?}]")]
    IocAddDependencyError(AddDependencyError),

    #[error("Io error: [{0:?}]")]
    IoError(std::io::Error),
}

pub type RegisterDefaultConfigurationResult = Result<(), RegisterDefaultConfigurationError>;