1use derive_more::{Display, From};
4#[cfg(feature = "schemars")]
5use schemars::JsonSchema;
6use serde::{Deserialize, Serialize};
7
8#[cfg_attr(feature = "schemars", derive(JsonSchema))]
15#[derive(Display, Deserialize, Serialize, Clone, Debug, PartialEq, Eq, Hash)]
16#[display("{_0}[{}]", _1.iter().map(|i| i.to_string()).collect::<Vec<_>>().join(", "))]
17pub struct ElementId(pub String, pub Vec<i64>);
18
19#[cfg_attr(feature = "schemars", derive(JsonSchema))]
23#[derive(Display, Deserialize, Serialize, Clone, Debug, PartialEq, Eq, Hash, From)]
24#[display("{id}")]
25#[serde(transparent)]
26pub struct Qubit {
27 pub id: ElementId,
29}
30
31#[cfg_attr(feature = "schemars", derive(JsonSchema))]
35#[derive(Display, Deserialize, Serialize, Clone, Debug, PartialEq, Eq, Hash, From)]
36#[display("{id}")]
37#[serde(transparent)]
38pub struct Bit {
39 pub id: ElementId,
41}
42
43#[cfg_attr(feature = "schemars", derive(JsonSchema))]
45#[derive(Deserialize, Serialize, Clone, Debug, PartialEq, Eq, Hash)]
46pub struct BitRegister {
47 pub name: String,
49 pub size: u32,
51}
52
53#[cfg_attr(feature = "schemars", derive(JsonSchema))]
55#[derive(Deserialize, Serialize, Clone, Debug, PartialEq, Eq, Hash)]
56#[serde(transparent)]
57pub struct Bitstring {
58 pub vec: Vec<bool>,
60}
61
62impl From<Qubit> for ElementId {
63 fn from(q: Qubit) -> Self {
64 q.id
65 }
66}
67
68impl From<Bit> for ElementId {
69 fn from(b: Bit) -> Self {
70 b.id
71 }
72}