tket_json_rs/clexpr/
operator.rs1#[cfg(feature = "schemars")]
4use schemars::JsonSchema;
5use serde::{Deserialize, Serialize};
6
7use super::op::ClOp;
8
9#[cfg_attr(feature = "schemars", derive(JsonSchema))]
11#[derive(Debug, Default, PartialEq, Clone, Serialize, Deserialize)]
12#[non_exhaustive]
13pub struct ClOperator {
14 pub op: ClOp,
16 pub args: Vec<ClArgument>,
18}
19
20#[cfg_attr(feature = "schemars", derive(JsonSchema))]
22#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
23#[non_exhaustive]
24#[serde(tag = "type", content = "input")]
25pub enum ClArgument {
26 #[serde(rename = "term")]
28 Terminal(ClTerminal),
29 #[serde(rename = "expr")]
31 Expression(Box<ClOperator>),
32}
33
34#[cfg_attr(feature = "schemars", derive(JsonSchema))]
36#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
37#[non_exhaustive]
38#[serde(tag = "type", content = "term")]
39pub enum ClTerminal {
40 #[serde(rename = "var")]
42 Variable(ClVariable),
43 #[serde(rename = "int")]
45 Int(u64),
46}
47
48#[cfg_attr(feature = "schemars", derive(JsonSchema))]
52#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Hash)]
53#[non_exhaustive]
54#[serde(tag = "type", content = "var")]
55pub enum ClVariable {
56 #[serde(rename = "reg")]
58 Register {
59 index: u32,
61 },
62 #[serde(rename = "bit")]
64 Bit {
65 index: u32,
67 },
68}
69
70impl Default for ClArgument {
71 fn default() -> Self {
72 ClArgument::Terminal(ClTerminal::default())
73 }
74}
75
76impl Default for ClTerminal {
77 fn default() -> Self {
78 ClTerminal::Int(0)
79 }
80}
81
82impl Default for ClVariable {
83 fn default() -> Self {
84 ClVariable::Register { index: 0 }
85 }
86}