#[derive(Debug, Clone, PartialEq, Eq)]
pub(crate) enum ExportRefusal {
NoIndex(String),
NoIndexState(String),
LegacyIndex(String),
ArtifactMissing(String),
ArtifactUnreadable(String),
UnknownGeneration(String),
IndexChanged(String),
}
impl ExportRefusal {
pub(crate) fn reason(&self) -> &'static str {
match self {
ExportRefusal::NoIndex(_) => "no-index",
ExportRefusal::NoIndexState(_) => "no-index-state",
ExportRefusal::LegacyIndex(_) => "legacy-index",
ExportRefusal::ArtifactMissing(_) => "artifact-missing",
ExportRefusal::ArtifactUnreadable(_) => "artifact-unreadable",
ExportRefusal::UnknownGeneration(_) => "unknown-generation",
ExportRefusal::IndexChanged(_) => "index-changed",
}
}
fn detail(&self) -> &str {
match self {
ExportRefusal::NoIndex(detail)
| ExportRefusal::NoIndexState(detail)
| ExportRefusal::LegacyIndex(detail)
| ExportRefusal::ArtifactMissing(detail)
| ExportRefusal::ArtifactUnreadable(detail)
| ExportRefusal::UnknownGeneration(detail)
| ExportRefusal::IndexChanged(detail) => detail,
}
}
pub(crate) fn line(&self) -> String {
format!(
"devscout export: refused ({}): {}; run `devscout map`, then export again",
self.reason(),
self.detail()
)
}
#[cfg(test)]
pub(crate) fn every_variant() -> Vec<ExportRefusal> {
vec![
ExportRefusal::NoIndex("detail".to_string()),
ExportRefusal::NoIndexState("detail".to_string()),
ExportRefusal::LegacyIndex("detail".to_string()),
ExportRefusal::ArtifactMissing("detail".to_string()),
ExportRefusal::ArtifactUnreadable("detail".to_string()),
ExportRefusal::UnknownGeneration("detail".to_string()),
ExportRefusal::IndexChanged("detail".to_string()),
]
}
}