irox_bits/
tee.rs

1// SPDX-License-Identifier: MIT
2// Copyright 2025 IROX Contributors
3//
4
5use crate::{Error, MutBits};
6
7///
8/// Simple output stream splitter.  Writes the output value to both streams simultaneously.
9pub struct Tee<O1: MutBits, O2: MutBits> {
10    output1: O1,
11    output2: O2,
12}
13impl<O1: MutBits, O2: MutBits> Tee<O1, O2> {
14    pub fn new(output1: O1, output2: O2) -> Self {
15        Self { output1, output2 }
16    }
17}
18impl<O1: MutBits, O2: MutBits> Drop for Tee<O1, O2> {
19    fn drop(&mut self) {
20        let _ = self.output1.flush();
21        let _ = self.output2.flush();
22    }
23}
24impl<O1: MutBits, O2: MutBits> MutBits for Tee<O1, O2> {
25    fn write_u8(&mut self, val: u8) -> Result<(), Error> {
26        let r1 = self.output1.write_u8(val);
27        let r2 = self.output2.write_u8(val);
28        r1?;
29        r2
30    }
31}