use crate::{Eject, Mode};
#[derive(Debug, Clone)]
pub enum CircuitType<T: Eject> {
Constant(T),
Public,
Private,
}
impl<T: Eject> CircuitType<T> {
pub fn mode(&self) -> Mode {
match self {
CircuitType::Constant(constant) => constant.eject_mode(),
CircuitType::Public => Mode::Public,
CircuitType::Private => Mode::Private,
}
}
}
impl<T: Eject + Clone> From<T> for CircuitType<T> {
fn from(circuit: T) -> Self {
match circuit.eject_mode() {
Mode::Constant => CircuitType::Constant(circuit),
Mode::Public => CircuitType::Public,
Mode::Private => CircuitType::Private,
}
}
}
impl<T: Eject + Clone> From<&T> for CircuitType<T> {
fn from(circuit: &T) -> Self {
match circuit.eject_mode() {
Mode::Constant => CircuitType::Constant(circuit.clone()),
Mode::Public => CircuitType::Public,
Mode::Private => CircuitType::Private,
}
}
}