use crate::attributes::AttributeError;
use crate::domain::DomainError;
use crate::expression::DerivationError;
use crate::names::NameError;
use crate::parameter::ParameterError;
use crate::trial::TrialError;
#[derive(Debug, thiserror::Error)]
pub enum Error {
#[error(transparent)]
Name(#[from] NameError),
#[error(transparent)]
Domain(#[from] DomainError),
#[error(transparent)]
Attribute(#[from] AttributeError),
#[error(transparent)]
Parameter(#[from] ParameterError),
#[error(transparent)]
Derivation(#[from] DerivationError),
#[error("invalid regex: {0}")]
Regex(#[from] regex::Error),
#[error(transparent)]
Element(#[from] ElementError),
#[error(transparent)]
Trial(#[from] TrialError),
}
pub type Result<T, E = Error> = std::result::Result<T, E>;
#[derive(Debug, thiserror::Error)]
pub enum ElementError {
#[error(transparent)]
Name(#[from] NameError),
#[error(transparent)]
Attribute(#[from] AttributeError),
#[error("element is missing the required `type` label")]
MissingTypeLabel,
#[error("unknown element type '{type_id}'")]
UnknownElementType {
type_id: String,
},
#[error("duplicate parameter name '{name}' in element parameters")]
DuplicateParameterName {
name: String,
},
#[error("duplicate parameter name '{name}' in element result_parameters")]
DuplicateResultParameterName {
name: String,
},
#[error("configuration entry references unknown parameter '{name}'")]
UnknownConfigurationParameter {
name: String,
},
#[error("parameter name '{name}' collides with an attribute or port name")]
ParameterNameCollidesWithAttribute {
name: String,
},
#[error("max_concurrency must be >= 1")]
InvalidMaxConcurrency,
#[error("max_group_concurrency ({group}) exceeds max_concurrency ({global})")]
GroupConcurrencyExceedsGlobal {
group: u32,
global: u32,
},
#[error("element is missing required label '{key}' for its type")]
MissingRequiredLabel {
key: String,
},
#[error("forbidden label '{key}' is present on this element: {reason}")]
ForbiddenLabelPresent {
key: String,
reason: String,
},
#[error("token expression must not be empty")]
EmptyTokenExpr,
}