use crate::output::DigitalState;
use std::rc::Rc;
#[allow(unused)]
pub trait Digital {
fn get_output(&self) -> DigitalState;
}
#[allow(unused)]
#[macro_export]
macro_rules! generate_verify_digital_output_lines_trait {
($trait_name:ident,$line_count:expr) => {
pub trait $trait_name:Digital{
fn get_digital_output(&self) -> DigitalState{
let ds = self.get_output();
if ds.lines() != $line_count {
panic!("{}",format!("digital output is {:?} expect {:?}",ds.lines(), $line_count ));
}
ds
}
}
};
}
generate_verify_digital_output_lines_trait!(Digital1Line,1);
#[allow(unused)]
pub trait TwoInputDigital: Digital {
fn set_input_a(&self, input_a: Option<Rc<dyn Digital1Line>>) -> Rc<Self>;
fn set_input_b(&self, input_b: Option<Rc<dyn Digital1Line>>) -> Rc<Self>;
}
#[allow(unused)]
pub trait OneInputElectric: Digital {
fn set_input(&self, input: Option<Rc<dyn Digital1Line>>) -> Rc<Self>;
}