quil_rs/instruction/
measurement.rs

1#[cfg(feature = "stubs")]
2use pyo3_stub_gen::derive::gen_stub_pyclass;
3
4use crate::quil::Quil;
5
6use super::{MemoryReference, Qubit};
7
8#[derive(Clone, Debug, PartialEq, Eq, Hash)]
9#[cfg_attr(feature = "stubs", gen_stub_pyclass)]
10#[cfg_attr(
11    feature = "python",
12    pyo3::pyclass(module = "quil.instructions", eq, frozen, hash, get_all, subclass)
13)]
14pub struct Measurement {
15    pub name: Option<String>,
16    pub qubit: Qubit,
17    pub target: Option<MemoryReference>,
18}
19
20impl Measurement {
21    pub const fn new(name: Option<String>, qubit: Qubit, target: Option<MemoryReference>) -> Self {
22        Self {
23            name,
24            qubit,
25            target,
26        }
27    }
28}
29
30impl Quil for Measurement {
31    fn write(
32        &self,
33        writer: &mut impl std::fmt::Write,
34        fall_back_to_debug: bool,
35    ) -> Result<(), crate::quil::ToQuilError> {
36        let Self {
37            name,
38            qubit,
39            target,
40        } = self;
41
42        write!(writer, "MEASURE")?;
43        if let Some(name) = name {
44            write!(writer, "!{name}")?;
45        }
46        write!(writer, " ")?;
47        qubit.write(writer, fall_back_to_debug)?;
48        if let Some(target) = target {
49            write!(writer, " ")?;
50            target.write(writer, fall_back_to_debug)?;
51        }
52
53        Ok(())
54    }
55}