1use thiserror::Error;
9
10#[derive(Debug, Error, Clone, PartialEq)]
12pub enum PrismError {
13 #[error("parse error at line {line}: {message}")]
15 Parse { line: usize, message: String },
16
17 #[error("unsupported construct at line {line}: `{construct}`")]
19 UnsupportedConstruct { construct: String, line: usize },
20
21 #[error("invalid qubit index {index} (register size: {register_size})")]
23 InvalidQubit { index: usize, register_size: usize },
24
25 #[error("invalid classical bit index {index} (register size: {register_size})")]
27 InvalidClassicalBit { index: usize, register_size: usize },
28
29 #[error("gate `{gate}`: expected {expected} qubit(s), got {got}")]
31 GateArity {
32 gate: String,
33 expected: usize,
34 got: usize,
35 },
36
37 #[error("backend `{backend}` does not support: {operation}")]
39 BackendUnsupported { backend: String, operation: String },
40
41 #[error("invalid parameter: {message}")]
43 InvalidParameter { message: String },
44
45 #[error("undefined register `{name}` at line {line}")]
47 UndefinedRegister { name: String, line: usize },
48
49 #[error("cannot export instruction {index} to OpenQASM 3.0: {reason}")]
51 ExportUnsupported { index: usize, reason: String },
52
53 #[error("backend `{backend}` is incompatible: {reason}")]
55 IncompatibleBackend { backend: String, reason: String },
56}
57
58pub type Result<T> = std::result::Result<T, PrismError>;