1use thiserror::Error;
7
8#[derive(Debug, Error, Clone, PartialEq)]
10pub enum PrismError {
11 #[error("parse error at line {line}: {message}")]
13 Parse { line: usize, message: String },
14
15 #[error("unsupported construct at line {line}: `{construct}`")]
17 UnsupportedConstruct { construct: String, line: usize },
18
19 #[error("invalid qubit index {index} (register size: {register_size})")]
21 InvalidQubit { index: usize, register_size: usize },
22
23 #[error("invalid classical bit index {index} (register size: {register_size})")]
25 InvalidClassicalBit { index: usize, register_size: usize },
26
27 #[error("gate `{gate}`: expected {expected} qubit(s), got {got}")]
29 GateArity {
30 gate: String,
31 expected: usize,
32 got: usize,
33 },
34
35 #[error("backend `{backend}` does not support: {operation}")]
37 BackendUnsupported { backend: String, operation: String },
38
39 #[error("invalid parameter: {message}")]
41 InvalidParameter { message: String },
42
43 #[error("undefined register `{name}` at line {line}")]
45 UndefinedRegister { name: String, line: usize },
46
47 #[error("backend `{backend}` is incompatible: {reason}")]
49 IncompatibleBackend { backend: String, reason: String },
50}
51
52pub type Result<T> = std::result::Result<T, PrismError>;