froodi 1.0.0-beta.9

An ergonomic Rust IoC container
Documentation
use alloc::boxed::Box;
use core::any::TypeId;

use super::{instantiate::InstantiateErrorKind, instantiator::InstantiatorErrorKind};
use crate::scope::ScopeData;

#[derive(thiserror::Error, Debug)]
pub enum ResolveErrorKind {
    #[error("Instantiator not found in registry")]
    NoInstantiator,
    #[error(
        "\
        Instantiator no accessible. \
        You can't access the instantiator from child scope. \
        Actual scope: {} ({} priority), expected: {} ({} priority)\
        ",
        actual_scope_data.name, actual_scope_data.priority,
        expected_scope_data.name, expected_scope_data.priority,
    )]
    NoAccessible {
        expected_scope_data: ScopeData,
        actual_scope_data: ScopeData,
    },
    #[error("Incorrect instantiator provides type. Actual: {actual:?}, expected: {expected:?}")]
    IncorrectType { expected: TypeId, actual: TypeId },
    #[error(transparent)]
    Instantiator(InstantiatorErrorKind<Box<ResolveErrorKind>, InstantiateErrorKind>),
}