use std::time::Duration;
use lightshuttle_spec::SpecError;
use crate::error::RuntimeError;
#[derive(Debug, thiserror::Error)]
pub enum LifecycleError {
#[error("cycle detected in dependency graph: {0}")]
Cycle(String),
#[error("manifest conversion failed for `{resource}`")]
SpecBuild {
resource: String,
#[source]
source: SpecError,
},
#[error("failed to start resource `{resource}`")]
Start {
resource: String,
#[source]
source: RuntimeError,
},
#[error("failed to stop resource `{resource}`")]
Stop {
resource: String,
#[source]
source: RuntimeError,
},
#[error("resource `{resource}` healthcheck timed out after {timeout:?}")]
HealthcheckTimeout {
resource: String,
timeout: Duration,
},
#[error("dependency `{dependency}` for `{resource}` failed: {reason}")]
DependencyFailed {
resource: String,
dependency: String,
reason: String,
},
#[error("resource `{0}` not found in the current plan")]
ResourceNotFound(String),
#[error(
"missing required environment variable(s): {}",
names.join(", ")
)]
MissingEnvVars {
names: Vec<String>,
},
}