quantrs2_circuit/qasm/
error.rs1use thiserror::Error;
4
5#[derive(Debug, Error)]
7#[non_exhaustive]
8pub enum QasmError {
9 #[error("Unsupported gate: {0}")]
11 UnsupportedGate(String),
12
13 #[error("Parse error at line {line}: {message}")]
15 ParseError {
16 line: usize,
18 message: String,
20 },
21
22 #[error("Undefined register: {0}")]
24 UndefinedRegister(String),
25
26 #[error("Qubit index {index} out of range for register '{register}' (size {size})")]
28 QubitIndexOutOfRange {
29 register: String,
31 index: usize,
33 size: usize,
35 },
36
37 #[error("Invalid parameter in gate '{gate}': {message}")]
39 InvalidParameter {
40 gate: String,
42 message: String,
44 },
45
46 #[error("Gate '{gate}' expects {expected} parameter(s), got {actual}")]
48 WrongParameterCount {
49 gate: String,
51 expected: usize,
53 actual: usize,
55 },
56
57 #[error("Gate '{gate}' expects {expected} qubit(s), got {actual}")]
59 WrongQubitCount {
60 gate: String,
62 expected: usize,
64 actual: usize,
66 },
67
68 #[error("Format error: {0}")]
70 FormatError(#[from] std::fmt::Error),
71
72 #[error("Circuit has no qubits")]
74 EmptyCircuit,
75
76 #[error("Cannot evaluate expression '{0}'")]
78 ExpressionError(String),
79}
80
81impl QasmError {
82 pub fn parse(line: usize, message: impl Into<String>) -> Self {
84 Self::ParseError {
85 line,
86 message: message.into(),
87 }
88 }
89}