pub type Result<T> = std::result::Result<T, NidusError>;
#[derive(Debug, thiserror::Error)]
pub enum NidusError {
#[error("missing provider for type `{type_name}`")]
MissingProvider {
type_name: &'static str,
},
#[error("duplicate provider for type `{type_name}`")]
DuplicateProvider {
type_name: &'static str,
},
#[error("request-scoped provider `{type_name}` must be resolved through RequestScope")]
RequestScopeRequired {
type_name: &'static str,
},
#[error("circular provider resolution detected for type `{type_name}`")]
CircularProviderResolution {
type_name: &'static str,
},
#[error("duplicate module `{module}`")]
DuplicateModule {
module: String,
},
#[error("module `{module}` declares duplicate provider `{provider}`")]
DuplicateModuleProvider {
module: String,
provider: String,
},
#[error("module `{module}` declares duplicate controller `{controller}`")]
DuplicateModuleController {
module: String,
controller: String,
},
#[error("module `{module}` declares `{type_name}` as both provider and controller")]
ModuleProviderControllerConflict {
module: String,
type_name: String,
},
#[error("module `{module}` imports `{import}` more than once")]
DuplicateModuleImport {
module: String,
import: String,
},
#[error("module `{module}` exports `{provider}` more than once")]
DuplicateModuleExport {
module: String,
provider: String,
},
#[error("provider factory failed for type `{type_name}`: {source}")]
ProviderFactory {
type_name: &'static str,
#[source]
source: Box<NidusError>,
},
#[error("module `{module}` imports missing module `{import}`")]
MissingModuleImport {
module: String,
import: String,
},
#[error("circular module import detected: {}", cycle.join(" -> "))]
CircularModuleImport {
cycle: Vec<String>,
},
#[error("module `{module}` exports missing local provider `{provider}`")]
MissingProviderExport {
module: String,
provider: String,
},
#[error(
"module `{module}` declares provider `{provider}` that conflicts with export from `{import}`"
)]
ProviderVisibilityConflict {
module: String,
provider: String,
import: String,
},
#[error(
"module `{module}` has ambiguous provider `{provider}` from imports: {}",
imports.join(", ")
)]
AmbiguousProvider {
module: String,
provider: String,
imports: Vec<String>,
},
#[error("lifecycle startup failed: {source}")]
LifecycleStartup {
#[source]
source: Box<NidusError>,
rollback_errors: Vec<NidusError>,
},
#[error("application build failed: {message}")]
ApplicationBuild {
message: String,
},
}