#[derive(Clone, Debug, PartialEq, Eq)]
pub enum BootstrapError {
UnknownTarget {
target_name: String,
available: Vec<String>,
},
UnknownSlot {
slot_id: u32,
available: Vec<u32>,
},
AlreadyTransitivelyQueued {
target_name: String,
},
UnknownInput {
target_name: String,
input_name: String,
declared: Vec<String>,
},
MissingInput {
target_name: String,
input_name: String,
},
AllocationFailed {
target_name: String,
byte_count: usize,
budget_remaining: usize,
},
}
impl std::fmt::Display for BootstrapError {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Self::UnknownTarget {
target_name,
available,
} => write!(
f,
"unknown bootstrap target '{target_name}'; available: {available:?}",
),
Self::UnknownSlot { slot_id, available } => write!(
f,
"unknown bootstrap slot id {slot_id}; available: {available:?}",
),
Self::AlreadyTransitivelyQueued { target_name } => write!(
f,
"bootstrap target '{target_name}' already has a queued input request",
),
Self::UnknownInput {
target_name,
input_name,
declared,
} => write!(
f,
"target '{target_name}' has no input '{input_name}'; declared: {declared:?}",
),
Self::MissingInput {
target_name,
input_name,
} => write!(
f,
"target '{target_name}' missing required input '{input_name}'",
),
Self::AllocationFailed {
target_name,
byte_count,
budget_remaining,
} => write!(
f,
"target '{target_name}' input staging refused {byte_count}B (budget remaining {budget_remaining}B)",
),
}
}
}
impl std::error::Error for BootstrapError {}