quil_rs/instruction/
measurement.rs1#[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}