avr_tester/
write.rs

1/// Object that can be written to, e.g. [`crate::Uart`].
2pub trait Writer {
3    fn write_byte(&mut self, value: u8);
4}
5
6pub trait WriterHelper {
7    fn write<T>(&mut self, value: T)
8    where
9        T: Writable;
10}
11
12impl WriterHelper for dyn Writer + '_ {
13    fn write<T>(&mut self, value: T)
14    where
15        T: Writable,
16    {
17        value.write(self);
18    }
19}
20
21/// Value that can be transmitted through a [`Writer`].
22pub trait Writable {
23    fn write(&self, tx: &mut dyn Writer);
24}
25
26impl<T> Writable for &T
27where
28    T: Writable + ?Sized,
29{
30    fn write(&self, tx: &mut dyn Writer) {
31        T::write(self, tx)
32    }
33}
34
35impl Writable for u8 {
36    fn write(&self, tx: &mut dyn Writer) {
37        tx.write_byte(*self);
38    }
39}
40
41impl Writable for [u8] {
42    fn write(&self, tx: &mut dyn Writer) {
43        for value in self {
44            tx.write(value);
45        }
46    }
47}
48
49impl<const N: usize> Writable for [u8; N] {
50    fn write(&self, tx: &mut dyn Writer) {
51        tx.write(self.as_slice());
52    }
53}
54
55impl Writable for str {
56    fn write(&self, tx: &mut dyn Writer) {
57        tx.write(self.as_bytes());
58    }
59}
60
61impl Writable for String {
62    fn write(&self, tx: &mut dyn Writer) {
63        tx.write(self.as_str());
64    }
65}