use crate::rewrite::trace::RewriteTrace;
use hugr_core::metadata::Metadata;
use tket_json_rs::register::{Bit, Qubit};
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct MaxQubits;
impl Metadata for MaxQubits {
const KEY: &'static str = "tket.hint.max_qubits";
type Type<'hugr> = u32;
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct CircuitRewriteTraces;
impl Metadata for CircuitRewriteTraces {
const KEY: &'static str = "TKET.rewrites";
type Type<'hugr> = Vec<RewriteTrace>;
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct Unitary;
impl Metadata for Unitary {
const KEY: &'static str = "TKET.unitary";
type Type<'hugr> = u8;
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct InputParameters;
impl Metadata for InputParameters {
const KEY: &'static str = "TKET1.input_parameters";
type Type<'hugr> = Vec<String>;
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct OpGroup;
impl Metadata for OpGroup {
const KEY: &'static str = "TKET1.opgroup";
type Type<'hugr> = &'hugr str;
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct BitRegisters;
impl Metadata for BitRegisters {
const KEY: &'static str = "TKET1.bit_registers";
type Type<'hugr> = Vec<Bit>;
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct QubitRegisters;
impl Metadata for QubitRegisters {
const KEY: &'static str = "TKET1.qubit_registers";
type Type<'hugr> = Vec<Qubit>;
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct Phase;
impl Metadata for Phase {
const KEY: &'static str = "TKET1.phase";
type Type<'hugr> = &'hugr str;
}