use crate::circuit::Qubit;
use thiserror::Error;
#[derive(Debug, Error, PartialEq, Eq)]
pub enum ResourceError {
#[error("invalid resource request: {reason}")]
InvalidRequest {
reason: String,
},
#[error(
"insufficient {requirement} ancillary qubits: requested {requested}, available {available}"
)]
InsufficientResources {
requirement: &'static str,
requested: usize,
available: usize,
},
#[error("resource capacity exceeded: requested total {requested_total}, limit {limit}")]
CapacityExceeded {
limit: usize,
requested_total: usize,
},
#[error("duplicate resource qubit {qubit}")]
DuplicateQubit {
qubit: Qubit,
},
#[error(
"stale resource plan: plan revision {plan_revision}, current revision {current_revision}"
)]
StalePlan {
plan_revision: u64,
current_revision: u64,
},
#[error("resource plan belongs to another resource manager")]
ForeignPlan,
#[error("unknown or released resource lease {lease_id}")]
UnknownLease {
lease_id: u64,
},
#[error(
"resource operation '{operation}' requires phase {expected}, current phase is {actual}"
)]
InvalidPhase {
operation: &'static str,
expected: &'static str,
actual: &'static str,
},
#[error("cannot allocate logical ancillary qubit: qubit identifier overflow")]
QubitIdOverflow,
#[error("resource {counter} counter overflow")]
CounterOverflow {
counter: &'static str,
},
#[error("circuit and resource manager are inconsistent: {reason}")]
CircuitResourceMismatch {
reason: String,
},
#[error("resource manager still has {count} active lease(s)")]
ActiveLeaseRemaining {
count: usize,
},
}