use wick_packet::{OutputIterator, Port};
pub trait Broadcast {
fn broadcast_open(&mut self) {
for output in self.outputs_mut() {
output.open_bracket();
}
}
fn broadcast_close(&mut self) {
for output in self.outputs_mut() {
output.close_bracket();
}
}
fn broadcast_done(&mut self) {
for output in self.outputs_mut() {
output.done();
}
}
fn broadcast_err(&mut self, err: impl Into<String>) {
let err = err.into();
for output in self.outputs_mut() {
output.error(&err);
}
}
fn outputs_mut(&mut self) -> OutputIterator<'_>;
}
pub trait SingleOutput: Broadcast {
fn single_output(&mut self) -> &mut dyn Port;
}
impl<T: Port> Broadcast for T {
fn outputs_mut(&mut self) -> OutputIterator<'_> {
OutputIterator::new(vec![self])
}
}